스마일드래곤주식회사
2025.07 - 현재정규직Backend Engineer
체험뷰 백엔드 마이그레이션 및 서비스 고도화
MAU 약 2만 명의 체험단 플랫폼에서 점진적 전환, 조회 성능, 이벤트 처리와 배포 안정성을 중심으로 백엔드를 고도화하고 있습니다.
- 기존 API 계약과 주요 사용자 시나리오를 회귀 테스트로 고정하고 구·신 서버의 요청을 단계적으로 전환해 서비스 중단 없이 Next.js API Routes를 NestJS로 이관했으며, 레거시 데이터는 기능 플래그 기반 한시 크론으로 청크 처리하고 병행 조회와 소진 후 제거 절차를 적용해 전환 구간의 정합성을 유지했습니다.
- 캠페인 신청 목록은 도메인 특성상 데이터가 많이 쌓여 전체 목록 조회 시 30초 이상 지연되고 디스크 임시 공간 부족 오류가 발생해, 약 437만 행의 중간 결과를 만들던 JOINED populate와 정렬을 관계별 SELECT_IN 조회, 옵션별 인덱스와 서브쿼리로 재설계해 운영자의 우회 사용을 없앴습니다. 운영 트레이스 기준 p50은 9.63초에서 92ms로 99.0%, p95는 약 30초에서 888ms로 97.0%, p99는 약 30초에서 1.91초로 93.6% 단축했습니다.
- 하루 약 8만 회 호출되는 캠페인 목록 조회에서 N+1 문제와 기본 정렬 조건에 맞지 않는 인덱스를 확인해, 복합 인덱스와 일괄 조회를 적용하고 요청당 쿼리를 25회에서 4회로 줄였으며 운영 유사 16만 건 테스트에서 핵심 쿼리 조회 행을 164,313건에서 22건으로 줄였습니다.
- 동기 SMTP 호출로 사용자 안내 메일 발송에 최대 약 53분이 걸려, Outbox와 워커 기반 비동기 구조로 전환하고 SMTP 응답을 영구 실패와 재시도 가능 오류로 분류해 불필요한 재시도와 큐 지연을 막았으며, 수신처를 발송 직전에 조회해 개인정보 삭제 조건을 보존했습니다.
- 광고주가 리뷰 콘텐츠에 연결한 배너의 노출 성과를 확인할 수 있도록 스폰서 배너 기능의 기획 단계부터 참여해 성과 조회 흐름을 설계하고, Kafka로 노출을 수집해 멱등 컨슈머에서 원장과 일별 집계를 생성했으며, 장애 격리와 누락 지표 및 SigNoz trace로 사용자 요청과 이벤트 추적의 안정성을 확보했습니다.
- Kubernetes와 Argo CD의 롤링 배포 중 종료 신호 직후 진행 중인 요청과 크론이 중단되는 위험을 확인해, NestJS graceful shutdown과 Helm 종료 대기 설정을 적용하고 요청과 작업이 완료된 뒤 서버가 종료되도록 개선했습니다.
진콘(Gincon) MSA 백엔드 아키텍처 및 이벤트 처리 구조 설계
회원, 프로필, 커뮤니티, 포인트, 캠페인 서비스의 책임과 데이터 소유권을 나누고, 서비스 간 이벤트 계약과 실패 처리 기준을 공동 설계했습니다.
- 서비스마다 이벤트 규격이 달라 변경 시 발행자와 소비자의 호환성이 깨질 위험이 있어, 이벤트 이름과 페이로드, 버전 규칙을 공통 계약으로 정의해 Git 서브모듈로 관리하고 CI 스키마 검증으로 규격 불일치를 병합 전에 차단했습니다.
- Kafka 기반 비동기 처리에서 데이터 변경과 이벤트 발행 사이의 유실과 중복 소비 가능성이 있어, Outbox와 Inbox, 멱등 처리와 실패 이벤트 격리를 적용하고 실패 이력 조회와 재처리 API를 구성해 운영 복구 경로를 마련했습니다.
- 서비스 간 동기 호출이 늘어나 면서 결합도와 장애 전파 위험이 커져, Kafka 이벤트로 상태를 동기화하고 각 서비스가 필요한 데이터를 직접 소유하도록 구성했으며, 상태 재구성이 필요한 기능에는 Event Sourcing을 적용해 이벤트 재생으로 복원할 수 있도록 했습니다.
- 서비스마다 검증 규칙과 테스트 환경이 달라 변경 품질을 일관되게 확인하기 어려워, lint와 단위 테스트 및 빌드를 공통 CI로 통합하고 E2E 테스트 환경을 도메인별로 격리해 병렬 실행 기반을 마련했으며 평균 실행 시간을 67.9% 단축했습니다.
마케팅24 주문 처리 백엔드 고도화
월평균 약 23만 건의 SNS 마케팅 주문을 처리하는 플랫폼에서 주문 생명주기와 외부 대행사의 API 주문 접수 및 운영 구조를 고도화했습니다.
- 주문 유형마다 상태와 후속 처리 기준이 달라 실패와 환불, 재처리 흐름이 일관되지 않아, 주문 상태와 전이 조건을 도메인 규칙으로 정의하고 하나의 주문 생명주기로 통합했습니다.
- 외부 대행사가 한 곳에서 여러 곳으로 늘어나면서 공통 API로 접수된 주문을 일관되게 운영하기 어려워, 대행사별 주문을 내부 주문 모델과 상태 체계로 통합하고 재전송과 주문번호, URL 및 상품 변경 API를 시나리오별로 분리해 실패 주문을 안전하게 복구할 수 있도록 했습니다.
- 배포 후 주문 API와 대행사 API 주문 접수 흐름의 변화를 일관된 기준으로 검증하기 어려워, SigNoz MCP를 AI Agent에 연결하고 저장소 규칙과 테스트 및 리뷰 기준을 작업 맥락으로 구성해 호출량과 응답 시간, p99와 오류율을 배포 전후로 비교하는 검증 흐름을 정립했습니다.
뷰업 계정 및 본인인증 백엔드 고도화
계정 API 전환과 NICE 본인인증 모듈 재구성을 통해 외부 인증 연동의 안정성과 유지보수성을 개선했습니다.
- 계정 API를 v2로 이관하는 과정에서 기존 프런트엔드와 서비스의 연동 계약이 깨질 위 험이 있어, 회원가입과 계정 복구, 재인증 및 계정 조회 API를 단계적으로 전환하고 에러 코드와 리다이렉트 정책을 정비해 호환성을 유지했습니다.
- NICE 본인인증의 토큰 발급과 암호화, 결과 복호화 및 검증 로직이 Facade에 집중되어 변경 영향이 커, 책임을 UseCase와 Command로 분리하고 레거시 계정과 임시 사용자 데이터 처리 규칙을 정비해 인증 상태의 불일치 가능성을 낮췄습니다.




