이커머스 플랫폼 백엔드

이커머스 도메인에서 5년을 보낸 백엔드 개발자입니다. 지금은 통합판매 플랫폼 비플로우(B-Flow)를 개발하고 있습니다.

코드를 작성하는 시간보다 분석하고 검증하는 시간이 더 깁니다.

로직을 바꾸기 전에 그 값이 어디서 와서 무엇을 의미하는지 데이터로 먼저 추적하고, 바꾼 뒤에는 실데이터 대조로 확인합니다.

SETTLEMENT 주문·상품 단위 정산 · 레거시·V2 정산 엔진이 같은 지급액을 내도록 정합성 유지
PRICING 프로모션 도메인 설계·개발 · 마켓 가격 자동 반영 · 가격 손실 감사 자동화
MIGRATION 상품·주문·클레임·출고·정산·CS — PHP 레거시 → Kotlin V2 무중단 이전
MARKETS 국내·글로벌 마켓 연동 (20+ 채널) · 아이허브 · 애경 등 대형 입점사 맞춤 개발
BILLING 구독 플랜 v3 개편 — PG 정기결제·후불 과금 · 플랜↔수수료 연계
STACK Kotlin · Spring Boot · PHP(Laravel) · MySQL · AWS (+ Node·TypeScript·Python — MSA 서비스 유지보수)

EXPERIENCE · 3 COMPANIES · 2021 —

경력 사항 총 경력 5년+

주식회사 브리치 (Brich) · 백엔드 엔지니어

2025.06 ~ 재직 중

멀티채널 커머스 통합 SaaS B-Flow — 20개+ 국내외 오픈마켓의 상품·주문·클레임·정산을 단일 플랫폼으로 통합.
운영 규모는 연동상품 약 2,160만 건 · 누적 주문 약 700만 건 · 입점 셀러 약 9,300곳입니다. 여기서 PHP 레거시와 Kotlin 신규 시스템(V2)이 같은 DB를 공유하며 점진 이전 중이고, 저는 두 시스템이 같은 값을 내야 하는 정산·가격 영역을 양쪽에서 담당합니다.

마켓 이중 할인 가격 결함 규명 — 손실 차단 · 상시 감사 자동화

S일부 마켓에서 판매가 자리에 최종 할인가가 들어가, 마켓이 그 위에 또 할인을 얹고 있었습니다. 같은 방지 규칙이 마켓별 구현체에 복제돼 있다가 4개 마켓에서만 누락된 구조였습니다. 조용히 돈이 새는 문제라 아무도 눈치채지 못하고 있었습니다.

T어디서 얼마나 새고 있는지 확정하고, 재발을 막아야 했습니다.

영향 상품 90,696개 전수 조사 · 4개 마켓 이중 할인 차단 · 손익 감사 매일 자동 실행

A주요 작업:

  • 운영 DB 전수 조사로 영향 범위 산출 — 영향 상품 90,696개, 노출 기간 주문 1,086건 중 실제 노출 909건
  • 4개 마켓 송출 데이터에 방지 분기를 추가해 정상가 복원 배포
  • 전 마켓 전수 대조로 나머지 마켓의 정상 여부까지 확정해 영향 범위를 종결
  • 조사에서 그치지 않고 방법론을 재사용 가능한 도구로 만들어 매일 09시 자동 실행

R결과:

  • 조용히 새던 이중 할인 손실을 규명하고 전 마켓에서 차단 — 방치하면 계속 누적되는 문제였음
  • 부수 성과: 특정 마켓의 할인 정책에 상한이 존재한다는 사실을 처음 규명 — 상한 때문에 셀러에게 전달되지 않던 할인이 있음을 확인
  • 일회성 조사를 상시 감사 체계로 전환 — 장부상 손실처럼 보이던 건에서 허위(주문 매핑 결함·이중 차감 착시)를 걸러내고 진짜 손실만 분리하는 것까지 자동화

손실을 찾는 것보다, 손실처럼 보이는 것과 진짜 손실을 구분하는 것이 운영 판단의 질을 결정했습니다.

정산 엔진 정합성 — 어느 시스템에서 계산해도 같은 지급액 (2025.10 ~ 2026.07)

S정산은 (정상가 + 옵션가 − 판매자할인 − 프로모션할인) × 수량 × (1 − 수수료율)로 셀러 지급액을 확정합니다. 점진 이전 중이라 같은 계산식이 PHP와 Kotlin 두 곳에 존재했고, 두 구현이 서로 다른 값을 내고 있었습니다.

T두 언어의 계산 결과를 일치시키고, 다시는 갈라지지 않도록 검증 절차까지 만들어야 했습니다.

실데이터 458만 건으로 검증해 계산 결과 완전 일치 · 주문 생성 실패 위험 사전 차단

기술 스택: Kotlin PHP (Laravel) QueryDSL MySQL

