Professional Experience 실무 경력

Production work,
told as the decision behind it.
현업 결과물,
그 뒤의 판단으로 정리합니다.

Current AI systems and the commercial services I built and operated. Each project shows the decision, outcome, and remaining limits.현재 맡고 있는 AI 시스템과 직접 구축·운영한 상용 서비스입니다. 핵심 판단과 결과, 남은 한계를 정리했습니다.

A one-minute introduction 영상으로 보는 1분 소개
1-minute intro 1분 소개 영상
한국어 · 1:00
English · 1:00
Current work 현재 실무

Video workflow & RAG foundations 영상 작업 흐름과 RAG 기술 기반

Company cases described through workflow, decisions and evidence limits. Source code is private; final-use quality and user outcomes are distinguished from technical operation.회사 사례를 작업 흐름·판단·근거의 한계로 설명합니다. 소스는 비공개이며 기술 동작과 최종 사용 품질·사용자 성과를 구분합니다.

Long-Form AI Video Production System 장편 AI 영상 제작 시스템

Current work 현재 실무 Company · not public 회사 · 비공개

Turn an approved creative brief into a reproducible, multi-segment video generation plan.승인된 제작 브리프를 재현 가능한 다중 세그먼트 영상 생성 계획으로 바꾸는 시스템.

My project contribution is 85%. I own service planning, architecture, the full backend and management of two working developers. Frontend development is handled separately. Reference functionality was added using custom nodes.프로젝트 기여도는 85%입니다. 서비스 기획·아키텍처·백엔드 전체와 실무 개발 인원 2명의 팀 관리를 맡고 있습니다. 프런트엔드는 별도 담당이며, 커스텀 노드를 활용해 레퍼런스 기능을 추가했습니다.

In development within a CEO-led task force, focused on B2B advertising. I perform most testing; the system is not yet used in operational work.사장님 직속 TFT에서 B2B 광고 기능을 중심으로 개발 중입니다. 테스트는 주로 직접 수행하며 아직 실제 업무에는 사용하지 않습니다.

User & problem대상과 문제
For business staff requesting promotional videos in natural language, with generation workflows kept behind the interface.업무 담당자가 생성 그래프 대신 원하는 영상과 시나리오를 다루도록 설계한 자연어 요청 흐름입니다.
Choice & workflow선택과 작업 흐름
Request → brief review → approved workflow parameters → segment generation and review. Require image review on relevant paths; some image-free paths support automatic approval.요청 → 브리프 검토 → 승인된 워크플로우의 매개변수 → 구간 생성·검토로 연결합니다. 이미지 경로에는 필요한 검토를 두며, 일부 무이미지 경로는 자동 승인을 지원합니다.
Evidence & next decision근거와 다음 판단
Generation and master assembly run locally. Reference features support long-form continuity and voice consistency to a degree. Current evaluation focuses on differences in output quality across models.로컬에서 생성·완성본 조립까지 동작합니다. 레퍼런스 기능으로 장편 연속성과 목소리 일관성을 일정 수준 구현했고, 현재는 모델별 결과 품질의 차이를 검토합니다.
6 design decisions & verification설계 판단 6개와 검증 근거

Active company project, source not public. The brief → approval → plan → segment generation path runs end-to-end against a local generation host; reference features support continuity and voice consistency, while model-specific output quality remains under evaluation. Described at the architecture / decision level only. 진행 중인 회사 프로젝트로 소스는 비공개입니다. 브리프 → 승인 → 계획 → 세그먼트 생성 경로는 로컬 생성 호스트에서 end-to-end로 동작하며, 레퍼런스로 연속성과 목소리 일관성을 일정 수준 구현했습니다. 남은 품질 과제는 모델별 결과 차이입니다. 아키텍처·의사결정 수준으로만 서술합니다.

01 What executes is an approved spec, not a conversation 실행되는 것은 대화가 아니라 승인된 명세다

The creative brief separates the user’s statements, model assumptions and missing questions before compiling a structured generation plan. Relevant image paths require review; some image-free paths permit automatic approval. The model fills parameters in an approved workflow rather than creating an arbitrary graph. 크리에이티브 브리프에서 사용자 발언·모델 추정·추가 질문을 구분한 뒤 구조화된 생성 계획으로 변환합니다. 이미지가 필요한 경로에는 검토를 두고 일부 무이미지 경로는 자동 승인을 허용합니다. LLM은 임의 그래프를 만드는 대신 승인된 워크플로우의 매개변수를 채웁니다.

