국예성

Backend · Cloud Engineer

국예성Yeseong Kook

측정하고, 결정하고, 운영에서 증명합니다.

이커머스 백엔드를 개발부터 운영까지 맡아 왔습니다.

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 ~ 2025.12

굿스플로에서 한 일

  1. 2023.06 ~ 2023.08

    Telegram 서비스 모니터링

    서비스 로그를 중요도별로 판별해 실시간 알림

  2. 2023.09 ~ 2025.03

    NFA(Naver Fulfillment Alliance) 연동

    스마트스토어 판매사와 풀필먼트 창고 연동, 14개 회원사

  3. 2025.03 ~ 2025.12

    데이터 운영 자동화

    pgAudit·pgBadger 로그로 수탁사 검사자료 생성을 자동화

2026.01 흡수합병

EMPLOYEE ID

핌즈

국예성

Yeseong Kook

직무
백엔드 · 클라우드
기간
2026.01 ~ 재직 중

前 굿스플로

핌즈에서 한 일

  1. 2026.02 ~ 현재

    올리고 백엔드 · AWS 인프라

    멀티채널 상품 SaaS, AWS 단독 설계·운영, 2026.09.21 정식 오픈

    케이스: 올리고 멀티채널 구조 →
  2. 2026.09 ~ 2026.10

    SonarQube 품질 게이트

    master 병합 전 블로커·버그·취약점을 막는 게이트 운영

    케이스: SonarQube 품질 게이트 →
  3. 2026.09 ~ 2026.10

    AI 카테고리 에이전트

    Bedrock 기반 카테고리 자동 추천, 기능 플래그로 운영

    케이스: AI 카테고리 에이전트 →
경력 상세 전체 보기

굿스플로 · 백엔드 개발 · 2023.06 ~ 2025.12

2023.06 ~ 2023.08Telegram 서비스 모니터링
회원사 서비스 로그를 중요도별로 판별해 담당 개발자에게 실시간으로 알렸습니다.
2023.09 ~ 2025.03NFA(Naver Fulfillment Alliance) 연동
SKE 풀필먼트 창고(양재·대전)와 네이버 스마트스토어 판매사를 연동했습니다. 패키징·출고·재고관리를 개발부터 운영까지 담당했고, 오늘도착·내일도착·N배송 연동과 14개 회원사 연동으로 2024년 KPI 달성에 기여했습니다. Node.js, Express, PostgreSQL, Naver Cloud.
2025.03 ~ 2025.12데이터 운영 자동화
pgAudit·pgBadger로 로그를 모아 수탁사 검사자료 생성을 자동화했습니다. 택배사 배송 서비스와 회원사 트래킹 API 연동을 운영하고, Google Drive 기반 회원사 정산 파일 저장을 개발했습니다.

핌즈 · 백엔드 · 클라우드 · 2026.01 ~ 재직 중

2026.02 ~ 현재올리고 백엔드 · AWS 인프라
여러 판매 채널에 상품을 일괄 등록·수집·동기화하는 SaaS입니다. AWS 인프라를 단독으로 설계·구축·운영하고, CI/CD를 Jenkins에서 GitHub Actions로 이전했습니다. 2026.09.21 정식 오픈했습니다.
2026.09 ~ 2026.10SonarQube 품질 게이트
master 병합 전 블로커·버그·취약점을 막는 게이트를 구축해 운영하고 있습니다.
2026.09 ~ 2026.10AI 카테고리 에이전트
Amazon Bedrock 기반 카테고리 자동 추천·분류를 운영에 적용했습니다. 기능 플래그로 재배포 없이 켜고 끕니다.

// 케이스 스터디

설계 판단 기록

만든 것보다 판단의 근거를 먼저 적었습니다. 문제 → 질문별 판단 → 실측 근거 → 결과 순서입니다.

012026.09.30 ~ 10.02

AI 카테고리 에이전트

  • Amazon Bedrock
  • Claude Haiku 4.5
  • FastAPI
  • ECS Fargate
  • 내부 ALB
  • GitHub Actions

문제

채널마다 같은 물건을 다르게 부릅니다. 우리 "인형"이 채널에서는 "봉제인형/완구"입니다. 문자열 유사도로는 "인형"과 "완구"의 점수가 0이라 후보에 오르지 않았고, 가져온 상품은 사람이 카테고리를 일일이 지정해야 했습니다.