A원인 규명과 조치: 원인은 상품 정산기준가와 옵션가를 각각 올림한 뒤 합산한 데 있었습니다. 원래 공식은 둘을 먼저 합친 가격에 수수료를 한 번만 적용하는 것이었고, 여기서 두 가지 증상이 나왔습니다.

  • 양수 옵션 → 올림 2회 + PHP 부동소수점 오차로 1원 차이
  • 음수 옵션 → 계산값이 음수인데 컬럼이 unsigned라 INSERT 실패 → 주문 생성 트랜잭션 전체 롤백
  • 공식 복귀 — 가격을 먼저 합산한 뒤 수수료를 1회만 적용하도록 양쪽 동시 수정
  • 정수 연산 통일 — 부동소수점 제거, 정수 나눗셈 헬퍼로 두 언어가 동일 연산 수행
  • 레이어별 정책 분리 (핵심 판단) — 운영자 입력 지점은 거부(422), 자동 인입 지점은 0 보정. 처음엔 런타임 예외를 던졌지만, V2의 주문 인입은 메시지 큐 컨슈머를 경유하므로 예외가 나면 컨슈머가 막혀 다른 주문까지 적체됩니다. 거부해도 되는 곳과 거부하면 안 되는 곳을 나눴습니다.
  • 공급가·정산기준가·수수료율을 상품 단위로 관리하도록 구조 재설계, 가격 변경 히스토리 관리

R결과:

  • 수정한 로직을 실데이터 458만 건으로, 레거시와 신규 시스템을 333만 건으로 비교해 계산 결과가 모두 일치함을 확인
  • 실데이터에 음수 옵션가가 3,156건 존재 — 언제든 주문 생성이 실패할 수 있던 상태를 사전에 차단
  • 이후 정산 변경 시 실데이터 대량 대조를 상시 절차로 정착 — 어느 시스템에서 처리해도 같은 지급액

관리형 프로모션 도메인 신규 구축 — 기간형(2.0) → 관리형(3.0) (2025.11 ~)

S본사가 브랜드/상품 단위로 할인을 등록하면 20여 개 마켓에 가격을 자동 송출하고 정산까지 일관 처리해야 했습니다. 기존에 없던 도메인이라 설계부터 시작했습니다.

T"주문이 들어온 시점에 이 상품 가격이 얼마였는가"를 언제든 재현할 수 있어야 했습니다. 프로모션 정의만 저장하는 방식으로는 중간에 정가가 바뀌면 당시 가격을 역산할 수 없습니다.

A설계 판단 3가지:

  • 스냅샷 단일 진실 공급원 — 상품 × 프로모션 조합마다 계산 결과(정상가·할인·최종가·정산기준가)를 확정 저장하고, 주문·정산·송출이 전부 이 한 곳만 읽게 함. 대가로 스냅샷이 약 190만 건 규모가 되어 상태 전이 처리량이 병목이 됨 — 알고 선택한 트레이드오프
  • 처리량 제한을 올릴 수 있었지만 올리지 않음 — 월초 자정에 대기 104만 건이 한 시점에 몰려 전량 반영에 약 17.5시간이 걸렸음. 먼저 측정해 보니 RDS는 프로비저닝 12,000 IOPS 중 1~3%만 사용, 쓰기 지연 1ms — 병목은 자원이 아니라 우리가 설정한 제한 자체였고, 올리면 즉시 빨라지는 상황. 그럼에도 큐를 전 도메인이 공유하므로 제한을 올리면 다른 도메인이 경합을 부담하게 됨. 대량 등록은 순차 적용을 감수하고, 즉시성이 필요한 건만 선별해서 올리는 쪽을 택함
  • 마켓 송출 형식 전환 — 최종가를 절대값으로 보내자 마켓에 따라 셀러 즉시할인이 꺼지거나, 정수 할인율로 재계산해 값이 어긋나거나, 우리 최종가에 할인을 또 얹는 문제(실측 6,710원 → 5,703원)가 발생. "정가 + 할인율 + 최종가" 동시 전송으로 바꾸고, 정률로 재계산하는 마켓은 정액 할인으로 전환해 마켓의 반올림 방식과 무관하게 최종가가 나오게 함

누적 535건 등록 · 송출 스냅샷 약 190만 건 · 한 시점에 몰린 104만 건 전이를 타 도메인 영향 없이 처리

기술 스택: Kotlin Spring Boot Kafka AWS SQS Quartz QueryDSL React PHP (Laravel) MySQL

1단계 — 기간형 프로모션(2.0) 신규 구축 (레거시, 2025.11 ~ 2026.04):

  • 기존 1.0은 마켓에 걸어둔 할인에 내부 정산을 맞추는 내부 관리 기능이라 마켓·내부 양쪽을 따로 수정해야 했음 → 프로모션 세팅에 따라 외부 마켓 가격을 직접 수정·송출해 이중 작업 제거. 엑셀 업로드/다운로드/템플릿, 스케줄러 기반 시작·종료, 기간 중복 체크, 상태 흐름(시작/중지/재시작/연장/종료) 구현
  • 마켓마다 다른 할인 규격(쿠팡·SSG·카카오스타일 최종가 1원 절사, 11번가 할인 타입, 지마켓·옥션 정액) 흡수. 등록 상품이 0건이면 전체 롤백, 상품 삭제 시 외부 채널 가격을 복구하는 동기화 Job으로 마켓과 내부 가격이 어긋나는 상황을 방지 (운영 약 9,200건 처리)

