포트폴리오
프로젝트를 선택하시면 자세한 내용을 확인 할 수 있습니다! 😊
기술 분야별 필터링
(주)스마트러닝코리아
2025-03 ~ 2026-022주 만에 보안 위협 제거 - EOL 스택 전면 재구축
SQL 인젝션 공격이 성공한 EOL 스택을 Next.js 15 기반 보안 아키텍처로 전면 재구축
- •2주 내 완성으로 추가 공격 차단, 법적 리스크 제거
- •기존 서비스 무중단 전환 완료
프로젝트 설명
CodeIgniter 2.x와 PHP 5.6 기반의 레거시 시스템에서 SQL 인젝션 공격이 실제로 성공하는 보안 사고가 발생했습니다. EOL(End of Life) 상태의 스택은 보안 패치가 불가능했고, 부분 개선은 리스크 지연만 초래할 것으로 분석했습니다. 레거시 개선(예상 3개월) vs 재구축(2주) 비용을 분석하여 경영진을 설득하고, 완전히 새로운 아키텍처로 재구축했습니다.
진행 업무
- 의사결정 주도: 레거시 개선 vs 재구축 비용·리스크 분석 후 경영진에 2주 재구축안 제안 및 승인
- 영향 범위 확인: 인증/인가 시스템을 사용하는 서비스 담당자들과 현재 연동 방식 파악
- 단독 개발: Next.js 15 + Prisma 기반 독립 API 서비스 설계, 타입 안전성 확보
- 다층 보안 아키텍처: JWT 인증, SQL Prepared Statement, XSS 방지, HTTPS 강제
- 무중단 전환: Blue-Green 배포, 데이터 정합성 자동 검증, 롤백 플랜 수립
주요 성과
- 2주 내 완성으로 추가 공격 차단, 법적 리스크 제거
- 기존 서비스 무중단 전환 완료
- 최신 LTS 스택으로 향후 5년간 보안 패치 적용 가능 환경 구축
다중 브랜드 앱을 단일 프로젝트로 통합
4개 테넌트별 개별 React Native 프로젝트를 Expo 멀티 테넌트 구조로 통합
- •동일 수정 작업: 4회 반복 → 1회 (단일 코드베이스)
- •배포 시간: 4시간 → 40분 (70% 단축)
프로젝트 설명
기존 Flutter 기반 구버전 앱 4개를 개별 관리하는 구조에서 동일한 버그 수정을 각각 반영하다 일부 앱에만 적용되는 휴먼 에러가 반복 발생했습니다. 개발팀원들과 배포 과정을 리뷰한 결과, 개별 관리 구조 자체가 문제임을 확인. Flutter 앱의 사이닝 키를 Expo로 이관하여 React Native 기반 단일 프로젝트로 전환하고, 인증 파일을 모두 Expo에 등록하여 Google Play/App Store 실제 출시까지 완료했습니다.
진행 업무
- 현황 파악: 각 테넌트별 실제 차이점(OAuth 키, 브랜딩, 리소스) 전수 조사, 공통 로직과 분기점 식별
- 단계적 통합: 공통 모듈부터 통합 시작, 한 테넌트씩 검증 후 순차 확장
- Expo Config 활용: 테넌트별 차별화 요소를 환경변수로 추상화
- 빌드 자동화: npm 스크립트 기반 원터치 빌드 (npm run build:tenant-a)
- EAS 파이프라인 통합: OTA 업데이트, 스토어 배포 자동화
주요 성과
- 동일 수정 작업: 4회 반복 → 1회 (단일 코드베이스)
- 배포 시간: 4시간 → 40분 (70% 단축)
- 휴먼 에러로 인한 앱별 버전 불일치 문제 해소
- EAS Update로 긴급 패치 즉시 배포 (스토어 심사 대기 불필요)
- Flutter→React Native 전환 후 Google Play/App Store 4개 앱 실제 출시 완료
여러 외부 판매처와 연동할 수 있는 쿠폰 API 개발
KB스타뱅킹 등 외부 판매처와 실시간 연동 가능한 REST API 설계, 하루 만에 연동 테스트 완료
- •KB 연동 테스트 하루 만에 완료 (문서 전달 → 즉시 연동 가능)
- •실시간 판매 추적, 환불 정책 지원으로 정산 신뢰성 확보
프로젝트 설명
기존 쿠폰 시스템은 200건씩 통째로 외부에 전달하는 방식으로, 개별 판매 추적이 불가능하고 정산 신뢰성 문제가 예상되었습니다. KB스타뱅킹 이벤트 페이지 판매 연동 기회가 생겨 사업 담당자에게 먼저 '현재 방식으로 정산이 가능한가' 질문했고, 실시간 판매 추적과 환불 처리가 필요하다는 것을 확인했습니다.
진행 업무
- 정산 신뢰성 문제를 선제적으로 예측하고 사업 담당자와 대화로 검증
- 연동하는 KB 개발자 입장에서 '쿠폰을 비활성화한다'처럼 자연스러운 문장으로 읽히는 REST API 설계
- POST /coupon(생성), GET /coupon/{id}(상태 확인), PUT /coupon/{id}/deactivate(비활성화), PUT /coupon/{id}/cancel(취소) 등 엔티티와 행위가 명확한 엔드포인트 구성
- 스토어 단위 API 키 생성·구분 기능으로 여러 판매처 대응
주요 성과
- KB 연동 테스트 하루 만에 완료 (문서 전달 → 즉시 연동 가능)
- 실시간 판매 추적, 환불 정책 지원으로 정산 신뢰성 확보
- 네이버 스토어 등 추가 판매처 연동 시 추가 개발 없이 즉시 적용 가능
사용자 마일리지 적립 및 타사 포인트 전환 시스템 구축
수기 이벤트 운영을 자동화하고 실시간 포인트 관리 체계 구축
- •수기 기프티콘 전달 방식을 자동화된 포인트 시스템으로 전환하여 운영팀의 이벤트 관리 부담을 대폭 줄였고, 이벤트 진행 속도가 빨라져 사용자 참여도가 향상되었습니다.
- •트랜잭션과 롤백 처리로 정산 오류를 완전히 방지했고, 포인트 히스토리 추적으로 모든 거래 내역을 감사 가능하게 만들었습니다.
프로젝트 설명
영어 듣기 학습 플랫폼에서 사용자 동기부여를 위해 현금성 이벤트를 운영했지만, 기프티콘을 직접 전달하거나 개별 연락을 주고받는 수기 방식으로 진행해야 했습니다. 운영팀은 기프티콘을 일일이 확인하고 전달하는 반복 작업에 시달렸고, 이벤트 처리에 며칠씩 소요되었습니다. 심지어 기프티콘의 중복 지급, 경품을 받지 못했다는 컴플레인, 누락과 같은 오류도 발생했습니다. 빠르고 유연한 이벤트 운영을 도입하기 위해 사용자가 직접 포인트를 관리하고 원하는 타사 포인트로 전환할 수 있는 자동화 시스템이 필요했습니다.
진행 업무
- 여러 사용자가 동시에 포인트를 사용하거나 적립할 때 중복 차감이나 초과 사용 문제가 발생할 수 있었으므로, 데이터베이스 트랜잭션과 적절한 락을 활용하여 포인트 정합성을 보장하고 회계 정확성을 유지했습니다.
- 타사 포인트 전환 시 API 호출 실패나 네트워크 오류가 발생할 수 있으므로, Welcome Payments API 연동 과정에서 실패 시 자동 롤백 처리와 재시도 로직을 구현했습니다.
- 운영팀이 포인트 적립 정책을 유연하게 변경하고 개별 사용자 포인트를 조정할 수 있어야 했으므로, 관리자 페이지와 관리 API를 제공하여 실시간 정책 변경 및 포인트 관리가 가능하도록 했습니다.
- 복잡한 상태 관리와 폼 처리가 많은 사용자 인터페이스를 일관성 있게 구현해야 했으므로, Vercel v0를 활용하여 검증된 UI 패턴을 빠르게 프로토타이핑하고 일관된 사용자 경험을 제공했습니다.
- 모든 포인트 변동 내역을 추적하고 감사할 수 있어야 했으므로, 포인트 히스토리 테이블을 설계하여 적립/차감/전환 내역을 완전히 기록했습니다.
주요 성과
- 수기 기프티콘 전달 방식을 자동화된 포인트 시스템으로 전환하여 운영팀의 이벤트 관리 부담을 대폭 줄였고, 이벤트 진행 속도가 빨라져 사용자 참여도가 향상되었습니다.
- 트랜잭션과 롤백 처리로 정산 오류를 완전히 방지했고, 포인트 히스토리 추적으로 모든 거래 내역을 감사 가능하게 만들었습니다.
- 월간 약 9,000건의 포인트 트랜잭션을 안정적으로 처리하며 사용자가 직접 타사 포인트로 전환할 수 있게 되어 사용자 만족도가 크게 향상되었습니다.
- 관리자 페이지를 통해 운영팀이 실시간으로 포인트 정책을 조정할 수 있게 되어 비즈니스 요구사항에 빠르게 대응할 수 있게 되었습니다.
영어 교육 콘텐츠 관리 시스템(CMS) 구축
개발팀 운영 부담 80% 감소, 콘텐츠 등록 시간 1주일→당일 즉시로 단축한 통합 CMS 구축
- •콘텐츠 등록 시간: 1주일 → 당일 즉시
- •개발팀 검증 프로세스 불필요, 운영 업무 부담 80% 감소
프로젝트 설명
영어 듣기 콘텐츠가 재생되지 않거나 이상하게 표시되는 오류가 반복 발생했습니다. 콘텐츠 운영팀이 SFTP로 파일 업로드 → URL 확인 → DBeaver로 JSON 데이터 입력하는 구조로 작업 중이었습니다. 전체 업로드 매뉴얼을 분석한 결과, 비개발자가 이 구조를 따라하는 것 자체가 문제임을 발견했습니다. 담당자들은 이 불편함을 당연하게 여기고 있었습니다.
진행 업무
- 콘텐츠 담당자가 인식하지 못한 구조적 문제를 파악하고 개선안 제안
- 담당자들이 익숙한 엑셀 기반 작업 방식 유지, 100개 이상 대량 처리 패턴 고려
- Next.js 기반 CMS 구현: CSV 템플릿 다운로드 → 미디어 업로드 → 데이터 입력 → 실시간 검증 → DB 반영
- 에러 메시지 한글화, 입력 시점에 스키마 검증으로 학습 곡선 최소화
주요 성과
- 콘텐츠 등록 시간: 1주일 → 당일 즉시
- 개발팀 검증 프로세스 불필요, 운영 업무 부담 80% 감소
- 담당자가 개발팀 개입 없이 자립적으로 콘텐츠 운영
- SFTP/DBeaver 완전 제거, 업로드 전 즉각 피드백으로 오류 사전 차단
구독 취소 관리 페이지 통합
분리된 결제/라이선스/구독 시스템을 통합. 운영팀이 개발팀 개입 없이 취소·환불을 자체 처리할 수 있게 구현
- •개발팀에 전달되던 취소/환불/라이선스 관련 요청이 더 이상 발생하지 않음
- •운영팀이 개발팀 개입 없이 취소·환불·구독 관리 자체 처리 가능
프로젝트 설명
운영팀에서 결제 취소와 라이선스 회수 요청이 반복적으로 개발팀에 전달되었습니다. 운영팀에 미팅을 요청해 실제 업무 화면을 함께 본 결과, 결제 취소 후에도 사용자가 서비스에 접근할 수 있는 구조적 문제를 발견했습니다. 결제 시스템, 라이선스 시스템, 구독 시스템이 분리되어 있어 결제 취소 처리가 연동되지 않았습니다.
진행 업무
- 반복 요청 패턴을 발견하고 직접 운영팀 미팅을 요청하여 결제사 사이트에서 취소 후 개발팀에 라이선스 회수를 요청하는 실제 워크플로우 확인
- 표면적 '취소 자동화' 요청이 아닌 시스템 간 연동 부재가 근본 원인임을 파악
- 결제/라이선스 시스템 먼저 이관 후 단위 테스트로 검증
- 구독 시스템은 며칠간 수동 갱신으로 모니터링한 후 자동화 범위 확장
주요 성과
- 개발팀에 전달되던 취소/환불/라이선스 관련 요청이 더 이상 발생하지 않음
- 운영팀이 개발팀 개입 없이 취소·환불·구독 관리 자체 처리 가능
- 결제 취소 후 서비스 접근 가능했던 보안 리스크 해소
20년 레거시 15개 저장소 통합으로 개발 속도 향상
15개 SVN 저장소를 Git으로 통합하고 PHP 5.3→5.6, Apache→Nginx 전환으로 개발 효율 대폭 향상
- •코드 중복 70% 제거: 15개 저장소에 분산된 중복 코드를 단일 추상화 모듈로 통합
- •신규 기능 개발 시간 66% 단축: 3가지 버전에 각각 적용하던 작업을 하나의 모듈로 처리
프로젝트 설명
20년 경과한 PHP 5.3 교육 플랫폼이 유료/테스트/무료 3개 버전 × 학생/모바일/관리자/선생님/공통 5개 모듈로 분리되어 총 15개 SVN 저장소로 관리되고 있었습니다. FTP 수동 배포로 재해 복구가 불가능했고, 두 명 이상의 개발자가 같은 파일을 수정하면 나중에 업로드한 사람의 코드만 남는 문제가 반복되어 유지보수 비용이 과다하게 발생했습니다.
진행 업무
- 15개 분산 SVN 저장소를 분석하여 단일 Git 저장소로 통합하고, 도메인별 분기 로직을 추상화
- FTP 기반 수정을 차단하고 Git 형상 관리 체계로 전환하여 모든 변경사항을 추적 가능하도록 구성
- PHP 5.3과 5.6 양쪽에서 동작 가능한 코드 상태를 유지하면서 점진적 마이그레이션 수행
- 성능 개선을 위해 PHP 5.3/Apache2에서 PHP 5.6/Nginx+PHP-FPM으로 전환
- 현대화된 스택으로 개발 서버를 구축하고 실제 복구 시나리오 테스트로 재해복구 가능성 검증
주요 성과
- 코드 중복 70% 제거: 15개 저장소에 분산된 중복 코드를 단일 추상화 모듈로 통합
- 신규 기능 개발 시간 66% 단축: 3가지 버전에 각각 적용하던 작업을 하나의 모듈로 처리
- 1시간 내 재해 복구 체계 확립: 복구 불가능했던 서비스를 복구 가능한 상태로 전환
- 긴급 패치 대응 시간 90% 단축: 전체 버전 동시 배포 가능해져 빠른 대응 가능
- Nginx 도입으로 Apache 대비 30% 성능 향상 및 동시 접속 처리 개선
주식회사비엔제트 (BnZ)
2024-03 ~ 2025-03오답노트 관리 시스템 개발
학생들의 오답을 체계적으로 관리하고 복습할 수 있는 웹 애플리케이션 개발
- •수기 관리에서 시스템 관리로 전환하여 조교의 관리 부담을 줄이고, 학생별 진행 상황을 한눈에 파악할 수 있게 되었습니다.
- •오답노트를 하지 않는 학생을 조기에 발견하고 적시에 피드백을 제공할 수 있게 되어 학습 관리 효율성이 향상되었습니다.
프로젝트 설명
학원에서 시험 후 틀린 문제를 조교가 수기로 관리하면서 학생별 진행 상황을 파악하기 어렵고, 오답노트를 하지 않는 학생을 조기에 발견하기 어려운 문제가 있었습니다. 이를 해결하기 위해 학생들이 마치 일감 관리하듯 오답 문제를 체계적으로 정리하고, 교사가 SSE를 통해 실시간으로 학생들의 문제 풀이 상황을 확인하며 피드백을 주고받을 수 있는 시스템을 개발했습니다.
진행 업무
- 교사가 실시간으로 학생들의 문제 풀이 상황을 확인하고 피드백을 주고받아야 했으므로, SSE(Server-Sent Events)를 활용한 실시간 통신 기능을 구현하고 이벤트 핸들러를 독립적인 모듈로 추출하여 관심사를 분리했습니다.
- 프로덕션 데이터에 직접 접근할 수 없고 테스트 환경을 분리해야 했으므로, 저장소 인터페이스를 추상화하여 운영 환경과 테스트 환경을 독립적으로 관리하고 단위 테스트를 용이하게 했습니다.
- 학생, 교사, 관리자별로 접근 권한과 기능이 달라야 했으므로, 역할별 맞춤형 인터페이스와 권한 관리 시스템을 구현했습니다.
- 복잡한 데이터 관계(학생-문제-진행상황)를 효율적으로 관리해야 했으므로, Prisma ORM을 활용한 타입 안전한 데이터베이스 설계와 마이그레이션 시스템을 구축했습니다.
- 코드 품질을 보장하고 리팩토링을 안전하게 수행해야 했으므로, Vitest 기반 자동화 테스트 환경을 구축했습니다.
주요 성과
- 수기 관리에서 시스템 관리로 전환하여 조교의 관리 부담을 줄이고, 학생별 진행 상황을 한눈에 파악할 수 있게 되었습니다.
- 오답노트를 하지 않는 학생을 조기에 발견하고 적시에 피드백을 제공할 수 있게 되어 학습 관리 효율성이 향상되었습니다.
- 모듈화된 설계로 새로운 기능 추가와 유지보수가 용이한 시스템을 구축했습니다.
LaTeX to hwpx 변환기 개발
LLM 생성 콘텐츠의 편집 가능성을 확보하여 AI 교육 서비스 UX를 개선한 LaTeX-hwpx 변환기 개발
- •정의된 지원 수식 범위 내 변환 검증 100% 통과를 달성했습니다.
- •주 고객층인 선생님의 문제 제작 워크플로우가 '캡처 후 붙여넣기'에서 '문서 내에서 직접 수정'으로 개선하여, AI 생성 콘텐츠의 편집 가능성 확보로 서비스 실사용 전환율을 향상했습니다.
프로젝트 설명
사내 서비스에서 제공하는 기능 중 문제를 받아서 유사한 문제를 생성하는 기능이 있습니다. 생성한 문제를 LaTeX와 마크다운 형식으로 제공했으나, 주 사용자인 학원 선생님들의 익숙하지 않은 형식으로 인해 활용도가 낮았습니다. 이를 해결하기 위해 한글 문서 형식으로 자동 변환하여 사용자가 익숙한 환경에서 문제를 수정하고 활용할 수 있도록 소프트웨어를 개발했습니다.
진행 업무
- 학원 환경에서 한글 문서가 표준이었고, 선생님들이 마크다운 테이블 문법을 이해하지 못해 생성된 문제를 그대로 활용하기 어려웠습니다. 이를 해결하기 위해 마크다운 테이블을 한글과컴퓨터의 XML 데이터 구조에 맞춰 자동 변환하는 파서 모듈을 개발했습니다.
- 선생님들이 LaTeX 수식을 이해하지 못해 수식을 캡처 후 이미지로 붙여넣는 방식을 했습니다. 이 방식은 수식 수정이 불가능하여 불편했으므로, LaTeX 수식을 한글 문서의 자체 수식 형식으로 변환하는 엔진을 구현하여 문서 내에서 직접 수정 가능하도록 했습니다.
- 지속적으로 발견되는 새로운 수식 패턴에 대응하기 위해 변환 알고리즘을 모듈화하고, 단위 테스트를 통해 안정성과 유지보수성을 확보했습니다.
주요 성과
- 정의된 지원 수식 범위 내 변환 검증 100% 통과를 달성했습니다.
- 주 고객층인 선생님의 문제 제작 워크플로우가 '캡처 후 붙여넣기'에서 '문서 내에서 직접 수정'으로 개선하여, AI 생성 콘텐츠의 편집 가능성 확보로 서비스 실사용 전환율을 향상했습니다.
- 사용자 교육 필요성을 제거하고 즉시 활용 가능한 hwpx 파일 형식을 제공함으로써 서비스 진입 장벽을 낮추고, LLM 출력물을 사용자 워크플로우에 자연스럽게 통합하는 UX 개선 사례를 확립했습니다.
스크린샷

