모뷰 프로젝트 (24.02.16)

SeHun.J·2024년 1월 29일
0
post-thumbnail

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. 프로젝트 배포

깃허브

profile
취직 준비중인 개발자

0개의 댓글