전 네이버 리서치 엔지니어의 내부 고발: LLM 서비스 장애 1순위 'JSON 파싱 대참사' 해결 노트 공개

전 네이버 리서치 엔지니어의 내부 고발: LLM 서비스 장애 1순위 'JSON 파싱 대참사' 해결 노트 공개

박지민·2026년 1월 25일·3

전 네이버 리서치 엔지니어의 내부 고발: LLM 서비스 장애 1순위 'JSON 파싱 대참사' 해결 노트 공개

"JSON 형식으로 출력해줘"

프롬프트에 이 한 줄 넣고 퇴근하셨습니까?

축하합니다. 당신은 지금 시한폭탄을 배포했습니다.

서비스 장애는 거창한 할루시네이션 때문에 터지는 게 아닙니다.

대부분은 닫는 중괄호 `}` 하나 빼먹거나, 따옴표 `"` 짝이 안 맞아서 발생합니다.

현업에서 LLM을 다루면서 가장 뼈저리게 느낀 점이 있습니다.

LLM은 확률적 앵무새입니다. 앵무새한테 "문법에 완벽하게 맞는 코드를 뱉어라"라고 시키는 건 엔지니어링이 아니라 기도 메타입니다.

오늘 공유할 내용은 우리 팀 신입들이 들어오면 무조건 1주일 동안 읽히는 '구조화된 출력(Structured Outputs)' 관련 내부 가이드의 핵심 요약입니다.

어디 가서 "프롬프트 깎아서 JSON 만들어요"라고 하지 마세요. 부끄러운 일입니다.

---

**[팩트] 당신의 'AI 에이전트'가 멍청한 이유**

대부분의 주니어들이 LLM으로 API를 호출하거나 DB에 데이터를 넣으려 합니다.

문제는 LLM이 텍스트 생성기라는 점입니다.

--> 텍스트는 구조가 없습니다.

--> 시스템은 구조(JSON, XML)가 필요합니다.

이 간극을 메우려고 `try-catch`로 에러 잡고 재요청(Retry) 보내고 계시죠?

그게 다 돈입니다.

재요청 1회당 GPU 비용은 2배로 뜁니다. 레이턴시는 2배로 늘어납니다.

이건 장사가 안 되는 모델입니다.

---

**Constrained vs Unconstrained: 돈 버는 엔지니어의 선택**

출력을 제어하는 방법은 크게 두 가지입니다.

**1. Unconstrained (비제약적 방법)** :: 프롬프트 엔지니어링 - "제발 JSON으로 줘"라고 비는 방식. - 퓨샷(Few-shot) 예제 넣고 토큰 낭비함. - 결과: 가끔 실패함. 실패하면 서비스 중단.

**2. Constrained (제약적 방법)** :: 로짓(Logit) 레벨 제어 - 모델이 다음 토큰을 뱉을 때, 문법에 맞지 않는 토큰은 아예 후보에서 지워버림(Masking). - 스키마(Schema)에 정의된 형식이 아니면 생성 자체가 안 됨. - 결과: 수학적으로 100% 유효한 JSON 보장.

B2B 솔루션 팔면서 1번 쓰는 건 직무 유기입니다.

---

**트레이드오프(Trade-off): 공짜 점심은 없다**

"그럼 무조건 제약(Constrained) 걸면 되나요?"

아니요. 여기서 엔지니어의 역량이 갈립니다.

제약을 걸면 추론 속도가 느려질 수 있습니다. FSM(Finite State Machine)을 돌려가며 검증해야 하니까요.

하지만 생각해보세요.

파싱 에러 나서 재요청(Retry) 보내는 시간 vs 추론 단계에서 0.05초 더 쓰는 시간.

압도적으로 후자가 쌉니다.

게다가 쓸데없는 `Please output only JSON` 같은 설명 문구를 프롬프트에서 뺄 수 있습니다.

--> 입력 토큰 절약.

--> 비용 감소.

결국 구조화된 출력은 '안전' 때문이 아니라 '비용 효율' 때문에 하는 겁니다.

---

**현실적인 조언: 바퀴를 다시 발명하지 마라**

지금 당장 깃허브 뒤져서 정규식(Regex)으로 JSON 고치는 함수 짜고 있다면 멈추세요.

이미 이 문제를 해결하기 위한 라이브러리와 방법론은 차고 넘칩니다. (Instructor, Outlines 등)

최근 업데이트되는 핸드북들을 보면 단순히 JSON을 만드는 걸 넘어, 스트리밍(Streaming) 처리는 어떻게 할지, 복잡한 중첩 구조는 어떻게 풀지 이미 답이 나와 있습니다.

개발자는 코드를 짜는 사람이기 전에, '문제를 해결하는 도구'를 잘 고르는 사람이어야 합니다.

---

**결론**

"그건 생성형 AI가 아니라 엑셀로 하셔야죠"

제가 클라이언트에게 가장 자주 하는 말입니다.

하지만 굳이 LLM을 써야겠다면, 그리고 그 결과를 시스템에 태워야 한다면 '확률'에 기대지 마세요.

구조화된 출력은 선택이 아니라 필수입니다.

밤새 파싱 에러 로그 보면서 디버깅하기 싫다면, 지금 당장 여러분의 파이프라인에 스키마(Schema) 강제 로직을 심으세요.

이런 실수는 한 번으로 족합니다.

박지민
박지민AI 솔루션 기업 CTO

논문 속의 정확도(Accuracy)보다 통장 잔고를 지키는 추론 비용(Inference Cost)을 중시하는 생존형 기술 리더입니다. 화려한 데모 뒤에 숨겨진 엔지니어링의 고통과 비즈니스 가치를 냉철하게 분석합니다.

박지민님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!