본문으로 건너뛰기

조현준

Backend Engineer

복잡한 도메인을 구조화하고, 안정적으로 확장 가능한 서버를 설계합니다.

About Me

백엔드 개발자로서 복잡한 도메인을 구조화하고, 안정적으로 확장 가능한 서버를 설계하는 능력을 가장 중요한 가치로 두고 있습니다.

한국과 일본에서 파견 엔지니어 및 인하우스 개발자로 활동하며 커머스·게임·통신·AR·데이터 분석 등 다양한 산업의 문제를 직접 해결해 왔습니다. 이 과정에서 단순 기능 개발을 넘어, 요구사항 정의–설계–API 개발–운영–성능 개선까지 엔드 투 엔드 관점의 개발 역량을 쌓았습니다.

저는 기술을 통해 문제를 해결하고, 복잡함을 단순하게 만드는 개발자를 목표로 합니다. 기술 스택보다 중요한 것은 문제의 본질을 이해하는 것이며, 이를 위해 요구사항 분석, 도메인 설계, 데이터 모델링, 아키텍처 선택, 성능 분석 등 전 과정을 깊이 있게 고민합니다.

Experience

컬리(Kurly)2026.05 – 현재
SCM 프로덕트 개발 / Senior Engineer

회원 1,000만+ 이커머스의 SCM(공급망) 백엔드

  • 입고 도메인 기능 개발
  • 대량 데이터 처리와 동시성 정합성을 고려한 배치 신규 개발
  • 헥사고날 아키텍처 멀티모듈 MSA에서 API·배치·Kafka 이벤트 처리 개발
NHN2021.12 – 2026.02
게임사업본부 / 선임

누적 다운로드 100만+ · MAU 10만+ 규모의 소셜 카지노 게임 (슬롯 · 메타)

  • 메타 컨텐츠(미션·보상·VIP 등급·이벤트 푸시) 설계·운영, 운영툴·대시보드 연동
  • 대규모 동시 접속 REST API 게임 서버 구축, 데이터 정합성·성능 최적화
깃컴퍼니2020.10 – 2021.12
개발팀 / 매니저

회원 30만+ · 월 수만 건 주문 규모의 D2C · B2B 커머스 플랫폼

  • D2C 웹사이트·정기배송, B2B 사업자몰 등 커머스 백엔드 설계·개발
  • REST API·Jenkins CI/CD 구축, Amazon Redshift 데이터 웨어하우스·대시보드 구축
InterON2017.03 – 2020.09
시스템 개발부 / 주임

AR · 5G · 호텔 등 일본 현지 다수 기업 대상 B2B/B2C 시스템

  • 5G 기지국 속보전송·AR 플랫폼/피플 트래킹·기업 워크플로우 시스템 개발
  • 정산 SQL 튜닝·JMeter 부하테스트 기반 성능 개선, 인터페이스 표준화

Projects

회송/폐기 처리 시스템2026.05 – 2026.09

입고 검수·검품 과정에서 이상이 확인된 재고를 공급사로 반송(회송)하거나 폐기 대상으로 분류·처리하는 배치와 API를 개발한 프로젝트. 대량의 재고 데이터를 처리하고, 여러 작업이 동일 재고의 상태를 동시에 변경하는 환경에서 처리 성능과 데이터 정합성을 함께 보장하는 것이 핵심.

담당
  • 회송·폐기 대상 선별 배치와 처리 API 개발
  • 처리 결과를 이메일·슬랙으로 통지하는 외부 알림 연동 개발
  • 대량 배치의 처리 성능과 동시성 정합성 개선
  • 헥사고날 아키텍처 멀티모듈 MSA에서 API·배치·Kafka 이벤트 처리 개발
