Files
2026-02-27 12:13:57 +09:00

89 lines
3.6 KiB
Markdown

# [수업 자료] FastAPI 첫 걸음: 간단한 채팅 프로그램 만들기
이 자료는 FastAPI를 사용하여 기본적인 클라이언트-서버 구조의 채팅 프로그램을 이해하기 위한 설명서입니다. PPT 제작 시 각 섹션을 슬라이드로 활용할 수 있도록 구성되었습니다.
---
## Slide 1: 프로젝트 개요
### "FastAPI로 만드는 나만의 채팅 서버"
- **목표**: Python의 현대적인 웹 프레임워크인 FastAPI를 이용해 메시지를 주고받는 서버와 클라이언트를 구현합니다.
- **핵심 기술**:
- **FastAPI**: 빠르고 생산적인 Python 웹 프레임워크
- **Uvicorn**: ASGI 서버로 FastAPI 앱을 실행
- **Pydantic**: 데이터 검증 및 설정을 위한 라이브러리
- **Requests**: Python에서 HTTP 요청을 보내는 라이브러리
---
## Slide 2: 전체 구조 (Architecture)
### "누가 무엇을 하나요?"
![채팅 프로그램 전체 구조](./assets/architecture.png)
- **서버 (Server - `server.py`)**:
- 메시지를 저장하는 장소 (메모리 내 리스트)
- 클라이언트의 요청을 기다리고 처리함 (API 제공)
- 메시지에 '언제' 보냈는지 시간을 기록함
- **클라이언트 (Client - `client.py`)**:
- 사용자와 직접 소통하는 화면 (터미널)
- 서버에 메시지를 보내거나(POST), 새로운 메시지를 가져옴(GET)
---
## Slide 3: 데이터의 약속 (JSON & Model)
### "서버와 클라이언트는 어떻게 대화하나요?"
- **데이터 형식 (JSON)**:
```json
{
"name": "고도푸",
"message": "안녕하세요!"
}
```
- **데이터 모델 (Pydantic)**:
- 서버는 어떤 데이터가 들어올지 미리 정의합니다.
- `name`과 `message`가 문자열(str)인지 자동으로 검사합니다.
---
## Slide 4: 메시지 전송 (POST Request)
### "서버로 메시지 보내기"
![메시지 전송 및 수신 흐름](./assets/flow.png)
1. 사용자가 내용을 입력합니다.
2. 클라이언트가 서버의 `/messages` 주소로 데이터를 실어 보냅니다. (POST)
3. 서버는 현재 시간을 계산하여 메시지와 함께 저장합니다.
- **서버 로직**: `datetime.now().strftime(...)`를 사용하여 친숙한 시간 형식으로 변환
---
## Slide 5: 메시지 확인 (GET Request & Polling)
### "새로운 메시지 가져오기"
- **효율적인 조회**: 모든 메시지를 매번 다 가져오는 것은 비효율적입니다.
- **인덱스 활용 (`start` 파라미터)**:
- 클라이언트는 "내가 5번까지 봤으니, 6번부터 줘!"라고 요청합니다.
- 예: `/messages?start=5`
- **결과**: 클라이언트는 아직 보지 못한 '새 소식'만 화면에 출력합니다.
---
## Slide 6: 실습 흐름 (Workflow)
### "직접 실행해 봅시다!"
1. **서버 실행**: `python server.py` (비서가 전화를 기다리는 상태)
2. **클라이언트 실행**: `python client.py` (사용자가 대화를 시작)
3. **상호작용**:
- 1번 선택: 메시지 작성 및 전송
- 2번 선택: 새 메시지 확인 (다른 사람이 보낸 것도 보임!)
- 3번 선택: 종료
---
## Slide 7: 요약 및 발전 방향
### "무엇을 배웠나요?"
- **HTTP Method**: 데이터를 보낼 때는 POST, 가져올 때는 GET을 사용합니다.
- **Stateless**: 서버는 클라이언트가 누구인지 기억하지 않지만, 요청에 따라 데이터를 관리합니다.
- **Next Step**:
- 데이터베이스(DB) 연결하여 재시작해도 대화 유지하기
- 웹 브라우저 화면(HTML/CSS)으로 예쁘게 만들기
- 실시간 통신(WebSocket) 적용해보기