Full Stack AI ENGINEER / PORTFOLIO 2026

KOO BOEUN

A Full Stack engineer who makes AI act safely

An LLM answering a question is not the end of the job. I design systems where only an approved plan reaches an external service, and it reaches it exactly once.

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

Projects where I drew the line around execution

An advertising AI platform that brings creative generation, simulation, and campaign automation into one place

  • Python
  • FastAPI
  • LangGraph
  • DeepAgents
  • LangSmith
  • Meta Marketing API
  • PostgreSQL
Period
May 27 — Jul 14, 2026
Duration
7 weeks
Role
Designed the LLM-based ad operations agent and its execution control system
ClickMe screen comparing simulated predictions against measured CTR and CVR from a small-budget Meta campaign
A small-budget live experiment comparing simulated predictions against measured results. These numbers do not guarantee product performance.

Contribution

  1. Designed and built the ad operations agent workflow on LangGraph and DeepAgents
  2. Built risk-tiered execution control (human in the loop) and an approval policy system
  3. Built the Meta API execution pipeline around integrity and idempotency checks
  4. Built audit logging and execution history tracking
  5. Set up 30 regression tests and a LangSmith-based observability environment
ClickMe ad execution pipelineThe flow runs from user approval through proposal_hash verification, idempotency key claim, Meta API execution, and result recording. A hash mismatch stops execution, an existing key blocks a duplicate, and a failed call releases the claim so the request can be retried.User approvalPlan is fixedVerify proposal_hashSame plan that was approved?Claim idempotency keyBlock duplicate requestsExecute Meta APIExternal system callRecord resultBlock further executionHash mismatch → stopKey exists → duplicate blockedCall failed → release claim, retry
The execution pipeline that lets only an approved plan run, and run once. A step that does not pass never reaches the next one.

Problem solving

01Preventing duplicate execution between the Meta API and the database
Problem

An external Meta call and a database write cannot share a transaction, so a failure and retry could execute the same request twice.

Solution
  • Claimed an idempotency key before execution so a duplicate request could not enter.
  • Released the claim when execution failed, making retries safe.
  • When the Meta call succeeded but follow-up processing failed, recorded the result and blocked any further execution.
Result

The same request executes once, and execution state stays consistent even when something fails.

02Closing the gap between an approved plan and what actually runs
Problem

The plan a user approved could differ from the plan present at execution time, which is an integrity risk.

Solution
  • Pinned the plan with a proposal_hash and verified that the approved content had not changed.
  • Re-checked approval state, policy, permissions, and expiry immediately before execution.
  • Normalized budgets to integer KRW so amounts could not be interpreted two ways.
Result

Only an approved plan can execute, which keeps execution integrity intact.

CodeBlock

The payment, refund, and settlement pipeline of a course marketplace. Cash and store credit are mixed in one payment, and a refund returns each to exactly where it came from

  • Java 17
  • Spring Boot 3.3
  • Spring Data JPA
  • Spring Security
  • MySQL
  • JUnit 5
  • TossPayments API
Period
Oct 13 — Nov 14, 2025
Duration
5 weeks
Role
Designed and built the payment approval, refund follow-up, and settlement pipeline

Contribution

  1. Split checkout into two requests (prepare, confirm) so the external approval sits outside any transaction
  2. Blocked duplicate charges and concurrent requests with a unique idempotency key and pessimistic locks
  3. Designed coupon reservation (AVAILABLE → RESERVED → USED) and per-batch records of credit spending
  4. Built a refund follow-up pipeline that survives partial failure through per-step transactions and recorded outcomes
  5. Designed a settlement ledger that holds payout until the refund window closes
  6. Built a payment webhook receiver with signature verification and duplicate suppression
  7. Wrote 74 tests, including concurrency and read/write separation regressions