2단계 — 관리형(3.0)으로 확장 (V2 백엔드 단독 설계 + React FE): 2.0은 진행 중에는 상품 가격이 변동되면 안 돼 가격 수정이 막히는 제약이 있었음 → 재계산 통합 로직으로 상품가격·정산기준가·수수료를 상품 단위로 제어해 할인뿐 아니라 판매가 자체를 조정할 수 있게 확장

  • 스냅샷은 대기→진행→만료 상태 흐름과 브랜드 설정이 소속 상품 전체에 자동 반영되는 구조로 설계 (새 상품이 등록되면 자동으로 프로모션에 편입)
  • 상태 전이를 스케줄러 직접 처리에서 이벤트 발행·소비 분리로 재설계 (2026.06) — 이후 팀에서 진행한 Kafka → AWS SQS FIFO 전환 논의에 참여했고(스트림 처리·이벤트 재소비 없이 "순서 보장 작업 큐"로만 쓰고 있어 기능 손실 없이 비용 절감 가능), 전환 후 전이·편입 경로를 FIFO 그룹·중복 제거 창에 맞춰 재구현 — 월초 자정에 몰리는 대량 가격 송출을 속도 조절로 안정 처리
  • 프로모션 가격이 다른 가격 설정보다 우선 적용되어 마켓에 송출되는 규칙을 구현하고, 진행 중인 프로모션을 수정하면 바뀐 가격이 마켓에 자동으로 재송출되게 처리
  • 관리자용 정상가 일괄 수정 기능(엑셀 미리보기, 할인율 역산 근거 표시)과 React 관리자 화면(등록/조회/수정, 셀 단위 편집·엑셀 업로드·이력) 구현

R결과:

  • 6개 모듈 64개 소스 파일 규모의 신규 도메인을 설계·구현 — 누적 535건 프로모션 등록, 약 190만 건 송출 스냅샷 처리
  • 한 시점에 몰린 104만 건 전이를 다른 도메인 영향 없이 처리
  • 백엔드(레거시·V2)와 프론트 세 곳에 흩어져 있던 가격 계산식을 어디서 계산해도 같은 값이 나오게 맞춤 — MD 1명이 여러 브랜드의 가격·할인을 대량 관리

레거시(PHP) → V2(Kotlin) 마이그레이션 — 무중단 점진 이전 (2026.01 ~ 2026.07)

SLaravel 모놀리식에서 Kotlin 멀티모듈로 이전 중이며, 두 시스템이 같은 DB를 공유합니다. 운영을 멈출 수 없습니다.

T운영을 멈추지 않고 도메인 단위로 이전하되, 문제가 생겨도 영향 범위가 좁게 갇히도록 해야 했습니다.

주문/클레임 수집 17종 · 상품 연동 8종 이전 · 무중단 운영 유지

기술 스택: Kotlin Spring Boot PHP

A주요 작업:

  • 주문·클레임 수집 17종, 상품 연동 8종 이전 — OrderAdapter / ApiDelegate 표준 패턴 정립, 마켓별 외부 API 호출은 선언적 HTTP 클라이언트(HTTP Interface)로 정리
  • 입점사 단위 라우팅으로 위험 격리(카나리) — 문제가 생겨도 영향 범위를 입점사 단위로 한정
  • 상품 연동 액션 세분화: 생성·업데이트·상태 변경으로만 나뉘어 있던 연동을 생성·상태·가격·재고 등 액션 단위로 분리 — 마켓과 B-Flow의 가격·판매상태 불일치를 줄임
  • 가장 어려웠던 건 어느 경로가 실제로 도는지 확정하는 일 — 주문 테이블의 calculation_version='v2'는 레거시 코드가 세팅하는 값이라 "신규 정산식으로 계산됨"이지 "신규 시스템이 생성함"이 아님. 이걸 모르고 V2만 고치면 대부분의 주문에 반영되지 않음

R결과:

  • 운영을 멈추지 않고 이전을 진행하며, 신규 개발의 중심을 레거시에서 V2로 전환

장애 대응 — 표면 증상이 아니라 근본 원인까지 (상시)

S20개+ 마켓은 API 규격·판매정책·클레임 체계가 수시로 변경 — 업무의 30%가량이 운영·버그 대응일 만큼 상시 운영이 중요한 환경입니다. 어느 날 클레임 1,147건이 큐에 적체됐고, 표면 증상은 "큐가 안 빠짐"이었습니다.

T표면 증상이 아니라 실제 원인을 찾아 재발까지 막아야 했습니다.

클레임 1,147건 적체 근본 원인 규명 · Quartz 롤링배포 충돌 · 빌드 캐시 직렬화 오류 · 20+ 마켓 무중단 운영

기술 스택: Kotlin PHP Kafka Quartz MySQL AWS ECS

A근본 원인 분석 사례:

  • 클레임 큐 적체: 실패한 메시지가 반복 재전달되며 뒤를 막고 있었음 — 이미 성공한 건이 5분 간격으로 106회 재처리된 로그가 결정적 증거. 유발 결함 2건까지 추적(복사 주문의 확정 시각 누락으로 인한 무한 재시도, 초 단위 없는 날짜 파싱 예외로 인한 수집 롤백). 처리 상태를 running으로 마킹한 뒤 복구 로직이 없어 하나가 갇히면 같은 채널 전체가 막히는 구조까지 규명
  • Quartz 롤링배포 충돌: 배포할 때마다 예약 작업 트리거가 오류 상태로 굳는 원인(isClustered=false + JDBC JobStore 공유 → ClassNotFound → 트리거 ERROR 영구 고착)을 찾아내고, 신·구 버전이 겹쳐 뜨지 않게 배포 절차를 바꿔 재발 방지
  • 빌드 캐시 오염 직렬화 오류: sealed class 하위 추가가 캐시에 가려 허용 목록이 갱신되지 않아 Kafka 발행이 막히던 문제를 규명, 배포 산출물을 javap로 직접 확인하는 절차를 만듦
  • 마켓 API v1 종료 → v2 전환 대응, 주문 중복수집 방지, 클레임 수집·컨버터 오류 수정 등 상시 대응