성과
  • 일 수만 건 규모의 회송·폐기 처리를 커서 기반 조회·벌크 연산으로 신규 개발해 성능·안정성 확보
  • 여러 주체가 동시에 바꾸는 상태 전이에 조건부 업데이트와 분산 락을 적용해 데이터 정합성 확보
  • 청크 분할·병렬 처리로 처리량을 확보하고, 재시도·건너뛰기 정책으로 배치 중단 방지
  • Outbox 패턴으로 상태 변경과 이벤트 발행을 묶어, 장애 시에도 이벤트 유실·중복 없이 정합성 보장
  • 처리 완료·실패 결과를 이메일·슬랙으로 자동 통지하는 알림 연동을 구축해 운영 가시성 확보
Java 21Spring Boot 3.2Spring BatchJPAQueryDSLMySQLKafkaRedisAWS
소셜 카지노 게임 메타 서버2024.03 – 2025.12

유저 참여도와 장기 유지율(리텐션) 향상을 목표로 경제·보상·리텐션 시스템 등 메타 컨텐츠를 설계하고, 대규모 트래픽에서도 안정적으로 운영 가능한 서버 구조로 구축한 프로젝트.

담당
  • 튜토리얼·단계별 미션·출석/보상·VIP 등급·이벤트 푸시 등 메타 컨텐츠 도메인 설계·구현
  • 운영툴 기반 유저/컨텐츠 관리 기능 및 지표 대시보드 연동
성과
  • 보상 지급·VIP 등급 갱신 등 동시성 핵심 로직에 Redisson 분산 락을 적용해 중복 지급·데이터 충돌 방지
  • 경제 재화 변경 로직에 DB 트랜잭션 + 비관적 락(Pessimistic Lock)을 적용해 대규모 동시 요청에서도 정합성 보장
  • Kafka 비동기 이벤트 처리로 트래픽 피크 구간의 메인 트랜잭션 부하를 분리하고 응답 속도 안정화
  • Spring Batch로 대량 이벤트 푸시를 안정 처리 — Chunk 기반 대량 처리 + 병렬 Step으로 성능 개선, Retry/Skip 정책으로 외부 푸시 API 실패 시 자동 복구·발송 누락 방지
  • Redis 캐시 + TTL 전략으로 읽기 트래픽을 분산해 DB 부하 40% 이상 감소
JavaSpring BootJPAMariaDBRedisKafkaSpring BatchAWS
소셜 카지노 게임 슬롯 서버2021.12 – 2024.03

대규모 동시 접속 환경에서 확률 연산과 게임 플레이를 안정적으로 처리하도록 게임 룰 엔진·시뮬레이션 시스템을 구축하고, 다양한 슬롯 테마 추가에 유연하게 대응하도록 로직을 모듈화·최적화한 프로젝트.

담당
  • 슬롯 릴·심볼·페이라인·보너스 게임 등 핵심 룰 엔진 설계
  • RTP(환급률) 계산 모듈 구현 및 출시 전 확률 검증용 시뮬레이션 툴 구축
  • 객체 풀링·캐싱 등 코어 연산 성능 최적화
성과
  • 룰 엔진을 모듈화해 신규 슬롯 테마를 최소 변경으로 추가할 수 있는 확장 구조 확보
  • RTP 시뮬레이션 시스템으로 출시 전 확률을 자동 검증해 밸런스 리스크를 사전 차단
  • IntelliJ Profiler로 병목을 분석하고 객체 풀링/캐싱을 적용해 코어 연산 성능 30% 이상 개선
  • Walker’s Alias Method를 도입해 가중치 기반 랜덤 추출을 O(1)로 최적화하여 응답 속도 개선
JavaSpring BootJPAMariaDBRedisKafka
B2B 사업자몰 구축2020.12 – 2021.02

거래처 단가·할인율·정산 데이터를 멤버십 등급별로 관리해, 대량 주문과 파트너사 전용 판매 프로세스를 안정적으로 지원하는 B2B 사업자몰을 구축한 프로젝트.

담당
  • 사업자 멤버십(등록·승인·등급) 기능 설계·구현
  • 멤버십 등급별 할인율 자동 계산 및 상품 주문·결제 API 개발
  • 주문 이력·정산 데이터 관리 모듈 개발