hwpx 파일로 변환한 화면

LaTex와 수식을 렌더링 한 화면
수학 문제 풀이 솔루션의 텍스트/수식 오류 복구 도구
LLM이 생성한 수학 풀이에서 수식 구분자 오류를 자동으로 수정하는 파서 개발
- •500건 테스트 케이스 100% 성공률로 UI 오류 해결, 사용자 경험 개선
- •검토 없이 제품에 적용 가능한 수준의 안정성을 확보하여, 새로운 패턴 발견 시마다 긴급 대응하던 상황에서 벗어나 안정적으로 해설 모듈을 서비스에 배포할 수 있게 되었습니다.
프로젝트 설명
수학 문제 풀이를 제공하는 LLM 기반 서비스에서 LaTeX 수식 구분자($)가 누락되거나 짝이 맞지 않는 오류가 새로운 패턴이 등장할 때마다 발생했습니다. 수식이 텍스트로 보이거나 레이아웃이 크게 망가지는 문제가 지속되어, 해설 모듈을 검토 없이는 제품으로 내보낼 수 없는 상황이었습니다. LLM 재생성으로 해결하려 했으나 규칙 추가마다 OCR 성능이 떨어지고 비용이 감당하기 어려웠으므로, 오류 패턴을 자동으로 수정하는 파서를 개발했습니다.
진행 업무
- 새로운 패턴 발견 시 즉시 대응 가능하도록 문서 요소를 인라인 수식, 블록 수식, 마크다운으로 분류하고, 각 요소의 문맥을 분석하여 잠재적 오류 패턴을 자동으로 식별하는 파서를 구현했습니다.
- 오류 패턴별 변환 로직을 모듈화하여 새로운 패턴 발견 시 기존 코드 수정 없이 규칙만 추가할 수 있도록 설계했습니다.
- 검토 없이 제품에 적용 가능한 수준의 안정성을 확보하기 위해 개별 변환 모듈의 단위 테스트와 전체 파이프라인의 통합 테스트를 구축했습니다.
주요 성과
- 500건 테스트 케이스 100% 성공률로 UI 오류 해결, 사용자 경험 개선
- 검토 없이 제품에 적용 가능한 수준의 안정성을 확보하여, 새로운 패턴 발견 시마다 긴급 대응하던 상황에서 벗어나 안정적으로 해설 모듈을 서비스에 배포할 수 있게 되었습니다.
- 모듈화된 설계로 새로운 오류 패턴 발견 시 기존 기능에 영향을 주지 않고 확장이 가능해졌습니다.
소스 코드
소스 코드 확인하기스크린샷

