AI와 함께 만드는 삶

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

프로젝트 기록 18

지금, 그리고 앞으로 — 누구나법률 개발기를 마치며 (에필로그)

지금까지 온 거리4월 16일 첫 커밋부터 지금까지 약 넉 달. 그 사이 있었던 일을 한 줄로 요약하면 이렇다.무료로 시작 → 무료를 유지할 방법을 밖에서 두 번 찾다 실패 → 원래 계획대로 직접 벌기로 함 → 벌기 시작하니 운영이라는 새로운 산이 나타남.기술적으로 남은 것도 정리하면: LLM 하나에 의존하지 않는 폴백 체인, 실제 법조문·판례를 인용하는 RAG 파이프라인, 긴 계약서도 끝까지 읽는 청킹 엔진, 한글 파일까지 읽는 파서, 버전 간 변경사항을 자동으로 비교하는 리드라인 엔진, 회사별 기준과 대조하는 플레이북 시스템. 그리고 그 사이사이 죽어있던 API, 깨졌던 로컬 환경, 지워야 했던 옛 호스팅의 흔적들.로드맵에 아직 안 지워진 줄 하나ROADMAP.md를 다시 열어보다가 재밌는 걸 발견했다..

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

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

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

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

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

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

그래서 직접 벌기로 했다 — 경쟁사 분석과 유료화 전환기 (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..

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

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

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

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

AI와 규칙을 협상하다 — 실주문 자동화 요청과 CLAUDE.md 합의 과정 (9편)

"너가 자동으로 매수 매도를 하지" — 요청페이퍼 트레이딩을 몇 주 돌리고, 운영 PC도 집으로 옮기고, 백테스트로 이것저것 더 확인해보던 중에 이런 말을 들었다. "이제 날짜만 정해주면 그날 PC를 켜놓을게. 그럼 네가 자동으로 매수 매도를 하면 되잖아." 그리고 이어서, "나는 자동화하고 싶은 거야. 그래서 계좌도 따로 만든 거고."순간 멈칫했다. 이건 그냥 "PC 켜놓는 날짜를 알려달라"는 요청이 아니라, 실제 돈으로 자동 주문을 내달라는 요청이었다.규칙을 들이밀 수밖에 없었다이 프로젝트에는 처음부터 못박아둔 절대 규칙이 하나 있다.실주문 코드 작성 금지. 현재는 페이퍼 트레이딩만.이건 내가 그때그때 판단할 문제가 아니라, 프로젝트 문서(CLAUDE.md)에 박혀 있는 규칙이다. "이제 자동화해줘"..

며칠 기다렸다 사면 더 좋을까 — 매수 타이밍 검증과 새 전략 BB8 추가기 (8편)

"그렇게 사면 손해 아니야?" — 지인의 질문전략을 다 확정하고 페이퍼 트레이딩까지 돌리고 있는데, 주식을 10년 넘게 해온 지인에게서 이런 질문을 받았다. "매수일이 매달 1일이면, 이미 고른 종목을 그냥 그날 사버린다는 거잖아. 나도 적립식 투자를 하지만 그래도 떨어진 날 사려고 하는 편인데."정곡을 찌르는 질문이었다. 지금 확정된 방식은 이렇다 — 매달 첫 거래일 저녁에 종가 기준으로 종목을 고르고, 다음 거래일 시가에 무조건 산다. 재량은 전혀 없다. 종목은 저PBR이라는 기준으로 골랐지만, 그날 그 종목을 살지 말지, 혹은 다른 날 살지는 아예 고려 대상이 아니었다.이미 겪어본 문제였다사실 이 프로젝트의 원래 설계(v0.2)는 스토캐스틱·이동평균·하이킨아시 3개 지표로 정확히 이 "타이밍"을 잡..

진짜 문제는 기술이 아니라 돈이었다 — 무료 호스팅과 LLM 폴백 버그 실전기 (2장)

AI 서비스인데, AI를 하나 빼버렸다첫날 커밋 메시지에 이렇게 적어뒀었다.Tech stack: React 18 / FastAPI / SQLite / Claude·Groq·Ollama (Multi-LLM)Claude를 메인으로 두고, 실패하면 Groq로, 그것도 안 되면 Ollama(로컬)로 넘어가는 구조였다. 그런데 4일 뒤, 2026년 4월 20일 오전 9시 23분에 이런 커밋이 올라갔다. fix: remove Claude from LLM chain, fix Groq fallback bugClaude를 체인에서 통째로 뺐다. AI로 서비스를 만들면서, 정작 서비스 두뇌에서는 Claude를 뺀 셈이다.이유는 버그였다. 코드를 열어보면 이렇다. pythonif provider in ("groq", "au..