hye-log

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 17_DAY 77 ๋ณธ๋ฌธ

Boostcourse/AI Tech 4๊ธฐ

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 17_DAY 77

iihye_ 2023. 1. 11. 02:48

๐ŸŒŒ ๊ฐœ๋ณ„ํ•™์Šต


[3-1] FastAPI 1

1. ๋ฐฑ์—”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

1) Server ๊ตฌ์„ฑ Use Case

- ์•ฑ/์›น ์„œ๋น„์Šค์˜ ์„œ๋ฒ„

- ๋จธ์‹ ๋Ÿฌ๋‹ ์„œ๋น„์Šค์˜ ์„œ๋ฒ„

- ์„œ๋น„์Šค ์„œ๋ฒ„ --์š”์ฒญ--> ๋จธ์‹ ๋Ÿฌ๋‹ ์„œ๋ฒ„

 

2) Server์˜ ํ˜•ํƒœ

(1) ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ณ(Monolithic Architecture) : ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํฐ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ

(2) ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ(MicroService Architecture) : ๊ฐœ๋ณ„ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์„œ๋กœ ํ†ต์‹ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ

 

3) REST API

(1) ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—๋„ ์—ฌ๋Ÿฌ API๊ฐ€ ์กด์žฌ

(2) REST API : ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ˜•์‹

- ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ : ์กฐํšŒ, ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ

- CRUD : Create, Read, Update, Delete

(3) HTTP(Hyper Text Transfer Protocol) : ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์ง€์ผœ์•ผ ํ•˜๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ(๊ทœ์•ฝ), ์•ฝ์†

(4) REST(Representational State Transfer)

- Resource, Method, Representation of Resource๋กœ ๊ตฌ์„ฑ

- ํด๋ผ์ด์–ธํŠธ(Client) : ์š”์ฒญ์„ ํ•˜๋Š” ํ”Œ๋žซํผ

- Resource : uniqueํ•œ ID๋ฅผ ๊ฐ€์ง€๋Š” ๋ฆฌ์†Œ์Šค  -> URL

- Method : ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹           -> GET, POST, PUT, PATCH, DELETE

 

(5) URI, URL

- URL(Uniform Resource Locator) : ์ธํ„ฐ๋„ท ์ƒ ์ž์›์˜ ์œ„์น˜

- URI(Uniform Resource Identifier) : ์ธํ„ฐ๋„ท ์ƒ ์ž์›์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด์˜ ๊ตฌ์„ฑ

 

4) HTTP Method

(1) GET : ์ •๋ณด ์š”์ฒญ(Read)

(2) POST : ์ •๋ณด ์ž…๋ ฅ(Create)

(+) GET๊ณผ POST

(3) PUT : ์ •๋ณด ์—…๋ฐ์ดํŠธ(Update)

(4) PATCH : ์ •๋ณด ์—…๋ฐ์ดํŠธ(Update)

(5) DELETE : ์ •๋ณด ์‚ญ์ œ(Delete)

 

5) Header์™€ Body

(1) HTTP ํ†ต์‹ ์—์„œ Request, Response๋Š” ์ •๋ณด๋ฅผ ํŒจํ‚ท(Packet)์— ์ €์žฅ

(2) ํŒจํ‚ท์˜ ๊ตฌ์กฐ : Header / Body

(3) Header : ๋ณด๋‚ด๋Š” ์ฃผ์†Œ, ๋ฐ›๋Š” ์ฃผ์†Œ, ์‹œ๊ฐ„

(4) Body : ์‹ค์ œ ์ „๋‹ฌํ•˜๋ ค๋Š” ๋‚ด์šฉ

 

6) Status Code

(1) ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋”ฐ๋ผ ์„œ๋ฒ„์˜ ๋ฐ˜์‘์„ ์•Œ๋ ค์ฃผ๋Š” Code

(2) ์ข…๋ฅ˜

- 1xx(์ •๋ณด) : ์š”์ฒญ ๋ฐ›์Œ, ํ”„๋กœ์„ธ์Šค ๊ณ„์† ์ง„ํ–‰

- 2xx(์„ฑ๊ณต) : ์š”์ฒญ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ›์Œ, ์‹คํ–‰

- 3xx(๋ฆฌ๋‹ค์ด๋ ‰์…˜) : ์š”์ฒญ ์™„๋ฃŒ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ์ž‘์—… ํ•„์š”

- 4xx(ํด๋ผ์ด์–ธํŠธ ์š”๋ฅ˜) : ์š”์ฒญ ๋ฌธ๋ฒ•์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ

- 5xx(์„œ๋ฒ„ ์˜ค๋ฅ˜) : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•ด ์‹คํŒจํ•จ

 

7) ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