"Assumptions are shown before approval, not discovered in the output." "추정값은 승인 전에 보인다. 결과물에서 발견되는 게 아니라."

02 The LLM never authors the workflow graph LLM은 워크플로우 그래프를 만들지 않는다

Let a model assemble a ComfyUI graph freely and you get nonexistent nodes, incompatible checkpoints, VRAM blowouts, and runs nobody can reproduce. So the graph is fixed to operator-qualified workflows and the model fills only declared parameter slots . That inverted the product surface too: users don't pick a workflow, they assemble a structured prompt — shots, duration, dialogue, soundscape, music, constraints — and the workflow stays an internal execution recipe. 모델이 ComfyUI 그래프를 자유롭게 조립하게 두면 존재하지 않는 노드, 호환되지 않는 체크포인트, VRAM 초과, 아무도 재현할 수 없는 실행이 나옵니다. 그래서 그래프는 운영자가 검증한 워크플로우로 고정하고, 모델은 미리 선언된 파라미터 슬롯 만 채웁니다. 이 결정은 제품 표면도 뒤집었습니다 — 사용자는 워크플로우를 고르지 않고 숏·길이·대사·환경음·음악·제약으로 이뤄진 구조화 프롬프트를 조립하며, 워크플로우는 내부 실행 레시피로 남습니다.

03 One execution boundary, swappable runtimes, immutable snapshots 실행 경계는 하나, 런타임은 교체 가능, 스냅샷은 불변

Our backend is the only execution boundary: a local ComfyUI host and a hosted runtime sit behind the same adapter contract, with identical queue/history state handling and receipt-based resume and artifact recovery. The workflow and parameters at run time are frozen as an immutable snapshot — recipes change only as a new revision — so reproduction is snapshot-based, not memory-based. Nothing that leaves the boundary carries a raw graph, provider payload, storage key, or credential. 우리 백엔드가 유일한 실행 경계입니다. 로컬 ComfyUI 호스트와 호스팅 런타임은 같은 adapter 계약 뒤에 있고, 큐·히스토리 상태 분기와 receipt 기반 재개·산출물 회수를 동일하게 처리합니다. 실행 시점의 워크플로우와 파라미터는 불변 스냅샷 으로 고정되고 레시피는 새 revision으로만 바뀌므로, 재현은 기억이 아니라 스냅샷 기준입니다. 경계 밖으로 나가는 응답에는 raw graph·provider payload·storage key·credential이 포함되지 않습니다.

04 The 15-second wall: long form is a continuity problem, not an editing one 15초의 벽 — 장편은 편집 문제가 아니라 연속성 문제다

The generation model produces about 15 seconds at a time, so a 15 / 30 / 60 / 180-second request is analyzed once per video and planned into exactly 1 / 2 / 4 / 12 segments. The decision that mattered was refusing to treat two things as one feature: reference-to-video (identity, style, motion) and frame chaining (last frame → next first frame) are a subject anchor and a time-boundary anchor, and they are verified separately. A manager step that sees the whole video at once decides per segment which references to use or omit , and a segment left with no reference is explicitly stopped rather than quietly generated from text. 생성 모델이 한 번에 만드는 길이는 약 15초입니다. 그래서 15 / 30 / 60 / 180초 요청은 영상당 한 번 분석해 정확히 1 / 2 / 4 / 12개 세그먼트로 계획합니다. 여기서 중요한 판단은 두 가지를 같은 기능으로 묶지 않은 것입니다 — reference-to-video (인물·스타일·모션 동일성)와 프레임 체이닝 (이전 마지막 프레임 → 다음 첫 프레임)은 각각 대상 앵커와 시간 경계 앵커이며, 별도로 검증합니다. 전체 영상을 한 번에 보는 관리자 단계가 세그먼트마다 어떤 참조를 쓰고 뺄지 결정하고, 참조가 하나도 남지 않은 세그먼트는 조용히 텍스트로 생성하지 않고 명시적으로 중단합니다.

"A reference is who it is. Frame chaining is when it is. They are not the same feature." "reference는 '누구인가'이고, 프레임 체이닝은 '언제인가'다. 같은 기능이 아니다."

05 Three generation modes, one prompt IR — and a gate that only judges 세 생성 모드, 하나의 prompt IR — 그리고 판정만 하는 게이트

