북아이피스
Software Engineer
2023.08–현재
교육 콘텐츠 제작 제품의 백엔드를 맡아 제품 기능과 콘텐츠 데이터 운영 흐름, 클라우드 인프라를 구축하고 개선했습니다.
제품·프론트엔드·ML·콘텐츠 담당자와 요구사항과 데이터 계약을 조율하면서, 백엔드 설계·구현·배포와 운영 검증을 주로 직접 수행했습니다.
제품 출시와 콘텐츠 운영
- PDF 원본 자료를 문항 데이터로 만들고 편집·저장한 뒤, 편집 결과를 PDF로 생성하는 제품 백엔드를 구축·배포했습니다. 기존 판매 등록 흐름에는 라이선스 확인을 거쳐 연결했습니다.
- 이후 약 3년간 메인 백엔드 엔지니어로서 시험지·본문 분석·워크북 기능을 확장하고, 배포·운영과 성능 개선을 맡았습니다.
- 별도로, 제품 초기에 PDF에서 추출된 문항 영역·HTML·메타데이터와 ML 팀의 처리 결과를 작업자가 검수·편집·배포하는 백엔드와 운영 도구를 설계·구현했습니다. 이 흐름은 지금도 제품 데이터를 관리하는 데 사용되고 있습니다.
대용량 데이터 성능과 동기화
- 대용량 JSONB 중심 테이블에서 검색 값을 정규 컬럼으로 분리하고 covering index를 적용해 주요 조회를 16.2초에서 79ms, 4.9초에서 23ms로 줄였습니다.
- 대규모 검색 값도 concurrent index와 재실행 가능한 분할 backfill로 운영 중인 데이터베이스에 적용했습니다. 피크 시간대에 2분 이상 걸리던 정기 캐시 생성은 배포 후 4~5초 수준으로 안정화됐습니다.
- 대량 업데이트 때 Lock과 운영 부담을 만들던 Trigger 기반 동기화는 팀 논의를 거쳐 CDC 방식으로 전환했습니다. DMS·Kinesis·Lambda와 대량 backfill 경로를 구축하고 실패 알림과 재처리 수단을 보완했습니다.
공통 ECS 플랫폼과 레거시 통합
- 서비스별로 중복되던 staging·production Elastic Beanstalk 인프라를 정리하기 위해, staging용과 production용 ECS/EC2 클러스터를 각각 구축했습니다. 환경 간 격리는 유지하면서 클러스터별로 여러 서비스를 함께 운영하도록 Terraform으로 공통 기반을 만들었습니다.
- 대표 서비스와 Worker를 직접 이전하고, 다른 팀원이 가이드에 따라 서비스를 추가·이전할 수 있도록 운영 방식을 정리했습니다.
- 기존 EC2에서 직접 운영되던 Express 레거시 API는 운영 로그를 분석해 실제 사용되는 범위로 이전 대상을 좁혔습니다. 이를 NestJS·TypeORM 기반 ECS 서비스로 중단 없이 전환한 뒤 마켓플레이스 백엔드에 통합하고, 별도 ECS 서비스를 제거했습니다.
운영 장애 재발 방지
- 월 정산 장애의 전체 롤백과 대상 0건 무음 실패를 분석하고 관계자와 복구·개선 순서를 조율했습니다. 오염된 데이터를 복구한 뒤 부분 저장, 알림, 실행 가드와 안전한 재처리 기능을 제안·구현해 production에 적용했고, 다음 월 운영 주기의 저장·후속 배치·조회 반영까지 확인했습니다.
외부지문 유사도 검색
- 영어 외부지문 유사도 검색을 새로 구축하면서 ML 팀이 문항 메타데이터와 해당 지문을 연결하는 데 사용하던 Doc2Vec을 포함한 여러 후보 모델을 비교했습니다. 동료와 품질을 검토해 e5-small-v2를 선택하고 pgvector·HNSW·Python Lambda 기반 구조를 구현해, 기존 데이터 전체를 재학습하지 않고 신규 지문을 한 건씩 검색 대상에 반영할 수 있게 했습니다.