R결과:

  • 적체 해소 + 유발 결함 2건 제거 + 복구 경로 부재를 구조적 결함으로 문서화
  • 원칙 도출: 순서 보장 큐에서 한 메시지의 무한 재시도는 곧 그룹 전체의 정지
  • 20+ 마켓 주문·정산·클레임 흐름의 무중단 운영 유지

데이터 오염 규명 및 복원 — 약 9만 건

S마켓 상품의 연동 상태가 의도치 않게 변경되고 있었습니다. 표면 증상은 "상품이 마켓에서 내려감" — 셀러 매출에 직결되는 문제입니다.

T유발 경로를 전부 찾아 차단하고, 이미 오염된 데이터까지 복원해야 했습니다.

약 9만 건 오염 확인·복원 · 관리자 지정 정산기준가 덮어쓰기 차단

A주요 작업:

  • 원인은 상태 전이 규칙이 여러 코드에 복제된 구조 — 유발 지점이 한 곳이 아니라 마스터 상품 수정 시 자식 상태 변경, 특정 마켓 상품 등록 경로 등 여러 곳. 하나씩 차단하고 잔존 데이터를 복원
  • 병행해서 마켓별로 관리자가 지정한 정산기준가가 마스터 상품 수정 시 덮어써지던 문제를 차단 — 조용히 금액이 바뀌는 종류라 발견이 늦으면 정산에 그대로 반영됨

R결과:

  • 약 9만 건 규모의 오염을 확인·복원
  • 정산 금액이 흐르는 경로에 보호 장치 신설 — 관리자가 지정한 정산기준가가 덮어써지지 않게 차단
  • 정산은 잘못된 데이터가 이미 쌓인 상태에서 고쳐야 하므로, 코드 수정과 데이터 복원을 항상 한 쌍으로 진행하는 원칙 정착

멀티마켓 연동 통합 — 20개+ 마켓 상품/주문/클레임/CS (2025.06 ~ 상시)

S마켓마다 인증 방식, 응답 포맷(XML/JSON), 상태 코드, 수수료 규칙, 할인 표현이 전부 다릅니다. 이 차이를 조건 분기로 흡수하면 코드가 감당할 수 없이 복잡해집니다.

T마켓 하나를 추가하는 일이 반복 가능한 절차가 되도록 만들어야 했습니다.

20+ 채널 통합 연동 · 신규 마켓 2개(퀸잇·큐텐) 상품부터 정산까지 단독 온보딩

기술 스택: PHP Kotlin Python NestJS Java Feign

A구조와 원칙:

  • 팩토리 3종 분리 — 인증(Account) / API 호출(Client) / 응답 변환(Mapper). 동작 차이는 플래그로 선언(승인 확인 필요 여부, 임시 상품 선생성, 이미지 생성 등)하고 오케스트레이션 코드는 마켓을 모르는 상태로 유지
  • 운영 원칙 — "코드에 구현이 있다 ≠ 그 경로가 활성이다": 수집 경로가 5개 서비스(Kotlin·PHP·Python·NestJS·Java)에 분산돼 있어 코드만 보면 4개 마켓에서 판단을 그르침(지마켓은 전용 변환기가 있지만 실제로는 통합 변환기로 수집). 활성 경로는 반드시 DB의 버전·소스타입·원본 응답으로 확정하는 절차를 세움
  • AI 활용 자동 매핑: 수작업이던 마켓 카테고리·상품정보고시 매핑을 마켓 수집 정보 기준으로 자동 매핑하도록 개발 (상세이미지 자동화는 진행 중)
  • 다룬 마켓: 퀸잇 · 카카오스타일(지그재그·포스티) · 큐텐 · SSG · 롯데온 · 지마켓/옥션(ESM·글로벌) · 11번가 · 네이버스마트스토어(플러스스토어) · 쿠팡(글로벌) · GS샵 · 카페24 · CJ온스타일 · 알리익스프레스 · 에이블리 · 토스 · 테무 · 사방넷 · 무신사 · 하프클럽 · 홈앤쇼핑 등

R결과:

  • 신규 마켓 2개(퀸잇·큐텐)를 상품·출고·반품/교환·CS·정산까지 단독 온보딩 — 판매 채널 확장
  • 마켓마다 다른 API(XML/JSON·상태코드·페이지네이션·인증)를 팩토리 + 어댑터 패턴으로 통일
  • 주력 저장소 외에 Python·NestJS 수집 서비스에도 직접 기여, 해외 마켓 환율 계산 담당

반품/교환 클레임 시스템 V2 전면 재구축 (글로벌 포함, 2025.08 ~ 2026.07)

S이커머스 통합 플랫폼에서 CS가 가장 많이 생기는 곳이 클레임입니다. 주문과 클레임이 따로 수집돼 매칭되는 구조라 취소가 접수돼도 출고가 먼저 나가 회수로 이어지는 상태 꼬임이 잦았고, 클레임 배송비를 정산에 반영할지 판단이 조건마다 달라 수작업 CS가 많았습니다.

T반품/교환/취소 전 과정을 V2로 재구축해 배송비 계산과 상태 전이를 자동화해야 했습니다.

