공고 URL: https://recruit.cj.net/recruit/ko/recruit/recruit/bestDetail.fo?zz_jo_num=J20260122036765 작성일: 2026-03-21 지원 경로: 사내 추천 (지인)
올리브영 커머스플랫폼유닛은 1,600만 이상 고객에게 쇼핑 경험을 제공하는 온라인몰의 핵심 서버 구축을 담당한다. "빠르고 안정적인 고객 경험"을 제공하는 것이 팀의 미션이며, 대규모 트래픽 처리와 복잡한 비즈니스 로직 구현이 주요 업무다.
| 기술 | 사용 맥락 |
|---|---|
| Java / Kotlin | 백엔드 서버 메인 언어 |
| Spring Boot | 서비스 개발 기본 프레임워크 |
| Spring Authorization Server | OAuth2 인증 서버 |
| Spring Session | 세션 관리 |
| JPA / Hibernate | ORM, 도메인 모델링 |
| 기술 | 사용 맥락 |
|---|---|
| Apache Kafka | Event-Driven Architecture, 도메인 간 데이터 연동 |
| AWS SQS | 알림톡 처리 등 비동기 큐 |
| 기술 | 사용 맥락 |
|---|---|
| Redis | Cache-Aside, 선택적 API 호출 최적화 |
| Aurora Serverless | RDS (AWS 관리형 DB) |
| 기술 | 사용 맥락 |
|---|---|
| AWS | 전반적 인프라 (SQS, Aurora, 등) |
| Docker / Kubernetes | 컨테이너 오케스트레이션 |
| 기술 | 사용 맥락 |
|---|---|
| Datadog | APM, 모니터링 |
| Resilience4j | Circuit Breaker, Timeout, Retry |
면접 준비 및 기술 트렌드 파악용
Redis Cache-Aside + Kafka Event-Driven 하이브리드 설계
올영세일(평소 대비 10배 트래픽) 중 100% 안정 배포 달성
서류전형
↓
1차 면접 (Live Coding / 구술)
↓
온라인 인성검사 (CJAT)
↓
2차 면접 (Whiteboard Test / 구술)
↓
Reference Check
↓
처우전형 / 건강검진
↓
최종 합격
NHN | 온라인 게임 플랫폼 백엔드 개발 Spring Boot 3.5.6 · Java · MSA · Kafka · Redis · Spring Cloud · MySQL · JPA
slot-service, admin-service, meta-service, scheduler-service, websocket-service 5개 서비스로 구성된 MSA 환경에서 핵심 비즈니스 로직 개발feign-module, message-module, metric-module 등 공통 기능을 독립 모듈로 분리, 각 서비스가 선택적으로 의존하는 멀티모듈 구조 설계 및 운영핵심 API의 응답 흐름을 동기/비동기로 분리하여 응답 레이턴시 최소화 및 안정성 확보
@TransactionalEventListener(AFTER_COMMIT) 활용: 비즈니스 트랜잭션 커밋 성공 이후에만 메시지 발행 보장 → 불완전한 데이터 전파 차단Propagation.REQUIRES_NEW 별도 트랜잭션으로 KafkaFailedMessage 저장 → 스케줄러 재전송으로 메시지 유실 방지정적 데이터를 애플리케이션 메모리에 캐싱하여 DB 부하 최소화. 다중 인스턴스 환경의 캐시 정합성 문제를 직접 설계하여 해결
StampedLock 도입: refreshAll 수행 중 읽기 요청 차단 (tryReadLock 2.5초 타임아웃) → 순차 갱신 구간(Product → 연관 데이터)의 정합성 오류 방지StaticDataManager 인터페이스 추상화: 데이터 타입별 init / refresh / clear 책임 분리 → OCP 준수, 신규 캐시 타입 추가 시 기존 코드 무수정복잡한 비즈니스 규칙을 도메인 레이어에서 명확하게 표현하도록 지속적으로 구조 개선
BaseService 추상 클래스로 통합, 공통 흐름 단일화 및 불필요 코드 제거AbstractPayChecker + AbstractWinService + Decorator 패턴으로 통합, application → domain 레이어로 재배치기능 추가와 병행하여 구조적 개선을 지속적으로 진행, 코드베이스의 확장성과 유지보수성 향상
BaseSlotService 추상 클래스로 통합 → 공통 흐름 단일화, 신규 슬롯 타입 추가 시 핵심 비즈니스 로직에만 집중 가능AbstractPayChecker + Decorator 패턴으로 통합, application → domain.service.payment 레이어로 재배치slot-service에서 meta-service로 이관, 모듈 간 책임 재정립단순 테스트 추가를 넘어 테스트 작성 자체가 쉬운 구조를 설계하는 데 집중
AbstractSlotTest<T> — 범용 슬롯 테스트 기반 클래스 설계
<T extends SlotExtra>로 각 슬롯 타입에 맞는 Extra 객체를 타입 안전하게 제공@BeforeEach에서 슬롯 특성 자동 판별 후 필요한 초기화만 수행:
requiresPersonalService() → PersonalData 자동 초기화requiresGlobalPersonalService() → GlobalPersonalData 자동 초기화requiresProgressiveJackpot() → Jackpot Pool 자동 초기화buildParameter() 팩토리 메서드로 SpinResultParameter 일관된 생성, 각 테스트에서 필요한 부분만 오버라이드doInTransactionWithoutResult() 헬퍼로 트랜잭션 범위 내 테스트를 간결하게 작성SlotStaticDataLoader.getSlotProduct() static 호출 → DI 주입 방식으로 전환, 테스트 격리성 확보커버리지 범위 (총 테스트 파일 447개)
SlotLoggingPublisher 단위 테스트)ValidateClientVersionAop, ValidateBalanceTypeAop 유닛 테스트)ProgressiveJackpotRedis 통합 테스트)