Full Stack AI ENGINEER / PORTFOLIO 2026

구보은

AI가 안전하게 행동하도록 만드는 엔지니어

LLM이 답하는 데서 끝나지 않고, 승인된 계획만 외부 시스템에서 안전하게 실행되도록 설계합니다.

Role
Full Stack AI Engineer
Focus
LLM · Agent · Backend
Status
Open to work

실행의 경계를 설계한 프로젝트

광고 생성·시뮬레이션·운영 자동화를 한곳에서 지원하는 광고 AI 플랫폼

  • Python
  • FastAPI
  • LangGraph
  • DeepAgents
  • LangSmith
  • Meta Marketing API
  • PostgreSQL
Period
2026.05.27 — 07.14
Duration
7주
Role
LLM 기반 광고 운영 AI Agent 설계 및 실행 제어 시스템 개발
ClickMe 시뮬레이션 예측치와 Meta 소액 광고 실측 CTR·CVR 비교 화면
소액 광고 실험에서 시뮬레이션 예측치와 실측치를 비교했습니다. 결과는 제품 성과를 보장하지 않습니다.

Contribution

  1. LangGraph·DeepAgents 기반 광고 운영 Agent 워크플로우 설계 및 구현
  2. 위험도 기반 실행 제어(HITL)와 승인 정책 시스템 구축
  3. 실행 무결성·멱등성 검증 기반 Meta API 집행 파이프라인 구축
  4. 감사 로그와 실행 이력 관리 체계 구축
  5. 회귀 테스트 30건과 LangSmith 기반 Observability 환경 구축
ClickMe 광고 집행 파이프라인사용자 승인, proposal_hash 검증, Idempotency Key 선점, Meta API 집행, 결과 기록 순서로 진행됩니다. 해시가 불일치하면 실행이 중단되고, 키가 이미 존재하면 중복 집행이 차단되며, 집행이 실패하면 예약을 해제해 재시도할 수 있습니다.사용자 승인실행 계획 확정proposal_hash 검증승인한 계획과 동일한가Idempotency Key 선점동일 요청 진입 차단Meta API 집행외부 시스템 호출결과 기록추가 집행 차단해시 불일치 → 실행 중단키 존재 → 중복 차단집행 실패 → 예약 해제 후 재시도
승인된 계획만 한 번 집행되도록 만든 실행 파이프라인입니다. 각 단계는 통과하지 못하면 다음으로 넘어가지 않습니다.

Problem solving

01Meta API 집행과 DB 기록 사이의 중복 집행 방지
Problem

외부 Meta 호출과 DB 기록은 하나의 트랜잭션으로 묶을 수 없어, 실패와 재시도 과정에서 동일 요청이 중복 집행될 수 있었습니다.

Solution
  • 실행 전 Idempotency Key를 선점해 동일 요청의 진입을 차단했습니다.
  • 실행이 실패하면 예약을 해제해 안전한 재시도가 가능하도록 했습니다.
  • Meta 집행은 성공했지만 후속 처리가 실패한 경우 결과를 기록하고 추가 집행을 차단했습니다.
Result

같은 요청은 한 번만 실행되고, 실패가 발생해도 실행 상태의 정합성이 유지됩니다.

02승인 이후 실행 계획 변조 리스크 차단
Problem

사용자가 승인한 계획과 실제 실행 시점의 계획이 달라질 수 있는 무결성 리스크가 있었습니다.

Solution
  • 계획을 proposal_hash로 고정해 승인된 내용의 변경 여부를 검증했습니다.
  • 실행 직전에 승인 상태, 정책, 권한, 만료 여부를 다시 확인했습니다.
  • 예산을 정수형 원화 단위로 정규화해 금액 해석의 차이를 제거했습니다.
Result

승인받은 계획만 실행되도록 보장해 실행 무결성을 유지합니다.

CodeBlock

강의 판매 플랫폼의 결제·환불·정산 파이프라인. 현금과 적립금을 섞어 결제하고, 환불할 때 각각을 원래 자리로 되돌립니다

  • Java 17
  • Spring Boot 3.3
  • Spring Data JPA
  • Spring Security
  • MySQL
  • JUnit 5
  • TossPayments API
Period
2025.10.13 — 11.14
Duration
5주
Role
결제 승인·환불 후처리·정산 파이프라인 설계 및 구현

Contribution

  1. 외부 승인과 DB 기록을 분리한 2단계 결제 흐름(prepare · confirm) 설계
  2. 멱등성 키 UNIQUE 제약과 비관적 락 기반 중복 결제·동시 요청 차단
  3. 쿠폰 선점(AVAILABLE → RESERVED → USED)과 적립금 차감 배치 기록 설계
  4. 단계별 트랜잭션과 실패 기록으로 재개 가능한 환불 후처리 파이프라인 구축
  5. 환불 가능 기간 동안 지급을 묶어두는 정산 원장 상태 설계
  6. 서명 검증과 중복 차단을 갖춘 결제 웹훅 수신 경로 구현
  7. 동시성·조회 분리 회귀를 포함한 테스트 74건 작성
CodeBlock 쿠폰 상태 전이쿠폰은 AVAILABLE에서 결제 요청 시 RESERVED로, 결제 승인이 성공하면 USED로 전이합니다. 승인이 실패하면 RESERVED에서 AVAILABLE로 복원되고, 환불 후처리에서도 AVAILABLE로 복원됩니다.AVAILABLE사용 가능RESERVED결제 진행 중 선점USED사용 확정결제 요청승인 성공승인 실패 → 복원환불 후처리 → 쿠폰 복원
쿠폰은 결제 결과가 확정되기 전까지 사용 처리되지 않습니다. 실패와 환불은 모두 AVAILABLE로 되돌아옵니다.

Problem solving