올바르게 수정된 LaTeX 구문

사용자에게 잘못 표시되는 LaTeX 구문
학생 질문 유사 문제 검색 벡터 파이프라인 구축
임베딩 기반 유사 문제 검색 시스템 개발로 질문-문제 연결성 강화
- •수동 라벨링 없이 임베딩으로 문제의 의미를 자동 분석하여, 인력 부족 상황에서도 유사 문제 검색 시스템을 구축할 수 있었습니다.
- •키워드 유사성이 아닌 의미 기반 검색으로 전환하여, 학생의 이해도 확인에 적합한 유사 문제를 정확히 제공할 수 있게 되었습니다.
프로젝트 설명
학생의 오답노트나 질문에 대한 이해도를 확인하기 위해 유사한 문제를 제공하는 기능이 필요했습니다. 기존 키워드 기반 검색은 키워드가 비슷해도 전혀 다른 문제가 검색되는 한계가 있었고, 키워드 분류 방식은 수동 라벨링 작업이 필요해 인력 부족으로 실현이 어려웠습니다. 데이터 가공 없이 LLM 리소스만으로 문제의 의미를 이해하는 임베딩 기반 검색 시스템을 구축했습니다.
진행 업무
- 키워드가 비슷해도 전혀 다른 문제가 검색되는 한계를 극복하기 위해 Azure OpenAI의 임베딩 모델을 활용한 벡터 검색을 구현하여 문제의 의미를 기반으로 유사도를 판단하도록 했습니다.
- 키워드 검색과 벡터 검색을 결합한 하이브리드 검색 시스템을 Elastic Search로 구축하여 검색 정확도를 향상했습니다.
- 개발 환경의 접근성을 높이기 위해 Elastic Search 환경을 컨테이너화하여 로컬 개발 설정을 간소화했습니다.
주요 성과
- 수동 라벨링 없이 임베딩으로 문제의 의미를 자동 분석하여, 인력 부족 상황에서도 유사 문제 검색 시스템을 구축할 수 있었습니다.
- 키워드 유사성이 아닌 의미 기반 검색으로 전환하여, 학생의 이해도 확인에 적합한 유사 문제를 정확히 제공할 수 있게 되었습니다.
- 검색 서비스와 임베딩 로직을 모듈화하여 Azure OpenAI 외 다른 임베딩 서비스로의 전환이 용이한 아키텍처를 설계했습니다.
교육 서비스 보일러플레이트 프로젝트 작성
교육 도메인을 위한 표준화된 기술 스택과 아키텍처 구성
- •교육 도메인의 표준 구현체를 문서화하여 프로젝트 간 일관된 이해와 참조가 가능하도록 했습니다.
- •자동화된 배포 파이프라인으로 개발자가 배포 과정에 관여하지 않아도 되어, 소프트웨어 개발 복잡도 감소 및 핵심 기능 개발에 집중 가능해졌습니다.
프로젝트 설명
매 프로젝트마다 학원, 질문, 답변 등 유사한 도메인 설정을 반복하는 문제가 발생했습니다. 프로젝트마다 다른 구조로 구현하여 유지보수가 어려웠습니다. 이를 해결하기 위해 교육 도메인의 표준 구현체와 자동화된 배포 환경을 포함한 보일러플레이트를 제작했습니다.
진행 업무
- 여러 프로젝트에서 재사용 가능하도록 도메인 위주로 설계하여, 학원/질문/답변 등 핵심 도메인의 비즈니스 규칙을 명확히 분리했습니다.
- 보일러플레이트를 사용하는 개발자의 경험이 좋지 않으면 사용 가치가 떨어지므로, OpenAPI 문서 자동화와 구조화된 로깅 시스템을 구축했습니다.
- 개발자가 배포 과정(DB 마이그레이션, 빌드, 배포)에 신경쓰지 않아도 되도록 GitHub Actions 기반 자동화를 구현했습니다.
교육 서비스 도메인 정리 및 운영 기능 구축
서비스 안정성과 유지보수성 향상을 위한 아키텍처 재설계
- •작업 시간 1-3주에서 1-3일로 단축, 이슈 감지 개선
- •테스트 커버리지를 0%에서 50%까지 개선했습니다.
프로젝트 설명
교육 질의응답 플랫폼 '하이큐썸'에서 간단한 서비스 로직 변경만으로도 연쇄적으로 다른 기능이 고장나는 문제가 지속적으로 발생했습니다. 예를 들어, 질문 형식을 수정하면 리터럴 값을 읽는 기능이 깨지고, 그것이 트리거를 호출하지 않아 또 다른 기능까지 동작하지 않는 등 이슈 해결에만 매달려야 하는 절망적인 상황이었습니다. 신규 개발이 불가능했고, 서비스 안정성이 급격히 저하되어 근본적인 구조 개선이 필요했습니다.
진행 업무
- 기능들을 회원, 문제, 푸시 알림 등 도메인 단위로 분리하여 모듈화했습니다.
- 핵심 기능 간의 의존성을 분석하고 서비스 레이어를 재구성하여 유지보수성을 향상했습니다.
- 중복 코드를 제거하고 공통 기능을 추출하여 코드베이스를 최적화했습니다.
- 핵심 도메인(회원, 문제, 알림)에 대한 테스트를 우선 구축하고, 추가 테스트는 필요에 따라 점진적으로 추가하는 실용주의 전략을 선택했습니다. 완벽한 커버리지보다 팀이 감당 가능한 범위에서 핵심 기능의 안정성을 먼저 확보하여 테스트 커버리지를 0%에서 50%까지 증가시켰습니다.
- GCP, Sentry, Slack 기반의 실시간 오류 모니터링 시스템을 구축하여 장애 대응 체계를 강화했습니다.
주요 성과
- 작업 시간 1-3주에서 1-3일로 단축, 이슈 감지 개선
- 테스트 커버리지를 0%에서 50%까지 개선했습니다.
- 도메인 분리로 변경 범위가 명확해져 연쇄 버그 없이 안전하게 개발할 수 있게 되었고, 이슈 대응에만 매달리던 팀이 신규 기능 개발에 집중할 수 있게 되었습니다.
- 사전 모니터링 체계 구축으로 잠재적 문제를 조기에 발견하고 대응할 수 있게 되었습니다.
개인 프로젝트
Next.js URI 자동 생성기 개발
Next.js 앱 라우터 API의 URL을 간편하게 생성하는 VS Code 확장 프로그램
- •수동 역추적 과정을 제거하여 API 엔드포인트 확인 실수를 완전히 방지했습니다.
- •Next.js App Router API의 모든 라우팅 패턴을 완전 지원하여 개발 과정에서 즉시 정확한 API 주소를 확인할 수 있게 했습니다.
프로젝트 설명
Next.js는 파일 경로 기반으로 API 주소가 생성됩니다. 개발 중 현재 파일의 정확한 API 엔드포인트를 파악하려면 파일 경로를 확인하고 route나 디렉터리 표시를 수동으로 지워가며 역추적해야 했습니다. 이 과정에서 잘못된 API를 호출하거나 엔드포인트를 틀리게 입력하는 실수가 자주 발생했습니다. Babel 기반 코드 분석으로 실제 경로를 표시해야 하는 함수를 정확히 식별하고, VS Code에서 즉시 API 주소를 확인할 수 있는 확장 프로그램을 개발했습니다.
진행 업무
- Next.js App Router는 GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 파일 내 함수로 정의하는데, 수동으로 확인 시 현재 파일이 어떤 메서드를 지원하는지 일일이 열어봐야 했으므로 모든 HTTP 메서드를 자동 감지하여 한눈에 파악할 수 있도록 설계했습니다.
- 개발자마다 Next.js API를 작성하는 방식(export default, export const, export function 등)이 달라 일부 패턴만 지원하면 도구가 제대로 동작하지 않으므로, Babel AST 파서로 모든 내보내기 패턴을 지원하여 작성 방식에 관계없이 정확한 API 주소를 표시할 수 있도록 했습니다.
- VS Code의 Code Lens API를 활용해 코드 에디터를 벗어나지 않고도 API 주소를 즉시 확인하여 복사할 수 있도록 했습니다.
소스 코드
소스 코드 확인하기버터소프트
2024-01 ~ 2024-03카본몬스터 백엔드 시스템 (거래소 엔진) 개발
NFT 거래 플랫폼의 고성능 주문 매칭 엔진 개발
- •거래소 엔진 처리 속도를 최적화하여 블록체인 원장의 초당 20건 제약 상황에서도 거래소 측은 빠르게 동작 가능하도록 구현했습니다.
- •메시지 큐와 내부 EventEmitter의 역할 분리로 블록체인 장애 시에도 앱 내부 트랜잭션 정합성을 유지했습니다.
프로젝트 설명
카본몬스터는 탄소 배출권을 NFT로 거래하는 플랫폼입니다. 실시간 거래량이 많아질 수 있는 구조였고, 블록체인과 거래소 간 데이터 불일치로 인한 거래 지연 문제가 발생했습니다. 블록체인 원장은 초당 약 20건의 트랜잭션 처리 제약이 있었으므로, 거래소 엔진 자체를 최적화하여 블록체인이 병목이 되더라도 거래소 측 처리는 빠르게 동작하도록 시스템을 설계했습니다.
진행 업무
- 실시간 거래량 증가에 대응하기 위해 Red-Black Tree 기반 주문 매칭 엔진을 선택하여 효율적인 주문 처리를 구현했습니다.
- 블록체인과 앱 간 통신은 메시지 큐로 처리하고, 앱 내부의 트랜잭션 작업은 NestJS EventEmitter로 처리하는 이중 레이어 이벤트 아키텍처를 설계했습니다.
- 이벤트 손실 방지를 위해 상태 커밋(체크포인트) 패턴을 적용하여 처리 완료 시점을 명시적으로 기록했습니다.
- 종목별로 독립적으로 확장 가능한 아키텍처를 설계하여, 특정 종목의 거래량 증가 시 해당 종목만 스케일 아웃 가능하도록 했습니다.
주요 성과
- 거래소 엔진 처리 속도를 최적화하여 블록체인 원장의 초당 20건 제약 상황에서도 거래소 측은 빠르게 동작 가능하도록 구현했습니다.
- 메시지 큐와 내부 EventEmitter의 역할 분리로 블록체인 장애 시에도 앱 내부 트랜잭션 정합성을 유지했습니다.
- 상태 커밋 패턴으로 이벤트 손실 없이 블록체인-거래소 간 상태 동기화를 보장했습니다.
- 종목별 독립 실행 가능한 구조로 특정 종목의 트래픽 급증 시에도 다른 종목 거래에 영향을 주지 않도록 격리했습니다.
비트맥스(맥스트) 주식회사
2023-04 ~ 2024-03메타버스 플랫폼 '틀로나' 웹서버 개발
현실 기반 월드와 소셜 기능을 제공하는 메타버스 백엔드 구현
- •도메인 설계 도입 후, 팀원들의 작업 브랜치 병합 주기가 7일 이상에서 1-2일로 단축되었습니다.
- •전체 개발팀 중 가장 느린 파트에서 가장 빠른 파트로 전환되었습니다.
프로젝트 설명
"틀로나"는 현실 세계를 기반으로 한 메타버스 플랫폼으로, 사용자가 가상 공간과 토지를 소유하고 다른 사용자들과 소통할 수 있습니다. 초기 개발 단계에서 각 기능이 분리되지 않아 작은 기능 수정에도 시간이 오래 걸렸고, 한 기능을 수정하면 다른 기능에 영향을 주어 개발 속도가 저하되는 문제가 있었습니다. 파트장으로서 이 문제를 해결하기 위해 도메인 중심 설계를 도입하여 회원 관리, 가상 아이템 상점, 토지 소유권 관리 등의 핵심 시스템을 독립적인 모듈로 개발하고 API로 제공했습니다.
진행 업무
- 기획 요구사항이 자주 변경되어 개발 방향이 불명확해지는 문제가 있었으므로, 파트장으로서 기획팀과 긴밀히 소통하며 개발 방향을 정립하고 팀원들에게 명확하게 전달하여 혼선을 줄였습니다.
- 기능 간 의존성이 높아 한 기능 수정 시 다른 기능에 영향을 주었으므로, 상점, 우편함, 인벤토리, 지갑, 토지 관리 등 핵심 기능을 도메인 중심으로 분리하여 독립적으로 개발 및 배포할 수 있도록 설계했습니다.
- 기능 변경 시 예상치 못한 버그가 발생하여 안정성을 보장하기 어려웠으므로, 핵심 기능에 대한 단위 테스트를 구축하여 변경 영향을 사전에 감지할 수 있도록 했습니다.
- 운영 중 발생하는 이슈를 늦게 발견하여 대응이 지연되었으므로, 실시간 모니터링 시스템을 도입하여 팀원들이 이슈를 신속하게 감지하고 대응할 수 있도록 했습니다.
주요 성과
- 도메인 설계 도입 후, 팀원들의 작업 브랜치 병합 주기가 7일 이상에서 1-2일로 단축되었습니다.
- 전체 개발팀 중 가장 느린 파트에서 가장 빠른 파트로 전환되었습니다.
- 테스트 용이한 구조를 확보하여 2주간의 클로즈 베타 테스트 동안 웹 서버 로직 관련 버그 리포트가 0건으로 유지되었습니다.
틀로나 독립 서버 환경 실행 자동화
컨테이너 기반 로컬 개발 및 테스트 환경 구축
- •기획자들이 독립된 환경에서 자유롭게 데이터를 수정하고 테스트할 수 있게 되었습니다.
- •개발팀이 기획팀의 데이터 수정 요청 처리에 투입되는 시간을 절감했습니다.
프로젝트 설명
개발 과정에서 기획자들의 잦은 데이터 수정 요청으로 인해 개발 서버가 불안정해지는 문제가 발생했습니다. 이를 해결하기 위해 다른 팀 개발자가 CSV 파일을 통한 데이터 수정 기능을 구현했고, 저는 각 팀원이 독립적으로 개발 서버를 운영할 수 있도록 컨테이너화를 진행했습니다.
진행 업무
- 기획자들이 개발 서버에서 직접 데이터를 수정하면서 다른 개발자의 테스트 환경이 영향을 받았으므로, 실시간 멀티플레이어 동기화 서버, 비동기 웹서버, 데이터베이스, 캐시 시스템을 컨테이너화하여 각자 독립된 환경에서 작업할 수 있도록 했습니다.
- 기획자가 데이터를 수정할 때마다 개발팀에 요청해야 하는 번거로움이 있었으므로, 컨테이너 실행 시 로컬 CSV 파일을 읽어 독립적인 서버 환경을 자동으로 구성하는 스크립트를 개발하여 기획자가 직접 데이터를 수정하고 테스트할 수 있도록 했습니다.
- 새로운 도구의 사용법을 모르면 활용도가 떨어지므로, 팀 내에 '로컬 서버' 기능의 도입 목적을 공유하고 상세한 사용 매뉴얼을 작성하여 즉시 활용 가능하도록 했습니다.
(주) 웨어밸리
2020-01 ~ 2023-04경쟁사 제품의 DB 접근제어 정책 이관
2인 프로젝트로 약 5,000개 보안 정책의 자동 분석 및 이관 시스템 구축
- •5,000개 정책 100% 이관 및 무결성 검증 완료
- •경쟁사 제품 마이그레이션 선례 확립
프로젝트 설명
[2인 프로젝트] 대기업 고객사가 경쟁사 제품에서 자사 제품으로 전환하면서, 약 2천대의 데이터베이스에 적용된 5천여 개의 보안 정책을 이관해야 하는 상황이 발생했습니다. 정책의 규모가 수동 이관이 불가능한 수준이었기 때문에, 데이터 분석을 통한 자동화된 정책 생성 솔루션이 필요했습니다.
진행 업무
- 경쟁사 정책 분석 및 자사 솔루션 정책 매핑 로직 개발
- 정책 무결성 검증 보고용 데이터 쿼리 작성 (100% 검증)
샤크라맥스 V4의 보안적합성검증(CC) 인증
CC 인증을 위한 보안 강화 및 빌드-배포 자동화 (개발팀 약 20명)
- •빌드 후 무인 설치 환경 구축으로 하루 5-20분 작업 시간 제거
- •자동화 스크립트가 기술지원팀 도구로 확장되어 고객사 기술지원에 활용
프로젝트 설명
[개발팀 전체 약 20명 참여] 보안 제품을 공공기관에 납품하려면 CC 인증이 필요합니다. 이에 따라 새로운 제품의 개발 마지막 단계에서 CC 인증을 진행했습니다. 인증 평가 항목에는 프로그램 덤프 생성 시 비밀 정보가 평문으로 남아있는지, 검증된 암호화 알고리즘을 사용하는지, OS 의존성을 최소화한 상태에서 동작할 수 있는지, 키 관리를 안전하게 수행하는지 등이 포함되며, 다양한 측면에서 평가가 이루어졌습니다.
진행 업무
- Jenkins 기반 빌드-설치 자동화 스크립트 개발 및 팀에 공유
- 인증 심사자와 지속적으로 소통하며 CC 요건 이해 및 기술 구현 방식 설명
- 서버/엔진 개발자, QA팀과 협업하여 자동화 환경 구축
- OS 독립적 데몬 컨트롤러 설계 및 개발 (C/C++)
- CI/CD 파이프라인 개선으로 개발 속도 향상
주요 성과
- 빌드 후 무인 설치 환경 구축으로 하루 5-20분 작업 시간 제거
- 자동화 스크립트가 기술지원팀 도구로 확장되어 고객사 기술지원에 활용
- 메모리 보안 루틴 및 OS 독립적 데몬 관리로 CC 인증 획득
- 내부망에 최신 빌드 자동 배포로 개발 프로세스 효율화
고객사 인사정보-사용자 정보 연동 솔루션
3~4인 팀으로 대기업 맞춤형 인사 데이터 연동 및 자동화 시스템 구축
- •고객사별 보안 정책과 규정을 충족하는 안정적인 인사 연동 시스템 구축
- •안정적인 운영으로 고객사 신뢰 확보
프로젝트 설명
[3~4인 팀(주 개발자 + 부 개발자 + 엔지니어)] 고객사의 인사 정보를 자사 제품의 사용자 계정과 연동하는 커스터마이징 프로그램을 개발했습니다. 각 고객사별로 특정 부서 사용자 동기화, 휴직자 계정 비활성화 등 다양한 요구사항이 있었으며, 이를 위해 요건 분석부터 개발, 배포, 운영까지 전체 프로세스를 담당했습니다.
진행 업무
- 고객사 DB 접근 관리자와 직접 인터뷰하여 사용자 라이프사이클 관리 요구사항 파악 (계정 추가/비활성화/제거 시점)
- 대화를 통해 단순 기능 요청 이면의 보안 감사 요건과 내부 규정 발견 및 이해
- 고객사별 차별화된 정책 구현 (예: A사 - 퇴사자 즉시 삭제, B사 - 임시 그룹 이동 후 수동 처리)
- 고객사별 코드베이스 개발 및 형상 관리를 통한 맞춤형 솔루션 제공
- 연동 프로그램 유지보수 및 기술 지원 지속 제공
주요 성과
- 고객사별 보안 정책과 규정을 충족하는 안정적인 인사 연동 시스템 구축
- 안정적인 운영으로 고객사 신뢰 확보
- 맞춤형 솔루션 제공을 통한 추가 수익 창출 기여
- 고객사 요구사항 대응 역량 확보