스마트 채용 검색 API 구축: FastAPI, LangChain, PostgreSQL, LLMs 활용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 개발자: 채용 플랫폼 또는 AI 기반 검색 API 개발에 관심 있는 웹 개발자
- 난이도: 중간 (FastAPI, LangChain, SQLAlchemy, LLMs 경험 필요)
핵심 요약
- LLM 기반 자연어 검색: 사용자가 "remote senior developer jobs at a medium company in London with at least $100k salary"와 같은 자연어를 입력하면,
LangChain + OpenAI
를 사용해 구조화된 필터({"salary__gte":80000,"company_size":"medium","remote":true,"location":"Matthewshaven"}
)로 변환 - 유연한 필터링 시스템: Django ORM 스타일의
salary__gte
,title__ilike
신택스를 지원하며,company_size
와 같은 비즈니스 용어를 자동으로 직무 필터 매핑 - 모듈화된 아키텍처:
SQLAlchemy
+Alembic
으로 ORM 모델 및 마이그레이션 관리,Pydantic
을 통해 LLM 출력의 구조화된 JSON 검증
섹션별 세부 요약
1. 프로젝트 구성 요소
- FastAPI: 웹 API 서버 역할, 빠른 개발 및 테스트 가능
- PostgreSQL: Docker Compose를 통해 컨테이너화된 데이터베이스 활용
- SQLAlchemy + Alembic: ORM 모델 정의 및 마이그레이션 자동화
- LangChain + OpenAI: LLM 기반의 필터 생성 로직 구현
- 모듈화 구조: 유지보수성을 위한 코드 분리
2. `/jobs-ai-search` 엔드포인트
- 자연어 검색 지원: 사용자가 "medium size company remote in Matthewshaven"과 같은 문장을 입력하면, LLM이 이를
{"company_size":"medium","remote":true,"location":"Matthewshaven"}
과 같은 JSON 필터로 변환 - LLM 연동 로직:
ChatGPT
를 사용해 자연어 쿼리를 JSON 필터로 변환,Pydantic
을 통해 구조화된 출력 검증 - 예제 요청:
GET /jobs-ai-search?filter=at least $80000 medium size company remote in Matthewshaven
3. 필터 매핑 및 처리
- 회사 규모 매핑: "medium" → 51-250명 직원 범위 자동 매핑, 사용자에게 투명한 편의성 제공
- SQLAlchemy 필터 변환: Django 스타일
salary__gte
신택스를col >= value
와 같은 SQLAlchemy 표현식으로 변환 - 쿼리 실행:
get_llm_job_filters
→query_dict_to_sqlalchemy
→SQLAlchemy
쿼리 실행 및 결과 반환
4. 응답 형식 및 확장성
- API 응답 예시:
```json
{"total":12,"next_page":"/jobs-ai-search?skip=10&limit=10&filter=...","prev_page":null,"results":[{"id":1,"title":"Software Engineer","company":"Acme Corp","salary":90000,"remote":true,"location":"Matthewshaven"}]}
```
- 확장성: 새로운 필드, 연산자, 엔티티 유형 추가 시 핵심 로직 변경 없이 구현 가능
결론
- 핵심 팁: LLM을 활용해 사용자 의도를 구조화된 필터로 변환함으로써 자연어 검색의 직관성과 정확성을 동시에 확보할 수 있음.
Pydantic
을 사용한 JSON 검증과SQLAlchemy
필터 변환 로직은 확장성과 안정성을 보장함. - 실무 적용: FastAPI + LangChain + OpenAI + PostgreSQL 스택을 기반으로 한 채용 검색 API는 사용자 친화적인 검색 경험과 동시에 유지보수성을 높이는 데 효과적임.