성과
  • 파트너 전용 B2B 거래 채널을 구축해 신규 매출 경로 확보
  • 등급별 할인·정산 로직을 자동화해 수기 처리 공수와 오류를 줄이고 운영 효율 향상
JavaSpring BootJPAWooCommerceMariaDBAWSJenkins
모바일 메신저 성능 개선2018.03 – 2018.05

트래픽 증가로 발생한 메시지 송·수신 지연과 앱 과부하를 해결하기 위해, 클라이언트 중심 처리 구조를 서버 사이드로 전환하고 쿼리 최적화·부하 테스트로 성능을 개선한 프로젝트.

담당
  • 메시지 필터링·정렬·읽음 처리 로직을 클라이언트 → 서버 사이드로 이관해 단말 CPU·메모리 사용량 감소
  • 대화방 조회의 다중 JOIN 쿼리를 인덱스 재설계·페이징 구조로 개선
  • JMeter 기반 부하 테스트로 TPS 시나리오 설계·수행
성과
  • 메시지 조회·대화방 로딩 구간의 응답 속도 개선 및 체감 지연 감소
  • 페이징 처리·불필요한 데이터 전송 제거로 네트워크 트래픽 감소
  • JMeter 부하 테스트로 병목 구간을 식별해 처리 구조 개선
Node.jsExpressPostgreSQLJavaScriptPHPJMeter
호텔 예약/정산 시스템 성능 개선2017.03 – 2017.06

대용량 정산 데이터 누적으로 인한 성능 저하를 해결하기 위해, 정산 SQL 튜닝과 JOIN 구조 개선으로 처리 속도를 높이고 정산 프로세스를 자동화한 프로젝트.

담당
  • 주요 정산 SQL에 인덱스 재설계·실행 계획 분석 기반 튜닝 수행
  • 대규모 정산 데이터의 다중 JOIN을 최소화하고 일부 연산을 로직으로 분리해 DB 부하 완화
  • 정산 데이터 추출–파일 생성–업로드 프로세스 자동화
성과
  • JOIN 구조 개선·로직 분리로 정산 데이터 조회·처리 속도 향상
  • 대용량 정산 구간에서 발생하던 DB 병목·응답 지연 개선
  • 파일 입출력 자동화로 운영 수작업 공수 감소·처리 오류 최소화
JavaJSPMySQLJavaScriptCentOS

Strengths

대규모 동시성·정합성 설계
분산 락 · DB 트랜잭션 · 비관적 락 전략
대용량 트래픽 성능 최적화
프로파일링 기반 병목 분석 · 캐싱 · 알고리즘 개선
이벤트 기반·비동기/배치
Kafka 비동기 처리 · Spring Batch 대량 처리
도메인 설계·데이터 모델링
요구사항 정의부터 운영까지 엔드 투 엔드

Skill

Language
Java
Framework
Spring BootSpring Data JPASpring Batch
Data
MariaDBMySQLPostgreSQLRedisAmazon Redshift
Messaging · Async
Apache KafkaWebSocket
Infra · DevOps
AWSJenkinsMSA
Test · Tooling
JMeterIntelliJ Profiler

Opensource

이슈
  • Vault TOKEN 인증 모드인데도 설정 파일에 명시된 토큰이 우선 적용되지 않고 기본 Token Provider 로직이 동작하는 버그
  • Config Server–Vault 연동 시 인증 방식이 예측과 다르게 동작해 설정 신뢰성이 저하
해결
  • Vault 인증 분기 로직을 수정해 TOKEN 방식일 때 설정된 토큰이 우선 사용되도록 개선
  • 관련 단위 테스트를 추가해 재발 방지 및 인증 처리 안정성 강화
이슈
  • @SuppressWarnings("serial") 검사 로직이 잘못 구현되어 false positive 판정 발생
  • serialVersionUID가 없는 클래스도 테스트를 통과해 직렬화 검사가 제대로 동작하지 않음
