# [수업 자료] 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) 적용해보기