김승원

Backend Engineer

실패 이후에도 데이터가 맞는 애플리케이션을 만듭니다. 결제와 개인정보 처리와 같이 실패 비용이 큰 도메인에서 동시 실행·중간 실패·재시도·소급 처리 이후에도 지켜야 할 불변식을 검증해왔습니다. 산업기능요원 현역 신규 편입을 희망하며, 정보처리기능사를 보유하고 있습니다.

Profile Image

Career

ktown4u logo

ktown4u

Backend Engineer

2025년 8월 Java/Spring 백엔드 개발자로 합류해 설정 이관과 환율 데이터 전환 기반을 마련했고, 이후 커머스 주문·결제, 회원, 바우처와 개인정보 라이프사이클 관련 기능을 개발했습니다. 스키마와 SQL부터 API, 이벤트 처리, 배치, 운영 화면까지 맡았습니다.

개발 전 바뀌지 말아야 할 규칙과 운영 중 달라질 정책을 나눕니다. 규칙은 트랜잭션·원장·행 잠금으로 보호하고, 정책은 별도 객체와 설정으로 분리합니다.

동시 실행·중간 실패·재시도·소급 처리 뒤 실제 MySQL에 남은 결과를 확인합니다.

바우처 원장 신규 개발과 기존 예치금 결제 연계

바우처의 발급·사용·복원·회수를 신규 거래로 누적하는 원장을 설계했습니다. 원거래를 수정하지 않고 참조 원장 ID로 사용과 복원을 연결했습니다.

  • 주문·바우처 사용 원장·결제 이력을 한 트랜잭션에 묶고, 행 잠금으로 동시 사용과 복원 합계 초과를 제어했습니다. 중간 저장 실패와 복원 요청 경합 뒤의 실제 DB 결과를 검증했습니다.
  • 기존 예치금 원장에는 주문 사용과 결제 이력, 주문 취소 복구, PG·예치금 혼합 환불 배분을 연결했습니다. 주문·환불 식별자에서 결정적 복구 ID를 만들어 같은 요청의 재시도를 한 거래로 처리했습니다.

탈퇴 회원 개인정보 보존과 소급 처리

보존 대상 데이터를 S3에 동기 업로드한 뒤에만 개인정보를 익명화했습니다. 업로드가 실패하면 익명화하지 않는 경로도 테스트했습니다.

  • 소급 데이터는 실제 탈퇴 시각으로 보존 만료일과 저장 경로를 계산했습니다.
  • 실행 중 발견한 기간 계산 오류는 작업을 중단한 뒤 정확한 만료 시각 비교와 경계 회귀 테스트로 수정하고 재개했습니다.

주기적 수신동의 고지 파이프라인

고객과 2년 주기를 업무 키로 삼아 대상 이벤트의 중복 생성을 막고, 발송 직전에 현재 회원 상태·동의·수신자를 다시 조회했습니다.

  • 성공·실패·제외 상태를 구분하고 실패 기록은 별도 트랜잭션으로 보존했습니다.
  • 대량 고지용 SES 자격증명을 기존 거래 메일과 분리했습니다.

최악 실행계획을 겨냥한 쿼리 변경

반복 탐색이 폭증할 수 있는 상관 서브쿼리를 제외 집합 CTE와 anti-join으로 바꿨습니다. 여러 상점의 결과 동치와 EXPLAIN ANALYZE에서 제외 집합이 한 번만 계산되는 것을 확인했습니다.

레거시 회원 관리 기능 이관

C# 운영자 도구의 회원 목록·상세·수정·생성·고객 동의를 Java/Spring·GraphQL 시스템으로 기능별 이관했습니다. 개인정보 조회 범위와 수정 권한, 계정 생성과 동의 후 활성화를 분리했습니다.

세트 상품 주문 금액 정합성

주문서와 주문 생성에서 달랐던 환산·반올림 순서를 맞추고, 두 경로의 세트 상품 가격이 일치하는 회귀 테스트를 추가했습니다.

설정·환율 데이터 전환 기반

한 백엔드 서비스의 Feature Flag 경로를 AWS AppConfig에서 Unleash로 옮기고, 실행 프로파일과 타임아웃 설정을 정리했습니다. 신규 환율 이력 적재 경로와 기존 API 결과 비교 로그를 추가해 단계적으로 전환할 수 있는 기반을 마련했습니다.

사용자 기기·알림 설정 API

사용자 기기 등록·해제·알림 설정 API를 만들고 DB 저장과 upsert로 재등록과 설정 변경을 처리했습니다.

2025.08 ~ 현재

Tech Stack

Core Backend

JavaSpring BootSpring GraphQLREST

Data & Consistency

MySQLMyBatisJDBCRedis

Event & Cloud

KafkaAWS S3SESIAMKMS

Test & Delivery

JUnitMockitoMySQL Integration TestUnleash

Additional Experience

KotlinSpring WebFluxMongoDBReactTypeScript

Open Source Contributions

#3423

고급 사용법과 시작 안내 문서의 오탈자와 문장을 교정

2025.09.13

#3266

세 유틸리티 클래스의 생성자를 private으로 제한해 인스턴스화를 방지

2025.08.08

#3264

정규식 패턴을 enum으로 묶어 타입 안전성과 가독성을 개선

2025.05.28

#3262

중간 List 생성을 제거해 불필요한 메모리 할당을 줄임

2025.04.23

#3061

Reactive mget의 수동 반복문을 Stream과 Reactor 체인으로 단순화

2025.01.06

#6073

34개 파일의 instanceof 사용을 패턴 매칭 문법으로 통일

2024.11.25

#49

라이트 모드에서 보이지 않던 팔로우 텍스트 스타일 수정

2024.08.11

Side Projects

Awards & Activities

해커톤 수상 · 과학기술정보통신부 장관상

기업 제시 과제의 서비스 백엔드 개발 담당

2024.10

신입생 전공 멘토링

약 23시간, 신입생 약 64명 대상

2025.03

Spring WebFlux 스터디 운영

주 1회, 5명 규모

2024.08 ~ 2024.11

Education

대덕소프트웨어마이스터고등학교

소프트웨어개발과

2023.03 ~ 2026.02

Certifications

TOPCIT

수준 3 · 595점

2024

정보처리기능사

한국산업인력공단

2023.09

No Silver Bullet in Software Engineering.