오늘은 지금까지 배운 파이썬 문법을 실제 백엔드 프로젝트 형태로 연결하는 방법을 배웠다. 함수와 클래스, Git을 각각 따로 공부하던 단계에서 벗어나 FastAPI를 이용해 하나의 서비스를 만드는 구조를 이해하기 시작한 하루였다.
특히 CRUD(Create, Read, Update, Delete)를 직접 구현하고, Router와 Schema를 분리하는 프로젝트 구조를 배우면서 왜 현업에서 코드를 여러 파일로 나누는지 조금씩 이해가 되기 시작했다. 난이도는 확실히 올라갔지만, 실제 프로젝트가 어떻게 만들어지는지 처음으로 감이 잡힌 하루였다.
FastAPI CRUD 구현하기
오늘은 고객(Customer)을 예제로 CRUD를 구현했다.
CRUD는 거의 모든 웹 서비스에서 사용하는 가장 기본적인 기능이다.
- Create : 데이터 생성
- Read : 데이터 조회
- Update : 데이터 수정
- Delete : 데이터 삭제
예전에는 CRUD라는 단어만 알고 있었는데, 오늘 직접 API를 만들어 보면서 "회원가입", "회원조회", "회원정보 수정", "회원삭제"가 모두 CRUD라는 것을 이해하게 되었다.
또한 모든 API가 같은 형태로 응답하도록 ApiResponse 모델을 사용하는 이유도 배웠다.
{
"success": true,
"message": "정상 조회",
"data": {}
}
응답 형식을 통일하면 프론트엔드에서는 항상 같은 구조로 데이터를 받을 수 있기 때문에 개발이 훨씬 편해진다고 한다.
async와 await를 처음 이해해 보기
오늘 가장 어려웠던 내용은 단연 async와 await였다.
처음에는 문법보다 왜 사용하는지 이해하는 것이 더 어려웠다.
내가 이해한 방식으로 정리하면 이렇다.
async가 없으면
손님 한 명이 데이터베이스에서 데이터를 가져오는 동안 다음 손님은 기다려야 한다.
첫 번째 요청
↓
DB에서 5초 대기
↓
끝난 후 두 번째 요청
즉, 한 명이 끝나야 다음 사람이 처리된다.
async를 사용하면
첫 번째 요청
↓
DB 기다림
두 번째 요청 시작
세 번째 요청 시작
여러 사람이 동시에 요청을 시작할 수 있다.
await
하지만 async만 쓰면 데이터가 오기도 전에 다음 코드가 실행된다.
그래서
data = await get_data()
처럼 작성해서
"데이터가 올 때까지 여기서만 잠깐 기다려."
라는 의미로 사용한다.
아직 완전히 익숙하지는 않지만, 왜 필요한지는 조금 이해할 수 있었다.
HTTPException으로 예외 처리하기
없는 데이터를 조회하거나 수정하려고 하면 오류를 발생시키는 방법도 배웠다.
raise HTTPException(
status_code=404,
detail="ID가 존재 안함"
)
이 코드는
- 404 오류를 발생시키고
- 함수를 즉시 종료하며
- 사용자에게 오류 메시지를 반환한다.
웹 서비스를 만들 때는 정상적인 경우뿐 아니라 잘못된 요청까지 처리해야 한다는 점을 다시 한번 느꼈다.
Router와 Schema를 분리하는 이유
처음에는 모든 코드를 하나의 파일에 작성했다.
하지만 프로젝트가 커질수록 파일이 너무 길어지고, 여러 명이 동시에 작업하기 어려워진다.
그래서 프로젝트 구조를 다음과 같이 나누었다.
main.py
router/
router_post_cu.py
router_post_rd.py
schema/
model_post.py
model_common.py
- Router는 API 요청을 처리하는 곳
- Schema는 데이터 구조(BaseModel)를 정의하는 곳
- main.py는 모든 Router를 연결하는 역할
처음에는 왜 굳이 나누는지 몰랐는데, 팀 프로젝트를 시작하면서 여러 명이 동시에 개발하려면 반드시 필요한 구조라는 것을 이해하게 되었다.
GitHub 협업 방식 배우기
오늘은 GitHub 협업 방식도 프로젝트 형태로 연습했다.
팀장이 기본 프로젝트 구조를 GitHub에 올리고,
각 팀원은
- 저장소 Clone
- 브랜치 생성
- 자신이 맡은 기능 개발
- Commit & Push
를 진행한 뒤 마지막에 Merge하는 방식으로 작업하게 된다.
혼자 개발할 때는 느끼지 못했는데, 협업에서는 폴더 구조와 파일 분리가 훨씬 중요하다는 것을 알게 되었다.
첫 팀 프로젝트 시작
오늘부터 팀 프로젝트도 시작했다.
우리 팀은 블로그 서비스를 주제로 정했다.
기능은 크게
- User
- Post
- Comment
세 가지로 나누었다.
나는 Post의 Create와 Update(CU) 를 맡게 되었다.
오늘 배운 Customer CRUD 구조를 그대로 응용해서 게시글 생성과 수정 기능을 구현할 예정이다.
아직 데이터베이스는 연결하지 않지만, API 구조를 직접 만들어 보는 것만으로도 실제 프로젝트를 하는 느낌이 들었다.
오늘 느낀 점
오늘은 지금까지 수업 중 가장 어려운 하루였다.
단순히 문법을 배우는 것이 아니라 실제 프로젝트 구조를 설계하고, 여러 사람이 함께 개발하는 방식을 배우기 시작하면서 생각해야 할 것이 정말 많아졌다.
특히 async와 await는 아직 완전히 이해했다고 말하기는 어렵다. 하지만 "왜 사용하는지"를 먼저 이해한 덕분에 앞으로 코드를 계속 작성하면서 자연스럽게 익숙해질 것 같다.
다음 주부터는 데이터베이스와 AI API까지 연결한다고 한다. 오늘 배운 CRUD와 프로젝트 구조를 제대로 이해하지 못하면 이후 내용을 따라가기 어려울 것 같아서 주말 동안 직접 다시 만들어 보며 복습할 계획이다.
오늘 배운 핵심 키워드
- FastAPI
- CRUD
- APIRouter
- Schema
- BaseModel
- ApiResponse
- HTTPException
- async
- await
- GitHub Branch
- Git Merge
- 프로젝트 구조
- REST API
- 팀 프로젝트
댓글