질문별 판단

  1. 어떤 모델을 쓸까

    목록에서 번호를 고르는 일이라 소형 모델(temperature 0)로 충분하다고 판단했습니다.

    실측골든셋 62건: 1차 분기 recall 100%, recall@5 92%

  2. 환각을 어떻게 막을까

    카테고리 코드 대신 번호만 주고받고, 요청에 있던 번호만 통과시킵니다.

    실측없는 카테고리를 만들 수 없는 구조

  3. 호출 비용은

    트리를 내려가며 분기 선택 수를 3, 2, 1로 줄였습니다. 고정 3개면 최대 채널에서 5회, 비용이 3배였습니다.

    실측19개 채널 leaf 76,608개 전수 측정, 최대 4회

  4. 얼마나 기다릴까

    호출당 지연이 프롬프트 크기와 거의 무관하게 약 700ms라, 예산을 3초에서 5초로 조정했습니다.

    실측빈 호출 645ms, 5,000토큰 729ms. 폴백 62건 중 37건 → 3건

  5. 언제 자동 확정할까

    95점 이상만 자동 확정합니다.

    실측144건 실측: 95점 이상 79건 오답 0, 85~90점대 4건 중 1건 오답

결과

  • 운영 환경에 적용했습니다. 기능 플래그로 재배포 없이 켜고 끄며, 꺼진 상태의 응답이 도입 전과 바이트 단위로 같음을 23개 케이스로 확인했습니다.
  • AI 실패 시 기존 유사도 추천으로 자동 폴백합니다.
  • 캐시 히트 시 LLM 호출 0회로 응답이 4.2~5.5초에서 0.5~0.6초가 됩니다. 트리 내용 해시(blake2b)로 캐시를 무효화해 불필요한 재호출을 없앴습니다.

02

대량 수집 잡 큐

  • Python
  • FastAPI
  • PostgreSQL
  • ECS Fargate

문제

상품 수집은 채널 API를 수백 번 부르는 긴 작업입니다. 컨테이너 여러 대가 같은 작업을 집어가거나, 배포 중에 처리하던 작업이 사라지는 문제가 있었습니다.

질문별 판단

  1. 큐 인프라를 따로 둘까

    Redis 없이 PostgreSQL만 씁니다. SELECT … FOR UPDATE SKIP LOCKED로 한 건씩 선점하고, LISTEN/NOTIFY로 등록 즉시 감지합니다. 60초 폴링은 안전망입니다.

  2. 작업자가 죽으면

    30초 heartbeat와 reaper가 멈춘 작업을 회수합니다.

  3. 배포 중에는

    ECS Task Scale-In Protection으로 처리 중인 태스크를 종료 대상에서 빼고, 종료 시 최대 25초 drain 후 대기열로 되돌립니다.

  4. 재처리하면 중복되지 않나

    batch 단위 삭제 후 삽입으로 멱등성을 보장합니다.

결과

  • 누적 36,307건 수집(단일 배치 최대 4,866건), 잡 성공률 95%, 처리율 99.2%.
  • 최근 30일 API 요청 167,762건 중 5xx 0건.

032026.09.28 ~ 10.08

SonarQube 품질 게이트

  • SonarQube
  • Docker Compose
  • pre-commit
  • ruff
  • bandit
  • PowerShell

문제

약 8.6만 줄 규모 백엔드를 여러 명이 함께 개발하는데, 코드 품질과 보안을 보는 기준이 사람마다 달랐습니다. master로 가는 코드를 거르는 장치는 포맷터와 린터뿐이라, 버그나 보안 약점은 리뷰어의 눈에만 기대고 있었습니다. 누가 작성하든, AI 코딩 도구로 작성하든 같은 기준으로 검사받고, 보안 점검을 개인 역량이 아니라 배포 흐름의 한 단계로 만들고 싶었습니다.