Text-, image-, and reference-driven generation each grew their own prompt rules, so I unified them behind a single structured prompt IR and renderer: verbatim dialogue with lip-sync and subtitle policy, ambient soundscape kept separate from non-diegetic music, length ceilings, and constraint phrasing now apply identically across all three. Multimodal image analysis records what the user declared apart from what the pixels show , and never rewrites the user's own classification. The specialist steps are not free-form agent chat — each has a fixed input, output, and write scope — and the pre-generation gate returns only PASS / REPAIR / BLOCKED with a target step and reasons. It never edits the prompt itself; a repair re-runs just the failed step, under a call ceiling. 텍스트·이미지·참조 기반 생성이 각자의 프롬프트 규칙을 갖게 되자, 하나의 구조화 prompt IR과 renderer로 통합했습니다. 대사 원문과 립싱크·자막 정책, 환경음과 비-디제틱 음악의 분리, 길이 상한, 제약 표현이 이제 세 모드에 동일하게 적용됩니다. 멀티모달 이미지 분석은 사용자가 선언한 사실 과 픽셀에서 관찰된 것 을 분리해 기록하며, 사용자가 정한 분류를 임의로 바꾸지 않습니다. 전문가 단계들은 자유로운 에이전트 대화가 아니라 입력·출력·쓰기 권한이 고정된 순서로 돌고, 생성 직전 게이트는 PASS / REPAIR / BLOCKED 와 대상 단계·근거만 반환합니다. 게이트가 프롬프트를 직접 고치지는 않으며, 보정은 실패한 단계만 호출 상한 안에서 다시 실행합니다.

"The gate judges. It does not rewrite the prompt." "게이트는 판정한다. 프롬프트를 고쳐 쓰지 않는다."

06 Experiment record and current implementation 기존 실험과 현재 구현을 구분

Earlier music-video, ad and drama trials recorded issues with musical boundaries, visual information, on-screen Hangul and voice quality. Reference features now support long-form continuity and voice consistency to a degree. The current task is evaluating model-specific output quality. The existing engineering snapshot includes 10 decision briefs, 26 dated verification records, roughly 490 backend tests and a canonical contract. One change came from review feedback: a reviewer flagged unwanted speech in a revised clip; narration mixed into the context video was prompting the model to speak, so the context now carries only picture and background audio, and the rerun's replacement clip had zero detected speech segments. That is one experiment's observation, not a fix for all speech errors. 기존 뮤직비디오·광고·드라마 실험에서는 음악 경계, 화면 정보량·한글, 목소리 등의 품질 문제를 기록했습니다. 현재는 레퍼런스 기능으로 장편 연속성과 목소리 일관성을 일정 수준 구현했으며, 모델별 결과 품질을 검토합니다. 기존 기술 기록에는 결정 브리프 10건, 날짜별 검증 기록 26건, 약 490개의 백엔드 테스트와 단일 계약 정본이 있습니다. 검토 피드백으로 바꾼 사례도 있습니다. 검토자가 수정 영상의 원치 않는 발화를 지적했고, 문맥 영상에 섞인 나레이션이 모델의 발화를 유도한 것으로 판단해 화면과 배경음만 문맥으로 넘기도록 바꿨습니다. 재실행한 교체 구간의 음성 탐지는 0건이었습니다. 해당 실험의 관찰이며 발화 오류 전체의 해결은 아닙니다.

How it connects: 연결점: Same discipline as the legal assistant below and my public PoCs — the model proposes, a deterministic layer verifies, and an explicit gate decides what ships. Here the artifact is a video instead of an answer, and the reproducible unit is an execution snapshot instead of a source reference. 아래 법률 어시스턴트, 그리고 제 공개 PoC와 같은 방식입니다 — 모델이 제안하고, 결정적 레이어가 확인하고, 명시적 게이트가 무엇을 내보낼지 결정합니다. 다만 여기서 산출물은 답변이 아니라 영상이고, 재현의 단위는 source reference가 아니라 실행 스냅샷입니다.

Verified Agentic-RAG System 검증형 Agentic-RAG 시스템

Current work 현재 실무 Company · not public 회사 · 비공개

A legal-domain assistant that links answers to verifiable sources.법률 질문에 답하고, 답변의 주장을 원문 근거로 검증하는 어시스턴트.