01승인 응답을 받지 못했을 때의 판단 기준
Problem

승인 요청이 타임아웃되면 돈이 나갔는지 알 수 없습니다. 나가지 않았다고 판단했는데 실제로는 나갔다면, 취소할 대상을 모른 채 청구된 돈이 영영 돌아오지 않습니다.

Solution
  • 확실히 거절된 경우(4xx)만 집행되지 않은 것으로 보고, 타임아웃과 5xx는 전부 집행된 것으로 취급했습니다.
  • 예외에 실려 온 승인 식별자를 결제 기록에 남겨 취소할 대상을 잃지 않도록 했습니다.
  • 실제로 집행되지 않았다면 취소 요청이 '이미 취소됨'으로 돌아오므로, 그 응답을 성공으로 흡수했습니다.
Result

판단이 틀렸을 때의 비용이 한쪽으로만 쏠려, 잘못 판단해도 불필요한 취소 요청 한 번으로 끝납니다.

02환불 후처리 부분 실패를 데이터로 남기고 재개
Problem

환불 후처리는 외부 취소, 적립금 복원, 쿠폰 복원, 정산 제외, 주문 확정 다섯 단계입니다. 하나로 묶으면 뒤 단계의 실패가 앞의 성공까지 롤백시키고, 앞에서 멈추면 정산 제외가 실행되지 않아 환불된 금액이 강사에게 지급됩니다.

Solution
  • 각 단계를 독립 트랜잭션으로 분리하고 성공·실패를 행으로 남겼습니다.
  • 한 단계가 실패해도 예외를 삼키고 나머지 단계를 계속 진행했습니다.
  • 실패로 남은 단계는 5분 주기 배치가 시도 5회까지 재개하도록 했습니다.
Result

부분 실패가 지워지지 않고 데이터로 남으며, 사람이 개입하지 않아도 재개됩니다.

Other work

  • Toour

    2025.07 — 08 · 6인 팀 · 팀장

    국내 여행지 추천·커뮤니티 서비스입니다. 팀장으로 저장소와 브랜치 전략을 세우고 팀원 6명의 기능 브랜치를 통합했습니다. 기능은 게시판(작성·수정·신고·문의), 카카오 로그인, 회원가입과 계정 찾기, 관리자 게시물 관리를 맡았습니다.

    Java · Servlet/JSP · MyBatis · MySQL · TourAPI · Kakao Map/Login API

    Repository
  • FOM

    2026.05 · 6인 팀

    댄스 분석 서비스에서 음악 비트와 동작 타이밍의 정합을 채점하는 리듬 모듈을 맡았습니다. 파형 전체를 DTW로 비교하던 초기 방식이 박자가 밀린 동작을 걸러내지 못해, 강세 구간의 에너지 상관을 기준으로 채점 방식을 다시 세웠습니다.

    Python · MediaPipe · librosa · FastAPI

    Repository

AI를 기능이 아닌 시스템으로 봅니다

결제 파이프라인을 만들면서 실패해도 정합성이 깨지지 않는 구조를 고민했습니다. 그다음 LLM Agent를 만들면서 같은 질문이 더 어려운 형태로 돌아왔습니다. 모델이 스스로 판단해 외부 시스템을 건드릴 때, 무엇이 그 실행을 안전하게 만드는가.

지금은 이 질문을 중심에 두고 일합니다. 승인 없이는 실행되지 않게 하고, 재시도해도 중복되지 않게 하고, 무슨 일이 있었는지 나중에 추적할 수 있게 만드는 것. AI를 하나의 기능이 아니라 운영해야 하는 시스템으로 봅니다.

Engineering principles

  1. 01

    Human in the Loop

    위험한 실행은 사람의 명시적 승인을 거칩니다.

  2. 02

    Idempotent by Design

    재시도와 부분 실패에도 중복 실행을 막습니다.

  3. 03

    Observable Systems

    감사 로그, 실행 이력, 회귀 테스트로 결과를 추적합니다.

배우고, 검증하고, 구현했습니다

이력서 PDF 다운로드

Timeline

  1. 2025.04 — 11

    AWS와 Docker & Kubernetes를 활용한 Java Full-Stack 개발자 양성과정Education

    쌍용교육센터 · 백엔드 기초와 컨테이너 기반 배포 환경을 익혔습니다.

  2. 2025.07 — 08

    ToourProject

    6인 팀의 팀장으로 브랜치 통합을 맡고, 게시판과 카카오 로그인·회원 인증 기능을 구현했습니다.

  3. 2025.10 — 11

    CodeBlockProject

    강의 판매 플랫폼에서 결제 승인·환불 후처리·정산 파이프라인을 맡았습니다.

  4. 2026.05 — 07

    심화 생성형 AI 활용 인재양성과정Education

    하이미디어아카데미 · LLM과 Agent 설계로 방향을 옮겼습니다.

  5. 2026.05

    FOMProject

    댄스 분석 서비스에서 음악 비트와 동작 타이밍을 맞추는 리듬 스코어링 모듈을 구현했습니다.

  6. 2026.05 — 07

    ClickMeProject

    광고 운영 AI Agent의 실행 제어 시스템을 설계하고 Meta 집행 파이프라인을 구현했습니다.

Skills

Backend
Python · FastAPI · Java · Spring Boot
AI / ML
LLM · Claude API · OpenAI API · Gemini API · LangChain · LangSmith · LangGraph · DeepAgents
Frontend
HTML5 · CSS · React · Next.js
Database
MySQL · PostgreSQL
Tools & Infrastructure
Git · GitHub · AWS · GitHub Actions · Docker · draw.io

Certifications

SQLD · 정보처리기사 필기 합격 · 1종 보통 운전면허

안전하게 실행되는 AI 시스템을 함께 만들고 싶습니다.