포지션: 커머스플랫폼유닛 Back-End 개발 (경력) 작성일: 2026-03-21
NHN에서 소셜 카지노 게임 백엔드를 개발했습니다. Spring Boot 기반 멀티모듈 MSA 구조에서 slot-service, admin-service, meta-service 등 5개 서비스를 운영하며 핵심 비즈니스 로직 개발부터 아키텍처 개선까지 폭넓게 기여했습니다.
Kafka 비동기 처리 — Transactional Outbox Pattern 설계
핵심 API의 응답 흐름을 동기/비동기로 분리하여 응답 레이턴시를 최소화했습니다. 금액 처리·레벨 변화 등 즉시 응답이 필요한 로직은 DB 트랜잭션 내 동기 처리하고, 미션 진행·통계·알림 등 후처리 로직은 Kafka 비동기 발행으로 분리했습니다.
@TransactionalEventListener(AFTER_COMMIT)을 활용해 비즈니스 트랜잭션 커밋 성공 이후에만 메시지 발행을 보장했습니다. Kafka 전송 실패 시에는 Propagation.REQUIRES_NEW 별도 트랜잭션으로 실패 메시지를 DB에 저장하고 스케줄러가 재전송하는 DB Outbox Pattern을 구현하여 메시지 유실을 원천 차단했습니다. traceId를 함께 저장해 실패 메시지 추적도 가능하도록 설계했습니다.
다중 서버 인메모리 캐시 동기화 — 동시성 설계
정적 데이터를 애플리케이션 메모리에 캐싱하여 DB 부하를 최소화하고, Spring Cloud Bus + AMQP 브로드캐스트로 다중 서버 간 캐시 정합성을 유지했습니다.
캐시 갱신 중 조회 요청이 들어오는 상황에서 일시적 정합성 오류가 발생하는 문제를 해결하기 위해 StampedLock을 도입했습니다. 갱신 시 writeLock으로 읽기를 차단하고, 읽기 요청에는 tryReadLock(2.5초 타임아웃)을 적용하여 갱신이 완료될 때까지 대기하도록 처리했습니다. StaticDataManager 인터페이스를 설계하여 데이터 타입별 init/refresh/clear 책임을 분리했고, 신규 캐시 타입 추가 시 기존 코드를 수정하지 않아도 되는 확장 구조를 만들었습니다.
도메인 모델링 및 아키텍처 점진적 개선
파편화된 비즈니스 로직을 도메인 레이어에서 명확히 표현하도록 지속적으로 구조를 개선했습니다. 구현체별로 중복되던 로직을 추상 클래스로 통합하여 공통 흐름을 단일화했고, 여러 타입으로 파편화된 계산 로직은 Decorator 패턴으로 통합하여 도메인 레이어로 재배치했습니다. 단일 팩토리에 집중된 Config 생성을 타입별 독립 구현으로 분리해 OCP를 준수했고, static 메서드 의존을 스프링 DI로 전환하여 테스트 가능성과 유지보수성을 함께 높였습니다.
테스트 인프라 설계 및 커버리지 확보
단순 테스트 추가를 넘어 테스트 작성이 쉬운 구조 자체를 설계했습니다. 제네릭 기반 추상 테스트 클래스 AbstractSlotTest를 설계하여, 게임 타입 특성에 따라 PersonalData·GlobalPersonalData·ProgressiveJackpot 초기화를 @BeforeEach에서 자동으로 처리합니다. 개발자는 게임 ID와 Extra 타입만 지정하면 테스트 환경 설정이 완료되고, doInTransactionWithoutResult 헬퍼를 통해 트랜잭션 범위 내 테스트도 간결하게 작성할 수 있습니다. static 접근을 DI 주입으로 전환해 테스트 격리성을 확보했으며, 총 447개 테스트 파일에서 핵심 비즈니스 로직, AOP 검증, Kafka 이벤트 발행, Redis 통합 테스트까지 커버했습니다.
올리브영 커머스플랫폼유닛의 기술 스택과 제가 실무에서 다뤄온 환경이 직접적으로 맞닿아 있어, 빠르게 기여할 수 있다고 확신합니다.
첫째, Kafka 기반 이벤트 드리븐 설계 경험입니다. 핵심 API의 응답 흐름을 동기/비동기로 분리하고, Transactional Outbox Pattern을 직접 설계·구현한 경험이 있습니다. 트랜잭션 커밋 보장부터 메시지 유실 방지, 실패 추적까지 전 과정을 직접 설계한 경험이 올리브영의 대규모 이벤트 드리븐 아키텍처에 즉시 기여할 수 있다고 생각합니다.
둘째, Redis 캐싱 전략과 동시성 제어 경험입니다. 다중 서버 환경에서 인메모리 캐시의 정합성을 유지하기 위해 StampedLock 기반 동시성 설계를 직접 구현했습니다. 단순히 캐시를 붙이는 수준이 아니라, 갱신 중 읽기 차단·타임아웃 처리·정합성 보장까지 고려한 설계 경험이 올리브영의 대용량 트래픽 환경에 직결된다고 생각합니다.
셋째, 복잡한 도메인 로직을 구조화하는 설계 능력입니다. 다양한 타입으로 파편화된 비즈니스 로직을 추상화하고 OCP를 준수하는 구조로 개선한 경험을 통해, 이커머스의 복잡한 상품·전시·주문 로직도 명확하게 표현하고 확장 가능하게 설계할 자신이 있습니다.
마지막으로, 기능 개발과 구조 개선을 병행하며 팀 전체의 생산성을 높이는 방식으로 일해왔습니다. 테스트 인프라를 직접 설계하고, 동료가 쉽게 기여할 수 있는 구조를 만드는 것을 중요하게 생각합니다. 1,600만 고객이 사용하는 서비스에서 안정성과 개발 속도를 동시에 높이는 데 기여하고 싶습니다.