1. 프로젝트 계획
목표
- 기존 코드를 개편하고, MSA 방식으로 서버 설계하기.
- 스프링 시큐리티를 활용해서 JWT, OAuth 2.0 로그인 구현하기.
- MSA 아키텍처 공부하기.
- 테스트코드 작성하기.
기능
- 면접 서비스
- 인성질문 (LLM 생성 및 웹크롤링)
- 기술질문 (LLM 생성)
- 이전면접 다시하기
- 모집공고 자동완성
2. 프로젝트 설계
아키텍처
이벤트 기반 아키텍처
는 비용과 시간 문제로 후순위로 미룸.
- Nginx로
/api
Path는 Gateway Service로 가서, 그 다음 Path에 따라 적절한 서비스로 이동함.
- User Service : 인증/인가, 사용자 관리, 데이터 관리
- Python FastAPI : LLM, 웹크롤링 (지원공고)
- 서비스간 통신은
HTTP
를 활용, 동기 기반 통신이기 때문에 응답이 오래 걸리는 Python 서버와의 통신은 비동기로 처리해야 하지만 카프카나 레빗MQ를 학습하는 시간 비용이 들어가므로 추후로 미룸.
- Python 서버는 웹크롤링과 LLM을 따로 분리하기.
기술스택
- React.js : 프론트엔드 프레임워크 중 가장 많이 학습했기 때문에 선택
- Java Spring : MSA 구성, 인증/인가, 간편한 CRUD (JPA) 등의 이유로 사용
- Python FastAPI : 기본적으로 ASGI 기반 웹프레임워크이기 때문에 비동기를 지원하고, Python 환경에서 OpenAI의 ChatGPT API를 사용하기 좋고 웹크롤링을 Python으로 해봤기 때문에 사용
- Spring Cloud(Eureka) : MSA 방식으로 서비스를 개발하기 위해 사용
- MySQL : 사용자 데이터 관리는 RDBMS 방식이 맞다고 판단하여 선택
- MongoDB : LLM 데이터나 웹크롤링은 폼이 자주 바뀔 가능성이 있다고 생각하여 NoSQL로 선택
- Nginx : 리버스 프록시 및 URI에 따른 포트 포워딩이 필요하여 선택
API 설계
3. 프로젝트 개발
개발환경
- IDE : Intellij, Pycharm
- OS : Windows (dev), Unbuntu 22.04 (prod)
- Tech Stack : React.js, Spring, Spring Cloud(Eureka), FastAPI, Crawling(Selenium), MySQL, MongoDB, Nginx
4. 프로젝트 배포
깃허브