An MVP for foundational AI-service capabilities in the CEO-led task force. My project contribution is 90%, and I perform most testing. It is not yet used in operational work.사장님 직속 TFT에서 초기 AI 서비스의 기본 기능을 위한 MVP로 개발했습니다. 프로젝트 기여도는 90%이며 주로 직접 테스트하는 단계로, 아직 실제 업무에는 사용하지 않습니다.

Technical problem기술 과제
Separate request clarification, retrieval and claim verification so unsupported legal answers can be withheld or reviewed.요청 정리·검색·주장 검증을 분리해 근거가 부족한 법률 답변을 보류하거나 검토하도록 만든 기술 사례입니다.
Implemented boundary구현된 경계
The pipeline runs on a Korean statute corpus. A versioned HTTP Verification Core returns a package and recommendation; the caller owns final storage and adoption.한국 법령 코퍼스에서 파이프라인이 동작합니다. 버전이 붙은 HTTP 검증 Core는 package와 권고를 반환하고 최종 저장·채택은 호출 서비스가 맡습니다.
Limit & next decision한계와 다음 판단
Transport success and passing guards do not establish answer accuracy. Human review handles unresolved requests; actual user value and legal-answer quality need separate evaluation.정상 통신과 가드 통과는 답변 정확도의 증명이 아닙니다. 미해결 요청은 사람 검토로 넘기며 실제 사용자 효과와 법률 답변 품질은 별도 평가가 필요합니다.
7 design decisions & verification설계 판단 7개와 검증 근거

Company project, source not public (internal Git only). The retrieval-to-gate pipeline runs end-to-end on a real Korean statute corpus. The extraction milestone is closed: the verification core now lives as its own internal repository with a versioned HTTP contract, and the next phase starts as a separate consumer project. Described here at the architecture / decision level only. 회사 프로젝트로 소스는 비공개입니다(사내 Git 전용). 검색→게이트 파이프라인은 실제 한국 법령 코퍼스에서 end-to-end로 동작합니다. 추출 마일스톤은 닫혔고, 검증 Core는 버전이 붙은 HTTP 계약을 가진 독립 사내 저장소로 분리됐으며 다음 단계는 별도 consumer 프로젝트로 시작합니다. 여기서는 아키텍처·의사결정 수준으로만 서술합니다.

01 Contract-first, four independent layers Contract-first, 네 개의 독립 레이어

The problem isn't solved by one LLM call, so I split it into four layers — Intake, Knowledge, RAG Harness, Verification/Gate — and fixed the contracts between them before building . Each layer is developed independently against mocks; the boundary objects (Task Brief, Source Ref, Gate Decision) are the single source of truth. 이 문제는 LLM 한 번 호출로 풀리지 않습니다. 그래서 Intake / Knowledge / RAG Harness / Verification·Gate 네 레이어로 나누고, 구현보다 먼저 레이어 간 계약을 고정 했습니다. 각 레이어는 mock으로 독립 개발하고, 경계 객체(Task Brief·Source Ref·Gate Decision)가 단일 진실 공급원입니다.

02 Build the trust foundation before the features 기능보다 신뢰 기반을 먼저

I build Knowledge + Verification first — the trust foundation — before the RAG that feeds them. The core invariant: unverified text never reaches the user , and any answer mutation (e.g. redacting an unsupported claim) is re-verified before it ships. RAG보다 Knowledge·Verification을 먼저 만듭니다 — 신뢰 기반부터. 핵심 불변식: 검증되지 않은 텍스트는 사용자에게 나가지 않는다 . 답변을 바꾸는 처리(예: 근거 없는 claim 제거)는 재검증을 거친 뒤에만 나갑니다.

"Unverified text never reaches the user." "검증되지 않은 텍스트는 사용자에게 나가지 않는다."

03 The vector DB is a cache, not the truth — retrieval is ontology-aware VectorDB는 진실이 아니라 캐시다 — 검색은 ontology-aware

A common RAG trap is treating the vector store as the source of truth. Here it's only a retrieval cache — final evidence is always reloaded from an immutable source snapshot via source_ref . Retrieval is ontology-aware: it returns the smallest unit plus its path in the legal tree (article / clause / item) and reloads the surrounding context on demand, so a citation stays reproducible even if the parser or policy changes. 흔한 RAG 함정은 vector store를 진실의 원천으로 다루는 것입니다. 여기서 그것은 검색 캐시일 뿐이고, 최종 근거는 항상 불변 source snapshot 에서 source_ref 로 재로드됩니다. 검색은 ontology-aware입니다 — 법령 트리(조/항/호/목) 에서 최소 단위 + 경로를 돌려주고 상위 맥락은 필요할 때 재조회하므로, parser·정책이 바뀌어도 인용은 재현됩니다.

