About Me
-
안녕하세요! Java(Kotlin) & Spring 기반의 5년 차 서버 백엔드 개발자 최준성입니다.
-
3가지 전공을 공부하다 개발의 몰입과 문제를 해결해 나가는 성취감에 빠져 개발자로 일하고 있습니다.
-
테스트 코드 작성을 기본으로 여기고, 변경에 강한 읽기 쉬운 코드를 지향합니다.
-
반복적인 작업과 불편한 과정을 자동화해 개발 효율을 높이는 일을 좋아합니다.
-
기술 선택에서는 최신 트렌드보다 현재 상황과 시스템 구조에 맞는 이유를 먼저 고민합니다.
Experience
네이버는 검색, 커머스, 콘텐츠, 핀테크 등 다양한 서비스를 기반으로 국내 대표 인터넷 플랫폼을 운영하는 기업이며, 네이버 쇼핑은 수많은 판매자와 사용자를 연결하는 국내 최대 규모의 이커머스 서비스입니다.
쇼핑버티컬플랫폼 파트에서 네이버 쇼핑의 상품 랭킹 도메인을 담당하며, 랭킹 산출·서빙에 필요한 백엔드 시스템을 개발·운영하고 있습니다.
실시간 랭킹 시스템 고도화
2025.05 ~ 현재
버티컬·프로모션별 실시간 랭킹 요구사항을 수용하고, 랭킹 생성·색인·서빙 구조의 확장성과 안정성을 높이기 위한 시스템 고도화 프로젝트입니다.
기존 실시간 랭킹 시스템은 단일 스키마를 전제로 설계되어 있었고, 성·연령 15슬롯과 랭킹 지표 조합이 다수의 score 필드로 분산되는 구조였습니다. 새로운 지표나 기간 버킷이 필요할 때마다 스키마와 연관 코드를 수정해야 했고, 색인 시 도메인 정보와 기간별 metric을 함께 조회해 변경되지 않은 데이터까지 불필요하게 조회되는 문제가 있었습니다. 또한 1h·1d·7d·30d 등 기간 지표 확장이 요구되면서 기존 Redis/Vitess 저장 방식으로는 저장 대상 데이터가 증가하고, 색인 시 조회·조립해야 할 metric도 함께 늘어나는 문제가 있었습니다. 다양한 버티컬·프로모션 랭킹 요구사항을 수용할 수 있는 확장 가능한 색인 구조가 필요했습니다.
- 랭킹 지표 표준화 및 vector 색인 전환
- 성·연령 축을 개별 필드가 아닌 vector dimension으로 흡수하여, 7일 기준 3개 metric의 45개 scalar score 필드를 3개 vector 필드로 압축
- 랭킹에 활용 가능한 지표를 표준화해 unique view / page view를 분리하고, 실시간·1h·1d·7d·30d 등 기간 확장이 발생해도 같은 vector 패턴으로 흡수할 수 있도록 설계
- metric 저장 방식 및 색인 타이밍 재설계
- 일별 스냅샷 metric을 CDP stream 주입 방식으로 설계하여, Redis/Vitess 누적 저장 방식 대비 저장 부담을 view 기준 약 90% 축소 (5.16억 건 → 4,830만 건)
- 랭킹 문서를 도메인 정보, 실시간 metric, 일별 metric 변경 시점별로 부분 업데이트하도록 재설계하고, 각 시점에 필요한 데이터만 조회해 색인 비용 절감
- 신규 랭킹 스키마 확장을 위한 색인 파이프라인 공통화
- 랭킹 스키마별로 달라지는 색인 메시지 생성 책임을 전략 패턴 기반 factory로 분리하여, 공통 색인 로직과 스키마별 구현체의 책임을 분리
- 신규 스키마 추가 시 공통 색인 로직 수정 없이 스키마별 factory / consumer 추가만으로 대응할 수 있도록 설계
- 색인 메시지 생성 stream은 공통화하되, 실제 색인은 스키마별 Kafka 토픽과 consumer로 분리하여 특정 스키마의 처리 지연이 다른 랭킹 색인으로 전파되지 않도록 격리
- 배치·실시간 색인 자원을 분리하여, 대용량 일별 스냅샷 처리가 실시간 랭킹 색인 지연으로 전파되지 않도록 격리
- 랭킹 수식 품질 개선
- 1h metric 랭킹에서 정각 score 급변과 미갱신 상품의 과거 score 유지 문제를 해결하기 위해, 미갱신 상품 score 보정과 시간 경과 비율 기반 산식을 적용
- 인기순 랭킹에서 지표 갱신 시점 차이로 발생하던 전일 데이터 누락, score 왜곡, 지표 기준일 불일치를 개선하기 위해, 미갱신 상품 및 기간 지표 보정 로직을 적용
- 사업 요구사항과 운영 모니터링 지표 기반 랭킹 시뮬레이션으로 노출 품질과 순위 변동성을 검증하며 수식 지속 개선
- 랭킹 운영 모니터링 및 알림 체계 구축
- 랭킹 생성 실패, 오래된 랭킹 스냅샷 서빙 등 운영 리스크 케이스를 분류하고, 랭킹 생성 담당자와 개발팀 공용 알림 채널에 메신저 알림을 발송하는 모니터링 체계 구축
DB 접근 기술 및 통신 프로토콜 고도화
2025.11 ~ 2025.12
대규모 트래픽의 Vitess 환경에 맞춘 DB 접근 기술 성능 최적화와 내부 통신 프로토콜 유지보수성 개선을 목표로 한 프로젝트입니다.
MSA 구조에서 각 모듈은 직접 DB에 접근하지 않고, DB 접근 모듈 클라이언트를 통해 Vitess 분산 DB와 Redis 캐시에 대한 저장·조회를 처리하는 구조였습니다. DB 접근 모듈의 쿼리는 샤드키 기반 단순 조회·저장 중심이었지만, 기존 JPA 저장 구현은 기존 row를 선조회한 뒤 save/update를 분기하고 명시적 트랜잭션을 사용해 단순 저장 요청에도 추가 조회와 ORM 처리 비용이 발생했습니다. 특히 Vitess 환경에서는 명시적 트랜잭션이 vtgate request와 transaction pool 사용량을 키울 수 있어, 운영 중 pool 소진 이슈와 유사 장애 사례를 계기로 DB 접근 계층을 단순 쿼리 특성에 맞게 재설계할 필요가 있었습니다.
통신 프로토콜 측면에서는 기존 내부 서버 간 통신이 Thrift 기반으로 구현되어 있었고, 표준 Thrift 통신 위에 connection pool, 요청 처리 방식, 오류 처리 정책 등 커스텀 통신 구조가 누적되어 있었습니다. 하지만 관련 문서가 부족해 기능 변경과 장애 분석 비용이 컸고, 고부하 테스트에서 기존 통신 구조의 확장성 한계가 확인되어 개선이 필요했습니다.
- 환경에 맞는 DB 접근 기술 재선정
- 운영 호출 비중이 높은 시나리오를 기준으로 JPA, JDBC, MyBatis, R2DBC와 Virtual Thread 조합별 성능 검증
- JDBC(+Virtual Thread) 조합으로 기존 JPA 대비 조회 TPS 67.5%, 생성 TPS 116% 향상
- Vitess 리소스 절감을 위한 트랜잭션·드라이버 튜닝
- 단순 저장 경로에서 불필요한 명시적 트랜잭션을 제거해 vtgate request를 1/3 수준으로 축소하고, 불필요한 transaction pool 점유를 완화
- JDBC driver의 session state 확인 쿼리를 옵션 튜닝으로 제거해, vtgate request 약 45% 감소 및 vtgate CPU 사용률 47% → 32% 개선
- 내부 통신 프로토콜 전환
- 기존 Thrift 기반 커스텀 통신 계층을 제거하고 gRPC 기반 표준 통신 구조로 전환하여 TPS 약 18% 향상
- 전환 전·후 응답 결과를 비교하는 검증 모듈로 안정성을 확보하며, 장애 없이 프로젝트 전체를 점진적으로 전환
A/B 테스트 기반 지표 분석 고도화
2025.09 ~ 2025.10
신규 기능 및 알고리즘 변경 효과를 공정하게 검증하기 위한 A/B 테스트 인프라 구축 프로젝트입니다.
쇼핑 도메인은 프로모션, 시즌성, 상품 구성 변화 등 여러 요인이 동시에 지표에 영향을 주기 때문에 배포 전후 단순 비교만으로는 기능·알고리즘 변경 효과를 공정하게 판단하기 어려웠습니다. 이에 따라 동일 시점의 실험군·대조군 비교를 통해 가설 검증과 후속 개선 방향을 도출할 수 있는 지표 분석 체계가 필요했습니다.
- A/B 테스트 인프라 구축
- GrowthBook을 활용해 A/B 테스트 기반 지표 분석 체계를 도입
- 특정 벤더(GrowthBook) 의존성이 서비스 전반에 확산되지 않도록 GrowthBook 라이브러리를 인터페이스 기반 adapter로 추상화하여, A/B 테스트 툴 전환 시 구현체 교체만으로 대응 가능한 구조 설계
- GrowthBook 장애 발생 시에도 사용처로 장애가 전파되지 않도록 방어 로직을 적용하고, A/B 테스트 판정 경로를 단일 Pod 기준 13,000 TPS 수준으로 성능 검증
- A/B 테스트 결과 데이터 수집 파이프라인 개발
- 실험 결과를 지표 분석에 활용할 수 있도록 A/B 테스트 결과 데이터 수집 파이프라인 개발
- 구축한 A/B 테스트 체계를 여러 기능의 실험 검증에 활용하고, 알림 A/B 테스트에서 읽음률을 6% → 8%로 개선
- 실험 기반 의사결정 문화 확산
- A/B 테스트 도입기를 개발 조직과 기획 조직에 공유하여, 신규 기능 기획 단계에서 실험 설계가 자연스럽게 포함될 수 있는 기반 마련
- 타 개발 조직의 사용 요청에 따라 GrowthBook 인프라를 공유하여 현재 함께 사용 중
실사용 데이터 기반 E2E 검증기
2024.11 ~ 2024.12
운영 서비스와 독립된 환경에서 실사용 데이터 흐름을 샘플링해, 서비스 스펙 준수 여부를 상시 검증하는 E2E 테스트 자동화 시스템 구축 프로젝트입니다.
MSA 구조에서 기능별 모듈이 Kafka 기반 stream으로 연결되어, 데이터가 여러 단계를 거쳐 최종 결과로 생성되는 구조였습니다. 이로 인해 개별 모듈의 단위 테스트나 개발자 수동 확인만으로는 전체 파이프라인을 거쳐 생성되는 최종 결과의 누락이나 스펙 위반을 검증하기 어려웠고, 운영 서비스와 분리된 독립 E2E 검증 체계가 필요했습니다.
- 실사용 데이터 기반 E2E 검증 자동화
- 서비스가 소비하는 동일 Kafka 토픽의 실사용 데이터를 샘플링하고, 운영 서비스와 분리된 환경에서 최종 결과가 스펙을 만족하는지 자동 검증
- 랭킹 시스템 검증 적용 및 팀 표준화
- 랭킹 시스템을 첫 적용 대상으로 선정하여 기존 시스템의 11건의 오류를 탐지 및 수정
- 검증 효과를 입증하며 팀의 표준 E2E 실시간 테스트 검증기로 정착했고, 2025년도 장애 0건 달성에 기여
팀 운영 자동화 및 개발 생산성 도구
2026.03 ~ 현재
팀의 반복적인 배포·보고·운영 확인 업무를 자동화한 내부 도구 프로젝트입니다.
반복적으로 불편했던 업무를 자동화하여 팀의 개발 효율을 높이고자 개인 주도로 시작했으며, 배포 준비와 주간보고 작성 등 실제 팀 업무 흐름에 적용한 프로젝트입니다.
- 배포 준비 자동화
- 배포 시 GitHub, Jira, Wiki, 배포 시스템 등 여러 내부 시스템을 오가며 수행하던 작업을 대시보드 단일 화면에서 처리할 수 있도록 배포 워크플로우 통합
- 주간보고 작성 자동화
- 매주 반복되던 주간보고 작성을 줄이기 위해, 개인별 Jira 작업 이력 수집부터 이슈 상태·목표 종료일 수정, Wiki 주간보고 발행까지 하나의 대시보드에서 처리할 수 있도록 통합
- stream topology 대시보드 구성
- Kafka 기반으로 연결된 수백 개 stream의 end-to-end 데이터 흐름을 추적할 수 있도록 stream topology 대시보드 구성
네이버웹툰은 글로벌 1위 웹툰 및 웹소설 플랫폼을 서비스하는 회사로, 전 세계 사용자들에게 다양한 웹툰과 웹소설 콘텐츠를 제공하며, 이를 기반으로 영상화, 게임화 등 다양한 IP 비즈니스도 수행하고 있습니다.
웹툰의 원고를 저장하고 글로벌 서비스를 위한 번역에 활용되는 콘텐츠 협업 도구, 작가 계약 관리 시스템, DRM 시스템을 개발 및 유지보수했습니다.
작가 계약 관리 시스템
2023.12 ~ 2024.10
Ironclad로 체결되는 작가 계약의 정산을 자동화하고, 최종적으로 계약 관련 프로세스의 내재화를 목표로 한 프로젝트입니다.
- Hexagonal 및 Event 기반 아키텍처 설계와 전체 프로젝트 환경 구축
- 계약 매핑, 누적 도메인 설계 & 개발
- 계약서와 작가, 파트너, 작품 그룹을 매핑하는 도메인 설계
- 작품 그룹을 기준으로 매핑된 다양한 계약서 데이터를 누적하는 summary 도메인 설계
- 정산 도메인 설계 & 정산 자동화를 위한 정산 플랫폼 연동 파이프라인 구축
- 다양한 계약서 매핑으로 누적된 계약 데이터를 기반으로 한 정산 도메인 설계
- 정산 도메인과 정산 플랫폼 연동을 위한 멱등 처리 기반 데이터 정합성 보장 파이프라인 구축
- 항상 최신 데이터를 처리하기 위한 zero-payload 방식의 메시지 설계
- 동일한 정산 아이템의 생성 및 수정 건이 동일 파티션에서 순차적으로 처리되도록 하는 메시지 키 구성
- 순서를 고려한 멱등성 카프카 프로듀서 및 멱등성 있는 컨슈머 로직으로 중복·재시도 상황의 정합성 보장
- 배치를 사용한 예상치 못한 예외 상황에 대한 재시도 로직 구현
- 원천 계약서 관리 및 보안
- 원본 계약서 암호화 및 복호화 기능 개발
- 계약서 업로드 및 다운로드 기능 개발
작가 Connect 플랫폼 개편
2023.06 ~ 2023.12
기존의 웹툰 관리 시스템의 운영 효율을 극대화하기 위해 작가 Connect라는 이름으로 새롭게 개편하는 프로젝트입니다.
작가 Connect는 웹툰의 원고를 저장하고 이를 기반으로 계약, 고료, 번역 등의 다양한 운영 도구를 제공합니다.
- 기존 Java/Spring MVC 기반의 기술 스택에서 Kotlin/Armeria 비동기 기반의 gRPC, GraphQL 기술 스택으로 전환
- Armeria를 활용한 gRPC-kotlin 서버 구축
- Armeria/GraphQL 운영 중 Spring 생태계 통합 부재 및 Resolver·DataLoader 직접 조립에 따른 보일러플레이트 누적 한계를 경험하고, Spring GraphQL이 어노테이션 기반 매핑과 표준 도구로 이를 해소함을 검증해 조직 내 발표·설득을 거쳐 Spring - GraphQL 서버로 전환
- CONNECT 플랫폼의 자체 OAuth2 서버 설계 및 구축
- ITGC(IT 감사)를 위한 배치매니저(ezJobs) 도입 설계 및 구축
- 개인정보 파기 관련 배치 개발
- 팀의 개발 효율성 향상을 위한 GraphQL 응답 JSON 기반 REST Docs 테스트 코드 자동 생성기 개발
- 메일 발송 공통 모듈 개발
- 기존 서비스에서 제공 중인 기능 이관
- 언어별/작품별 즐겨찾기
- 검수를 위한 타 서비스 작품, 회차 연동
Toon-Keeper (DRM 시스템)
2022.12 ~ 2023.06
Toon-Keeper는 콘텐츠(전자책, 이미지 등)의 암복호화 기능을 제공하는 프로젝트입니다.
- Device별 인증서 발급 로직 및 사전 발급 배치 개발
- 발급 로직 개선 및 캐싱으로 인증서 발급 성능 40배 개선
- 멀티스레드 방식을 사용해 인증서 발급 배치 성능 3배 개선
- Alibaba Cloud K8s 배포 스크립트 개발
- Canary & Blue-Green 대화형 배포 스크립트 개발
- Server-to-Server 인증을 위한 OAuth2.0 개발
- 콘텐츠 암/복호화에 사용되는 Key Management Service 개발
- 콘텐츠 암호화 기능을 제공하는 Content Packager 개발
OpenSource
Spring 버그 제보
- Coroutine 환경에서 AOP와 @Transactional을 함께 적용할 때 발생하는 AOP가 무시되는 버그 리포팅
Skill
Backend
- Kotlin, Java
- Spring Boot, Spring Batch, Spring Security
- Kafka, MySQL, Redis
- gRPC
Education
세종대학교
2019.02 ~ 2023.02
- 컴퓨터공학과
- 과학기술정보통신부 국가이공계장학생 선발
- 수석 장학생 (GPA 4.3 / 4.5)
정보처리기사
2022.06
- 한국산업인력공단
- 12기 수료