Loading...
2021. 4. 11. 22:27

[Programming] Reactive (๋ฆฌ์•กํ‹ฐ๋ธŒ)

์›น ์„œ๋น„์Šค์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ API ๊ฒฐ๊ณผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ n๊ฐœ์˜ API ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ”ํžˆ ์šฐ๋ฆฌ๊ฐ€ SPA๋ฅผ ๊ฐ€์ง€๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ์—ฌ๋Ÿฌ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ผ์ด ์žˆ๋Š”๋ฐ, ์ด์™€ ๋น„์Šทํ•œ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. Reactive Programming์ด ๋‚˜์˜ค๊ธฐ ์ด์ „, ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ทธ๋ƒฅ ์ˆ˜์‹ญ๋Œ€ ์„œ๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  GB ์ •๋„์˜ ๋ฐ์ดํ„ฐ, ๋ช‡ ์ดˆ ๊ฑธ๋ฆฌ๋Š” ์‘๋‹ต ์‹œ๊ฐ„, ์œ ์ง€๋ณด์ˆ˜๋Š” ๋ช‡ ์‹œ๊ฐ„ ๊ฑธ๋ฆฌ๋Š” ์ •๋„๊ฐ€ ๋‹น์—ฐํ•˜๋‹ค. ๋ผ๊ณ  ๋ณด๊ณ  ์šด์˜์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์–ด๋–จ๊นŒ์š”? ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๊ฐ€ ์žˆ๊ณ , ํŠนํžˆ ํ•œ๊ตญ์—์„œ๋Š” ์ธํ„ฐ๋„ท ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ์ˆ˜ ์ดˆ๋ผ๋„ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ๋ƒฅ ๋‹ซ์•„๋ฒ„๋ฆฌ๋Š” ๊ฒŒ ๊ด€์Šต์ด ๋˜์–ด๋ฒ„๋ ธ์ฃ . ์ด๋ ‡๊ฒŒ ๋ณ€ํ™”๊ฐ€ ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋Š˜์–ด๋‚œ ๋ฐ์ดํ„ฐ ์‹œ..

2021. 4. 4. 12:52

[FastAPI] 9. Persistence Layer ๊ตฌ๊ฐ„์„ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฒซ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” FastAPI๊ฐ€ ASGI ๊ธฐ๋ฐ˜์˜ uvicorn์„ ์ด์šฉํ•˜์—ฌ uvloop์— ๊ธฐ๋ฐ˜ํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ API ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๊ต๋กญ๊ฒŒ๋„ Database Connection์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š์•„ API ์š”์ฒญ ๋‹จ์—๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ๋„ DB์— ์•ก์„ธ์Šค ํ•˜๋Š” ๊ตฌ๊ฐ„์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Blocking์ด ๋ฐœ์ƒํ•˜๊ณ , ๋‹ค์Œ ์š”์ฒญ์ด ๊ณ„์† ๋Œ€๊ธฐ ๋˜๋Š” ๋ฌธ์ œ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Python DB API ๊ทธ๋ ‡๋‹ค๋ฉด ํŒŒ์ด์ฌ์€ ์–ด๋–ค์‹์œผ๋กœ Database์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ์š”? Java์˜ ๊ฒฝ์šฐ๋Š” JDBC๋ผ๋Š” Database Connector๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Database ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•œ๋ฐ์š”. Pyt..

2021. 3. 27. 14:24

[Spring boot] Axon Framework ๋ง›๋ณด๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŠธ๋ถ€ํ„ฐ Spring์„ ์ด์šฉํ•œ CQRS์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ช‡ ํŒŒํŠธ๊ฐ€ ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ ์ค‘ ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 2021.03.21 - [Architecture/MSA] - [MSA] 7. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 3 - ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS [MSA] 7. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 3 - ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS ์ด๋ฒคํŠธ ์†Œ์‹ฑ์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ 2017 SpringCamp์—์„œ์˜€์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” MSA๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€๋„ ๋ชปํ–ˆ๊ณ , MSA๋Š” ๋Œ€๊ธฐ์—…์—์„œ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๊ณ , ์ ์šฉ๊ฐ€๋Šฅํ•œ ์—„์ฒญ๋‚˜๊ฒŒ ํฐ ์•„ํ‚คํ…์ฒ˜์˜€๋‹ค. ๋ผ๊ณ ๋งŒ ์ธ blog.neonkid.xyz CQRS์™€ ์ด๋ฒคํŠธ ์†Œ์‹ฑ์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์ œ๋Œ€๋กœ ์ดํ•ด๋˜์—ˆ์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ..