(1) ๋™๊ธฐ(Sync) : ์„œ๋ฒ„์—์„œ ์š”์ฒญ(Request)๋ฅผ ๋ณด๋ƒˆ์„ ๋•Œ, ์‘๋‹ต(Response)๊ฐ€ ๋Œ์•„์™€์•ผ ๋‹ค์Œ ๋™์ž‘ ์ˆ˜ํ–‰

(2) ๋น„๋™๊ธฐ(Async) : ์š”์ฒญ์˜ ์‘๋‹ต ์ƒํƒœ์™€ ์ƒ๊ด€ ์—†์ด ๋‹ค์Œ ๋™์ž‘ ์ˆ˜ํ–‰

 

8) IP(Internet Protocol)

- ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ํŠน์ • PC์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒด๊ณ„

- ์ธํ„ฐ๋„ท์ƒ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ์ฒด๊ณ„

- IPv4 : 4๋ฉ์ด์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ IP ์ฃผ์†Œ ์ฒด๊ณ„

- localhost, 127.0.0.1 : ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ local PC

- 0.0.0.0, 255.255.255.255 : broadcast address, ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์— ์ ‘์†๋œ ๋ชจ๋“  ์žฅ์น˜์™€ ์†Œํ†ตํ•˜๋Š” ์ฃผ์†Œ

 

9) Port

- IP ๋’ค์— ๋‚˜์˜ค๋Š” ์ˆซ์ž(0~65535)

- PC์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต๋กœ

- 0~1024๋Š” ํ†ต์‹ ์„ ์œ„ํ•œ ๊ทœ์•ฝ์— ์˜ํ•ด ์ •ํ•ด์ง

- 24 : SSH

- 80 : HTTP

- 443 : HTTPS

- 8888 : Jupyter Notebook

 

 

2. FastAPI

1) FastAPI์˜ ํŠน์ง•

- ์ตœ๊ทผ ๋– ์˜ค๋ฅด๋Š” Python Web Framework

- High Performance : Node.js, go์™€ ๋Œ€๋“ฑํ•œ ์„ฑ๋Šฅ

- Easy : Flask์™€ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋กœ Microservice์— ์ ํ•ฉ

 - Productivity : Swagger ์ž๋™ ์ƒ์„ฑ, Pydantic์„ ์ด์šฉํ•œ Serialization

 

2) ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (v1)

- app : ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ชจ๋“ˆ ์„ค์ •

- __main__.py : ๊ฐ„๋‹จํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Entrypoint(์‹œ์ž‘์ ) ์—ญํ• 

- main.py / app.py : FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Router ์„ค์ •

- model.py : ML model์— ๋Œ€ํ•œ ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜ ์ •์˜

 

3) Poetry

- Dependency Resolver๋กœ ๋ณต์žกํ•œ ์˜์กด์„ฑ๋“ค์˜ ๋ฒ„์ „ ์ถฉ๋Œ์„ ๋ฐฉ์ง€

- Virtualenv๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ด์ง

- ๊ธฐ์กด ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” build, publish ๊ฐ€๋Šฅ

- pyproject.toml์„ ๊ธฐ์ค€์œผ๋กœ ์—ฌ๋Ÿฌ ํˆด๋“ค์˜ config๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌ

 

4) Poetry ์‹ค์Šต

(1) Poetry ์„ค์น˜

(2) Poetry ํ”„๋กœ์ ํŠธ init

(3) 01_sample_webserver.py ์ƒ์„ฑ

 

(4) uvicorn์„ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰

- docs

- redoc

 

5) Swagger

- ๋งŒ๋“  API๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ

- REST API ์„ค๊ณ„ ๋ฐ ๋ฌธ์„œํ™”ํ•  ๋•Œ ์‚ฌ์šฉ

- ๊ธฐ๋Šฅ : API ๋””์ž์ธ, ๋นŒ๋“œ, ๋ฌธ์„œํ™”, ํ…Œ์ŠคํŒ…



๐ŸŒŒ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์˜ค์ „์—๋Š” ๋ฉ˜ํ† ๋ง์„ ํ–ˆ๋‹ค. ์ตœ์ข… ํ”„๋กœ์ ํŠธ ์ฃผ์ œ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์–ด๋–ป๊ฒŒ ์ „์†กํ•˜๋Š”์ง€์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ๊ณ ๋ฏผ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค. ๋˜ํ•œ, ์„œ๋น„์Šค ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ๊ฑด์ง€(out of detecting, miss tracking, continuous learning)๋ฅผ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด MLOps์˜ ๊ฐ€์น˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฉ˜ํ† ๋ง์„ ํ†ตํ•ด ์กฐ์–ธ์„ ์–ป์—ˆ๋‹ค!

728x90
Comments