Skip to content
프로젝트 목록
2026.08.21 - 2026.08.30 / 2026.10 개선제품 설계, 프론트엔드 및 백엔드 개발개인 프로젝트

JHWorks AI Groupware

휴가 날짜를 찾고 결재를 작성하는 반복 업무를 자연어 상담과 확인 후 저장으로 연결한 독립 그룹웨어입니다. 업무 규칙과 데이터 변경 권한은 서버가 검증합니다.

문제

잔여 연차, 팀 일정과 회사 규정을 따로 확인한 뒤 결재에 다시 입력해야 합니다. AI가 이 정보를 추측하거나 확인 없이 저장하면 잘못된 업무 데이터가 만들어집니다.

해결

  • AI는 의도와 날짜를 구조화하고, 기존 서버 엔진이 현재 사용자의 연차와 일정으로 후보를 계산합니다.
  • 업무 조회 Assistant는 allowlist에 등록한 읽기 Tool만 사용합니다. 직원 ID 대신 인증된 사용자로 조회 범위를 고정합니다.
  • 정책 RAG는 활성 문서의 버전과 section ID를 근거로 연결하고 서버에서 허용된 인용인지 확인합니다.
  • 날짜 선택 후 정확한 미리보기를 제시합니다. 사용자, 후보, 계정 버전과 일정 및 정책 snapshot을 서명에 묶어 확인 후 변경을 차단합니다.
  • 저장 재시도에는 같은 초안을 반환합니다. 제출은 별도 확인 후 기존 결재 상태 전이와 연차 예약 transaction으로 처리합니다.

결과

  • 자연어 요청부터 날짜 선택, 초안 확인과 명시적 저장, 저장된 DRAFT 확인까지 기존 도메인을 연결했습니다.
  • 정상 흐름과 권한, 중복 저장, 오래된 버전, 연차 부족과 일정 충돌을 비용 없는 자동화 테스트로 검증합니다.

개발 배경

실무에서 React, TypeScript와 Electron으로 기업 업무 화면을 개발한 뒤, API와 데이터베이스까지 이어지는 업무 규칙과 AI 적용 경계를 더 깊이 이해하기 위해 직접 설계했습니다. 직원과 조직, 전자결재, 근태와 연차를 하나의 시스템으로 구성했습니다.

회사 제품의 코드나 내부 자료를 사용하지 않았습니다. 조직, 직원, 정책과 업무 데이터는 이 프로젝트를 위해 독립적으로 구성한 가상 데이터입니다.

핵심 사용자 흐름

요청 예시: 다음 주에 이틀 휴가를 가고 싶은데, 우리 팀 일정과 겹치지 않는 날짜를 찾고 결재 초안도 만들어 줘.

  1. AI가 의도, 탐색 기간과 희망 일수를 구조화합니다. 서버는 Asia/Seoul의 현재 날짜를 전달하고 ‘다음 주’ 해석을 대조합니다.
  2. 인증된 사용자의 계정과 일정을 기존 계산 엔진으로 확인합니다. 가능, 주의와 제외 근거를 함께 보여줍니다.
  3. 사용자가 날짜를 선택하면 실제 기간, 차감 일수, 가용 연차, 결재자와 정책 근거를 미리 보여줍니다.
  4. 사용자가 저장을 명시적으로 확인하면 데이터를 재검증하고 DRAFT를 한 번만 저장합니다. 저장된 문서 상세 화면으로 이동합니다.
  5. AI 장애 시 수동 후보 탐색에서 날짜를 선택해 기존 결재 작성 화면으로 이동할 수 있습니다.

아키텍처와 책임 경계

  1. 01 →Next.js / 사용자 확인
  2. 02 →FastAPI / 인증과 권한
  3. 03 →Domain Service / 상태 전이와 휴가 계산
  4. 04 PostgreSQL / 업무 데이터와 pgvector

FastAPI의 AI adapter가 OpenAI Structured Output과 Function Calling을 연결합니다. 정책 검색은 pgvector를 사용하며 정책 원문은 application DB에 보관합니다. 로컬 테스트는 SQLite와 가짜 임베딩으로 분리합니다.

LLM이 업무 규칙이나 쓰기 권한을 결정하지 않습니다. 일반 업무 조회의 읽기 Tool과 확인 기반 휴가 저장 capability를 구분하고, 저장과 제출마다 서버가 현재 데이터를 다시 확인합니다.

검증과 증거의 범위

2026-10-15 기준 pnpm validate의 API 테스트 111개와 데스크톱 및 모바일 Playwright 테스트 8개가 통과했습니다. API 통합 테스트는 실제 상태 전이와 저장 결과를 검사합니다. Playwright는 실제 화면과 API를 연결하되 LLM과 임베딩 제공자만 가짜로 대체해 로그인부터 초안 저장까지 확인합니다. 아래 이미지는 이 테스트 환경의 실제 UI입니다.

실제 모델 평가는 별도 명령으로 분리했습니다. 이번 개선에서는 유료 API 평가를 실행하지 않았으며 가짜 제공자의 성공을 모델 정확도로 해석하지 않습니다. 수동 방식과 AI 방식의 비교 절차와 기록 양식을 저장소에 추가했고, 사람의 완료 시간과 개선율은 아직 측정하지 않았습니다.

한계와 후속 개선

가상 조직과 개발자 검증을 기반으로 하며 실제 조직 도입이나 사용자 생산성 향상을 입증한 프로젝트는 아닙니다. 현재 인증은 데모 계정용이고 공개 운영 전 SSO, CSRF 대응과 계정 수명주기 관리가 필요합니다.

‘다음 주’ 외 복잡한 상대 날짜 표현의 의미 검증과 연도 경계 탐색은 제한적입니다. PostgreSQL 동시 실행과 실제 모델의 실패 및 지연 분포는 별도로 반복 검증해야 합니다. 공개 데모는 배포하지 않았습니다.

실제 JHWorks UI에서 저장 전 휴가 초안의 날짜, 차감과 정책 근거를 확인하는 화면
가짜 AI 제공자와 실제 API를 사용한 브라우저 테스트 화면. 업무 데이터는 가상 데이터입니다.
모바일 화면에서 명시적으로 저장한 휴가 DRAFT 상세
사용자 확인 후 저장된 초안입니다. 제출은 별도 확인을 요구합니다.

기술 스택

Next.jsTypeScriptFastAPIPostgreSQLpgvectorOpenAI API

주요 성과

  • 전자결재 상태 전이와 낙관적 동시성 제어
  • 결정적 휴가 계산과 사용자 범위의 업무 데이터 조회
  • 정책 RAG, Structured Output, 제한된 Function Calling
  • 명시적 확인과 멱등 저장, 독립된 제출 확인