오늘은 지금까지 배운 Python을 실제 웹 서비스 형태로 연결하는 첫날이었다. 오전에는 Git 협업을 반복하면서 브랜치와 Merge 흐름을 익혔고, 오후에는 FastAPI를 이용해 CRUD(Create, Read, Update, Delete)를 직접 구현했다. 단순히 코드를 작성하는 것을 넘어 브라우저와 서버가 어떻게 데이터를 주고받는지 전체 흐름을 이해하는 시간이었다.
오전 수업 - Git 협업 반복 실습
브랜치 협업 흐름 익히기
오늘 오전에는 Git 협업을 계속 반복했다.
처음에는 브랜치 생성, Commit, Push 정도만 이해하고 있었지만 여러 번 실습하면서 협업 흐름이 조금씩 머릿속에 정리됐다.
오늘 반복한 흐름은 아래와 같다.
- 자신의 브랜치에서 작업
- Commit
- Push
- 리더가 모든 브랜치를 Merge
- Main 업데이트
- 팀원들이 Main을 자신의 브랜치로 Merge
- 다시 작업 시작
특히 강사님께서 강조한 부분은 "Git은 책으로 배우는 것이 아니라 계속 부딪혀 봐야 한다."였다.
실제로 Merge Conflict, Fetch, Pull, Push를 직접 겪으면서 훨씬 이해가 잘 됐다.
Merge와 Checkout 이해
오늘 가장 헷갈렸던 개념은
- Checkout
- Merge
- Main
- Remote Branch
였다.
여러 번 실습하면서
- Checkout은 작업할 브랜치로 이동하는 것
- Merge는 다른 브랜치 내용을 현재 브랜치에 합치는 것
- Main은 팀의 최신 버전
- 팀원은 Main을 자신의 브랜치로 가져와 최신 상태를 유지해야 한다.
는 흐름을 이해할 수 있었다.
Markdown(MD) 문법
후반부에는 README.md 작성법도 배웠다.
오늘 배운 내용은
- 제목(#)
- 소제목(##)
- 목록
- 코드 블록
- 표
- 링크
- 이미지 연결
- 현재 폴더 및 상위 폴더 링크
등이었다.
특히 MD 파일이 단순한 README가 아니라
AI 시대에는 프로젝트 설계 문서와 프롬프트 문서 역할까지 한다는 점이 인상 깊었다.
Codex 같은 AI에게도 MD 파일을 기반으로 프로젝트를 생성하도록 요청할 수 있다는 점이 흥미로웠다.
오후 수업 - Codex 바이브 코딩
오후에는 Codex를 이용한 바이브 코딩을 배웠다.
강사님은 AI에게 바로 "프로그램 만들어줘"라고 하지 말고,
먼저
- 프로젝트 계획
- 폴더 구조
- 모델
- 서비스 구조
등을 MD 파일로 정리한 뒤
그 문서를 기준으로 프로젝트를 생성하도록 요청해야 한다고 설명했다.
또한 AI가 만들어 준 결과를 그대로 사용하는 것이 아니라
- 계획 수정
- README 보강
- 코드 주석 추가
- 구조 개선
등을 계속 요청하면서 프로젝트를 발전시키는 방식도 배웠다.
FastAPI 시작
오늘부터 본격적으로 백엔드 개발이 시작됐다.
FastAPI를 이용해 웹 서버를 만들고 Swagger UI에서 직접 API를 테스트했다.
처음에는 단순히
@app.get()
@app.post()
정도만 사용하는 줄 알았는데,
HTTP Method 자체가 서버와 대화하는 규칙이라는 것을 이해하게 됐다.
HTTP Method 이해
오늘 배운 가장 중요한 개념 중 하나는 HTTP Method였다.
- GET → 조회
- POST → 생성
- PUT → 수정
- DELETE → 삭제
이 네 가지만으로 대부분의 게시판, 회원가입, 쇼핑몰 기능을 만들 수 있다.
실제로 게시판 CRUD를 만들면서 각각의 역할을 직접 확인했다.
CRUD 구현
오늘 구현한 기능은 다음과 같다.
GET
메모 전체 조회
GET /memos/list
메모 하나 조회
GET /memo/{id}
POST
새로운 메모 생성
화면에서 제목과 내용을 입력하면 서버에서 데이터를 저장하는 과정을 구현했다.
PUT
기존 메모 수정
수정은 일부만 보내는 것이 아니라
id, title, content 전체를 서버로 다시 전송한다는 점도 배웠다.
DELETE
메모 삭제
삭제 요청 시 해당 ID를 찾아 삭제하는 기능도 구현했다.
FastAPI 모델 자동 변환
오늘 신기했던 부분이다.
화면에서
{
"title": "...",
"content": "..."
}
이렇게 데이터를 보내면
FastAPI가 자동으로
MemoCreate
객체로 변환해서 함수에 전달해 준다.
덕분에 JSON을 직접 파싱하지 않아도 바로 Python 객체처럼 사용할 수 있었다.
가짜 데이터(Mock Data)
아직 데이터베이스를 배우기 전이라
메모 정보를
- List
- Dictionary
를 이용한 Mock Data로 저장했다.
실제로는 메모리에만 저장되기 때문에
서버를 종료하면 데이터가 사라진다는 것도 확인했다.
다음부터는 Supabase 데이터베이스와 연결하여 실제 DB에 저장하게 된다.
예외 처리(Exception)
삭제하거나 수정할 데이터가 없을 경우
단순히
print("없음")
으로 끝내는 것이 아니라
raise HTTPException(
status_code=404,
detail="Memo not found"
)
를 사용하는 방법도 배웠다.
이를 통해 프론트엔드는
404 상태 코드를 보고
"존재하지 않는 데이터입니다."
라는 화면을 출력할 수 있다.
단순한 메시지가 아니라 HTTP 상태 코드까지 전달하는 것이 백엔드 개발의 중요한 부분이라는 점을 이해했다.
백엔드의 전체 흐름 이해
오늘 가장 크게 느낀 것은
백엔드는 결국
"화면에서 요청을 받아 데이터를 처리한 뒤 다시 결과를 보내주는 프로그램"
이라는 점이었다.
사용자가 회원가입 버튼을 누르면
- 화면에서 데이터 입력
- 서버로 전송
- 서버에서 처리
- 데이터베이스 저장
- 결과 반환
이라는 흐름으로 동작한다.
게시판도
쇼핑몰도
로그인도
회원가입도
결국 모두 이 흐름을 반복한다는 것을 이해할 수 있었다.
과제
오늘 과제로는 두 가지가 주어졌다.
- 메모 하나 조회(GET by ID) 기능 구현
- 게시판(Board) CRUD 프로젝트 직접 만들기
게시판 프로젝트는 Codex를 이용해
- 먼저 MD 계획서를 작성하고
- AI에게 프로젝트를 생성하게 한 뒤
- 생성된 코드를 직접 다시 구현해 보는 방식으로 진행할 예정이다.
AI가 만든 코드를 그대로 사용하는 것이 아니라, 직접 따라 만들어 보며 구조를 이해하는 것이 목표다.
오늘의 회고
오늘은 지금까지 배운 Python이 실제 웹 서비스와 연결되는 과정을 처음 경험한 날이었다.
오전에는 Git 협업을 반복하며 브랜치 관리에 익숙해졌고, 오후에는 FastAPI를 이용해 CRUD를 구현하면서 백엔드가 어떤 역할을 하는지 조금씩 감이 잡히기 시작했다.
특히 FastAPI가 요청 데이터를 자동으로 객체로 변환해 주는 기능과 HTTP 상태 코드를 이용한 예외 처리는 매우 인상적이었다.
또한 AI(Codex)를 이용해 프로젝트를 만드는 과정도 단순히 "코드를 대신 작성해 주는 도구"가 아니라, 프로젝트 설계부터 문서 작성, 코드 생성까지 함께하는 개발 파트너처럼 활용할 수 있다는 점을 배웠다.
아직은 CRUD 하나 구현하는 것도 익숙하지 않지만, 직접 손으로 따라 만들어 보면서 흐름을 이해하려고 노력하고 있다. 앞으로 데이터베이스까지 연결하면 오늘 배운 내용이 더욱 자연스럽게 이어질 것 같아 기대된다.
오늘 배운 핵심 키워드
- Git Branch
- Merge
- Checkout
- Markdown
- README.md
- Codex
- Vibe Coding
- FastAPI
- HTTP Method
- CRUD
- GET
- POST
- PUT
- DELETE
- Mock Data
- Dataclass
- HTTPException
- 404 Not Found
- Swagger
- Backend API
댓글