Spring boot + FastAPI (1)

형석이의 성장일기·2023년 9월 11일
0

일단 우리 팀은 백엔드 서버는 Spring boot로 두고, 우리가 만든 ipynb 코드들(”이미지 변환 → chatGPT → 음성 추출” 기능)은 FastAPI에 두기로 했다..

어떻게든 Spring boot안에서 ipynb코드들을 해결할 려고 했는데, 아 너무 빡세다..

(그리고 ipynb를 쓰는 이유는 그냥 모델 학습이나 데이터 전처리하는데 colab에서 하다가 중간에 .py 파일로 바꾸려니까 코드 구조를 변경해야하는게 생겨서 그냥 진행하기로 했다)

그 이유는 큰 문제가 2개 있음

  1. 자료 수집 : 애초에 자료를 찾는 것도 힘들고, 대부분 .py 코드를 실행시키는데, 우리는 .ipynb(jupyter notebook)을 사용하다보니까 더 까다로운듯
  2. 라이브러리 설치 문제 : clarifai, openai(chatGPT)를 사용하기 위해선 “pip install clarifai, openai” 를 해야함.. 근데 이게 잘 안먹더라.. 걍 계속 “no module ~~“ 이런 에러 뜸

python을 안쓴지도 오래되었고, 애초에 대학교 졸작때 했는 Django는 약간 가라로 한 경향이 있어서..

무슨 가상환경 이런 문제가 있던데.. 골치가 아파서 그냥 python 기반 웹 프레임워크를 사용하기로 했다!

→ 생각해보면 아마 실행의 주체가 Spring boot 즉 java인데, .ipynb를 실행시킬 때 “pip install ~~” 명령어 자체가 안먹는게 당연하지 않을까.. 중요한건 그 가상환경에 내가 사용하고자 하는 라이브러리가 설치가 되어야 하는데, java 코드로 접근하려니까 머리가 좀 아파요;

→ 아무리 생각해도 파이썬용 서버를 하나 두는게 편할 듯! 거기엔 우리가 사용할 라이브러리를 미리 설치해 둘 수 있으니까!

우리 프로젝트의 통신 흐름을 생각해보면,

💡 Spring boot에 이미지 업로드 → 그 이미지를 AWS S3에 업로드 및 S3에 업로드된 이미지의 URL 리턴 → 그 URL을 DB에 저장 및 FastAPI로 보냄 → FastAPI에서 URL을 통해 이미지를 보고 이미지 분석 및 음성파일 리턴 → 그 음성파일을 Spring boot가 받음 → 프론트엔드로 전달

이런 느낌이다.

솔직히 너무 간단한 로직이라서 거부감은 들지 않는다.

그런데 과정이 좀 귀찮다는 거..?

어쨌든 Spring boot와 FastAPI 사이에 통신 과정에서 JSON 파싱도 필요할 것이고.. 서로 다른 서버끼리 통신하는거니까 당연히 서버에 올릴 때, 각각의 도커 컨테이너에 넣어주고, Nginx 설정도 해줘야겠지..? 이런 고민들..

그런데도 FastAPI를 선택한 이유는!!

FastAPI 장점

  • 쉽다!
  • 웹 서버 WSGI (Web Server Gateway Interface) 및 비동기 ASGI (Asynchronous Server Gateway Interface) 지원
  • JSON 스키마 제공
  • Oauth 2.0 호환성 높음 (우리가 차후에 사용할 카카오 or 구글 소셜 로그인)
  • 이름을 보면 알 수 있듯이 빠르다!! → 우리는 Spring boot와 같이 쓰니까 속도도 중요!
  • 그 대신 기본 라이브러리 수가 적다 (그만큼 가벼우니까 빠르겠지?)
  • 등등..

그래도 역시 쉬운게 젤 크다.

profile
이사중 .. -> https://gudtjr2949.tistory.com/

0개의 댓글