Gemini 서울 해커톤 1,500팀 중 20위: 근로자의 증거를 진정서로 바꾸는 EquiLaw
댓글 불러오는 중…
댓글 불러오는 중…
임금을 못 받거나 직장에서 괴롭힘을 당한 근로자가 가장 먼저 막히는 곳은 법이 아니라 서류다. 증거를 정리하고, 어떤 조항 위반인지 찾고, 진정서 양식을 채우고, 관할 관서를 찾는 일이 한꺼번에 몰려온다. 많은 사람이 여기서 포기한다.
2월 말 Gemini 서울 해커톤에서 이 과정을 AI로 줄여 보려고 EquiLaw를 팀으로 만들었고, 1,500팀 중 20위를 했다. 나는 Gemini로 증거를 분석해 문서를 만드는 흐름과 Cloud Run 배포를 맡았다.

카카오톡 캡처, 근로계약서, 통화 녹음을 한 번에 올린다.
1증거 업로드(이미지·음성)
2 → Gemini 분석: 위반 조항 찾기
3 → 체불액 계산
4 → 진정서 초안 생성, PDF 저장
5 → 관할 관서 안내와 접수 시연기술은 단순하게 골랐다. Next.js로 화면을 만들고, Gemini API 한 번의 호출로 이미지와 음성을 함께 분석하고, Docker로 묶어 Cloud Run에 올렸다.
사용자가 올린 캡처와 녹음을 Gemini에 같이 넘긴다. 캡처에서는 날짜, 보낸 사람, 핵심 문구를 뽑고, 녹음은 받아 적은 뒤 맥락을 읽어 위반 행위를 찾는다.
1const result = await ai.models.generateContent({
2 model: "gemini-3.0-flash",
3 contents: [{
4 role: "user",
5 parts: [
6 { text: ANALYSIS_PROMPT },
7 { inlineData: { mimeType: imageFile.type, data: imageBase64 } },
8 { inlineData: { mimeType: audioFile.type, data: audioBase64 } },
9 ],
10 }],
11});결과는 대화 내용 옆에 위반 유형과 근로기준법 조문을 붙여 보여 준다. 해커톤 안에서 이미지와 음성을 한 호출로 다루는 게 충분히 된다는 걸 확인한 순간이었다.

왼쪽은 증거에서 뽑은 대화, 오른쪽은 위반 유형과 해당 조문.
분석에는 보통 10~30초가 걸린다. 아무 반응 없이 기다리면 사람들은 멈춘 줄 알고 나간다. 그래서 기다리는 동안 단계별 진행 문구를 터미널처럼 띄웠다. 실제 처리 단계를 그대로 중계하는 건 아니고, 지금 무엇을 하고 있는지 알려 주는 연출이다.

분석에서 뽑은 기본급, 초과근무 시간, 퇴직금 지급 여부로 체불액을 항목별로 계산한다. 미지급 기본급, 연장·야간·휴일 가산 수당, 퇴직금, 지연이자를 각각 근거 조문과 함께 보여 주고, 사용자가 값을 직접 고칠 수도 있다.

기본급과 근무시간을 넣으면 항목별 수당과 합계, 계산 근거가 나온다.
그다음 분석 결과와 계산 결과로 진정서 초안을 만든다. 진정인, 피진정인, 진정 취지, 진정 이유, 첨부 서류 목록까지 양식에 맞춰 채운다. 주민등록번호는 가린다.

실제 팩스 전송과 민원포털 연동은 해커톤 안에서 할 수 없었다. 대신 사용자가 "다음에 무엇을 하면 되는지" 알 수 있게 흐름을 시연으로 보여 줬다. 주소로 관할 고용노동지청과 팩스 번호를 찾아 주고, 민원포털 목업에 진정서 내용이 채워지는 모습과 팩스 전송 과정을 보여 준다.



마지막 화면에는 노동청 상담 전화, 지방노동위원회, 노무사 상담처럼 다음 선택지를 카드로 모았다.

PDF 저장이 깨졌다. 처음엔 화면을 그림으로 떠서 PDF로 만드는 라이브러리를 썼는데, Tailwind CSS v4의 새 색상 함수를 읽지 못해 오류가 났다.
1Attempting to parse an unsupported color function "lab"라이브러리를 고치는 대신 브라우저의 인쇄 기능으로 바꿨다. 인쇄할 때 버튼과 메뉴만 숨기면, 사용자가 인쇄 창에서 "PDF로 저장"을 고르면 된다. 복잡한 라이브러리보다 브라우저 기본 기능이 더 단단한 경우가 있다.
1@media print {
2 .no-print { display: none !important; }
3}배포 빌드가 실패했다. Cloud Build에서 개발용 패키지를 빼고 설치하니 빌드에 필요한 TypeScript와 Tailwind 도구까지 빠졌다. 설치 단계에서 개발용 패키지를 다시 포함하고, 설정 파일을 JavaScript로 바꿔 해결했다. 그 뒤로는 GitHub에 올리면 Cloud Build를 거쳐 Cloud Run까지 자동으로 배포됐다.
법을 잘 몰라도 자기 권리를 주장할 수 있게 하는 것, EquiLaw의 목표는 그대로다.