📚FOS Study
홈카테고리
홈카테고리

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agents 페이지로 이동
    • BMAD Method — AI 에이전트로 애자일 개발하는 방법론
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • Claude Code 멀티 에이전트 — Teams
    • 멀티모달 LLM (Multimodal Large Language Model)
  • architecture 페이지로 이동
    • Cache-Aside 패턴
    • 디자인 패턴
    • 분산 트랜잭션
  • css 페이지로 이동
    • FlexBox 페이지로 이동
  • database 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • redis 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • 커넥션 풀 크기는 얼마나 조정해야할까?
    • 인덱스 - DB 성능 최적화의 핵심
    • 역정규화 (Denormalization)
    • 데이터 베이스 정규화
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • monitoring 페이지로 이동
  • go 페이지로 이동
    • Go 언어 기본 학습
  • http 페이지로 이동
    • HTTP Connection Pool
  • interview 페이지로 이동
    • 210812 페이지로 이동
    • 뱅크샐러드 AI Native Server Engineer
    • CJ 올리브영 지원 문항
    • CJ 올리브영 커머스플랫폼유닛 Back-End 개발 지원 자료
    • 마이리얼트립 - Platform Solutions실 회원주문개발 Product Engineer
    • NHN 서비스개발센터 AI서비스개발팀
    • nhn gameenvil console backend 직무 인터뷰 준비
    • 면접을 대비해봅시다
    • Tossplace Node.js Developer
    • 토스플레이스 Node.js 백엔드 컬처핏
  • java 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • 더_자바_코드를_조작하는_다양한_방법 페이지로 이동
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • OpenTelemetry 란 무엇인가?
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • Data_Structures_and_Algorithms 페이지로 이동
    • Heap 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node.js
    • npm vs pnpm 선택기준은 무엇인가요?
    • `setImmediate()`
  • kafka 페이지로 이동
    • Kafka 기본
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • 메시지 전송 신뢰성
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • tmux — Terminal Multiplexer
  • network 페이지로 이동
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • react 페이지로 이동
    • JSX 페이지로 이동
    • VirtualDOM 페이지로 이동
    • v16 페이지로 이동
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • the-future-company 페이지로 이동
📚FOS Study

개발 학습 기록을 정리하는 블로그입니다.

바로가기

  • 홈
  • 카테고리

소셜

  • GitHub
  • Source Repository

© 2025 FOS Study. Built with Next.js & Tailwind CSS

목록으로 돌아가기
💼interview

CJ 올리브영 지원 문항

약 5분
2026년 3월 21일
2026년 3월 27일 수정
GitHub에서 보기

CJ 올리브영 지원 문항

포지션: 커머스플랫폼유닛 Back-End 개발 (경력) 작성일: 2026-03-21


문항 1. 상세경력기술서 (직무 관련 경험/성과 등) — 2000자 이내

NHN에서 4년째 게임 백엔드 및 AI 서비스 개발을 맡고 있습니다. 소셜 카지노 게임 팀에서는 Spring Boot 기반 멀티모듈 MSA 구조에서 슬롯 서비스를 담당하며 신규 게임 개발, 성능 개선, 아키텍처 재설계에 기여했습니다. 이후 AI 서비스 팀으로 이동해 사내 문서를 OpenSearch에 색인하는 Spring Batch 파이프라인을 설계·구현했습니다.

[다중 서버 인메모리 캐시 동기화 — 동시성 설계]

정적 설정 데이터를 애플리케이션 메모리에 캐싱해 DB 부하를 줄이고, 어드민에서 엔티티가 변경·커밋되면 Hibernate PostCommitUpdateEventListener가 발동해 RabbitMQ Fanout Exchange로 변경된 게임 ID를 발행하는 방식으로 다중 서버 간 캐시 정합성을 유지했습니다. 각 서버 인스턴스는 자신의 큐에서 메시지를 수신해 해당 슬롯 데이터만 선택적으로 갱신합니다.

갱신 중 조회 요청이 들어오는 상황에서 일시적 정합성 오류가 발생했는데, StampedLock을 도입해 갱신 시 writeLock으로 읽기를 차단하고 tryReadLock에 2.5초 타임아웃을 걸어 해결했습니다. StaticDataManager 인터페이스를 설계해 데이터 타입별 init/refresh/clear 책임을 분리했고, 신규 캐시 타입을 추가해도 기존 코드를 건드리지 않는 확장 구조를 만들었습니다.

[Kafka 비동기 처리 — Transactional Outbox Pattern 설계]

핵심 API의 응답 흐름을 동기/비동기로 분리했습니다. 금액 처리·레벨 변화처럼 즉시 응답이 필요한 로직은 DB 트랜잭션 안에서 처리하고, 미션 진행·통계·알림 등 후처리 로직은 Kafka 비동기로 넘겼습니다.

