카테고리 없음

[개발후기] Squadify - Squadify 최초 실행 로직

핑크사우루스 2026. 7. 14. 18:20

  안녕하세요. 드디어 본격적인 개발 후기로 찾아뵙니다. 제가 개발단계에 들어가면서 가장 처음으로 개발했던 내용인데요.


개발 배경

 Squadify는 가상의 회사 홈페이지에서 SSO 로그인을 통해 바로 이용할 수 있는 서비스입니다. 추가적으로 기획 단계에서 Squadify 최초 실행 시 기존의 ERP 인사 데이터를 바로 한 번에 가져올 수 있으면 좋겠다는 이야기가 있었습니다. 따라서 가상의 회사 내부의 ERP 인사 데이터가 있을 것이고, 우리 Squadify를 최초 실행을 했을 때 우리 서비스에 맞게 데이터를 가공하고, 사원들의 역량을 분석하는 최초 실행 작업이 필요해집니다.


기존 ERP 인사 데이터

 그럼 첫 번째로 나올 수 있는 질문이 "가상 ERP 인사 데이터를 어떻게 확보했는가?" 입니다. 바로 시뮬레이션으로 해결했습니다. 실제 회사처럼 입사, 퇴사, 프로젝트 진행, 프로젝트 완료, 동료평가 등 이벤트가 존재하고, 사원들의 감정지수, 성격 같은 여러가지 요소를 반영하였습니다. 시간이 흐르는 것 또한 존재하기 때문에 시간이 갈수록 데이터가 쌓이는 식입니다. 본격적인 개발을 들어가기 위해서 mock-up 데이터 확보가 우선이고, 시연 단계에서도 활용할 수 있을 것 같아서 먼저 작업을 진행하게 되었네요!


최초 실행 로직

최초 실행 로직 파이프라인은 다음과 같은 단계를 거칩니다.

  1. 가상 ERP 인사 데이터는 .db 데이터베이스 파일로 구성이 되어있습니다. 사용할 ERP 테이블을 모두 긁어옵니다.
  2. 사원들의 동료평가 데이터를 저장할 GraphDB 동기화를 시작합니다. GraphDB는 neo4j를 사용하였습니다.
  3. 본격적인 ERP 인사 데이터들을 Squadify의 데이터베이스에 저장합니다.
  4. ERP 인사 데이터들 중 이력서, 포트폴리오, 프로젝트 경험 이력 등을 청킹하여 벡터 임베딩을 진행한 뒤, 데이터베이스에 저장합니다.벡터 데이터베이스는 따로 구성하지 않았고 PostgreSQL의 RDB에 pgvector 플러그 인을 사용하여 벡터 데이터를 저장하도록 구성했습니다. 임베딩 모델은 OpenAI의 text-embbeding-3를 사용하였습니다.
  5. 모든 데이터 저장이 완료되어 Squadify를 사용할 수 있습니다. 역량 수치화 에이전트를 호출하여 사원들의 데이터를 바탕으로 모든 사원들의 역량을 수치화합니다.

생각했던 부분들

  • 저희 Squadify는 MSA입니다. 따라서 처음에는 초기 데이터 저장을 진행할 때도 MSA 원칙을 지키며 각 서비스의 API 호출을 통해 데이터베이스를 접근하려고 했습니다. 그러나 초기화 로직이 진행되는 부분은 말 그대로 초기 단계이기 때문에, SQL문을 통해 직접 데이터베이스에 접근하는 식으로 구성하였습니다. 실제 서비스에서도 이렇게 대규모 DB 작업이 이루어지는 경우 잠시 서비스를 내리고 진행한다고 하네요!
  • 벡터 임베딩을 진행할 때 청킹은 1000자마다 청킹, overlap 되는 부분은 100자로 진행하였습니다. 추후 사원 검색 기능의 정확도가 낮아질 경우 다른 전략을 사용하려 했습니다만 정확도에 큰 문제가 없었습니다.

 

자세한 코드는 아래 깃허브 링크에서 확인하실 수 있습니다.

 

ai/app/services/erp_sync_service.py at dev · lgcns-squadify/ai

Contribute to lgcns-squadify/ai development by creating an account on GitHub.

github.com