AI_심화-5 멘토링, MongoDB, FastAPI

조현진·2025년 1월 1일
0

AI_심화

목록 보기
5/9

멘토링

약 2시간 동안 멘토님과 팀 멘토링을 진행했다. 미니프로젝트 기획 단계뿐만 아니라, 앞으로도 서비스 기획간 참고할 내용들을 말씀해주셨다.

  1. 서비스가 모든 예외 사항들을 다 품고 갈 필요는 없다.
    서비스는 경제적 측면에서도 생각해볼 필요가 있다. 어떤 예외 사항들을 처리하는데 드는 비용이 너무 클 경우, 그 예외들을 반드시 처리해야하는지 고민해볼 필요가 있다. 오히려 그런 예외 사항들은 제한 사항으로 기획단계에서 정해놓고 가는게 더 나을 때도 있다.

프로젝트를 기획할 때 목적과 페르소나를 잘 설정하는게 왜 중요한지를 더 이해하게 되었다. 사실 그동안 문제를 도출하고 목적을 설정하는 것 까지는 와닿았으나 페르소나 설정은 도외시하는 마음이 있었는데, 기획하는데 드는 비용을 줄이기 위해선 제한사항도 고려해 프로젝트 범위를 명확히 하는게 중요하다.

  1. 오픈 소스는 친절하지 않다.
    학습된 모델을 더 찾아 나설지, 혹은 새로 학습시키는게 더 나을지 고민이 들 수 있다. 이걸 판단하는건 경험을 통한 노하우에 가깝다. 다만 오픈소스는 기본적으로 사용자에게 친절하지 않다. 원하는게 없을 확률이 높다는걸 인지하고 모델을 찾는게 좋다.

여러 모델들을 테스트 했을 때 기획했던 서비스에 사용할만큼 만족스럽지 않은 결과를 내놓는 경우가 많았다. 학습된 모델을 사용하는게 처음이라 이런 경우에 모델들을 얼마나 더 찾아나서야 할지 고민이었다.
즉, 모델 탐색에 시간을 얼마나 투자해야하는지 명확하지 않았다. 물론 내 경험이 적기 때문에 원하는 Task에 맞는 모델을 찾는 능력이 부족한 것도 맞다.
하지만 오픈소스 모델이 대부분 모여있는 Hugging face같은 곳에서 찾은 모델이 불만족스럽다면 오픈소스 모델로는 한계가 있는걸 인정하는게 낫다. 이때는 서비스를 위해서 LLM을 이용하는 것도 고려해볼만 하다.


MongoDB 설치(로컬)

  1. 다음의 경로에서 환경에 맞는 파일을 원하는 경로에 다운로드

https://www.mongodb.com/try/download/community

.msi 는 윈도우 설치 패키지 확장자로, 설치 파일 하나를 통해 설치하는 방식

.zip 는 무설치 압축본.

💫 이하는 zip파일로 다운 했을 때의 과정입니다.

  1. MongoDB는 C://data/db 경로를 필요로 하므로 없다면 생성

  2. mongoDB의 bin파일 위치를 환경변수에 설정

  3. 다음의 명령어로 mongoDB 서버를 로컬에서 시작

mongod --dbpath="C:\data\db"

  1. 또는 아래의 파일을 실행해 데몬 실행 가능

몽고디비는 기본적으로 27017 포트를 이용한다. 접속해서 아래의 메세지가 뜨면 서버가 실행중인 것임.

💡 참고

mongod - 몽고디비 서버 (d는 daemon을 의미. 백그라운드에서 돌아가는 프로세스)

mongos - 샤딩 라우터

mongo - 데이터 베이스 쉘

이후 다음의 추가과정이 필요하다. mongoDB 6.0버전 이상부터는 mongoDB shell을 따로 설치해서 몽고디비를 컨트롤 해야 한다. 아래에서 다운받자.

mongoDB 쉘 설치 링크
https://www.mongodb.com/try/download/shell

이 쉘은 CLI환경에서 mongoDB를 컨트롤할 수 있는 말 그대로의 쉘이다.

GUI도 지원한다고 함. 이름은 compass이다.

mongoDB comapss설치
https://www.mongodb.com/try/download/compass

exe를 선호하지 않지만… 이번엔 옵션이 exe뿐이었다. stable 버전으로 다운받자.

설치를 시작하면 이런 화면이 나온다.

커넥션을 얻어오자. 서버가 열려있다면 URL을 입력해 자동으로 커넥션을 얻어올 수 있다.

그 이후에는 GUI환경에서 편안하게 DB관리 가능


고민거리

이후 mongoDB를 fastAPI로 구축한 서버에 연결하고 테스트를 진행하려고 했다. 이때 이용하 수 있는 드라이버로는 pyMonogomotor가 있다.

MongoDB python 기반 서버 연결 드라이버 확인
https://www.mongodb.com/ko-kr/docs/drivers/python-drivers/

motor설명에서 비동기를 지원한다는 점을 집어 설명하는걸 보니 pyMongo는 그런 기능이 없는걸까 싶다. 간단하게 지피티에게 물어보니 motor가 python의 AsyncIO 라이브러리 기반으로 만들어져있다고는 답변해줬다.

애플리케이션에서 DB커넥션을 연결하는 것 까지는 좋다. 그런데 이어서 드는 고민은 다음과 같다.

  1. fastAPI에서는 스프링에서 지원하던 커넥션 풀 역할이나 트랜잭션 매니저같은 기능을 어떻게 지원하는가?
  2. mongoDB는 컬렉션(기존 RDBMS에서 테이블에 대응)을 어떤 방식으로 설계하는가? 스키마를 어떻게 표현하는가?
  3. fastAPI와 mongoDB를 함께 사용했을때 애플리케이션의 persistence계층 아키텍쳐는 어떤 구조가 일반적인가? 계층별 사용되는 명칭들의 컨벤션은 무엇일까..?

이밖에 파이썬에서는 기존 자바진영에서 presentation계층에서 주로 사용되는 MVC 패턴을 어떻게 사용하고 있는지도 궁금하다. 이번 미니 프로젝트에선 규모가 jinja를 이용하기로 했는데, 이 경우에 애플리케이션 아키텍쳐는 어떤 구조로 되어야 할까...?

0개의 댓글