반품 배송비 자동 계산 · 마켓마다 다른 클레임 상태 체계 통합 · 클레임 문의·CS 감소

기술 스택: PHP (Laravel) Kotlin 비동기 Job

A주요 작업:

  • 클레임 조건 매핑 구조 설계: 회수조건·귀책여부·배송비 지출조건·배송방법(유료/무료)·조건부 배송타입을 매핑 가능한 구조로 잡고, 클레임 수집 시 자동 매핑되어 반품 배송비가 자동 계산·적용되게 구축
  • 주문↔클레임 상태 전이 통합: 분리 수집·매칭 구조에서 생기던 상태 꼬임(취소 접수 후 출고 등)이 일관되게 전이되도록 통합 구조 설계 — 마켓마다 다른 클레임 상태 체계를 공통 enum으로 정규화하고 36개 비동기 Job으로 나눠 일관 처리
  • 반품/교환 리스트·검색·엑셀 V2, 교환 재배송 생성 로직 재설계(중복 생성 트랜잭션 보호), 수거완료/회수완료 상태 전이, 강제 반품·교환 완료 처리

R결과:

  • 반품 배송비 자동 계산과 상태 전이 일관화로 클레임 관련 문의·CS 감소

판매관리 2.0 신규 개발 · 관리자(Admin) 기능 분리 (2025.12 ~ 진행 중)

S판매관리 1.0은 주문↔상품 매칭이 필수라 매칭이 안 되면 주문 흐름이 막히는 구조였고, 레거시 한 서비스가 관리자·유저 기능을 전부 처리하고 있었습니다.

T매칭 없이도 주문이 흐르는 구조로 재설계하고, 내부 관리자 기능을 분리해야 했습니다.

주문·상품 매칭 제약 제거 · AOP 주문 감사 로그 · React 관리자 화면 분리 진행 중

기술 스택: Kotlin Spring AOP React 19 TypeScript

A주요 작업:

  • 판매관리 2.0 신규 개발: 매칭 없이도 주문을 생성하고 상품은 이후 별도 매칭·수정할 수 있게 재설계. 주문 상태 전환 벌크 API, 세트 자재(SKU) 통합 매핑, 판매자 옵션 매칭
  • AOP(@Around) 기반 주문 API 감사 로그 — 주문 API 호출 전후 상태를 JSON 로그로 남겨 문제 추적을 쉽게 함
  • 관리자 기능 분리 (진행 중): 마켓 연동 API 기반 주문·클레임·정산 조회, 정산·수수료, 상품 프로모션 등 내부 관리자 기능을 React 기반 관리자 화면 + 전용 API로 이전

R결과:

  • 매칭 실패 시 주문 생성이 막히던 레거시 제약 제거
  • 레거시에 뭉쳐 있던 내부 관리자 기능을 전용 관리자 화면으로 이전 중 (2026.01 착수)

AI 협업 체계 구축 — 틀린 결과를 걸러내는 구조 (2026.01 ~)

S팀에 Claude Code 환경이 도입됐지만, 제 담당 범위(저장소 7개·멀티 언어)에서 AI가 틀리는 방식이 반복됐습니다. 코드 생성 속도보다 틀린 결과를 걸러내는 일이 병목이었습니다.

T같은 실패가 반복되지 않는 구조를 만들어야 했습니다.

오진·운영 DB 사고를 막는 가드 훅 · 손익 감사 매일 자동 실행 · React 프론트까지 담당 확장

A겪은 문제 4가지와 대응:

  • 근거 없이 원인을 단정 — 정산 분석 중 코드·DB 확인 없이 결론을 내려 오진한 적이 있음. 이후 진단 작업에서 근거 조회나 인용 없이 결론을 내면 출력을 차단하는 훅을 만들고, 규칙이 긴 대화에서 잊히는 문제는 진단형 요청을 감지해 규칙을 다시 주입하는 훅으로 보완
  • 운영 DB에 무거운 쿼리 — 수백만 행을 인덱스 없이 훑는 쿼리는 곧 장애로 이어짐. 실행 전 실행계획(EXPLAIN) 확인을 강제해 실제로 425만 행 스캔 쿼리를 실행 전에 차단
  • 불필요한 주석 대량 생성 — 편집 시점에 주석 밀도·유형을 검사해 차단하되, 의도적으로 다시 시도하면 통과시켜 꼭 필요한 주석은 남길 수 있게 함
  • 같은 실수 반복 — 마켓별 함정·장애 패턴을 매번 다시 조사하고 있었음. 조사 결과를 팀 공유 지식 그래프로 자산화해, 재조사에 반나절 걸리던 내용을 검색해서 바로 꺼내 쓸 수 있게 함

산출물: 가드 훅 4종 · 도메인 전문 에이전트 6종 + 오케스트레이터 2 · 도메인 스킬 12종 · 지식 그래프 114건 · 코드 규칙 209개 · 7개 저장소 통합 개발 가이드

R결과:

  • 비즈니스 임팩트로 연결 — 맨 위 카드의 이중 할인 감사를 일회성 조사로 끝내지 않고 자동화 도구로 만들어 매일 실행 — 사람이 기억해야 하던 점검을 시스템이 대신 수행
  • 도구를 정비한 뒤 작업 처리 속도가 눈에 띄게 빨라졌고, 담당 범위가 백엔드에서 React 프론트까지 확장