"The vector DB is a cache. The source snapshot is the truth." "VectorDB는 캐시다. Source Snapshot이 진실이다."

04 Schema-guided intake: the schema drives the conversation Schema-guided intake: 스키마가 대화를 주도한다

A vague non-developer request ("is this contract risky?") isn't handed straight to the RAG. The default path is deterministic — a schema registry, a validator, and a compiler decide the intake status; the LLM task classifier and slot filler sit behind opt-in flags and are allowed only to propose , against a registered task-type list and a field allowlist. The model refines, it doesn't reason ; unknown fields stay null rather than guessed; a user-confirmed slot cannot be overwritten by a later model guess; and it asks the user only for what's genuinely missing. The resulting Task Brief is itself a validated artifact, and a session that can't be resolved is parked for human review until a reviewer resolves it explicitly. 비개발자의 모호한 요청("이 계약서 위험해?")을 RAG에 바로 넘기지 않습니다. 기본 경로는 결정론 입니다 — 스키마 레지스트리·validator·compiler가 intake 상태를 결정하고, LLM task classifier와 slot filler는 opt-in 플래그 뒤에서 등록된 task type 목록과 필드 allowlist 안에서 제안만 합니다. 모델은 추론이 아니라 정제 하고, 모르는 필드는 추측하지 않고 null 로 두며, 사용자가 확정한 슬롯은 이후 모델 추정이 덮어쓸 수 없고, 정말 빠진 것만 사용자에게 묻습니다. 그렇게 만든 Task Brief 자체도 검증 대상이며, 해소되지 않는 세션은 추측 대신 human review로 보류(park) 되어 리뷰어가 명시적으로 해제할 때까지 대기합니다.

"The LLM refines the request; it doesn't reason about it. If it doesn't know, the value is null." "LLM은 요청을 정제할 뿐, 추론하지 않는다. 모르면 값은 null이다."

05 Agentic research — but the LLM only proposes Agentic 연구 — 그러나 LLM은 제안만 한다

Answer generation is a multi-agent research loop — query planning, claim extraction, evidence linking, semantic verification, revision — with a gate that can send work back ( retrieve_more / revise / ask_user ) or, when the grounding budget is exhausted, park it for human review . The division of labor is strict: the LLM proposes candidates, the verification layer confirms grounding claim-by-claim, and the gate decides what ships. 답변 생성은 멀티 에이전트 연구 루프입니다 — query planning, claim extraction, evidence linking, semantic verification, revision — 그리고 작업을 되돌리거나( retrieve_more / revise / ask_user ), grounding 예산이 소진되면 human review로 보류 하는 gate가 있습니다. 역할 분담은 엄격합니다: LLM은 후보를 제안하고, 검증 레이어가 claim 단위로 grounding을 확인하며, gate가 무엇을 내보낼지 결정합니다.

06 Verified the same way I verify everything 내가 모든 걸 검증하는 방식 그대로

