AI와 함께 만드는 삶

PM으로 일하며 AI와 함께 무언가를 만들어가는 삶을 기록합니다.

AI와함께만드는삶 28

서비스 둘러보기 — 누구나법률 지금까지 나온 화면들 (번외)

앞의 일곱 장 동안 "왜 이렇게 만들었는지", "뭐가 잘못됐고 어떻게 고쳤는지"만 이야기했다. 이번엔 그래서 지금 뭐가 남았는지, 실제 화면으로 보여준다.카테고리 선택 — 일반과 기업은 처음부터 갈라진다들어오자마자 "일반 사용자"와 "기업"으로 갈라진다. 일반은 주거·근로·소상공인 같은 생활 밀착 카테고리, 기업은 B2B·인사노무·IP·투자·컴플라이언스 5개 카테고리로 나뉜다. 1장에서 "취약계층 대상"으로 시작한 서비스가, 5장을 거치며 기업형 유료 서비스까지 같이 갖추게 된 결과가 이 갈림길이다.AI 법률 상담 — 카테고리별로 다른 전문가가 답한다 노무 카테고리에서 물으면 노무사 톤으로, 이혼 카테고리에서 물으면 가사 전문 변호사 톤으로 답한다. 답변 아래엔 실제로 검색된 법조문·판례가 인용 카드 형..

PM을 위한 AI 실무 사전 7편 — 청킹, 바이너리 파싱, diff 알고리즘

누구나법률 7장(기업형 계약 분석 엔진 만들기)에서 나온 개념: 텍스트 청킹, 바이너리 파일 파싱, diff(비교) 알고리즘, 규칙 기반 판정.청킹(Chunking) — LLM에게 긴 문서를 나눠서 주는 기술모든 LLM은 한 번에 처리할 수 있는 텍스트 양(컨텍스트 길이)에 한계가 있다. 문서가 그 한계보다 길면, 통째로 넣을 수 없다. 청킹은 긴 문서를 의미 있는 단위로 쪼개서, 나눠서 처리한 뒤 결과를 다시 합치는 기법이다.여기서 실무적으로 중요한 건 "어디서 자르는가"다. 그냥 글자 수로 뚝뚝 자르면, 문장이나 조항 중간이 잘려서 문맥이 끊긴다. 그러면 LLM이 잘린 조각만 보고 엉뚱하게 판단할 수 있다. 그래서 이 프로젝트에서는 계약서의 자연스러운 구조 단위(제N조)를 기준으로 잘랐다. 문서 종류..

카테고리 없음 2026.08.08

기업형 계약 분석 엔진 만들기 — 청킹, HWP 파서, 버전 비교, 플레이북 (7장)

6,000자 컷 — 계약서 뒷부분이 통째로 안 읽히고 있었다계약서를 AI에게 분석시키는 코드를 열어보니, 이런 줄이 있었다. pythonprompt = f"""다음 계약서를 분석해주세요.계약서 전문:---{contract_text[:6000]}---"""[:6000] — 앞 6,000자만 잘라서 LLM에 넘기고 있었다. 짧은 근로계약서라면 문제없지만, 기업 간 용역계약서나 공급계약서는 보통 2만~4만 자다. 뒤쪽 70~80%, 그러니까 손해배상·관할법원·비밀유지 같은 정작 중요한 조항이 대부분 들어있는 구간이 아예 AI 눈에 안 들어가고 있었다. 그런데 화면엔 "분석 완료"라고만 뜬다. 사용자는 자기 계약서의 3/4가 검토조차 안 됐다는 걸 알 방법이 없었다.조항 경계로 자르고, 병렬로 분석하고, 다시 ..

PM을 위한 AI 실무 사전 6편 — 죽은 API와 의존성 함정

누구나법률 6장(완성 그 이후)에서 나온 개념: 안 쓰이는 코드의 위험성, 버전 고정의 함정, 인코딩 문제."완성"의 함정 — 안 불러본 코드는 검증된 적이 없다서비스에 기능이 100개 있다고 해서, 그 100개가 다 검증됐다는 뜻은 아니다. 실제로 사용자가 눌러본 경로만 검증된 것이다. 6장의 /api/config/status 500 에러가 정확히 이 경우였다 — 코드는 있었지만, 아무도 그 엔드포인트를 실제로 호출하지 않았기 때문에 NameError(존재하지 않는 함수/변수를 부르는 오류)가 배포 이후 계속 방치돼 있었다.실무에서 이걸 막는 방법은 결국 두 가지다.모든 엔드포인트를 최소 한 번씩 직접 호출해보는 점검(smoke test) — 복잡한 테스트 코드가 아니어도, 배포 후 "이 API들 다 ..

완성 그 이후 — 운영이라는 두 번째 산, 방치된 버그와 흔적 청소기 (6장)

"완성"이라 부른 지 한 달, 아무도 몰랐던 500 에러7월 2일 유료화 전환까지 마치고, MVP v2는 문서상 "완성"이었다. 그런데 7월 31일, 무심코 시스템 상태를 확인하는 API(/api/config/status)를 호출했다가 500 에러를 받았다.원인은 어이없을 만큼 단순했다. claude_available()이라는 함수를 호출하는 코드는 있는데, 그 함수를 import하는 줄이 빠져 있었다. NameError. 배포된 지 오래됐지만, 이 엔드포인트를 실제로 호출해본 사람이 아무도 없어서 아무도 몰랐다. 서비스가 "완성"됐다는 건 화면에 보이는 기능이 다 돌아간다는 뜻이지, 한 번도 안 눌러본 구석까지 다 멀쩡하다는 뜻은 아니었다.로컬에서 그냥 켜는 것조차 순탄하지 않았다같은 날, 로컬 개발 ..

