FastAPI 첫 시작

2023년 11월 7일 TIL

Today I Learned

날짜

2023년 11월 7일 화요일

내용

온보딩 과제를 시작했다. To do list와 관련된 CRUD 사이트를 프론트엔드, 백엔드로 만들어야 한다. 프론트는 Angular, 백엔드는 FastAPI다. 목표 기한은 11월 10일 금요일(놀랍게도 내가 설정한 목표)이다. 적어도 내일은 백엔드를 끝내야 하는데.. Angular가 걱정이다. 그렇다고 백엔드를 대충 끝내지 말고 내 포지션인 만큼 완성도있게 만들자.

공식 Document

어제 스쿼드 리더님과 대화를 나눌 때 ChatGPT와 Copilot 관련해서 여쭤봤는데 온보딩때는 사용하지 않는걸 권하셨다. 나도 짧은 프로젝트도 아니고, 내가 회사에서 일하는 동안 계속 써야할 Tool인 만큼 스스로 확실하게 익히는게 중요하다고 생각했기 때문에 납득할 수 있었다. 그래서 일절 사용하지 않고, FastAPI 공식 Document를 열심히 읽으면서 따라가고 있다. 구글링도 최대한 자제 하고 있는데, 생각보다 Document에서 원하는 답을 찾기가 더 수월한 경우가 많기도 했고 예전 부트캠프에서 공부할 때 블로그의 낮은 신빙성을 못본체 하면 안된다는 충고가 생각나기도 했기 때문이다.

오늘 하루 느낀 점은 다음과 같다.

  • Document는 생각보다 굉장히 섬세하고 친절하다. 세줄 요약이 안되있어서 내 욕심을 채워주지 못할 뿐이다.
  • 세줄 요약을 바라지 말자. 세줄 요약으로 이해할 수 있는 내용이였다면 애초에 내가 이해를 못했을리가 없다.
  • 시간을 절약하기 위해 빠르게 훑어보는 것이 가장 시간을 낭비하는 헛짓거리다.
  • 순서대로 정독해보자. 목차와 순서는 다 이유가 있다.

FastAPI

최근 프로젝트에서 NestJS로 로그인, 회원가입을 구현했었다. 컨트롤러, 서비스, 엔티티, 레포지토리 등으로 구성했었는데 FastAPI도 비슷한 듯 다르다. 우선 main에서 프론트에서 보내는 요청을 받고, router에는 받은 요청에서 처리하는 함수를 정의하는 것 같다. dependencies, models, databases 등등으로 나뉘어져 있는데 비슷한듯 달라서 아직까지 어려움을 겪진 않았다. OpenAPI라는 기능이 내장되어있는데, API를 작성하는 것만으로 localhost:{port}/docs 에 들어가면 내가 정의한 API를 볼 수 있고 테스트해볼 수도있다! POSTMAN에서 해방이라니 기깔나기 짝이없다!

오전에는 NestJS로 만들었던 프로젝트에 감을 살리고, 알고리즘 공부로 다듬어진 나의 파이썬 언어 실력과 공식 Document를 속독하여 얻은 지식을 결합하여 프로젝트를 엉망진창으로 만들었다. 그래서 깔끔하게 브랜치 날려버리고 한걸음씩 시작하니 답이 보였다. 이전 프로젝트때 CTO님이 ‘미리 commit message를 작성해놓는 버릇을 들이라’고 하셨는데 이제 그 이유를 알 것 같다. 중구난방으로 코드를 작성하다 길을 잃으니 답도 없었다. 차근차근 하나씩 커밋하면서 하는 습관을 꼭 들이자.

오후 늦게부터는 Database와 관련된 문제를 겪어서 진행을 못했다. 현재 sqlite db를 쓰고 있는데, table이 생성되지 않는다. 기초 구조에는 dependencies에 db 인스턴스를 만드는 함수?가 정의되어있는데 아무래도 이 부분에 대한 이해가 부족한 것 같다. 나름대로 생각을 정리하며 추론해봤다.

  1. Dependency Injection은 중복되는 코드를 방지하기 위함이다. 한 코드를 여러군데에서 쓸 떄 매번 정의할 필요가 없으니까
  2. 현재 DB table 생성하는 것으로 보이는 것이 DI 쪽에 들어있다. DB를 만드는 데 왜 종속성 주입이 필요할까?
  3. 기존까지 나는 DB는 한번만 만들면 되는것 아닌가? 라고 생각했는데.. 애초에 DB 인스턴스라는건 뭔가?
  4. 종속성 주입을 내가 온전히 이해하고 있는건가? 내가 이 프로젝트에서 DB에 대해 잘못 이해하고 있을까?

현재까진 이정도로 정리했다. 어제 배운 메타인지의 힘일까? 내일 하나씩 차근차근 공부해보면서 내가 모르는 부분이 정확히 어떤 것인지 알아보자. 마음같아선 chatGPT에게 저 질문을 떄려박고 싶지만.. 쓰지말자.