질문별 판단

  1. 어디서 검사할까

    3단계로 나눴습니다. IDE 즉시 안내 → commit 시 ruff·bandit(수 초) → master push 시 품질 게이트(약 80초). 앞의 두 단계는 개인의 빠른 피드백, 마지막은 팀 공통 기준입니다.

    실측그 외 브랜치는 0초로 통과

  2. 어떤 조건으로 막을까

    기존 코드에 쌓여 있던 이슈는 push를 막지 않고, SonarQube 대시보드에서 현황을 보며 따로 정리합니다. push를 막는 건 이번에 새로 바뀐 코드에서 생긴 블로커·버그·취약점, 세 가지뿐입니다. 기존 이슈까지 막으면 손대지도 않은 파일 때문에 아무도 push할 수 없고, 코드 스멜까지 막으면 개발자가 게이트를 우회하게 됩니다. 새 코드의 범위는 커밋 단위로 잘라, 한 번 막혔던 결과가 다음 검사에 남지 않게 했습니다.

    실측기존 이슈 822건을 분석해 보니, 심각도 HIGH로 분류된 것도 98.5%는 실제 결함이 아닌 코드 스멜(복잡도·중복 같은 유지보수 지적)이었습니다. 그래서 심각도가 아니라 종류(블로커·버그·취약점)로 막습니다.

  3. 막히면 어떻게 고칠까

    게이트가 막으면 SonarQube 결과를 받아 어디서, 왜, 어떻게 고치나를 터미널에 바로 출력합니다. AI 코딩 도구로 작업하면 이 출력이 그대로 AI의 입력이 되어, AI가 문제 지점을 찾아 바로 고치거나 개발자에게 설명하고 확인받은 뒤 수정합니다.

  4. 서버 비용은

    새 서버를 띄우지 않고 이미 운영 중이던 EC2에 컨테이너로 올렸습니다. 분석 중 메모리를 실측해 컨테이너 상한을 정해, 기존 용도에 영향 없이 추가 인프라 비용을 0으로 맞췄습니다.

    실측유휴 1.93GiB, 분석 피크 2.16GiB → 컨테이너 상한 2.6GB

작업 흐름

  1. 작업 브랜치에서 개발IDE가 같은 규칙으로 즉시 안내
  2. commitpre-commit: ruff·bandit, 수 초
  3. master에 merge
  4. master pushpre-push 훅이 SonarQube 분석 시작, 약 80초
  5. 품질 게이트 판정신규 코드의 블로커·버그·취약점 0
  6. 통과 → 원격 master 반영 → GitHub Actions 배포

↳ 게이트에 막히면 push가 멈추고

  1. 터미널에 어디서·왜·어떻게 고치나 출력
  2. AI 코딩 도구가 출력을 읽고 원인 파악
  3. 바로 수정하거나, 개발자에게 설명하고 확인받아 수정
  4. 다시 commit → push → 게이트 재판정

↺ 통과할 때까지 반복

$ git push origin master▸ SonarQube 분석 중 · commit a1b2c3d ......... 78s✖ 품질 게이트 실패 · 새 코드의 버그 1건 어디서 orders/service.py:142 왜 None일 수 있는 값의 속성에 접근합니다 (조회 결과가 없으면 AttributeError) 어떻게 조회 결과가 None이면 먼저 반환하거나 기본값을 지정하세요✖ push를 중단했습니다. 위 항목을 고친 뒤 다시 push하세요.
막혔을 때 터미널 출력 예시 (형식만 재구성, 파일과 내용은 가상)

결과

  • 운영 중입니다. 기존 이슈는 대시보드로 추적하고 새 코드만 막는 규칙이라, 개발 흐름을 멈추지 않고 바로 적용했습니다.
  • 모든 개발자가 같은 품질·보안 기준으로 검사받습니다. 보안 점검이 개인 역량이 아니라 배포 흐름의 한 단계가 됐습니다.
  • AI 코딩 도구로 작업해도 흐름상 반드시 게이트를 거치고, 막히면 AI가 게이트 출력을 보고 원인을 찾아 고칩니다. 잠재 오류를 운영 배포 전에 걸러냅니다.
  • 추가 인프라 비용 0.

042026.02 ~ 현재

올리고 멀티채널 구조

  • Python 3.11
  • FastAPI
  • SQLAlchemy 2.0
  • Pydantic v2
  • PostgreSQL
  • AWS
  • GitHub Actions

문제

판매자는 같은 상품을 채널마다 다시 등록합니다. 카테고리 체계, 필수 속성, API 인증 방식이 채널마다 달라서 상품 100개를 5개 채널에 올리면 500번의 수작업이 됩니다.

질문별 판단

  1. 채널이 늘어나면

    상품 마스터 한 벌 + 채널 어댑터 N개로 N×M을 1:N으로 바꿨습니다. 새 채널은 어댑터만 구현합니다.

    실측어댑터 19종 구현, 13개 채널 실운영

  2. 인프라는

    AWS를 단독 설계·운영합니다. CloudFront OAC로 S3 직접 접근을 막고, VPC Gateway Endpoint로 ECS와 S3 통신을 내부망으로 보냅니다.

  3. 배포는

    GitHub Actions로 컨테이너 사전 검증 → ECR push → ECS 배포까지 자동화하고, Health Check에 실패하면 이전 버전으로 자동 롤백합니다.

  4. 실패를 어떻게 알릴까

    응답 형식을 하나로 통일하고 에러를 E100~E700 7개 그룹으로 분류했습니다. 대량 작업은 행 단위로 성공·실패를 돌려줘, 한 건 실패로 전체가 롤백되지 않습니다.