AI를 빠르게 쓰는 것보다 틀린 결과를 걸러내는 체계를 만드는 것이 실제 생산성을 결정합니다. 위 가드는 전부 직접 겪은 실패에서 나왔습니다.

현재 진행 중: 팀 공통 목표가 서버 비용 절감과 에러율 감소(CS 축소·안정적 서비스)로 잡히면서, AI를 활용한 유지보수에 집중하고 있습니다 — 에러·CS 유발 지점을 추적해 선제 수정하고, 비용을 만드는 비효율 쿼리·작업을 찾아 줄이는 방식입니다.

구독 요금제 체계 개편 (플랜 v3) — 과금·정산 전 구간

SB-Flow는 셀러가 요금제를 구독해 쓰는 SaaS로, PG 정기결제(나이스페이) 자동 갱신후불 결제 두 방식이 있습니다. 요금제 체계를 v3로 개편해야 했는데, 자동 연장이 30일 고정으로 하드코딩돼 있어 새 체계를 수용할 수 없었습니다.

T백엔드와 관리자 화면을 맡아, 새 요금제 체계를 담을 수 있는 구조로 바꿔야 했습니다.

30일 고정 제약 해소 · 과금(구독)과 정산(지급) 전 구간 담당

A주요 작업:

  • 갱신 로직을 플랜 정의 기반으로 전환
  • 플랜 기간과 구독 기간 분리 — 무료 플랜 도입으로 "요금제 유효 기간"과 "구독 생존 기간"이 달라짐. 뭉쳐 있던 개념을 분리해 무료 전환·유료 복귀 시 기간 계산이 어긋나지 않게 함
  • 후불 결제 설정·조회, 결제 이력 조회 API·관리자 화면
  • 플랜 ↔ 수수료 연계 — 어떤 요금제를 쓰는지가 정산 수수료율에 영향을 주므로 수수료 조회 로직을 개편 체계에 맞게 수정

R결과:

  • 요금제 체계 확장이 가능한 구조로 전환 (30일 고정 제약 해소)
  • 구독료를 받는 쪽(과금)과 셀러에게 지급하는 쪽(정산)을 모두 담당 — 유료화 흐름 전 구간 경험

플레이뎁 (Playdev) · 백엔드 개발자

2021.08 ~ 2025.05 (라스트일마일 → 플레이뎁 이관)

오너클랜 판매 지원 서비스 개발 — 다잡아 · 다팔자 · 키워드 추천

개요: 도매 플랫폼 오너클랜과 계약해 셀러용 판매 지원 서비스를 개발·유지보수. 쿠팡·네이버 스마트스토어·지마켓·옥션·11번가·롯데온·티몬·토스·카카오쇼핑·GS SHOP·홈플러스·SSG·현대몰 등을 API/크롤링으로 연동해 상품 등록부터 주문·배송·CS까지 자동화. (주)라스트일마일에서 시작한 프로젝트가 2022.06 플레이뎁으로 이관되어 동일 프로젝트를 연속 수행 — 두 회사 경력을 하나로 묶어 표기

주문 취소율 75% 감소 · 수작업 87% 단축(4시간→30분) · 종합몰 매출 3배

기술 스택: Java Spring Boot Python (FastAPI·Django) Node.js / TypeScript MySQL Redis MongoDB Vue.js Electron

주요 프로젝트 — S(상황) → A(행동) → R(결과):

  • 판매 프로세스 자동화
    S상품 등록부터 CS까지 온라인 판매 전 과정이 수작업이었고, 상품 상태가 마켓과 어긋나 주문이 취소되는 일이 반복
    APython/FastAPI 배치 시스템 설계·개발 주도, GitLab CI/CD로 수동 배포 자동화, PM2 안정 실행 + 실시간 로그 모니터링, 외부 API 데이터 분석 기반 카테고리 자동 매칭
    R상태 불일치로 인한 주문 취소율 75% 감소 · 수작업 87% 단축(4시간 → 30분)
  • 종합몰 상품 등록 자동화
    S토스·카카오·홈플러스·GS SHOP·SSG·현대몰·AKMALL 등 종합몰은 담당자가 건당 5분씩 수작업으로 등록
    A마켓별 상품 관리를 API·크롤링 기반으로 개발, 등록·상태·가격 변경사항 동기화 프로세스 구축
    R종합몰 매출 3배 증가 · 상품 등록 5분 → 2~10초(약 30~150배) · 품절 취소율 감소
  • 다잡아 — 쿠팡 위너 로직 안정화 (단독 설계·개발)
    S위너(최저가 노출) 확보 로직이 Selenium 브라우저 자동화로 동작 — 대상 사이트가 바뀔 때마다 깨지고 리소스 과다
    A쿠팡 내부 API 호출로 전환해 브라우저 의존 제거, 사용자·과금·통계 API는 관리자·클라이언트·배치 세 환경이 함께 쓰는 RESTful로 설계
    R위너 상품 생성 속도 10배 개선(5시간 → 30분) · 사이트 변경에 깨지던 취약점 제거
  • 키워드 추천 아키텍처 재설계
    S단건 처리만 가능했고, 실제로 쓰이지 않는 Redis·RabbitMQ가 아키텍처에 포함
    A엑셀 업로드 기반 대량 처리로 확장, 파일 처리를 클라이언트로 이전하고 백엔드는 순수 JSON만 처리, 필요 없던 컴포넌트 제거
    R대량 일괄 추출로 사용자 작업 시간 단축 + 운영 복잡도 감소
  • 매크로(수집·자동화 도구) 안정성 개선
    S리소스 과부하로 PC당 동시 실행이 5개로 제한되고 그마저 다운
    A관리자와 실행 에이전트를 분리하고 Selenium 서버를 별도 분리, Redis 작업 상태 관리(중단 시 복구) 적용
    R동시 실행 제약 완화 · 다운 문제 해소
  • 다팔자(Electron 데스크톱): 상품 대량 등록·상태 동기화, GS SHOP·TOSS 신규 마켓 연동, 주문·CS 관리 개발

