삼문판결 만들기 첫번째 이야기 (1)
삼문판결 만들기: “좋은 말” 대신 “판결문”을 선택한 이유
아이디어를 말하면 보통 이렇게 돌아온다.
“좋은 아이디어네요. 검증해보세요.”
문제는, 이 말이 기분은 좋게 만들지만 결정을 돕지는 않는다는 거였다.
그래서 나는 반대로 가보기로 했다.
칭찬 없는 판결 도구.
결론은 세 문장으로만.
이름은 삼문판결.
시작점: 대화형 조언이 아니라 문서형 판결
처음부터 목표는 분명했다.
- 길게 설명하지 않는다.
- 애매하게 위로하지 않는다.
- 읽자마자 다음 행동이 보이게 만든다.
그래서 출력 형식을 아예 고정했다.
- 배지: GUILTY / CONDITIONAL / NOT_GUILTY
- 문장 1: 판결 (가벼운 블랙코미디 허용)
- 문장 2: 이유 1개 (axis 하나만)
- 문장 3: 행동 1개 (구체적으로 하나만)
말 그대로 “상담”이 아니라 “판결문”처럼 보이게.
구현: Next.js 16으로 빠르게 MVP
이번 MVP는 Next.js 16(App Router)로 만들었다.
/: 입력 폼/api/judge: 판결 생성/r/[slug]: 결과 페이지/r/[slug]/opengraph-image: 공유용 카드 이미지
핵심은 결과 링크가 퍼졌을 때였다.
링크만 던져도 썸네일 자체가 판결 카드로 보이게 만들고 싶었다.
그래서 generateMetadata에서 slug별 OG 메타를 동적으로 붙이고,
next/og로 카드 이미지를 직접 렌더링했다.
디자인: 꾸미는 대신 정리했다
처음엔 시각 효과를 좀 넣어볼까 했는데, 금방 포기했다.
이 서비스는 화려하면 오히려 신뢰가 떨어졌다.
최종 카드 구성은 아주 단순하다.
- 좌상단: 삼문판결
- 우상단: 배지 pill
- 중앙: 문장 1 크게
- 하단: 문장 2, 3
- 맨 아래: axis 라인
과장 없이, 판결문처럼.
가장 어려웠던 건 “모델”이 아니라 “가드레일”
만들다 보니 제일 중요한 건 모델 선택보다 출력 규율이었다.
그래서 제약을 강하게 걸었다.
- 문장 길이 제한
- 금지 표현 필터
- 문장2는 axis 하나만
- 문장3은 행동 하나만
- 모욕/추상 처방 금지
그리고 규칙 위반 시
자동으로 한 번 더 재생성하도록 했다.
결국 삼문판결은 LLM 앱이라기보다,
“문장 규격 엔진 + 문서 UI + 공유 카드 시스템”에 가까워졌다.
만들고 나서 든 생각
이번에 가장 크게 배운 건 이거다.
좋은 답변보다 좋은 형식이 먼저다.
형식이 날카로우면,
모델이 조금 부족해도 결과물이 꽤 쓸 만해진다.
삼문판결은 아직 MVP지만,
적어도 하나는 확실하다.
아이디어를 읽고 나서
“그래서 뭘 해야 하지?”가 아니라
“아, 지금 이걸 하면 되겠구나”가 남게 만들고 싶었다.