2021. 3. 14. 16:53

[FastAPI] 8. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์—์„œ SQLAlchemy์˜ scoped_session์ด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ด์œ 

์•„๋ž˜์˜ ํฌ์ŠคํŠธ์—์„œ FastAPI๊ฐ€ SQLAlchemy์™€ ์—ฐ๋™ํ•˜์˜€์„ ๋•Œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฏธํกํ•˜๋‹ค๋Š” ๋‹จ์ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์—ˆ๋˜ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 2020.12.27 - [Programming/Python] - [FastAPI] 2. SQLAlchemy๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ CRUD API ๋งŒ๋“ค๊ธฐ [FastAPI] 2. SQLAlchemy๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ CRUD API ๋งŒ๋“ค๊ธฐ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ORM์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ORM์€ Object Relation Mapping์˜ ์•ฝ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Entity์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ blog.neonkid.xyz ์ด ๋ถ€๋ถ„์—์„œ ๋‹ค๋ฃฌ SQLAlchemy์˜ scoped_session์— ๋Œ€ํ•ด ์ข€ ๋” ..

2021. 3. 6. 19:22

[RxJava] 5. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 3ํŽธ (์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž)

2021/02/21 - [Programming/Java] - [RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž) [RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž) 2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) 2021/01/23 - [Programming/Java] - [RxJ.. blog.neonkid.xyz ์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ RxJava์˜ ๊ธฐ๋ณธ์„ ๋‹ค๋ฃจ๋Š” ์—ฐ์‚ฐ์ž ๋งˆ์ง€๋ง‰ ํŽธ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ํ•™ ์—ฐ์‚ฐ..

2021. 2. 27. 16:39

[FastAPI] 7. Google-auth ๋ฐ PyJWT๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 2

์ง€๋‚œ ๊ธ€์— ์ด์–ด์„œ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” OAuth2 ์ธ์ฆ ํ† ํฐ์„ API์—์„œ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. HTTP Header ์šฐ๋ฆฌ๊ฐ€ REST API๋ฅผ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” HTTP ํ”„๋กœํ† ์ฝœ์€ Header์™€ Body๋ผ๋Š” ๊ตฌ์กฐ๋กœ ์ด๋ค„์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Header์™€ Body ๋ชจ๋‘ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ Header์—๋Š” ์ „์†กํ•˜๊ณ ์ž ํ•˜๋Š” ์„œ๋ฒ„ ํ˜น์€ ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด ๋‚ด์ง€ ์ „์†กํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์— ๋ถ€๊ฐ€์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค„ ๋–„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‰ฌ์šด ์˜ˆ์‹œ๋กœ ์œ„์™€ ๊ฐ™์ด ๋กœ์ปฌ ์„œ๋ฒ„์—๊ฒŒ GET ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ˜ธ์ถœ์„ ์ „๋‹ฌํ–ˆ์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๋Œ€์ƒ์ž์—๊ฒŒ ๋ถ€๊ฐ€์ ์ธ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก Key-value ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘์—์„œ ๊ฐ€..

2021. 2. 21. 18:20

[RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž)

2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) 2021/01/23 - [Programming/Java] - [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce Reactive Programming์—์„œ ๊ฝƒ์ด๋ผ๊ณ .. blog.neonkid.xyz ์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด ๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฒฐํ•ฉ ์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ ์—ฐ์‚ฐ์ž๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Obser..

2021. 2. 13. 13:26

[FastAPI] 6. Google-auth ๋ฐ PyJWT๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 1

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ธ์ฆ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. Spring์—์„œ๋Š” Spring Security๋ผ๋Š” ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธ์ฆ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ•˜์ง€ ์•Š๊ณ ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•˜์—ฌ Google ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์—์„œ Client ID๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ธ‰๋ฐ›์€ ํ›„ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋งŒ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์ฃ . FastAPI๋„ ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜์ง€๋งŒ JWT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—๋Š” ๋ณ„๋„์˜ ๊ตฌํ˜„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ด ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  OAuth2 ์ธ์ฆ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. [Spring boot] Spring boot Security๋กœ ์‹œ์ž‘ํ•ด๋ณด๋Š” ์ธ์ฆ Spring ..

2021. 2. 7. 17:17

[RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž)

2021/01/23 - [Programming/Java] - [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce Reactive Programming์—์„œ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” Reactive Operator์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด Java 8์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ Reactive ์—ฐ์‚ฐ์ž๊ฐ€ ๋งค์šฐ ์ต์ˆ™ํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. RxJava์—. blog.neonkid.xyz ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Reactive์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž๋ฅผ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ RxJava์—์„œ ์ œ๊ณตํ•˜๋Š” ์ˆ˜๋งŽ์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๊ณ  ๊ทธ ์ค‘์— ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ์ž..

2021. 2. 6. 15:07

[Algorithm] - 2021 ์นด์นด์˜ค ์‹ ์ž… 1์ฐจ ์˜จ๋ผ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (Kakao Newbie Primary Online Coding Test) for Tech Developers ๋ฌธ์ œ ํ’€์ด

์ง€๋‚œ ์ฃผ, 2021๋…„ ์นด์นด์˜ค ์‹ ์ž… ์˜จ๋ผ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด๊ฐ€ ์นด์นด์˜ค ๊ณต์‹ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ผ์˜ค๊ฒŒ ๋˜๋ฉด์„œ ํ’€์ด๋ฅผ ํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์ธํ„ด์‹ญ ๋ฌธ์ œ๋‚˜ ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค๋„ ๋งŽ์ด ๋ดค์—ˆ๋Š”๋ฐ, ์‹ ์ž… ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•œ ๊ฒƒ์€ ๊ฑฐ์˜ ์—†์—ˆ๋Š”๋ฐ์š”. ๋จผ์ € ์งค๋ง‰ํ•˜๊ฒŒ ์š”์ ์„ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด ์ธํ„ด์‹ญ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์™€ ์‹ ์ž… ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์˜ ๋ฌธ์ œ ๋‚œ์ด๋„๊ฐ€ ์กฐ๊ธˆ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. DFS๋‚˜ BFS ๋ฌธ์ œ๋“ค์ด ๊ฐ€๋” ํ•œ ๋ฌธ์ œ ์ •๋„ ๋‚˜์˜ค๋Š” ์ธํ„ด์‹ญ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์— ๋น„ํ•ด ์‹ ์ž… ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น์ด๋‚˜ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์€ Computer Science์˜ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋ฌธ์ œ๋„ ๊ฐ™์ด ์žˆ์–ด์„œ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„๋„ ์กฐ๊ธˆ ์ค€๋น„๋ฅผ ํ•ด๋‘๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋ฌธ์ œ ํ’€์ด๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋„๋ก ํ•˜์ฃ . Question 01. ์•„์ด๋”” ์ถ”์ฒœ ๋ฌธ์ œ ์›๋ฌธ..

2021. 1. 31. 00:11

[FastAPI] 5. pyyaml์„ ์ด์šฉํ•œ FastAPI ํ™˜๊ฒฝ ๋‚˜๋ˆ„๊ธฐ

FastAPI๋กœ ๊ธฐ๋ณธ์ ์ธ API์™€ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—… ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ•ด๋ดค๋‹ค๋ฉด ์ด์ œ๋Š” ๋ณธ๊ฒฉ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ™˜๊ฒฝ์ด๋ผ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ์š”? ๊ฐœ๋ฐœ ํ™˜๊ฒฝ? ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์šฐ๋ฆฌ๋Š” PyCharm์„ ์‚ฌ์šฉํ•˜๊ณ  Python์„ ์„ค์น˜ํ–ˆ๊ณ  ์ด๋ฏธ ๋‹ค ์ž‘์—…ํ•œ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€์š”? 2021/01/16 - [Programming/Python] - [FastAPI] 4. SQLAlchemy + Alembic ์กฐํ•ฉ์„ ์ด์šฉํ•œ Database Migration ๊ฐ€์ด๋“œ [FastAPI] 4. SQLAlchemy + Alembic ์กฐํ•ฉ์„ ์ด์šฉํ•œ Database Migration ๊ฐ€์ด๋“œ ์›น ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•œ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฒˆ ์ฏค ๋”ฐ๋ฅด๋Š” ์—…๋ฐ์ดํŠธ ์‚ฌํ•ญ์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด..

2021. 1. 23. 11:13

[RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce

Reactive Programming์—์„œ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” Reactive Operator์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด Java 8์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ Reactive ์—ฐ์‚ฐ์ž๊ฐ€ ๋งค์šฐ ์ต์ˆ™ํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. RxJava์—์„œ๋Š” Reactive Programming์— ๋งž์ถฐ, ์ด๋Ÿฌํ•œ Reactive Operator๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์•„์…”์•ผํ•  ๊ฒƒ์€ ์ด๋Ÿฐ Reactive ์—ฐ์‚ฐ์ž๊ฐ€ ๋‹จ์—ฐ RxJava, Java 8์—์„œ์™€ ๊ฐ™์ด "Java"์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Python์—์„œ๋„ Javascript์—์„œ๋„ Reactive Programming๋งŒ ์ง€์›ํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๋Š” ์–ด๋””์„œ๋“  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” RxJava์—์„œ Reative Operator๊ฐ€ ์–ด๋–ค์‹์œผ..

2021. 1. 16. 13:55

[FastAPI] 4. SQLAlchemy + Alembic ์กฐํ•ฉ์„ ์ด์šฉํ•œ Database Migration ๊ฐ€์ด๋“œ

์›น ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•œ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฒˆ ์ฏค ๋”ฐ๋ฅด๋Š” ์—…๋ฐ์ดํŠธ ์‚ฌํ•ญ์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋ณดํ†ต ์•„๋ž˜์˜ 3๊ฐ€์ง€๊ฐ€ ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์ด์ „ ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค, ํ˜น์€ ๋‹ค๋ฅธ ๋ฆฌ์ „์œผ๋กœ์˜ ์ด์ „ ํŠน์ • Entity์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์š”์ฒญ ์šฐ๋ฆฌ ๋ถ€์„œ ํ˜น์€ ์šฐ๋ฆฌ ์„œ๋น„์Šค์—๋Š” ์ด ๊ธฐ๋Šฅ์„ ๋„ฃ๊ธฐ ์œ„ํ•ด ์ด ์นผ๋Ÿผ์ด ๋” ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•„์š”. ์ผ๋ถ€ ์˜์†๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝ ์ด์ œ๋Š” ์ด ๋ช…์นญ์„ ์ด ๋ช…์นญ์œผ๋กœ ๋ฐ”๊ฟ€๊ฑฐ์—์š”. ๋ชจ๋“  ์‚ฌํ•ญ์— ์ ์šฉ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋งŒ๋“ค๊ณ , SQL ์ฟผ๋ฆฌ๋ฅผ ์งœ๋ณธ ๋‹ค์Œ ์ฟผ๋ฆฌ ํ…Œ์ŠคํŠธํ•˜๊ณ , ํ™•์‹คํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋ฉด ์ด๋ฅผ..

2021. 1. 10. 17:13

[RxJava] 1. RxJava์˜ ๊ธฐ๋ณธ - Observable

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Observable์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ๋‹ค๋ค„๋ดค๊ณ , ์ด์— ๋”ฐ๋ฅธ ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉฐ ๊ฐ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Observable์„ ์ข€ ๋” ์‹ฌ์˜คํ•˜๊ฒŒ ๋‹ค๋ค„๋ณด๊ณ , ์ด์— ์‘ํ•˜๋Š” Single, Maybe ๋“ฑ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค ๋“ฑ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ RxJava์™€ ์ข€ ๋” ์นœ์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Observer Design Pattern RxJava์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” Observable ํด๋ž˜์Šค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ธ Observer Pattern์„ ๊ทผ๊ฐ„์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์„œ๋ฒ„ ํŒจํ„ด - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „ ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ์˜ต์„œ๋ฒ„ ํŒจํ„ด(observer pattern)์€ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ด€์ฐฐ์ž๋“ค, ์ฆ‰ ์˜ต์ €๋ฒ„๋“ค์˜ ๋ชฉ๋ก์„ ๊ฐ์ฒด์— ๋“ฑ๋กํ•˜์—ฌ ..

2021. 1. 9. 16:38

[RxJava] RxJava๋กœ ์‹œ์ž‘ํ•˜๋Š” Java Reactive ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Java์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ์ผ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ๋„ C++์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ select ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ , Thread ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ด์šฉํ•ด์„œ ๋™์‹œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ํฐ ๊ณ ๋ฏผ์ด ๋  ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Java๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ Python์ด๋‚˜ Go์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋น„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋ฌด์ฒ™ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋‹จ์ˆœํ•˜๊ฒŒ Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๊ทธ๋ฆฌ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ž์›์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ์ด์Šˆ ๋“ฑ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•  ์ผ๋“ค์ด ๊ต‰์žฅํžˆ ๋งŽ์„ ๋ฟ๋”๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์ง ๋‹คํ•˜๋”๋ผ๋„ ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์Šค๋ ˆ๋“œ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ทธ๋ ‡..

2020. 12. 31. 15:41

[FastAPI] 3. SQLAlchemy + Graphene ์กฐํ•ฉ์œผ๋กœ GraphQL ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” GraphQL์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. What is GraphQL ? GraphQL์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ๊ทธ๋ฆฌ ๊ธธ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. GraphQL์€ Facebook์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ์–ธ์–ด๋กœ ์—ฌ๊ธฐ์„œ QL์ด Query Language์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด REST API๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , REST API๋Š” ๋ฉ”์†Œ๋“œ์™€ ์š”์ฒญ ๋ฐ์ดํ„ฐ ํ˜น์€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๋Š” ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GraphQL์€ ๋ฉ”์†Œ๋“œ ์—†์ด ์˜ค์ง Query Language๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ชจ๋ธ์„ ์ ์žฌํ•˜๊ณ , ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์›ํ•˜๋Š” ํ•ญ๋ชฉ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ช…์‹œํ•จ์œผ๋กœ์จ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š”..

2020. 12. 27. 12:14

[FastAPI] 2. SQLAlchemy๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ CRUD API ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ORM์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ORM์€ Object Relation Mapping์˜ ์•ฝ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Entity์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ DB์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ด์šฉํ•˜์—ฌ SQL Query๋ฅผ ๋˜์ ธ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ SQL Query๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ ์žˆ์–ด ๋Ÿฌ๋‹ ์ปค๋ธŒ๋ฅผ ์ฆ๊ฐ€ ์‹œํ‚ค๊ณ , ์†Œํ”„ํŠธ์›จ์–ด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ์ €ํ•˜์‹œํ‚ค๋Š” ์›์ธ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ORM์„ ์ด์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ํฌํ•จํ•œ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด SQL Query๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ์— ์งˆ์˜ํ•˜์ง€ ์•Š์•„๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python ์–ธ์–ด์—์„œ์˜ ๋Œ€ํ‘œ์ ์ธ ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ SQLAlch..

2020. 12. 25. 16:42

[FastAPI] 1. GET, POST, PUT, DELETE ๋“ฑ ๊ธฐ๋ณธ API ๋งŒ๋“ค๊ณ  ๋ฌธ์„œ ์ž๋™ํ™” ํ•ด๋ณด๊ธฐ

์ง€๋‚œ ๊ธ€์— ์ด์–ด์„œ FastAPI๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋ณธ์ ์ธ REST API ๊ฐœ๋ฐœ ์ด์•ผ๊ธฐ ๋‘ ๋ฒˆ์งธ๋ฅผ ์ด์–ด๊ฐ€๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ REST API๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด ์ฃผ์š” ๋ฉ”์†Œ๋“œ ์ข…๋ฅ˜ 5๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ๋ฐ”๋กœ GET, POST, PUT, DELETE, PATCH ์ด๋ ‡๊ฒŒ 5๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด ์™ธ์—๋„ OPTIONS๊ฐ€ ์žˆ์ง€๋งŒ ์ด ๊ธ€์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ API ๋งŒ๋“ค๊ธฐ (GET) REST API์˜ ๊ธฐ๋ณธ API๋Š” ๋จผ์ € GET ๋ฉ”์†Œ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. GET ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์“ฐ๋Š” READ API ์ž…๋‹ˆ๋‹ค. FastAPI์—์„œ๋Š” ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. from fastapi import FastAPI app = FastAPI() @app.route('/health') async ..