만든 사람
소개
실무와 개인 프로젝트에서 무엇을 맡아 어떤 판단을 했는지, 그 근거가 된 글과 함께 정리했습니다.
Career Projects
실무 프로젝트
(주)드림어스컴퍼니(FLO) 재직 중(2021.12 – 2025.2) 수행한 프로젝트입니다. 각 항목의 상세 과정은 연결된 글에서 다룹니다.
음원 콘텐츠 플랫폼(MCP) 전면 개편
2024.1 – 2024.11백엔드 리딩(3인 팀) — 배포 전략·도메인 규칙 설계 및 공유, 공통 기능·ArchUnit 아키텍처 규칙·핵심 도메인 API 개발
복잡한 상태 전이와 검증 규칙을 가진 콘텐츠 플랫폼을 도메인 중심 아키텍처로 재설계해 성능, 정합성, 확장성을 개선했습니다.
- API 응답 1.5초 300ms
- 계약 생성 2분 10초
- 정적 분석 위반 480건 75건
지분율 시스템 트랜잭션 안정성 및 동시성 개선
2022.8 – 2022.11단독 설계 및 구현
저작권·실연권 지분율을 대량으로 처리하는 정산 시스템에서 동시성 문제와 배치 병목을 개선해 데이터 정합성과 처리 성능을 높였습니다.
- 대량 삭제 2시간 5분
- 대량 등록 40분 12분
글로벌 유통 시스템(MDS) 구축
2023.1 – 2024.1시니어 개발자가 설계한 ArchUnit 기반 공통 인터페이스 계약에 따라 콘텐츠·라이선스 관리 API 개발, 이후 계약 관리까지 인수인계받아 정담당자로 유지보수
글로벌 파트너사가 앨범을 등록하고 관리자가 검수하는 음원 유통 시스템을 구축하고, DDEX 기반 자동 전송으로 해외 플랫폼과의 직접 유통·정산 구조를 지원했습니다.
- 처리 대기 3~5분 1분 내외
대용량 배치·Excel 처리 최적화
2022.9 – 2022.12단독 수행
대용량 Excel과 배치 처리에서 반복되던 메모리 급증과 장기 트랜잭션 문제를 청크 기반 배치와 스트리밍 구조로 개선해 OOM을 제거했습니다.
- 배치 메모리 피크 3.8GB 1.6GB
- Excel 생성 메모리 1.2GB 180MB
Personal Projects
개인 프로젝트
주식 관찰 앱, 개발자 Q&A, 백엔드 실습 서비스, 결제 시스템을 만들었습니다. 모두 1인 개발이고 코드와 테스트는 GitHub에 공개되어 있습니다.
Monticker — 이벤트 중심 주식 관찰 앱
2026.1 –관심 종목의 가격과 거래량 변화를 시간순으로 모아 보는 앱입니다. 종목마다 거래 규모가 달라 지수이동평균(EMA) 대비 배율로 급증을 판단하고, 같은 변화가 1분 안에 반복되면 한 번만 기록하도록 저장 전 검사와 DB 제약을 함께 뒀습니다. 실시간 시세 경로는 WebSocket과 폴링을 클라이언트 1만 개에서 비교하고, Kafka 파티션·컨슈머 격자에서 종목별 순서와 리밸런스·핫 종목의 대가를 직접 재어 결함 6건을 고쳤습니다. 직접 생성한 시세 데이터 기준입니다.
Quno — 변경 이력을 남기는 개발자 Q&A
2026.8 –질문을 계속 수정할 수 있고 이전 내용과 버전별 차이를 보존하는 Q&A입니다. 동시에 수정해도 버전 번호가 겹치지 않도록 질문 행을 잠그고(SELECT FOR UPDATE) 다음 버전을 계산하며, 질문 변경과 알림 요청을 한 트랜잭션에 묶었습니다. 8개 요청을 동시에 실행하는 통합 테스트로 누락과 중복이 없음을 확인했습니다.
SysDrill — 백엔드 장애 대응 훈련 플랫폼
2026.8 –요청 폭주나 작업 실패 같은 상황을 다루는 실습 6개를 풀고, 코드는 단계별 테스트로, 설계 설명은 AI 평가로 피드백을 받는 학습 서비스입니다. AI 응답은 정해진 항목과 점수 범위만 읽어 서버가 총점을 다시 계산하고, 평가는 Redis 대기열에서 별도 작업이 처리하며 반복 실패는 재시도 상한 뒤 실패 상태로 남깁니다.
ParityPay — 결제·원장 백엔드
2026.9 –선불 지갑의 결제 내역과 이중부기 원장을 함께 관리하는 백엔드입니다. 같은 결제가 두 번 들어오거나 은행 응답이 끊겨도 중복 차감되지 않도록, 응답 유실은 실패로 단정하지 않고 미확정 상태로 보관한 뒤 별도 조회로 확정합니다. DB 커밋과 Kafka 발행 사이는 Transactional Outbox로 잇고, 브로커 강제 종료·파티션 키 오설정·느린 외부기관까지 직접 만들어 벌크헤드·차단기·리미터가 각각 무엇을 막는지 실측했습니다. 잔액 차감 순서를 바꿔 같은 지갑의 잠금 시간을 줄였고, 부하·장애 실험이 찾은 결함 14건을 전부 수정했습니다.
대표 글
역량을 보여주는 대표 글
- ParityPay로 검증하는 결제 정합성 2 - 잠금을 필요 이상으로 오래 쥐고 있었다: 추론을 측정으로 바꾼 기록 계측 기반 원인 추적
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 4 - 분산 락이 있어도 레이스가 발생한 이유 동시성과 락
- 정산이 진행되는 동안 기준 데이터 수정을 막는 방법: 상태 플래그와 AOP로 만든 경량 락 정합성과 상태 전이 설계
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 3 - 채번을 INSERT 시점으로 옮기고 범위 단위로 받기 계측 기반 레거시 재설계
- Heap Dump가 가리킨 곳은 데이터가 아니라 영속성 컨텍스트였다: Tasklet에서 Chunk로, XSSF에서 SXSSF로 대량 배치 성능
- ParityPay로 검증하는 결제 정합성 5 - DB 커밋과 Kafka 발행 사이: Transactional Outbox와 at-least-once 소비자 결제 정합성
이 블로그에는 그 과정에서 얻은 실무적 판단과 실험 결과를 남깁니다. 데이터베이스 내부 동작, Spring 백엔드, 아키텍처 의사결정, 성능 개선, 동시성 제어, 배치 및 정산 시스템 운영처럼 실제 시스템을 더 정확하고 견고하게 만드는 데 필요한 주제를 주로 다룹니다.