EMPLOYEE ID
굿스플로

국예성
Yeseong Kook
PORTFOLIO · DEPLOY
$ ▸ ruff · bandit ..................... ▸ SonarQube quality gate ............ ▸ docker build → ECR push ........... ▸ ECS deploy · health check ......... ▸ jobs 36,307 · success 95% · 5xx 0
어떻게 보시겠어요?
Enter를 누르면 3D로 들어갑니다
Backend · Cloud Engineer
측정하고, 결정하고, 운영에서 증명합니다.
이커머스 백엔드를 개발부터 운영까지 맡아 왔습니다.
AWS 인프라를 혼자 설계·운영하고, LLM을 실제 서비스에 붙였습니다.
// 실측 지표
임계값, 품질 게이트 조건, 서버 메모리 상한을 모두 실측으로 정했습니다. 아래 수치는 전부 측정값이며, 각 수치 아래에 측정 근거를 적었습니다.
누적 상품 수집
36,307건
측정 근거: 대상 36,607건 대비 처리율 99.2%, 단일 배치 최대 4,866건
수집 잡 성공률
95%
측정 근거: 잡 673건 중 639건 성공
5xx 서버 오류
0건
측정 근거: 최근 30일 API 요청 167,762건 (2026-09 기준)
AI 1차 분기 recall
100%
측정 근거: 골든셋 62건 실측, recall@5 92%
캐시 히트 응답
0.5~0.6초
측정 근거: 첫 호출 5회 4.2~5.5초 → 이후 LLM 호출 0회
// 사원증
굿스플로가 2026.01 핌즈에 흡수합병되어 같은 조직에서 이어서 일하고 있습니다. 사원증을 뒤집으면 한 일이 보입니다.
EMPLOYEE ID

국예성
Yeseong Kook
2023.06 ~ 2023.08
Telegram 서비스 모니터링
서비스 로그를 중요도별로 판별해 실시간 알림
2023.09 ~ 2025.03
NFA(Naver Fulfillment Alliance) 연동
스마트스토어 판매사와 풀필먼트 창고 연동, 14개 회원사
2025.03 ~ 2025.12
데이터 운영 자동화
pgAudit·pgBadger 로그로 수탁사 검사자료 생성을 자동화
EMPLOYEE ID