CodeBlock coupon state transitionsA coupon moves from AVAILABLE to RESERVED when payment is requested, and to USED once approval succeeds. A failed approval restores it to AVAILABLE, and refund follow-up restores it as well.AVAILABLEReady to useRESERVEDHeld during paymentUSEDUse confirmedPayment requestedApproval succeededApproval failed → restoredRefund follow-up → coupon restored
A coupon is never marked used until the payment result is final. Both failure and refund return it to AVAILABLE.

Problem solving

01Deciding what a missing approval response means
Problem

When an approval request times out, there is no way to know whether the money moved. Treating it as 'not charged' when it was charged leaves money billed with no identifier to cancel against.

Solution
  • Treated only a definite rejection (4xx) as not charged; timeouts and 5xx are all treated as charged.
  • Recorded the approval identifier carried on the exception so the cancellation target is never lost.
  • Absorbed the 'already cancelled' response as success, since that is what a cancellation returns when nothing was charged.
Result

The cost of being wrong falls on one side only: a wrong guess costs one unnecessary cancellation call.

02Recording partial refund failures and resuming them
Problem

Refund follow-up has five steps: external cancellation, credit restore, coupon restore, settlement exclusion, order finalisation. As one transaction, a late failure rolls back earlier successes; stopping at the first failure skips settlement exclusion, and a refunded order still pays out to the instructor.

Solution
  • Ran each step in its own transaction and recorded success and failure as rows.
  • Swallowed the exception on a failed step so the remaining steps still ran.
  • Let a five-minute batch resume failed steps, up to five attempts.
Result

Partial failures survive as data instead of disappearing, and they resume without anyone intervening.

Other work

  • Toour

    Jul — Aug 2025 · team of 6 · team lead

    A domestic travel guide and community service. As team lead I set up the repository and branch strategy and integrated six developers' feature branches (199 of 476 commits, 118 of them merges). I built the board (writing, editing, reports, inquiries), Kakao login, sign-up and account recovery, and admin post moderation.

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

    Repository
  • FOM

    May 2026 · team of 6

    Owned the rhythm module that scores how closely movement timing tracks the beat in a dance analysis service. Comparing full waveforms with DTW could not separate movements that lagged the beat, so I rebuilt the score around energy correlation over accented segments.

    Python · MediaPipe · librosa · FastAPI

    Repository

I treat AI as a system to operate, not a feature to ship

Building a payment pipeline taught me to ask what keeps state consistent when a step fails. Building an LLM agent brought the same question back in a harder form: when a model decides on its own to touch an external system, what makes that action safe?

That question is the center of how I work now. Nothing runs without approval, nothing runs twice on a retry, and whatever happened can be traced afterwards. I treat AI as a system that has to be operated, not a feature that has to be shipped.

Engineering principles

  1. 01

    Human in the Loop

    Risky actions require an explicit human approval.

  2. 02

    Idempotent by Design

    Retries and partial failures never execute twice.

  3. 03

    Observable Systems

    Audit logs, execution history, and regression tests keep results traceable.

Learned it, verified it, shipped it

Download CV (PDF, Korean)

Timeline

  1. Apr — Nov 2025

    Java Full-Stack Developer Program (AWS, Docker & Kubernetes)Education

    Ssangyong Education Center · Learned backend fundamentals and container-based deployment environments.

  2. Jul — Aug 2025

    ToourProject

    Led a team of six, owned branch integration, and built the board, Kakao login, and member authentication.

  3. Oct — Nov 2025

    CodeBlockProject

    Owned the payment approval, refund follow-up, and settlement pipeline of a course marketplace.

  4. May — Jul 2026

    Advanced Generative AI Talent ProgramEducation

    Hi-Media Academy · Moved my focus to LLM and agent design.

  5. May 2026

    FOMProject

    Built the rhythm scoring module that matches music beats against movement timing in a dance analysis service.

  6. May — Jul 2026

    ClickMeProject

    Designed the execution control system for an ad operations AI agent and built the Meta execution pipeline.

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 · Engineer Information Processing (written exam passed) · Driver's license (Class 1)

I want to build AI systems that execute safely, with your team.