@TransactionalEventListener(AFTER_COMMIT)으로 커밋 이후에만 메시지를 발행하도록 보장했습니다. Kafka 전송 실패 시에는 Propagation.REQUIRES_NEW 별도 트랜잭션으로 실패 메시지를 DB에 저장하고 스케줄러가 재전송하는 Outbox Pattern을 구현해 메시지 유실을 막았습니다. traceId도 함께 저장해 실패 원인 추적이 가능하도록 설계했습니다.

[Spring Batch 기반 대용량 색인 파이프라인 설계]

사내 AI 서비스의 RAG 기능을 위해 문서를 OpenSearch에 벡터 색인하는 배치 파이프라인을 처음부터 설계했습니다. 수집·변환·임베딩·색인·삭제 동기화까지 11개 Step으로 분리했고, Step 단위 실패 격리로 중간에 문제가 생겨도 이전 Step 결과가 보존되고 실패 지점부터 재시작이 가능하도록 했습니다.

임베딩 API 호출과 문서 파싱 서비스 호출이 모두 I/O 바운드 작업이라, 동기 처리 시 청크 하나를 처리하는 데 수 분까지 걸릴 수 있었습니다. AsyncItemProcessor로 청크 내 문서를 스레드풀에서 병렬 처리해 처리 시간을 단축했습니다. Reader에 ItemStream을 구현해 커서 기반 페이지네이션 위치를 ExecutionContext에 저장했고, 중간에 실패하더라도 마지막으로 처리한 지점부터 재시작 가능하도록 설계했습니다.

[도메인 모델링 및 테스트 인프라 구축]

파편화된 비즈니스 로직을 도메인 레이어로 통합하는 작업을 지속적으로 진행했습니다. 스핀 타입마다(일반·바이피처·바이피처 티켓) 분산돼 있던 중복 흐름을 AbstractPlayService 단일 템플릿으로 통합하고, 타입별로 달라지는 동작(베팅 금액 계산·후처리·응답 구성 등)은 SpinOperationHandler 인터페이스로 위임했습니다. 여러 타입에 흩어진 계산 로직은 Decorator 패턴으로 도메인 레이어로 이동시키고, static 의존을 DI로 전환해 테스트 가능성을 높였습니다.

테스트 구조도 함께 개선했습니다. 제네릭 기반 추상 테스트 클래스를 설계해 게임 타입별 초기화를 자동 처리했고, 총 447개 테스트 파일에서 핵심 비즈니스 로직, AOP 검증, Kafka 이벤트 발행, Redis 통합 테스트까지 커버했습니다.


문항 2. 지원하신 직무를 잘 수행할 수 있다고 생각하는 이유를, 보유한 전문지식 및 스킬과 관련하여 기술하시오 — 1000자 이내

지금까지 쌓아온 기술이 대규모 커머스 트래픽 환경에서 어떻게 작동하는지 직접 경험하고 싶어 지원했습니다. 실무에서 다뤄온 기술 스택이 올리브영 환경과 직접 맞닿아 있어, 빠르게 기여할 수 있을 것이라 생각합니다.

캐싱 전략은 단순 Redis 사용을 넘어 다중 서버 환경의 정합성, 갱신 중 동시성, 확장 가능한 구조 설계까지 고민하며 구현했습니다. Cache-Aside가 어떤 상황에 적합하고 어디서 한계가 생기는지, 실제 문제를 풀면서 체득했습니다.

Kafka 이벤트 드리븐 설계는 설계부터 운영까지 직접 경험했습니다. 트랜잭션 커밋 보장, 메시지 유실 방지, 실패 추적까지 Outbox Pattern 전 과정을 설계한 경험이 올리브영의 도메인 간 이벤트 연동 구조에 바로 활용될 수 있다고 생각합니다.

대용량 데이터 처리 경험도 있습니다. Spring Batch 기반 색인 파이프라인을 설계하면서 Step 실패 격리, 청크 처리, AsyncItemProcessor를 활용한 I/O 병렬화, OpenSearch 벌크 색인까지 전 과정을 직접 구현했습니다. 커머스 상품 검색과 AI 문서 검색은 목적이 다르지만, OpenSearch에 대규모 데이터를 색인하고 증분 처리·삭제 동기화를 운영하는 패턴은 동일하게 적용될 수 있다고 생각합니다.

도메인 구조 설계에도 꾸준히 투자해왔습니다. 파편화된 로직을 추상화하고 확장 가능한 구조로 정리한 경험이, 상품·전시·주문처럼 복잡한 이커머스 도메인에도 그대로 적용될 것입니다.

AI 개발 도구 도입에도 앞장섰습니다. 에이전트가 복잡한 도메인에서 제대로 동작하도록 Cursor Rules를 20개 이상 구축해 신규 게임 3종을 에이전트 단독으로 구현했고, 팀 내에 활용 방법을 전파해 반복 개발 사이클을 단축했습니다.

