한컴AI 2기

[스나이퍼팩토리] 한컴AI 2기 - OWPML 프로젝트 알랭 1주차 회고

싱커 2025. 11. 9. 10:13

프로젝트 2팀 '뉴런웨이'의 1주차가 정신없이 지나갔다. 우리 팀의 목표는 OWPML 기반의 문서 Q&A 서비스인 알랭(AlAIn)을 개발하는 것. 이번 1주차의 핵심 목표는 인프라, 백엔드, 프론트엔드의 완전한 통합 개발 환경을 구축하고, 가장 핵심적인 문서 파싱 기능을 구현하는 것이었다. 돌아보니, 단순한 '환경 설정'을 넘어 프로젝트의 뼈대 전체를 세운 한 주였다.

1. INFRA: 견고한 개발 생태계 구축기

프로젝트의 성패는 팀원 모두가 동일하고 안정적인 환경에서 개발할 수 있느냐에 달려있다고 생각한다. 우리는 1주차에 이 '개발 생태계'를 구축하는 데 총력을 기울였다.

A. 협업 도구 통일 우선 파편화된 소통을 막기 위해 협업 도구를 명확히 정했다.

  • Notion: 모든 프로젝트 관리의 허브로 사용한다. 주차별 과제 관리, 개인별 회고록 작성, 회의록 아카이빙, 전체 일정표를 노션에서 관리한다.

  • Discord: 실시간 토론 및 자료 공유 채널로 활용한다. 특히 '임베딩 모델'이나 'HWPX 파싱' 같은 특정 주제에 대해 스레드를 열어 깊이 있는 논의를 진행했다.

  • GitHub: 백엔드와 프론트엔드의 형상 관리를 담당한다.

  • Figma/Canva: 프론트엔드 와이어프레임 및 발표 자료 디자인을 위해 세팅했다.

B. Docker 기반의 표준 개발 환경 이번 프로젝트에서 가장 공들인 부분이다. "로컬 Python 실행 금지"라는 원칙을 세우고, 모든 개발 환경을 Docker 기반으로 통일했다.

  • Backend Stack: 백엔드는 FastAPI를 기반으로 한다.
  • Java 연동 (JPype): OWPML 문서(HWP, HWPX) 파싱을 위해 Java 라이브러리를 사용해야 했다. 이를 위해 python:3.11-slim 베이스 이미지에 openjdk-17-jdk를 설치하고 , JPype1 패키지를 통해 Python과 Java를 연동하는 환경을 구축했다. ENV JAVA_HOME 설정에 꽤 공을 들였다.
  • Docker Compose: docker-compose.yml을 통해 개발 환경을 정의했다. 특히 cpugpu 프로파일을 분리하여 로컬 개발 환경(CPU)과 향후 서버 배포(GPU) 환경에 모두 대응할 수 있도록 설계했다. 또한 Hugging Face 모델 캐시(hf_cache) 등을 볼륨으로 관리하여 불필요한 재다운로드를 방지했다.

C. 개발 지원을 위한 커스텀 GPT 팀원들의 개발 효율을 극대화하기 위해 'OWPML RAG 개발 어시스턴트'라는 이름의 커스텀 GPT를 구축했다. 이 GPT는 우리 프로젝트의 전체 코드베이스(Dockerfile, jpype_setup.py, rag.py 등)를 '지식'으로 학습했다. 덕분에 Dockerfile 설정이나 JPype 관련 문제 해결, FAISS와 LangChain을 사용한 RAG 파이프라인 설계 등 우리 코드에 최적화된 답변을 즉시 얻을 수 있게 되었다.

 

2. BACKEND: 핵심 기능의 첫걸음, 문서 파싱 API

인프라가 튼튼하게 구축되었음을 확인한 것은 백엔드 API의 성공적인 동작이었다.

  • Health Check: docker compose up 명령어로 서버를 실행하고, FastAPI의 자동 문서(http://localhost:8000/docs)에 접속해 API가 정상적으로 동작하는 것을 확인했다. /api/v1/health 엔드포인트는 {"status": "ok"}를 성공적으로 반환했다.
  • HWP/HWPX 파싱 성공: 1주차 핵심 목표였던 문서 파싱 API(api/v1/parsing/upload_and_parse)를 구현했다. Swagger UI에서 HWP 파일과 HWPX 파일을 직접 업로드하여 테스트한 결과, 두 형식의 파일 모두에서 텍스트 콘텐츠를 성공적으로 추출하여 JSON 형태로 반환하는 것을 확인했다.


 3. FRONTEND: 서비스의 얼굴을 그리다

백엔드가 엔진을 만드는 동안, 프론트엔드에서는 서비스의 얼굴을 디자인했다.

  • Figma 와이어프레임: 'Alain'의 메인 채팅 페이지와 사이드바 구조를 Figma로 신속하게 설계했다.
  • Vercel 초기 배포: 놀랍게도 1주차 만에 이 기본 구조를 Vercel을 통해 실제 웹에 배포까지 완료했다. 물론 아직 기능은 없지만, 눈에 보이는 결과물이 있다는 것은 팀의 사기를 높이는 데 큰 도움이 되었다.


1주차를 마치며

첫 주였지만 인프라, 백엔드, 프론트엔드 전반에 걸쳐 예상보다 더 견고한 기반을 다졌다. 특히 Docker와 JPype라는 복잡한 기술 스택을 성공적으로 연동하고, HWP/HWPX라는 특수한 문서를 파싱하는 API까지 구현해낸 것은 큰 성과다. 이제 이 튼튼한 기반 위에 본격적으로 RAG 파이프라인을 얹을 2주차가 기대된다.