대규모 커머스 트래픽 환경에서 Java/Spring Boot·PHP·Python으로 문제를 해결해 온 백엔드 개발자 김호영입니다.
- Public API Java 전환 POC에서 평균 응답 시간 80% 개선 (약 100ms → 20ms)
- 어댑터 패턴 기반 리뷰 연동 구조 설계로 신규 플랫폼 추가 공수 70% 단축
- Kafka 기반 이벤트 드리븐 할인가 연동으로 배치 대비 반영 지연을 수 초 수준으로 단축
현재는 Java/Spring 생태계에서 확장성(아키텍처)과 운영성(장애/성능/테스트)을 함께 개선하는 방향으로 역량을 집중하고 있습니다.
📞 Contact
🛠 기술 스택
Backend (Production Experience)
Java/Spring Ecosystem
- Spring Boot, Spring Cloud, JPA(Hibernate, Querydsl), MyBatis
- CQRS, DDD, MSA 아키텍처 설계 경험
PHP (10년, Main)
- CodeIgniter, Slim Framework, Composer
- 대규모 EC 솔루션 개발 및 운영
Python
- Kafka Consumer/Producer, Event-Driven Architecture
- AWS Lambda (Serverless)
Infrastructure & DevOps
- Container/Orchestration: Kubernetes, Docker
- CI/CD: Jenkins, AWS CodeDeploy
- Cloud: AWS (Lambda, SQS, CloudFront, CloudFormation)
Database & Messaging
- RDBMS: MySQL, PostgreSQL
- NoSQL/Cache: Redis, Elasticsearch
- Messaging: Kafka
Software Engineering
- TDD (JUnit, PHPUnit), Adapter Pattern, Interface Design
- Git, GitLab (Private Repository for jar packaging)
📝 경력사항
카페24
EC 솔루션 개발팀 Senior Backend Developer
주요 업무
- PHP 기반 레거시 시스템 개선 및 Java/Spring Boot 전환 프로젝트 참여
- Python/Kafka 기반 이벤트 드리븐 아키텍처 설계 및 구현
- 외부 시스템 연동 (리뷰 서비스, 할인가 연동 등)
- AI 기반 자동화 도구 개발 (ChatGPT/Claude API 활용 코드 리뷰)
기술 스택
- Backend: PHP, Java(Spring Boot, JPA), Python
- Infrastructure: Kubernetes, Jenkins, AWS
- Database: PostgreSQL, Elasticsearch, Redis, Kafka
주요 성과
- Public API Java 전환 POC에서 응답 시간 1/5으로 개선 (100ms→20ms)
- 어댑터 패턴 기반 리뷰 연동 구조 설계로 신규 서비스 추가 공수 70% 단축
- 실시간 할인가 연동으로 배치 처리(4시간 주기) 대비 평균 반영 시간 2초 수준으로 단축
와그트래블
테크팀 Backend Developer
주요 업무
- 액티비티 OTA 플랫폼의 백엔드 API 개발 및 AWS 인프라 관리
- PHP 모놀리식 → Java MSA 전환 프로젝트 (쿠폰 서비스)
- 해외 업체 SOAP API 연동 및 RESTful API 전환
- Serverless 아키텍처 도입 (AWS Lambda + SQS)
기술 스택
- Backend: PHP, Java(Spring Boot, JPA), Node.js(Typescript)
- Infrastructure: AWS (Lambda, SQS, CloudFront, CloudFormation), Jenkins
- Database: MySQL(MariaDB), Redis
주요 성과:
- 모놀리식 쿠폰 서비스를 MSA로 전환하여 서비스 간 결합도 감소
- Lambda@Edge 기반 이미지 리사이징으로 웹페이지 로딩 속도 50% 개선
- 서버리스 아키텍처 도입으로 단시간 60-80만 요청 처리 가능한 시스템 구축
- Composer 도입으로 Git 저장소 사용량 100MB 감소
💻 프로젝트
AI를 활용한 코드 리뷰
카페24
한 줄 요약
GitLab MR 생성/업데이트 시 Jenkins 파이프라인을 트리거하여 LLM 기반 1차 리뷰를 자동화하고, 리뷰어의 반복 작업과 컨텍스트 스위칭 비용을 줄였습니다.
배경 및 문제
팀원 10명이 주 평균 20건의 MR(Merge Request)을 생성하는데,
모든 팀원이 다같이 리뷰를 담당하다 보니 MR DIFF 크기에 따라 별도의 미팅까지 필요한 상황이었습니다.
특히 신입/주니어 개발자의 MR은 기본적인 코드 품질 이슈(네이밍, 주석 누락, 예외 처리 등)가 많아
시니어 개발자의 시간이 반복적인 지적에 소모되는 문제가 있었습니다.
기술적 접근:
ChatGPT와 Claude API를 활용하여 MR 생성 시 자동으로 1차 코드 리뷰를 수행하고,
기본적인 품질 이슈를 사전에 필터링하는 시스템을 구축했습니다.
핵심 의사결정 및 구현:
- GitLab Webhook 기반 이벤트 트리거
- MR 생성/업데이트 시 GitLab Webhook이 Jenkins 파이프라인의 Python 스크립트 호출
- Python 스크립트에서 파일 diff를 추출하여 AI API에 전송
- 멀티 AI 전략 (ChatGPT + Claude)
- 기본적으로 Claude를 활용하여 코드 리뷰를 진행
- 추가 리뷰가 필요한 경우 ChatGPT 모델을 호출하여 코드리뷰를 할 수 있도록 제공
- 모델이 신규 출시 되는 경우, 이에 맞추어 대응
- 프롬프트 엔지니어링
- 카페24 PHP 코딩 컨벤션을 프롬프트에 포함
- Few-shot Learning: 리뷰 예시 2개를 프롬프트에 포함하여 일관성 확보
- GitLab Comment 자동 생성
- MR과 연관된 Jira 및 Wiki 정보를 수집하여 해당 MR에 작업에 대한 요약을 작성
- AI 리뷰 결과를 GitLab MR Comment로 자동 등록
- 컨벤션/보안/테스트코드/문서화 등 각 항목별로 표준화 한 점수를 제공하고 사유를 같이 코멘트 하도록 함.
- 변경이 필요한 코드의 경우 인라인 코멘트로 정확한 위치 표시
- Gitlab Suggestion API를 사용
- False Positive 필터링
- 초기에는 AI가 불필요한 지적을 많이 해서 개발자들의 신뢰도 하락 및 피로도 누적
- 해결: 케이스를 수집하여 프롬프트에 "이런 경우는 지적하지 마세요" 예시로 추가
- 결과: False Positive 비율 40% → 10%로 감소
정량적 성과
- 시니어 개발자의 반복적 지적 50% 감소 (네이밍, 주석 등 기본 이슈)
- 주 평균 20건 MR에 자동 리뷰 적용 (처리 성공률 98%)
- 단순 오류(오탈자/호출 실수 등) 탐지 및 코멘트 자동화로 초기 품질 이슈의 누락을 최소화
- 요약본 제공으로 연관 지라 확인 및 산출물 점검 등 리뷰어들의 컨텍스트 스위칭 비용 90% 이상 감소(평균 5분 → 30초 이내)
- 팀 만족도 조사: 개발자 10명 중 8명이 "도움이 된다" 응답
한계 및 개선 방향:
- 한계
- AI는 비즈니스 맥락을 이해하지 못해, 도메인 로직 검증은 여전히 사람 필요
- 개선 방향
- 팀 고유의 코딩 스타일을 더 잘 반영하기 위하여 VectorDB를 활용하여 과거 리뷰 이력을 학습시키는 RAG(Retrieval-Augmented Generation)를 도입
- Claude와 Codex에서 제공하는 Github 플러그인 도입
배운 점
- 프롬프트 엔지니어링의 중요성
- 같은 모델이라도 프롬프트 설계에 따라 결과 품질이 천차만별
- 비용 최적화
- API 호출 전략(모델 선택, 토큰 수 제한)이 실무에서 매우 중요
- 이 경험을 통해 LLM을 실무에 적용하는 실용적 접근법을 학습
기술 스택
- Python
- GitLab Webhook
- Jenkins
- OpenAI API, Anthropic Claude API, Prompt Engineering
- VectorDB
실시간 할인가 연동 서비스 개발
카페24
배경 및 문제
메타와 유튜브 등 외부 채널에 상품 할인가를 제공하는 기존 시스템은 혜택의 시작/종료 시점에는 상품의 할인 가격이 변동 되는것을 감지할 수 없었습니다.
기술적 접근
혜택의 시작/종료 시점에 이벤트를 전파할 수 있었지만,
커머스 서비스로 모든 요청이 한꺼번에 몰릴 수 있기 때문에 이를 방지하고자 스케줄러와 이벤트 드리븐 아키텍처로
혜택의 시작/종료에 따라 혜택에 해당 하는 상품들의 할인가를 전달 해주는 시스템을 설계했습니다.
핵심 의사결정 및 구현
Kafka 기반 이벤트 스트림 구축
- 커머스 시스템에서 스케줄러에 혜택의 시작/종료시점을 등록
- 스케줄러에서 혜택의 시작/종료 시점 이벤트 발행
- 혜택의 시작/종료 시점에 변경된 혜택에 해당하는 상품들의 가격을 조회하여 전송
- 기존 PHP 애플리케이션 수정 없이 독립적으로 배포 가능
- At-least-once 전략으로 메시지 유실 방지 (중복 처리는 멱등성으로 해결)
정량적 성과
- 혜택 시작/종료에 따른 할인가 반영 시간 단축 (4시간 → 평균 2초)
- 이벤트 처리 성공률 99.7% (Kafka 메시지 유실 0건)
배운 점
- 이벤트 드리븐 아키텍처의 핵심은 "느슨한 결합": 기존 시스템(PHP) 수정 없이 새 기능(Python Consumer) 추가 가능
- Kafka의 At-least-once 전략에서는 Consumer의 멱등성 설계가 필수
- 이 경험을 통해 MSA 환경에서의 서비스 간 통신 패턴을 실무에 적용
기술 스택
- Python
- Kafka (Producer/Consumer)
향후 개선 방향
현재는 Python으로 구현했으나, Spring Cloud Stream을 활용하면
Java 생태계 내에서 더 일관된 구조로 개선 가능할 것으로 판단
Public API, PHP to Java 전환 프로젝트
카페24
배경 및 문제
카페24 Public API는 일 평균 1억 건이상의 요청을 처리하는 핵심 서비스입니다.
PHP 기반 모놀리식 구조에서 두 가지 병목이 발생했습니다.
- 멀티 테넌트 환경(수백만 쇼핑몰)에서 DB 커넥션풀 한계
- 읽기/쓰기가 혼재된 구조로 인한 성능 저하 (평균 응답 시간 300ms)
기술적 접근
CQRS 패턴을 적용하여 읽기/쓰기를 분리하고,
Spring Boot 기반 MSA로 전환하는 POC를 설계했습니다.
핵심 의사결정 및 구현
- 동적 DB 커넥션 관리
- 문제: 수백만 쇼핑몰이 각자의 DB를 사용하는 멀티 테넌트 환경에서, 고정 커넥션풀로는 동시 접속 처리 불가
- 해결: AbstractRoutingDataSource를 상속받아 요청별로 동적 DataSource 라우팅
- 구현: ThreadLocal 기반 Context Holder로 쇼핑몰 ID를 관리하고, HikariCP 커넥션풀을 동적 생성/캐싱하는 로직 설계
- 트레이드오프: 메모리 사용량 증가 vs 동시 처리 성능 확보 → 성능 우선 선택
- CQRS 패턴 적용
- Command(쓰기): JPA(Hibernate)로 도메인 중심 설계
- Query(읽기): Querydsl로 복잡한 조회 쿼리 최적화
- 읽기 전용 Replica DB 분리로 Master DB 부하 50% 감소
- MSA 분리 전략
- 쇼핑몰 정보 조회 서비스를 별도 MSA로 분리
- 이유: Public API의 모든 요청에서 쇼핑몰 메타데이터 조회가 필요 하였고, 이 부분만 분리해도 전체 시스템 결합도를 크게 낮출 수 있었음
- Spring Cloud Netflix Eureka로 서비스 디스커버리 구성
- Feign Client로 서비스 간 통신 구현
- 공통 모듈 관리
- Private GitLab Repository에 공통 라이브러리(인증, 로깅, 예외처리)를 jar로 패키징
- Gradle을 통해 버전 관리 및 의존성 배포 자동화
- 각 MSA에서 공통 모듈을 dependency로 참조하여 코드 중복 제거
정량적 성과
- POC 환경에서 평균 응답 시간 1/5으로 개선 (100ms → 20ms)
- JPA N+1 문제 해결 (Fetch Join, EntityGraph 적용)로 쿼리 수 90% 감소
- Kubernetes 기반 자동 스케일링으로 트래픽 급증 시 무중단 대응 구조 확립
배운 점
- PHP의 동적 타입 시스템에서 Java의 정적 타입 시스템으로 전환하며, 컴파일 타임 오류 검증의 장점을 체감
- JPA의 지연 로딩과 영속성 컨텍스트 개념이 PHP ORM(Eloquent)과 근본적으로 다르며, 트랜잭션 경계 설정이 성능에 미치는 영향이 크다는 것을 학습
- 대규모 레거시 전환 시 점진적 마이그레이션(Strangler Fig Pattern)이 빅뱅 방식보다 안전하다는 것을 경험
기술 스택
- Java 17
- Spring Boot 2.7.4
- Spring Cloud (Eureka, Feign)
- JPA(Hibernate), Querydsl, HikariCP
- Kubernetes
- GitLab CI/CD
프로젝트 종료
회사 전략 변경으로 전면 전환은 보류되었으나,
아키텍처 설계 및 기술 검증은 완료하여 향후 전환 시 참고 자료로 활용 가능
외부 리뷰 솔루션 연동 - 확장 가능한 어댑터 아키텍처 설계
카페24
배경 및 문제
카페24 쇼핑몰은 자체 리뷰 시스템만 지원했으나,
외부 채널의 리뷰를 통합 관리하고 싶다는 요구가 증가했습니다.
문제는 각 플랫폼마다 API 스펙, 인증 방식, 데이터 포맷이 모두 다를 수 있다는 점 이었습니다.
기술적 접근
어댑터 패턴(Adapter Pattern)을 적용하여 외부 리뷰 시스템과의 인터페이스를 추상화하고,
신규 플랫폼 추가 시 기존 코드 수정 없이 확장 가능한 구조를 설계했습니다.
핵심 설계
- ReviewAdapter 인터페이스로 인증/페이징/포맷 차이를 추상화하여 “플랫폼 추가 = 어댑터 추가”로 확장
- Factory로 런타임에 어댑터를 선택하고, 공통 파이프라인에서 정규화/검증/저장 처리
- 외부 API 스펙 변경에 대비해 Mock 기반 테스트와 회귀 시나리오를 표준화
정량적 성과
- 신규 리뷰 플랫폼 추가 시 개발 공수 70% 단축 (기존 2주 → 3일)
- 쇼핑몰 운영자가 개발자 개입 없이 리뷰 연동 설정 가능 (셀프 서비스화)
- 운영 기간 중 주요 연동 장애 0건
배운 점
- 인터페이스 추상화의 중요성: 변경에 닫혀있고 확장에 열려있는 설계(OCP)를 실무에 적용
- TDD의 실용성: 외부 API 의존성이 큰 프로젝트에서 테스트 코드가 개발 속도를 오히려 높인다는 것을 경험
- 이 경험은 이후 Java/Spring Boot 프로젝트에서 인터페이스 설계와 유닛 테스트 작성에 직접 활용됨
기술 스택
- PHP
On-The-Fly 동적 이미지 리사이징 구현
와그트래블
- 담당 업무 및 작업 내용
- Serverless Framework를 이용해 자바스크립트로 동적 이미지 리사이징을 구현
- AWS Lambda와 CloudFront의 Lambda@Edge 서비스를 활용
- AWS CloudFormation을 활용하여 배포
- 성과
- 이미지 업로드 시간 단축 효과로 파일 업로드에 대한 API 응답시간 50% 개선
- 이미지 파일크기를 최대 1/3까지 줄일 수 있어 웹페이지 로딩 속도 향상
- 사용 기술
- Javascript(Serverless Framework)
- AWS
- Lambda
- CloudFront(Lambda@Edge)
- CloudFormation
레거시 프로젝트 개선(패키지매니저 도입)
와그트래블
- 담당 업무 및 작업 내용
- PHP 패키지 매니저인 Composer를 도입
- Guzzle Http Client를 이용해 HTTP 통신을 하도록 변경
- 외부 업체에 REST API를 제공 하기 위해 Slim Framework 사용
- 사내 라이브러리에 네임스페이스를 도입하여 파일 충돌을 피할 수 있도록 함.
- 성과
- 패키지 매니저 도입으로 Git 저장소 사용량 감소(약 100MB)
- File Path 기반의 URI에서 기존 서비스에 영향을 미치지 않으며 REST 방식으로 제공
- Legacy PHP 에서 Java MSA로 전환하는 과정에서 동일하게 ORM을 사용하여 마이그레이션 비용 감소
- 사용 기술
- PHP
- Slim Framework
서버리스 아키텍쳐 도입
와그트래블
- 담당 업무 및 작업 내용
- 연동 시스템을 서버리스 아키텍쳐로 구현
- Serverless Framework를 사용하여 Node.js(Typescript)로 구현
- AWS Lambda와 SQS를 사용하여 서비스 제공
- AWS CloudFormation을 활용하여 배포
- 성과
- 단시간내 6-80만회 이상의 요청이 가능한 서비스 완성
- 모니터링과 오토스케일링을 AWS 서비스에서 처리 해주기 때문에 관리포인트가 적은 이점을 얻음
- 사용 기술
- Typescript
- Serverless Framework
- AWS
- Lambda
- SQS
- Cloud Formation