대기업의 대규모 서비스 환경에서도 스타트업처럼 기민한 Observability 체계를 바탕으로 일해왔습니다. Datadog 기반의 정밀한 모니터링으로 병목과 장애를 선제 탐지하고, 잦은 프로덕션 배포와 빠른 수정 사이클을 주도했습니다. GS리테일에서 1,500만 유저 앱 '우리동네GS'와 택배 서비스의 회원 통합(우리동네GS 가입 시 택배 회원 연동/가입)을 위한 전용 인증 서버를 구축하여 월 요청량 8.5배 성장을 안정적으로 수용했고, IDC → AWS 이관에서 Airflow 설계·이관과 Core API·배치 SQL 전환을 담당해 DAG를 250개에서 170개로 정비했습니다.
Java Spring Boot Spring Batch JPA PostgreSQL Redis / Valkey Kafka AWS Kubernetes Docker Airflow Python Datadog Git
Projects
01
우리동네GS × 택배 서비스 회원 연동
Problem
1,500만 다운로드 앱 '우리동네GS'에 가입하면 택배 시스템 회원인 경우 연동하고, 회원이 아닌 경우 택배 시스템에 회원가입을 연동하도록 체계를 구축해야 했음. 기존 서버에 직접 인증을 추가하기에는 비회원 서비스 영향과 트래픽 부담이 컸고, 외부 시스템에서 서명을 검증할 수 있는 공개키 기반 체계가 필요했음.
Analyze
기존 비회원 서버 직접 수정 시 비회원 서비스 영향 범위 확대 → 전용 인증 마이크로서비스 분리 필요 (단일 DB 공유)
외부 시스템의 안전한 서명 검증을 위한 RS256 비대칭키 및 AWS KMS 기반 공개키 서명 검증 도입 필요
session cluster 기반의 레거시 홈페이지 연동을 위해 인입 계층에서의 회원 식별 및 세션 바인딩 필요
Action
단일 DB 환경에서 비회원 서버와 분리된 우리동네GS 전용 인증/인가 마이크로서비스 신규 구축
AWS KMS + RS256 비대칭키 도입으로 외부 payload 서명 검증을 위한 공개키(JWKS) 제공 체계 구현
session cluster 기반 레거시 홈페이지의 인입 계층에 Interceptor를 구성하여 JWT 검증 및 내부 회원 세션 연계 생성
Result
우리동네GS 회원가입 시 택배 시스템 회원 연동 및 자동 가입 통합 체계 완성
전용 인증 서버 분리를 통해 기존 서비스 영향 최소화
서비스 연동 후 월 요청량 140만 → 1,197만 건 (8.5배 성장) 안정적 수용
피크 트래픽 37,654 req/h 환경에서 에러율 0.042% 수준 유지
JavaSpring BootAWS KMSJWTKubernetes
02
GS리테일 차세대 CRM 서비스 안정화 & CI 암호화
Problem
오픈 직후 발생한 API 보안 취약점(OTP 세션 및 인가 검증 누락) 및 쿼리/빌드 병목 해소와, 3,000만 회원의 평문 CI 암호화 전환 및 GS SHOP 실시간 데이터 연동 필요.
Analyze
3,000만 회원 데이터의 평문 CI를 암호화 컬럼으로 안전하게 전환하기 위한 API 및 배치 쿼리 수정 필요
CRM DB와 연동된 GS SHOP으로의 안정적인 개인정보 동기화 및 Kafka Consumer Lag 관리 필요
비밀번호 찾기 API의 OTP 인증 세션 미검증 및 인가 누락 취약점 존재
Correlated EXISTS 서브쿼리 및 전체 파일 COPY Dockerfile로 인한 빌드(20분)/쿼리 병목
Action
3,000만 명 CI 암호화: API 및 배치 쿼리를 변경하여 평문 CI를 암호화하여 암호화 column에 저장
GS SHOP Kafka 연동: CRM DB와 연동된 GS SHOP에 Kafka를 통해 개인정보 데이터를 전송하고 Consumer Lag 모니터링/관리
보안 패치: 비밀번호 변경 API에 OTP 인증 완료 세션 및 계정 일치 검증, 인가(Authorization) 검증 로직 추가
마라톤 대회나 러닝 크루에서 팀원들이 현재 어디서 달리고 있는지 위치를 파악해 코스에서 직접 응원하고, 팀원의 페이스와 이동 거리를 확인하여 러너의 안전을 확보하며 함께 달리는 동행 경험을 제공하고자 서비스를 직접 기획·개발함. 이를 구현하는 과정에서 1초 주기로 실시간 GPS 위치 및 운동 데이터를 송수신할 때, 동시 접속자 급증에 따른 블로킹 I/O 스레드 풀 고갈 및 모바일 네트워크 음영지역에서의 데이터 유실 방지와 클라이언트-서버-인프라 전반의 안정적 배포 체계 구축이 핵심 과제였음.
Analyze
Spring MVC(Thread-per-request) 모델은 1초 주기 실시간 WebSocket 스트리밍 시 동시 접속자 급증에 따른 스레드 풀 고갈 및 컨텍스트 스위칭 오버헤드 유발
러너의 이동 중 일시적인 터널/음영지역 네트워크 단절 시 GPS 경로 데이터 유실 위험 존재 → 로컬 오프라인 버퍼링 및 복구 시 동기화 메커니즘 필요
모바일 백그라운드 GPS 위치 추적, 잠금화면/Dynamic Island 실시간 위젯(iOS Live Activity), Apple HealthKit 등 네이티브 생태계와의 정밀한 통합 필요
Docker 데몬 종속성 없는 경량 컨테이너 빌드 및 Kubernetes 선언적 IaC 기반 무중단 배포 표준화 필요
Action
Spring WebFlux + Reactive Redis: Netty 이벤트 루프 기반 전용 WebSocket 중계 서버(pulse.runmarket.cc)를 구축하고 Redis Pub/Sub 토픽 채널링으로 분산 인스턴스 간 초저지연 브로드캐스팅 구현
크로스플랫폼 앱 구축 (Expo SDK 56 / React Native): expo-location 백그라운드 위치 추적, SQLite 로컬 버퍼링 및 네트워크 재연결 시 REST API 자동 동기화(runSync) 파이프라인 구현
iOS Live Activity & Apple HealthKit 연동: Swift/Nitro 커스텀 모듈로 잠금화면/Dynamic Island 실시간 위젯을 연동하고, 러닝 완료 후 Apple HealthKit 운동 자동 동기화 구현
Google Jib & Helm 선언적 IaC: Docker 데몬 없는 경량 OCI 컨테이너 빌드 파이프라인 구축 및 Helm Chart(helm/runmarket)를 통한 K8s 배포 자동화, 무중단 롤링 업데이트 구성
k6 WebSocket 부하 테스트: 1,000 VU가 1초 주기로 위치 데이터를 전송하고 관전자가 수신하는 고부하 시나리오 시뮬레이션 수행
Result
iOS App Store 및 Google Play Store 양대 마켓 정식 출시 및 서비스 운영 중 (cc.runmarket.app)
k6 1,000명 동시 접속 실시간 부하 테스트 환경에서 에러율 0.00%, WebSocket 메시지 왕복 지연시간(RTT) 평균 38ms (p95: 62ms) 달성
SQLite 로컬 버퍼링 파이프라인으로 네트워크 단절 상황에서도 러닝 데이터 유실 제로 보장
Google Jib + Helm Chart 도입으로 CI/CD 경량화 및 환경 일관성 확보, 무중단 배포 체계 확립