PM을 위한 AI 실무 사전 5편 — PG, CORS, 도메인, OAuth

누구나법률 5장(그래서 직접 벌기로 했다)에서 나온 개념 네 가지: PG(결제대행사), CORS, 도메인/DNS, OAuth.PG(결제대행사)란온라인에서 카드 결제를 직접 처리하려면 PCI-DSS 같은 보안 인증, 카드사별 개별 계약이 필요하다. 개인·소규모 서비스가 감당하기 어려운 진입장벽이다. **PG(Payment Gateway, 결제대행사)**는 이 복잡한 과정을 대신 처리해주고, 서비스는 PG가 제공하는 SDK/API만 붙이면 결제를 받을 수 있게 해준다. 토스페이먼츠, 아임포트(포트원), 나이스페이먼츠 같은 곳들이 국내 PG의 예다.실무 흐름은 대체로 이렇다. 사용자가 "결제하기" 클릭→ PG가 제공하는 결제창 호출 (실제 카드정보는 PG 서버가 처리, 우리 서버는 안 봄)→ 결제 성공 시 P..

그래서 직접 벌기로 했다 — 경쟁사 분석과 유료화 전환기 (5장)

남들은 어떻게 돈을 받고 있나부터 봤다해커톤을 접은 날(6월 30일), 같은 커밋에 docs/COMPETITIVE_ANALYSIS.md가 같이 들어갔다. 기업 법률 서비스 시장에서 이미 돈을 받고 있는 곳들을 정리했다.서비스타겟가격핵심 차별점Law.aiB2B 대기업 법무팀1인 ₩20,000/월(최소 5명)6모듈 통합(계약·자문·송무·인감·IP·사규)로폼 비즈니스B2B 중대형 기업문의 가격CLM + ERP 연동슈퍼로이어변호사 전용₩99K~198K/월458만 판례 데이터법률구조서비스경제적 약자무료정부 공식 무료 지원정리하면서 확인한 건 두 가지였다. 첫째, 경쟁사들은 전부 대기업 법무팀 아니면 변호사 전용이었다 — 중소기업·1인 사업자가 들어갈 자리가 비어있었다. 둘째, ₩20,000/월 × 5명 = ₩10..

PM을 위한 AI 실무 사전 4편 — 사회적기업 인증과 공모전 생태계

누구나법률 4장(공짜로 메꿔보려 두 번 걸었다)에서 나온 개념: 사회적기업 인증 제도, 정부 지원사업·공모전 생태계, 그리고 "왜 둘 다 대안이 될 수 없었는가".사회적기업 인증이란사회적기업은 취약계층 고용이나 사회서비스 제공 같은 사회적 목적을 우선하면서도, 영리 활동으로 수익을 내는 조직 형태다. 정부(고용노동부·한국사회적기업진흥원)가 일정 요건을 갖춘 조직을 "사회적기업"으로 인증하면, 인건비 지원이나 사업개발비 지원 같은 혜택을 받을 수 있다.핵심은 인증 자체가 자동으로 돈을 주는 게 아니라, 심사를 통과해야 지원 자격이 생긴다는 것. 그리고 심사 기준이 밖에서 보기엔 불투명할 때가 많다 — 4장에 나온 것처럼 "사유 불명"으로 탈락 통보를 받는 경우도 실제로 있다.공모전·경진대회 생태계정부기관·..

공짜로 메꿔보려 두 번 걸었다 — 사회적기업 인증 탈락과 해커톤 철회기 (4장)

탈락, 사유 불명4월 24일, PROJECT_SUMMARY.md에 이렇게 적었다.SEIS 사회적기업 창업팀 | ❌ 1차 신청 탈락 (2026-04) — 사유 불명MVP를 완성하고 채 열흘도 안 돼서 낸 지원서였다. 취약계층 무료 법률 서비스라는 취지도, 실제로 돌아가는 서비스도 있었다. 그런데 떨어졌다. 왜 떨어졌는지는 지금도 모른다. 심사 결과 통보에 사유가 없었다.돌이켜보면 이게 이 프로젝트의 돈 문제를 관통하는 진짜 첫 질문이었다. 취약계층에게 무료로 서비스를 주려면, 그 비용은 누가 내나. API 비용, 호스팅 비용은 실제로 나가는데, 사용자한테는 못 받는다. 그래서 사회적기업 인증이든 지원사업이든, 외부에서 그 비용을 충당할 방법을 찾으려 했다. 첫 시도가 실패한 거였다.다음 카드 — 해커톤곧바..

법제처 API와 Groq, 거짓말 안 하게 섞기 — RAG 그라운딩 실전기 (3장)

진짜 데이터를 주는 것과, 그 데이터를 쓰게 만드는 것LLM한테 그냥 "임금체불 당했는데 어떻게 해야 하나요?"라고 물으면, 그럴싸한 답이 나온다. 문제는 "그럴싸함"이지 "정확함"이 아니라는 것. 법률 서비스에서 조문 번호를 지어내거나, 이미 개정된 옛날 조항을 인용하면 그건 그냥 사고다.그래서 세운 원칙은 하나였다. LLM이 답을 만들어내게 하지 말고, 법제처에서 실제로 검색한 법조문·판례를 던져주고 그걸 그대로 인용하게 시키자. 말은 쉬운데, 실제로 해보니 세 가지 층위의 문제가 연달아 나왔다.1단계 — 검색은 빠르게, 병렬로사용자가 질문을 입력하면 법령 조문과 판례를 각각 검색해서 AI 프롬프트에 끼워 넣는 구조를 짰다. 순서대로 하나씩 검색하면 느리니까, 동시에 실행했다. pythonarticl..