(주)더에스엠씨홀딩스 · 개발 인턴

2021.01 ~ 2021.02

높은 트래픽 콘텐츠 서비스 '방구석 연구소' 기능 개발·개선

기술 스택: PHP CodeIgniter MySQL JavaScript jQuery (Ajax)

주요 역할 및 기여:

  • 랜덤 이미지 테스트('짤 뽑기') 기능 개발 — 백엔드 이미지 처리 + Canvas 합성
  • 이미지 리사이징 도입으로 서버 부하 감소·응답 속도 개선
  • URL 파라미터→인코딩 Body 전송 전환으로 타 사용자 이미지 접근 취약점 해결
  • 스티비(Stibee) API 연동 뉴스레터 구독 시스템 구축

SIDE PROJECTS · 1 IN PRODUCTION · 9 ARCHIVED

개인 프로젝트

재고 관리 시스템 (실사용 중)


상세 내용
재고 현황 화면
재고 현황 (메인) — 기간별 조회·FIFO 차감
주문/입고 관리 화면
주문/입고 관리
엑셀 Import 화면
엑셀 Import

📦 아내의 피부과 병원 피부팀에서 실제 재고 관리 업무에 사용 중인 Spring Boot 재고 관리 시스템 (2025.03 ~ 진행 중). 물품 재고를 유동적 '보고 기간' 단위로 관리하며, 실사용자 피드백과 보고 프로세스 변화(월 단위 → 유동 기간 보고)에 맞춰 지속 개선 중.

기술 스택: Java 17 Spring Boot 3.4 JPA MySQL Thymeleaf Spring Security Apache POI


구현된 기능 및 화면
  • 보고 기간(ReportPeriod) 시스템: 고정 월 단위를 유동적 기간 기반으로 재설계 — OPEN/CONFIRMED 상태 관리, 기간 확정 시 남은재고 자동 이월
  • FIFO 재고 차감/복원: 유효기간 빠른 순 차감·역순 복원, UsageLog 기반 사용 이력 추적
  • 발주/입고 관리: PENDING→COMPLETED 상태 흐름, 입고 완료 시 진행 기간 재고 자동 반영
  • 엑셀 Import/Export: Apache POI 기반 보고서 4종(기간별·전체·당일·주간), 시트 분석 후 Import
  • 운영 기능: 활동 로그 감사 추적, 사용자/권한 관리(ADMIN), 관리자 대시보드
  • 무손실 데이터 마이그레이션: 월 단위 레거시 데이터를 기간 기반으로 앱 시작 시 자동 전환 — 멱등성 보장, TransactionTemplate로 self-invocation 문제 해결

느낀점
  • 실사용자의 보고 프로세스가 바뀌며 데이터 모델(월 단위→기간 단위)을 운영 중에 무손실로 전환해 본 경험 — 회사에서 다룬 레거시 마이그레이션 패턴을 개인 프로젝트에 적용
  • 화면·엑셀·DB 세 곳의 계산 공식은 기준 하나로 맞춰야 한다는 것을 체감
ARCHIVE · 대학생 / 인턴 시절 (~ 2021) · 9 PROJECTS 학부·인턴 시기의 학습 기록입니다. 현재 실력의 기준이 아니라 성장 과정의 기록이라 기본으로 접어두었습니다. 펼쳐보기 접기

방구석 연구소 mrmt 구독 페이지

URL: 미리밋터 mirimeeter (서비스 종료)


상세 내용
방구석연구소 - mrmt 구독페이지 스크린샷

👍 스티비(Stibee) API 연동, 구독자 관리 기능 구현.


백엔드 개발 설명
  • PHP, Codeigniter 프레임워크 활용, Cafe24 호스팅, MySQL 사용
  • 이메일 중복 확인, 구독자 정보 DB 등록 및 Stibee API 동시 등록 (환영 메일 자동 발송)
  • 관리자 페이지: 구독자 조회/검색/삭제 (페이징), IE11 호환성 (Fetch Polyfill)

느낀점
  • 크로스 브라우징 중요성 인지, 프레임워크 기능 활용 경험
  • Open API 연동 및 사용, 기획/디자인/프론트엔드 협업 경험, Git/Github 활용

방구석 연구소 새해 인사 짤뽑기

URL: 새해 인사 짤뽑기


상세 내용
방구석연구소 - 인턴 프로젝트 스크린샷

💣 방구석 연구소 인턴 프로젝트. 새해 기념 랜덤 이미지 뽑기 기능.


백엔드 개발 설명
  • 기존 DB 및 관리자 페이지 활용, 이미지 합성 데이터 테이블 설계
  • 카테고리(얼굴, 나이, 아재, 병맛, 히든 짤) 구현, 관리자 페이지 개발
  • Canvas 활용 이미지/텍스트 합성 (얼굴, 나이)