국예성
Yeseong Kook
前 굿스플로
2026.02 ~ 현재
올리고 백엔드 · AWS 인프라
멀티채널 상품 SaaS, AWS 단독 설계·운영, 2026.09.21 정식 오픈
케이스: 올리고 멀티채널 구조 →2026.09 ~ 2026.10
SonarQube 품질 게이트
master 병합 전 블로커·버그·취약점을 막는 게이트 운영
케이스: SonarQube 품질 게이트 →2026.09 ~ 2026.10
AI 카테고리 에이전트
Bedrock 기반 카테고리 자동 추천, 기능 플래그로 운영
케이스: AI 카테고리 에이전트 →// 케이스 스터디
만든 것보다 판단의 근거를 먼저 적었습니다. 문제 → 질문별 판단 → 실측 근거 → 결과 순서입니다.
채널마다 같은 물건을 다르게 부릅니다. 우리 "인형"이 채널에서는 "봉제인형/완구"입니다. 문자열 유사도로는 "인형"과 "완구"의 점수가 0이라 후보에 오르지 않았고, 가져온 상품은 사람이 카테고리를 일일이 지정해야 했습니다.
어떤 모델을 쓸까
목록에서 번호를 고르는 일이라 소형 모델(temperature 0)로 충분하다고 판단했습니다.
실측골든셋 62건: 1차 분기 recall 100%, recall@5 92%
환각을 어떻게 막을까
카테고리 코드 대신 번호만 주고받고, 요청에 있던 번호만 통과시킵니다.
실측없는 카테고리를 만들 수 없는 구조
호출 비용은
트리를 내려가며 분기 선택 수를 3, 2, 1로 줄였습니다. 고정 3개면 최대 채널에서 5회, 비용이 3배였습니다.
실측19개 채널 leaf 76,608개 전수 측정, 최대 4회
얼마나 기다릴까
호출당 지연이 프롬프트 크기와 거의 무관하게 약 700ms라, 예산을 3초에서 5초로 조정했습니다.
실측빈 호출 645ms, 5,000토큰 729ms. 폴백 62건 중 37건 → 3건
언제 자동 확정할까
95점 이상만 자동 확정합니다.
실측144건 실측: 95점 이상 79건 오답 0, 85~90점대 4건 중 1건 오답
상품 수집은 채널 API를 수백 번 부르는 긴 작업입니다. 컨테이너 여러 대가 같은 작업을 집어가거나, 배포 중에 처리하던 작업이 사라지는 문제가 있었습니다.
큐 인프라를 따로 둘까
Redis 없이 PostgreSQL만 씁니다. SELECT … FOR UPDATE SKIP LOCKED로 한 건씩 선점하고, LISTEN/NOTIFY로 등록 즉시 감지합니다. 60초 폴링은 안전망입니다.
작업자가 죽으면
30초 heartbeat와 reaper가 멈춘 작업을 회수합니다.
배포 중에는
ECS Task Scale-In Protection으로 처리 중인 태스크를 종료 대상에서 빼고, 종료 시 최대 25초 drain 후 대기열로 되돌립니다.
재처리하면 중복되지 않나
batch 단위 삭제 후 삽입으로 멱등성을 보장합니다.
약 8.6만 줄 규모 백엔드를 여러 명이 함께 개발하는데, 코드 품질과 보안을 보는 기준이 사람마다 달랐습니다. master로 가는 코드를 거르는 장치는 포맷터와 린터뿐이라, 버그나 보안 약점은 리뷰어의 눈에만 기대고 있었습니다. 누가 작성하든, AI 코딩 도구로 작성하든 같은 기준으로 검사받고, 보안 점검을 개인 역량이 아니라 배포 흐름의 한 단계로 만들고 싶었습니다.
어디서 검사할까
3단계로 나눴습니다. IDE 즉시 안내 → commit 시 ruff·bandit(수 초) → master push 시 품질 게이트(약 80초). 앞의 두 단계는 개인의 빠른 피드백, 마지막은 팀 공통 기준입니다.
실측그 외 브랜치는 0초로 통과
어떤 조건으로 막을까
기존 코드에 쌓여 있던 이슈는 push를 막지 않고, SonarQube 대시보드에서 현황을 보며 따로 정리합니다. push를 막는 건 이번에 새로 바뀐 코드에서 생긴 블로커·버그·취약점, 세 가지뿐입니다. 기존 이슈까지 막으면 손대지도 않은 파일 때문에 아무도 push할 수 없고, 코드 스멜까지 막으면 개발자가 게이트를 우회하게 됩니다. 새 코드의 범위는 커밋 단위로 잘라, 한 번 막혔던 결과가 다음 검사에 남지 않게 했습니다.
실측기존 이슈 822건을 분석해 보니, 심각도 HIGH로 분류된 것도 98.5%는 실제 결함이 아닌 코드 스멜(복잡도·중복 같은 유지보수 지적)이었습니다. 그래서 심각도가 아니라 종류(블로커·버그·취약점)로 막습니다.
막히면 어떻게 고칠까
게이트가 막으면 SonarQube 결과를 받아 어디서, 왜, 어떻게 고치나를 터미널에 바로 출력합니다. AI 코딩 도구로 작업하면 이 출력이 그대로 AI의 입력이 되어, AI가 문제 지점을 찾아 바로 고치거나 개발자에게 설명하고 확인받은 뒤 수정합니다.
서버 비용은
새 서버를 띄우지 않고 이미 운영 중이던 EC2에 컨테이너로 올렸습니다. 분석 중 메모리를 실측해 컨테이너 상한을 정해, 기존 용도에 영향 없이 추가 인프라 비용을 0으로 맞췄습니다.
실측유휴 1.93GiB, 분석 피크 2.16GiB → 컨테이너 상한 2.6GB
↳ 게이트에 막히면 push가 멈추고
↺ 통과할 때까지 반복
$ git push origin master▸ SonarQube 분석 중 · commit a1b2c3d ......... 78s✖ 품질 게이트 실패 · 새 코드의 버그 1건 어디서 orders/service.py:142 왜 None일 수 있는 값의 속성에 접근합니다 (조회 결과가 없으면 AttributeError) 어떻게 조회 결과가 None이면 먼저 반환하거나 기본값을 지정하세요✖ push를 중단했습니다. 위 항목을 고친 뒤 다시 push하세요.판매자는 같은 상품을 채널마다 다시 등록합니다. 카테고리 체계, 필수 속성, API 인증 방식이 채널마다 달라서 상품 100개를 5개 채널에 올리면 500번의 수작업이 됩니다.
채널이 늘어나면
상품 마스터 한 벌 + 채널 어댑터 N개로 N×M을 1:N으로 바꿨습니다. 새 채널은 어댑터만 구현합니다.
실측어댑터 19종 구현, 13개 채널 실운영
인프라는
AWS를 단독 설계·운영합니다. CloudFront OAC로 S3 직접 접근을 막고, VPC Gateway Endpoint로 ECS와 S3 통신을 내부망으로 보냅니다.
배포는
GitHub Actions로 컨테이너 사전 검증 → ECR push → ECS 배포까지 자동화하고, Health Check에 실패하면 이전 버전으로 자동 롤백합니다.
실패를 어떻게 알릴까
응답 형식을 하나로 통일하고 에러를 E100~E700 7개 그룹으로 분류했습니다. 대량 작업은 행 단위로 성공·실패를 돌려줘, 한 건 실패로 전체가 롤백되지 않습니다.
// 액자 · 서버 타워
올리고 보도
한 번 등록한 상품을 스마트스토어·쿠팡·지마켓 등 여러 채널에 일괄 등록하고, 고유 코드로 채널별 상품 매칭 오류를 막습니다.
디지털타임스
이용 신청과 접속 체계를 이지어드민과 분리해, 이지어드민 없이도 쓰는 단독 서비스로 전환했습니다.
아이티비즈
S3 + CloudFront + Route 53으로 사이트를 올리고, 문의 기능만 API Gateway + Lambda로 처리합니다. 방문자는 항상 CloudFront로 들어오고 /api/*만 API Gateway로 갑니다. 전체 구성은 AWS CDK(TypeScript)로 코드화했습니다.
서버를 둘까
정적 사이트라 서버 없이 S3 + CloudFront로 배포합니다. 서버가 필요한 건 문의 하나라 Lambda로만 처리합니다.
버킷은 어떻게 지킬까
버킷은 비공개로 두고 CloudFront OAC로만 읽습니다. S3 주소로 직접 들어올 수 없습니다.
API는 어디에 둘까
같은 도메인의 /api/*만 API Gateway로 보냅니다. 출처가 하나라 CORS 설정이 필요 없습니다.
배포 권한은
GitHub Actions가 OIDC로 IAM 역할을 맡습니다. 저장소에 액세스 키를 두지 않습니다.
스팸과 요금 폭주는
API는 초당 1건·순간 5건으로 스로틀링하고 Lambda 동시 실행을 제한합니다. 숨김 필드로 봇을 거르고 입력 길이를 제한합니다. 첫날부터 월 초과 예산 알람을 걸었습니다.
검색 노출은
링크로만 공유하는 사이트라 noindex 헤더를 걸고, 기본 보안 헤더(HSTS, 프레임 차단 등)를 함께 붙입니다.
3D 방을 불러오는 중…
me@desk ~ $ whoami
me@desk ~ $
측정하고, 결정하고, 운영에서 증명합니다.
profile
Yeseong Kook
Backend · Cloud Engineer 경력 3년 5개월
이커머스 백엔드 개발·운영 · AWS 인프라 단독 설계·운영
0건
5xx 서버 오류
최근 30일 API 요청 167,762건 (2026-09 기준)
100%
AI 1차 분기 recall
골든셋 62건 실측, recall@5 92%
국예성 Yeseong Kook
Backend · Cloud Engineer · 경력 3년 5개월
이커머스 백엔드를 개발부터 운영까지 맡아 왔습니다.
AWS 인프라를 혼자 설계·운영하고, LLM을 실제 서비스에 붙였습니다.
측정하고, 결정하고, 운영에서 증명합니다.