결과

  • 2026.09.21 일반 사용자 대상으로 정식 오픈했습니다.
  • 채널 어댑터 19종을 구현해 13개 채널을 실운영 중입니다. 새 채널은 어댑터 하나만 구현하면 붙습니다.
  • 최근 30일 API 요청 167,762건 중 5xx 서버 오류 0건 (2026-09 기준).
  • AWS 인프라와 배포 파이프라인을 혼자 설계·구축·운영합니다.

// 액자 · 서버 타워

기사와 인프라

올리고 보도

  1. 2026.08.03 · 출시 · 이지어드민 부가서비스

    핌즈, 이지어드민 솔루션 연동 상품등록 서비스 '올리고' 출시 (디지털타임스, 새 창)

    한 번 등록한 상품을 스마트스토어·쿠팡·지마켓 등 여러 채널에 일괄 등록하고, 고유 코드로 채널별 상품 매칭 오류를 막습니다.

    디지털타임스

  2. 2026.09.21 · 정식 오픈 · 단독 서비스

    핌즈, 온라인 판매자용 상품등록 프로그램 '올리고' 단독 운영 (아이티비즈, 새 창)

    이용 신청과 접속 체계를 이지어드민과 분리해, 이지어드민 없이도 쓰는 단독 서비스로 전환했습니다.

    아이티비즈

이 사이트의 AWS 구성

S3 + CloudFront + Route 53으로 사이트를 올리고, 문의 기능만 API Gateway + Lambda로 처리합니다. 방문자는 항상 CloudFront로 들어오고 /api/*만 API Gateway로 갑니다. 전체 구성은 AWS CDK(TypeScript)로 코드화했습니다.

포트폴리오 사이트 AWS 구성 방문자는 Route 53으로 도메인을 조회하고 CloudFront로 접속한다. CloudFront는 ACM 인증서(us-east-1)로 HTTPS를 처리하고, 일반 경로는 OAC로 S3의 정적 파일을, /api/* 경로는 API Gateway로 보낸다. API Gateway는 문의 처리 Lambda를 부르고, Lambda는 문의를 DynamoDB에 저장하고 SNS로 이메일 알림을 보낸다. GitHub Actions는 OIDC로 권한을 받아 빌드 결과를 S3에 올린다. AWS Budgets가 월 5달러 초과 시 알린다. 월 비용은 도메인 포함 약 2달러. AWS 월 약 $2 · 도메인 포함 방문자 브라우저 GitHub Actions 빌드 · 캐시 무효화 HTTPS DNS 조회 Alias TLS 인증서 /* · OAC /api/* 업로드 · OIDC Route 53 도메인 · DNS CloudFront CDN · HTTPS · noindex ACM 인증서 · us-east-1 S3 정적 파일 · 비공개 버킷 API Gateway /api/* · 스로틀링 Lambda 문의 처리 DynamoDB 문의 저장 SNS 이메일 알림 AWS Budgets · 월 $5 초과 시 알람
화면이 좁으면 그림을 옆으로 밀어서 볼 수 있습니다.

설계 판단

  1. 서버를 둘까

    정적 사이트라 서버 없이 S3 + CloudFront로 배포합니다. 서버가 필요한 건 문의 하나라 Lambda로만 처리합니다.

  2. 버킷은 어떻게 지킬까

    버킷은 비공개로 두고 CloudFront OAC로만 읽습니다. S3 주소로 직접 들어올 수 없습니다.

  3. API는 어디에 둘까

    같은 도메인의 /api/*만 API Gateway로 보냅니다. 출처가 하나라 CORS 설정이 필요 없습니다.

  4. 배포 권한은

    GitHub Actions가 OIDC로 IAM 역할을 맡습니다. 저장소에 액세스 키를 두지 않습니다.

  5. 스팸과 요금 폭주는

    API는 초당 1건·순간 5건으로 스로틀링하고 Lambda 동시 실행을 제한합니다. 숨김 필드로 봇을 거르고 입력 길이를 제한합니다. 첫날부터 월 초과 예산 알람을 걸었습니다.

  6. 검색 노출은

    링크로만 공유하는 사이트라 noindex 헤더를 걸고, 기본 보안 헤더(HSTS, 프레임 차단 등)를 함께 붙입니다.

3D 방을 불러오는 중…