해결
  • 검사 문자열을 대소문자 구분 없이 "serial"로 정확히 확인
  • @SuppressWarnings가 명시적으로 존재하는 경우만 무시되도록 로직 강화

Troubleshooting

분산 락 개선: Spin Lock에서 Redisson 기반 분산 락으로 전환
문제
  • Polling 방식으로 100ms마다 SETNX를 반복 호출해 Redis 부하 증가
  • Spin Lock 구조로 인한 비효율적 CPU 사용·응답 지연
  • ThreadLocal 기반 커스텀 재진입 락의 메모리 누수 위험·확장성 한계
  • 트랜잭션이 길어질 경우 TTL 만료로 락 안정성 저하
해결
  • Redis Pub/Sub 기반 이벤트 방식으로 대기 구조를 전환해 불필요한 폴링 제거
  • Redisson 내장 Reentrant Lock으로 ThreadLocal을 제거하고 중첩 호출 안정화
  • Watchdog 메커니즘으로 락을 자동 연장해 트랜잭션 길이와 무관하게 안정성 확보
성과
  • Pub/Sub 대기로 CPU·Redis 트래픽 감소 및 락 획득 효율 향상
  • 트랜잭션 안정성 확보, 코드 복잡도·유지보수성 개선
분산 트레이싱 개선: Kafka Producer/Consumer TraceId 불일치 문제 해결
문제
  • 다건 레코드 소비 시 특정 레코드의 TraceId가 MDC에 덮어써져 프로듀서–컨슈머 간 TraceId 불일치
  • OpenTelemetry Java Agent가 주입하는 W3C traceparent 헤더를 쓰지 않고 커스텀 TraceId를 별도 전송
  • 컨슈머에 OpenTelemetry 컨텍스트 추출 로직이 없어 메시지 수신 시 새 TraceId로 스팬이 시작됨
해결
  • OpenTelemetry 표준 컨텍스트 전파로 전환 — Kafka 헤더의 traceparent를 읽어 컨텍스트를 복원하고 현재 스레드에 적용
  • MessageConsumer 인터페이스에 공통 트레이싱 로직을 추가해 모든 컨슈머에 자동 적용
성과
  • 프로듀서–컨슈머 전 구간에서 일관된 TraceId·Span 구조 확보
  • 분산 트랜잭션 추적 정확도·장애 분석 속도 향상, 메시지 흐름 가시성·디버깅 효율 증대
배치 쿼리 성능 개선: Cursor 기반 조회(fetchSize 활용)
문제
  • 수백만 건 규모의 푸시 발송 대상자를 청크 단위로 추출하는 배치에서 타임아웃 발생
  • Offset 페이징(ORDER BY + OFFSET)은 뒤쪽 페이지일수록 앞선 수백만 행을 반복 스캔·정렬해 OFFSET 비용이 누적
  • 페이지가 깊어질수록 쿼리 실행 시간이 급증하고 DB CPU가 치솟아 전체 배치가 불안정
해결
  • Cursor 기반(no-offset) 조회로 전환 — 마지막 조회 id 기준 WHERE id > :afterId ORDER BY id LIMIT :chunkSize 로 스트리밍하며 순차 조회
  • JPA Cursor ItemReader에 fetchSize(1,000건 단위) Query Hint를 적용해 네트워크 왕복·메모리 사용 최적화
  • 불필요한 OFFSET 계산·반복 정렬 비용 제거
성과
  • DB CPU 약 40% 감소, 평균 쿼리 실행 시간 약 50% 단축
  • 수백만 건 대량 데이터에서도 페이지 깊이와 무관하게 일관된 처리 성능·안정적 배치 확보

Education

인하대학교컴퓨터정보공학 학사 · 2010.03 – 2017.02
졸업
빅데이터 전문가 육성과정 (FORCA)2016
수료

Certificates

정보처리기사2016.05
OCP — Oracle Database 11g Administrator2016.07
OCJP — Oracle Certified Professional, Java SE 62016.08
JLPT N22016.08

Activities

오픈소스 기여 모임2026.01 – 2026.02