I hold this private work to the same bar as my open PoCs, and keep the same separated trails: dated verification records (each a conditional verdict, guarded both ways so a fix can't bring the bug back or start flagging valid cases), daily working logs , a single canonical contract file held in place by drift-lock tests that fail the moment the spec and the code diverge — including an exact-drift guard between the committed OpenAPI document and the running service's own schema. This MVP has accumulated development records across its layers: 177 dated verification records across ~2 months of daily logs, on a suite that reached 1,119 tests in the integrated repository. AI does the work; the verification decides whether it is real. 이 비공개 작업도 공개 PoC와 같은 기준으로, 같은 분리된 자취를 남깁니다 — 변경마다의 날짜별 검증 기록 (조건을 명시한 판정 + 양방향 회귀 가드 — 버그 재발과 정상 케이스 오탐 양쪽을 막음), 일일 워킹로그 , 명세와 코드가 어긋나는 순간 실패하는 drift-lock 테스트로 고정한 단일 정본 계약 파일, 그리고 커밋된 OpenAPI 문서와 실행 중인 서비스의 스키마 사이 exact-drift 가드. MVP의 여러 레이어에 걸쳐 개발 기록을 남겼습니다 — 약 2개월치 일일 로그에 걸친 날짜별 검증 기록 177건 , 통합 저장소 기준 1,119개 까지 늘어난 테스트 스위트. AI가 일하고, 검증이 그것이 진짜인지 결정합니다.

How it connects: 연결점: This is the production-scale version of the same idea behind my public PoCs — AI proposes, deterministic verification confirms, a human-aware gate decides. 이것은 제 공개 PoC와 같은 사상의 실무 규모 버전입니다 — AI는 제안하고, 결정론적 검증이 확인하며, 사람을 고려한 gate가 결정합니다.

07 The verification core shipped as its own repo — and the wheel is not the contract 검증 Core를 독립 저장소로 분리 — 그리고 wheel은 계약이 아니다

Once the verification boundary held, I extracted it into a standalone repository whose only supported cross-service interface is a versioned private HTTP API: a candidate goes in, a verified package comes out. The Python wheel and package facade are explicitly not an SDK boundary, so no consumer can quietly couple to internals. Ownership is drawn the same way — the calling service owns authoritative storage and the commit decision; the core returns a verified package and a recommended caller action, and never commits on the caller's behalf. A published compatibility matrix between the testbed and the core API version acts as a release gate (independent release or rollback only while the published HTTP/schema versions stay compatible), structural regressions ban cross-package imports so the boundary can't erode by convenience, and the extracted repo was proven by rebuilding it from a publication manifest in a clean environment — wheel install, checkout-free liveness/readiness, image build, and a contract fingerprint. 검증 경계가 안정되자 Core를 독립 저장소로 분리했고, 다른 서비스가 쓸 수 있는 유일한 지원 인터페이스는 버전이 붙은 private HTTP API 하나입니다 — candidate가 들어가고 verified package가 나옵니다. Python wheel과 package facade는 SDK 경계가 아니라고 명시해, consumer가 내부 구현에 조용히 결합할 수 없게 했습니다. 소유권도 같은 방식으로 그었습니다 — authoritative storage와 commit 결정은 호출하는 서비스가 소유하고, Core는 검증된 package와 권고 action만 돌려줄 뿐 caller를 대신해 커밋하지 않습니다. testbed와 Core API 버전 사이의 호환성 매트릭스 가 릴리스 게이트로 동작하고(공개된 HTTP·schema 버전이 호환되는 동안에만 독립 릴리스·롤백 허용), 구조 회귀 테스트가 package 간 import를 금지해 편의로 경계가 무너지지 않게 했습니다. 분리된 저장소는 publication manifest로 clean 환경에서 다시 조립해 증명했습니다 — wheel 설치, checkout 없이 liveness/readiness, image 빌드, 계약 fingerprint까지.

"The wheel is not the contract. The published HTTP version is." "wheel은 계약이 아니다. 공개된 HTTP 버전이 계약이다."
Production work 현업·상용 작업

Professional experience 실무 경력

Seasonal Staffing Analysis for a Customer Center 고객센터 특별기간 인력 분석

Choose seasonal staffing while protecting service on high-load days. 고부하일의 서비스 수준을 고려해 시즌 인력 규모를 판단한 사례.

Choice 핵심 판단

Use the 90th percentile of high-load days instead of the average. A monthly trend with R² ≈ 0.06 was too weak to drive staffing. 평균 대신 고부하일의 90분위수(Q90)를 사용했습니다. 월별 추세는 설명력이 낮아(R² ≈ 0.06) 인력 계획의 근거로 삼지 않았습니다.

Evidence 확인된 근거

Historical back-testing reports about 91% accuracy and 96% detection of understaffed days. These figures describe historical classification, not post-adoption service performance. 과거 자료 역검증은 정확도 약 91%, 인원 부족일 탐지 약 96%를 보고합니다. 적용 이후의 서비스 성과와 구분합니다.

Operational outcome적용 성과

Applied the analysis to actual seasonal hiring, reducing headcount by three compared with the previous year and saving ₩6 million in labor costs. The post-adjustment call connection rate exceeded the 90% target.분석 결과를 실제 시즌 채용에 반영해 전년 대비 인력 3명을 줄이고 인건비 600만 원을 절감했습니다. 인원 조정 후 소통률은 목표인 90%를 상회했습니다.

Method, decisions & limits 방법·판단·한계
Operational cross-check운영 결과 대조

After the staffing adjustment, the call connection rate exceeded the 90% target. During Chuseok 2026, operating with one fewer person than planned produced a connection rate of 88–91%. The observed capacity shortfall also corresponded to one staff member, providing another operational comparison against the staffing and workload estimates.인원 조정 후 소통률은 목표인 90%를 상회했습니다. 2026년 추석에는 계획보다 1명이 부족한 상태에서 소통률 88~91%를 기록했습니다. 현장에서 관찰한 처리량 부족도 1명분에 해당해, 계획 인원과 처리량 산정을 실제 운영 결과와 대조했습니다.

Method 분석 방법

Compare daily call volume, answer rates and workload across peak seasons. Required seasonal staff are estimated from peak demand minus regular capacity, with a conservative reserve option. 일별 상담량·상담률·처리량을 시즌별로 비교했습니다. 피크 수요에서 정규 인력의 처리량을 빼 필요 인력을 산정하고 보수적 여유안을 제시했습니다.

Operational rule 운영 규칙

Secure staff two weeks before the season and add capacity when per-person load crosses the threshold. Q90 is a planning choice rather than a guarantee of service. 시즌 2주 전 인력 확보와 인당 부하가 임계값을 넘으면 증원하는 기준으로 연결했습니다. Q90은 계획의 선택이며 서비스 보장은 아닙니다.

Large-Scale Asset Generation & Review 대규모 에셋 생성·검수

Help reviewers compare legacy and generated images, choose a version, and request another attempt. 검수자가 기존 이미지와 생성본을 비교하고 버전을 선택하거나 재생성을 요청하는 흐름.

Workflow 작업 흐름

Compare original/generated images → inspect history → regenerate if needed → confirm or cancel. Status filters and search support review; Pass is a skip state, not approval. 원본·생성본 비교 → 이력 확인 → 필요 시 재생성 → 확정·취소로 연결합니다. 상태 필터와 검색을 제공하며 Pass는 승인과 다른 건너뛰기 상태입니다.

Evidence 확인된 근거

Of 22,068 unique entries in the generation record, the 16,052 that content creators finished reviewing were deployed to the live service. 생성 기록의 고유 22,068건 중 콘텐츠 제작자가 검수를 마친 16,052건을 실제 서비스에 반영했습니다.

Operational outcome적용 성과

Content creators reviewed the replacement assets, which were all deployed to the service, and the existing license was terminated. Generation API spend was about 40% of the former annual license fee, equivalent to a payback period of roughly 0.4 years on that API-spend basis.콘텐츠 제작자가 검수한 대상 에셋을 실제 서비스에 모두 반영하고 기존 라이선스를 종료했습니다. 생성 API 비용은 기존 연간 라이선스 비용의 약 40%로, 해당 API 비용 기준 회수 기간은 약 0.4년입니다.

Method, decisions & limits 방법·판단·한계
Feedback & contribution피드백과 개발 기여

Content-creator feedback led to bulk regeneration, editing tags and other metadata for direct database updates, and a page showing asset shortages by category. I handled development; the creators performed individual content review and approval.콘텐츠 제작자의 검수 피드백을 받아 대량 재생성, 태그 등 메타데이터를 수정해 실제 DB에 직접 반영하는 기능, 카테고리별 에셋 부족 현황을 확인하는 페이지를 추가했습니다. 개발을 맡고 콘텐츠의 개별 검수·승인은 제작자가 수행했습니다.

Scope choice 범위 선택

Use sequential generation with generation indexes and failure records for a bounded batch. A later batch can skip already processed items; this does not establish restoration of the exact previous queue. 범위가 정해진 배치에 직렬 생성·생성 인덱스·실패 기록을 사용했습니다. 이미 처리한 항목을 제외해 이어갈 수 있지만 이전 큐의 정확한 복원과는 구분합니다.

Review UX 검수 경험

Pagination and lazy image loading avoid fetching and rendering every image at once. 페이지 분할과 이미지 지연 로딩으로 전체 이미지를 한 번에 불러오지 않도록 구성했습니다.

NLP Category Matching Service NLP 카테고리 매칭 서비스

Match natural-language requests to managed categories and tags instead of asking a model to invent labels. 자연어 요청을 관리 중인 카테고리·태그에 연결하고 모델이 새 라벨을 임의로 만들지 않도록 한 서비스.

Choice 핵심 판단

Retrieve and rerank managed categories/tags, including controls for common-tag bias. Return master-data identifiers through a containerized API. 관리 중인 카테고리·태그를 검색·재순위화하고 공통 태그 편중을 조정했습니다. 컨테이너 API로 master data 식별자를 반환합니다.

Measurement 수치 조건

The README records ~125 seconds for a full rebuild of 4,121 mappings and ~2 seconds for an incremental update of 10 mappings. These are different workloads. README 기록은 4,121개 전체 재생성 약 125초와 10개 증분 갱신 약 2초입니다. 서로 다른 작업량의 비교입니다.

Users & contribution사용자와 직접 기여

Since March 2026, used by production agencies handling customer requests for v비즈링 and v프로필, available through all three mobile carriers. I owned the entire automatic-production module: natural-language category selection through image allocation. Internal use testing by the content specialist received satisfactory feedback.2026년 3월부터 이동통신 3사 제공 v비즈링·v프로필에서 고객 요청을 처리하는 제작대행사가 사용하는 서비스에 적용했습니다. 자연어 카테고리 선택부터 이미지 배분까지 자동제작 부분 전체를 담당했고, 콘텐츠 담당자의 내부 사용 테스트에서 만족스럽다는 평가를 받았습니다.

Method, decisions & limits 방법·판단·한계
Integration 연동 방식

Docker packaging and Swagger documentation provide an API integration boundary for the existing backend. Docker 패키징과 Swagger 문서로 기존 백엔드에 연결할 API 경계를 제공했습니다.

Internal Operations Automation 사내 업무 자동화

Turn recurring report preparation into a generate, inspect, edit, save and export workflow. 반복 보고서 작업을 생성·확인·편집·저장·출력 흐름으로 연결한 사내 도구.

Workflow 작업 흐름

Gathered the collection, reporting and notification functions planning/operations staff needed into one management page. Reports support generation, editing, scheduled runs and status checks; a CAPTCHA interruption is handed to a person before collection resumes. 흩어진 수집·보고·알림 기능 중 기획·운영 담당자에게 필요한 것만 하나의 관리 페이지로 모았습니다. 보고서 생성·편집, 정기 실행과 상태 확인을 제공하고, CAPTCHA로 수집이 멈추면 사람의 입력을 받아 재개합니다.

Choice 선택

Without production-database access and aiming for zero development-team effort, collection and notifications reuse endpoints the internal CMS pages already call plus existing email and SMS APIs. Authentication was solved by obtaining a login session through browser automation. When production requests or inbound calls pile up, webhooks alert the CS team and planning/operations staff by internal messenger and email; this is still running. 운영 DB에 접근할 수 없고 개발팀 공수 없이 만드는 것이 목표여서, 수집과 알림은 사내 CMS 페이지가 이미 쓰는 엔드포인트와 기존 메일·문자 API를 재사용했습니다. 인증은 브라우저 자동화로 로그인 세션을 받아 해결했습니다. 제작 요청이나 인입 콜이 몰리면 웹훅으로 CS팀과 기획·운영 담당자에게 사내 메신저·이메일 알림을 보내며, 지금도 운영 중입니다.

Operational outcome적용 성과

Used every month since March 2025 by the planning/operations specialist preparing monthly reports for four services (about 76 reports). Work previously taking an experienced planner two days—from data collection through analysis and report production—was generated in under half a day.2025년 3월부터 매월 4개 서비스의 월간보고서를 작성하는 기획·운영 담당자가 사용하고 있습니다(약 76건). 숙련된 이전 담당자가 데이터 수집부터 분석·보고서 제작까지 2일에 걸쳐 하던 작업을 반나절 미만에 생성했습니다.

Method, decisions & limits 방법·판단·한계
Scope 적용 범위

Report collection and notifications reuse existing CMS endpoints and email/SMS APIs; report storage and scheduled runs use the integrated platform's datastore and scheduler. Deployment and ongoing maintenance have a cost. 월간보고 수집·알림은 기존 CMS 엔드포인트와 메일·문자 API를 재사용하고, 보고서 저장과 정기 실행은 통합 플랫폼의 저장소·스케줄러를 씁니다. 배포와 지속적인 유지보수 부담도 있습니다.