기능만 만드는 데 그치지 않고, 팀 전체가 빠르게 기여할 수 있는 구조를 만드는 걸 중요하게 여겨왔습니다. 1,600만 고객이 사용하는 서비스에서 안정성과 개발 속도를 동시에 높이는 데 기여하고 싶습니다.


문항 3. 추천 후보자의 전문 역량 — 200자 이상

김병태 님은 NHN에서 4년간 Spring Boot 기반 MSA 환경의 백엔드 개발을 담당하며 설계부터 운영까지 전 과정을 직접 경험한 개발자입니다. 다중 서버 환경에서의 인메모리 캐시 정합성 문제를 RabbitMQ Fanout Exchange와 StampedLock을 활용해 직접 해결한 경험이 있으며, Kafka 기반 이벤트 드리븐 아키텍처에서 Transactional Outbox Pattern을 설계해 메시지 유실 없는 비동기 처리 구조를 구현했습니다.

대용량 데이터 처리 역량도 검증됐습니다. Spring Batch로 RAG 파이프라인을 처음부터 설계하면서 11개 Step 분리, AsyncItemProcessor를 활용한 I/O 병렬화, 커서 기반 재시작 가능한 구조를 직접 구현했습니다. OpenSearch에 대규모 문서를 벡터 색인하고 증분 처리 및 삭제 동기화까지 운영한 경험은 커머스 상품 검색 도메인에도 곧바로 적용 가능한 역량입니다.

도메인 설계와 ORM 활용 역량도 갖추고 있습니다. JPA Hibernate 이벤트 리스너(PostCommitUpdateEventListener)를 활용해 커밋 이후 자동으로 캐시 갱신을 트리거하는 구조를 구현했고, Decorator 패턴으로 흩어진 계산 로직을 도메인 레이어로 응집시키며 static 의존을 DI로 전환해 테스트 가능성을 높인 경험이 있습니다. 파편화된 비즈니스 로직을 추상 클래스와 인터페이스로 정리해 신규 기능 추가 시 기존 코드를 건드리지 않는 확장 구조를 꾸준히 만들어온 개발자로, 상품·전시·주문처럼 복잡한 커머스 도메인의 모델링 요구에도 충분히 대응할 수 있습니다.


문항 4. 추천 후보자의 성향/협업능력/리더십 — 200자 이상

김병태 님은 주어진 기능 범위를 완수하는 데 그치지 않고, 팀 전체의 개발 속도와 유지보수성을 높이는 구조 개선에 자발적으로 나서는 개발자입니다. 여러 도메인 타입에 파편화된 비즈니스 로직을 단일 추상 템플릿으로 통합하고, 타입별로 달라지는 동작은 인터페이스 위임으로 분리하는 리팩터링을 주도한 경험이 있습니다. 팀원 누구나 새 기능을 추가할 때 기존 코드를 최소한으로 건드릴 수 있는 확장 구조를 만드는 것을 중요하게 여깁니다.

AI 개발 도구 도입에서는 팀 내 선도적인 역할을 맡았습니다. Cursor Rules를 20개 이상 직접 구축해 복잡한 슬롯 도메인 컨텍스트를 문서화했고, 이 규칙 체계를 기반으로 신규 게임 3종을 에이전트 단독으로 구현하는 데 성공했습니다. 개인 성과에 머물지 않고 팀 전체에 활용 방법을 전파해 반복 개발 사이클을 단축했습니다. 새로운 기술을 빠르게 익히고, 이를 팀이 실제로 쓸 수 있는 형태로 정착시키는 능력이 뛰어납니다.

커뮤니케이션 측면에서는 기술 결정의 배경과 트레이드오프를 문서로 남기는 습관이 있어, 함께 일하는 동료가 맥락 없이도 코드의 의도를 파악할 수 있습니다. 테스트 인프라를 체계화해 447개 테스트 파일에서 비즈니스 로직, AOP, Kafka 이벤트, Redis 통합 테스트까지 커버한 것은 팀 전체의 안전망을 직접 구축했다는 의미이기도 합니다. 빠른 속도와 높은 안정성을 동시에 추구하는 조직 문화에 잘 적응할 것으로 확신합니다.

interview 카테고리의 다른 글 보기수정 제안하기

댓글

댓글을 불러오는 중...
목차
  • CJ 올리브영 지원 문항
  • 문항 1. 상세경력기술서 (직무 관련 경험/성과 등) — 2000자 이내
  • 문항 2. 지원하신 직무를 잘 수행할 수 있다고 생각하는 이유를, 보유한 전문지식 및 스킬과 관련하여 기술하시오 — 1000자 이내
  • 문항 3. 추천 후보자의 전문 역량 — 200자 이상
  • 문항 4. 추천 후보자의 성향/협업능력/리더십 — 200자 이상