느낀점
  • 기획 변경에 따른 개발 유연성 필요성 체감, 기존 코드 구조(하드코딩) 문제점 인지
  • 개인정보(얼굴) 데이터 처리 시 보안 중요성 (Query Parameter -> 암호화된 ID/UUID 사용)
  • 대용량 이미지 처리 시 서버 부하 고려 (확장자 변경, 리사이징)

사용자 관리 토이 프로젝트


상세 내용
클라이언트, 서버 Jenkins Items
Jenkins Items
Docker images 및 container
Docker Containers
회원 리스트
회원 리스트
사용자 정보 리스트 테이블+페이지네이션
사용자 목록 (페이지네이션)
로그인 페이지
로그인 페이지

📔 Vue.js(Vuetify) SPA, Spring Boot API, Spring Security, Jenkins/Docker CI/CD, AWS EC2/RDS 배포. (S3/JPA 추가 예정)


구현된 기능 및 화면
  • 서버/배포: Nginx(Vue 빌드) + Spring Boot API Docker 이미지 자동 배포 (Jenkins), Git Webhook
  • Frontend: Vuetify 기반 UI (Header, Footer, Login, UserList) 개발
  • Backend: 회원가입, 로그인, User CRUD, JWT (Access/Refresh 토큰 분리) 개발

Spring boot Bolg 프로젝트


상세 내용
Spring Blog 스크린샷 1
Spring Blog 스크린샷 2

📔 Member(SpringJdbcTemplate), Blog(MyBatis) 구현. 구 JSP/Servlet 블로그를 Spring Boot + Thymeleaf 학습 목적으로 업그레이드.


구현된 기능 및 화면
  • 회원 가입/로그인 (Session, Cookie), 회원 수정/삭제
  • 블로그 CRUD (이미지 업로드 - @Multipart), 페이징, 검색 (제목/작성자)
  • 관리자(ROOT) 로그인 시 회원 관리 기능

느낀점
  • JSP/Servlet 대비 코드 반복 감소 및 생산성 향상 (Spring Boot 자동 설정)
  • Thymeleaf 템플릿 엔진의 편리함 경험

BAB - 창업대전 프로젝트


상세 내용
BAB-project 스크린샷

📔 인덕대학교 교수/학생 커뮤니티 활성화 목적 프로젝트 (창업대전 참여). Bootstrap 템플릿 사용.


구현된 기능 및 화면
  • 회원가입(교수/학생), 로그인 (Session)
  • 언어별 카테고리 및 게시판 CRUD
  • 게시글 별 질의응답 (댓글 CRUD), SmartEditor 라이브러리 적용

느낀점
  • 프로젝트 진행하며 Spring 학습 (초기 어려움 경험)
  • 팀 프로젝트 경험 및 회원가입/로그인 기능 구현 통한 Spring 구조 이해도 향상
  • Spring 환경 설정의 복잡성 체감

Jsp/Servlet Blog


상세 내용
JSP-blog 스크린샷

📔 Bootstrap 템플릿 활용, JSP/Servlet 및 MVC Model 2 패턴 학습 목적 프로젝트.


구현된 기능 및 화면
  • 회원 가입/로그인 (Session, Cookie), 회원 정보 조회/수정/삭제 (비밀번호 확인)
  • 블로그 CRUD (이미지 업로드, 삭제 시 비밀번호 확인), 페이징

느낀점
  • JSP/Servlet 사용 시 코드 반복성 및 어려움 체감
  • Spring Framework 필요성 인지, 프레임워크 발전 이유 공감
  • Oracle DB와 MySQL 문법 차이 학습, Servlet 매핑 기능 이해

Aji 강아지 투표 사이트


상세 내용
Aji 스크린샷

🐶 PHP/Codeigniter MVC 패턴 및 기본 구조 이해 목적 프로젝트. 리눅스 서버(Apache, SSH) 환경 작업.


구현된 기능 및 화면
  • HOME 화면 투표수 TOP3 노출, 강아지 투표/검색/페이징
  • Chart.js 활용 투표 현황 시각화 (도넛/막대 그래프)
  • 관리자 로그인 시 강아지 CRUD

느낀점
  • Codeigniter 페이징, Chart.js 라이브러리, Bootstrap 반응형 사이트 구현 경험
  • Ajax 비동기 통신 시도 및 부분적 어려움 경험 (데이터 업데이트 실패)

PHP 쇼핑몰


상세 내용
PHP 쇼핑몰 스크린샷

🛒 순수 PHP 학습 목적 쇼핑몰 구축. 리눅스 서버(Apache, SSH) 환경 작업.


구현된 기능 및 화면
  • 사용자: 카테고리(New/Hit/Sale), 회원가입/로그인/수정, 장바구니, 구매 시스템
  • 관리자: 회원/상품/주문/옵션 관리

느낀점
  • PHP 데이터 처리 기본 방식 이해, 단일 페이지 내 다수 언어 혼재 문제점 발견
  • 사용자/관리자 페이지 분리 필요성 절감, 쇼핑몰 기본 구조 이해
  • 기본적인 MySQL 사용법 (CRUD) 습득

LEARNING · SYNCED DAILY VIA INFLEARN MCP

학습 기록

인프런 MCP 연동으로 수강 데이터가 매일 자동 수집·갱신됩니다.