지난 주
- 파이썬 프로그래밍 언어
- 내가 뭘 모르는지를 알고, 이야기를 할 수 있어야 한다.
키워드
http란 무엇인가 / http를 파이썬에서 어떻게 다룰 것인가
1. 네트워크
- 데이터를 주고 받기 위해서
- 노드(node) : 네트워크에서 데이터를 생성, 수신, 또는 전송하는 장치나 지점 (서버, 클라이언트)
- 클라이언트(요청의 주체) - 서버(응답의 주체)
- TCP/IP vs OSI
- socket : 네트워크를 프로그래밍하기 위해 추상화한 것
- localhost : 자기자신, 이 컴퓨터의 로컬
- port : 항구, 주소의 일부
- 주소를 세분화 하는 번호가 port, localhost라는 서버에도 port1, port2, port3 등 여러 개를 가질 수 있다
## server.py
import socket
server_socket = socket.socket(socket.AF_INFT, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(1)
client_socket, addr = server_socket.accept()
print(f"addr: {addr}")
client_socket.sendall("hello".encode('utf-8'))
client.socket.close()
server_socket.close()
## client.py
import socket
client_socket = socket
client_socket.connect('localhost', 12345))
data = client_socket.recv(1024)
print(f"data: {data.decode('utf-8')}")
client_socket.close()
위와 같이 코드를 작성하면 <딱 1번만 통신이 가능하다
client는 상관없지만, server를 봤을 때는 server는 다른 client와도 소통해야하고, 계속 열려있어야 한다.
--> (무한) 루프를 활용해서 계속 서버가 켜지게 한다. (예 - 웹서비스 24시간) : 서버는 계속 돌고 있다, 서버는 루프이다.
--> 계속 돌아가야 하니까 전기 소모가 많아진다
2. 웹 기초 (HTTP)
- (plain text -> hyper text) hypertext transfer protocol : TCP 위에서의 프로토콜
- 글을 뛰어 넘는 글(이미지, 오디오 등)을 전송하는 규약
- multimedia - jpg, png, HTML, CSS, audio, link (text : html, css, js... / binary : jpg, png...)
- HTTP request message -> request 요청
- HTTP respinse message -> response 응답
- HTTP의 대표적인 client : browser



## http 요청 메세지가 들어왔을 때 파싱하는 코드를 짜보세요
## parser.py
def parse(message):
\r\n\r\n #<-- 이걸로 header와 body를 구분(두 번 \r\n을 써야함)
....
...
method
path
version
dict(key,value)
body string
- HTTP 요청 메소드 (request method)
- GET(조회), POST(생성), PUT, PATCH, DELETE
- HTTP 상태 코드
- 200(성공), 300(리다이렉션 : 도착 주소 재지정), 400(클라이언트 오류), 500(서버 오류)
- HTTP URL
- 요청 매개변수 - HTTP 경로 변수와 쿼리 스트링
- 경로 매개변수
- 질의 매개변수
파이썬 설치
- python.org
- brew install python
- conda install python
- venv
- uv
format
- json
- xml
3. FastAPI
- web framework
- 스웨거 문서 자동 생성
한 줄 정리 & 왜 쓰는지
http 항목전체 (http1, http2, http3 (구글, 메타에서의 질문 : http2와 http3의 차이)
json (json에서는 스키마를 잘 짜는게 중요하다 / xml)
rest api (rest, restApi, restful)
#한 줄 정리
1. HTTP - 글을 뛰어넘는 글(이미지, 오디오 등)을 전송하는 "규약"
2. RestAPI
- 웹에서 데이터를 주고 받을 때 지켜야 하는 "규칙"
- http method를 사용해서 CRUD 작업을 수행
- [교재] (내가 만드는) 애플리케이션과 (이미 만들어진) 애플리케이션이 서로 통신할 수 있도록 정의한 "명세서"
- [교재] 대표적인(REpresentational) 상태(State) 전송(Transfer) API
3. FastAPI
- RestAPI를 작성하기 위한 "도구"
- 파이썬 기반의 웹 프레임워크 (다른 종류로는 Express(javascript), Flask(python), Spring Boot(java) 등이 있음)
4. JSON
- 프로그램끼리 데이터를 주고 받기 위해 사용하는 "텍스트 형식"
- 계층적인 트리/객체 형태 : key-value ( <-> csv : 콤마(,)로 구분된 테이블 형태의 텍스트 형식)
과제
1. HTTP 내용 정리
2. FastAPI로 커뮤니티 서비스의 백엔드를 구현해보세요 (HTTP REST API 설계 및 구현)
- 인증기능 x
- 게시글 작성 (제목, 내용, 이미지) -- 이미지 x (파일 x)
================
[과제2 참고]
- 글 작성
POST /posts
{"title" : "제목", "content" : "내용"}
- 응답 성공 200
생성된 글의 번호
{"post_id" : 3}
- 글 목록
GET / posts
- 응답 성공 200
{"id":3, "title":"제목", "content":"내용", 좋아요, 댓글수, 조회수,,,}
- 테스트
유닛 테스트 : 함수 자체의 기능 점검
e2e(end to end) 테스트 : 클라이언트-서버 간의 네트워크 포함 테스트
================
* main.py가 매우 빨리 커진다 --> 어떻게 구분화 할건지 고민해보기
* 서버를 재시동하면 데이터가 날아간다 --> 메모리가 아닌 다른 저장이 필요
1. 파일 (json, csv...)
2. DBMS --> RDBMS
'카테부 4기 판교 ai 실무 > 수업내용 & 과제' 카테고리의 다른 글
| 0610 정규수업3 (0) | 2026.06.10 |
|---|---|
| 0513 ~ 0516 키워드 (0) | 2026.05.19 |
| 0514 심화수업1 (0) | 2026.05.16 |
| 0513 정규수업1 (0) | 2026.05.16 |
| 0512 ot (0) | 2026.05.16 |