Loading...
2020. 12. 25. 15:16

[Python] FastAPI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ REST API ๊ฐœ๋ฐœ

Python ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ REST API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตญ๋‚ด ํ˜น์€ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์‚ฌ๋ž‘์„ ๋ฐ›๊ณ  ์žˆ๋Š” Django, ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋ฒผ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์จ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Flask ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Jetbrains์˜ IDE ๋„๊ตฌ์ธ PyCharm๊ณผ FastAPI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด์„œ REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. What is FastAPI? Python์—์„œ๋Š” ์›น ์„œ๋ฒ„์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด WSGI๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WSGI๋Š” ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์‚ฌ๋žŒ์ด ๊ณ„์† ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋‹จ์ ์„ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. FastAPI๋Š” Starlette์ด๋ผ๋Š” ๋น„๋™๊ธฐ ํ”„..

2020. 12. 20. 11:14

[Python] PyCharm์—์„œ Poetry๋ฅผ ์ด์šฉํ•œ ๋””ํŽœ๋˜์‹œ ๊ด€๋ฆฌ

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์‹œ ๋””ํŽœ๋˜์‹œ์˜ ๊ด€๋ฆฌ๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌํƒœ๊นŒ์ง€ Python ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ํ•˜์˜€์„ ๋•Œ๋Š” requirement๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„๋กœ ๋””ํŽœ๋˜์‹œ ๊ด€๋ฆฌ๋ฅผ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ requirements๋Š” ํ•˜๋‚˜์˜ ๋””ํŽœ๋˜์‹œ๋ฅผ ์„ค์น˜ํ•  ๋•Œ ํ•˜์œ„ ์š”์†Œ๊นŒ์ง€ ์„ค์น˜ํ•ด์ฃผ์ง€ ์•Š์•„ ์ข…์†๋˜๋Š” ๋””ํŽœ๋˜์‹œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Poetry Poetry - Python dependency management and packaging made easy. Intuitive CLI Poetry's commands are intuitive and easy to use, with sensible defaults while still being configurable. Soon ex..

2020. 12. 6. 18:42

[Python] REST API ๊ฐœ๋ฐœ๋กœ ์•Œ์•„๋ณด๋Š” WSGI, ASGI

REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ œ ํŠน์ • ์–ธ์–ด๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•  ํ•„์š” ์—†์ด ์›ํ•˜๋Š” ์–ธ์–ด๋กœ ์ž์œ ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ์ƒ์ด ์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Python ์–ธ์–ด ๋˜ํ•œ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ REST API ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ์ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•˜์ง€๋งŒ ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋ณดํŽธํ™” ๋˜์–ด ์•Œ๋ ค์ง„ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Django Flask Django๋Š” MTV ํŒจํ„ด์„ ์ œ๊ณตํ•˜์—ฌ API ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•˜์—ฌ ์ •์  HTML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ๋ทฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ํ†ตํ•ด ๋†’์€ ์ƒ์‚ฐ์„ฑ์„ ์ž๋ž‘ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Flask๋Š” ์˜ค์ง API๋งŒ์„ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅธ API ์„œ๋ฒ„๋งŒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด์ฃ . Sprin..

2020. 8. 26. 13:00

[Spring] Jib(์ง€๋ธŒ)๋ฅผ ์ด์šฉํ•œ Docker ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

https://blog.neonkid.xyz/228 [Spring boot] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค๊ธฐ Old & New Spring boot๋กœ ๊ฐœ๋ฐœํ•œ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์Šคํ„ด์Šค์— ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” WAS๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๏ฟฝ๏ฟฝ blog.neonkid.xyz ์œ„ ํฌ์ŠคํŠธ์—์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด Spring boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Dockerfile์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ„๋“คํ•œํ…Œ๋Š” ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋ถ€๋‹ด์ด์—ˆ๋‹ค๋Š” ๊ฒƒ์ด ๋‹ค์†Œ ์•„์‰ฌ์› ๋˜ ๋ถ€๋ถ„์ด์—ˆ๋Š”๋ฐ์š”. Google Jib ์œ„์™€ ๊ฐ™์ด ๋ณดํ†ต Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ํ”„..

2020. 8. 25. 21:43

[Spring boot] Spring boot Security๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 3 - ๊ตญ๋‚ด ํฌํ„ธ ์ธ์ฆ

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ๊ธฐ์กด์˜ User Entity ํ˜น์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ User Entity์™€ ์—ฐ๋™ํ•˜์—ฌ OAuth2 ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. Spring boot Security์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Google, Facebook ๋“ฑ์˜ ํ•ด์™ธ ์†Œ์…œ ๋กœ๊ทธ์ธ API๋ฅผ ์ง€์›ํ•˜๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ง€์›ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ž˜ ์ด์šฉํ•˜์—ฌ Key์™€ Client ID๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ์‰ฝ๊ฒŒ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, NAVER, Kakao ๋“ฑ ๊ตญ๋‚ด ํฌํ„ธ ์‚ฌ์ดํŠธ์˜ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? NAVER, Kakao API๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ Spring boot Security์—์„œ๋Š” ๊ณต๊ต๋กญ๊ฒŒ๋„ ๊ตญ๋‚ด ํฌํ„ธ OAuth2 ์ธ์ฆ์— ๋Œ€ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋“ค OAuth2 ..

2020. 8. 16. 20:10

[Spring boot] Spring boot Security๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 2 - User Entity ์—ฐ๋™

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

2020. 8. 12. 14:47

[Spring] Argument Resolver๋ฅผ ์ด์šฉํ•œ ์œ ์—ฐ์„ฑ ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ

์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋‹ค๋ณด๋ฉด ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค Controller ๋ถ€๋ถ„์—์„œ ์ด๋ฅผ ์ „์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๊ฐ Controller์— ์ „์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜ํ™” ํ•˜๊ฑฐ๋‚˜ Utils ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์˜์กด์„ฑ ์ฃผ์ž…ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ทธ๋‚˜๋งˆ ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Utils๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋งค๋ฒˆ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜๊ณ , ์ด๊ฒƒ์ด ์ปค์ง€๋ฉด ์—ญ์‹œ ์ฝ”๋“œ๊ฐ€ ๋‚œ์žกํ•ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Spring์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ณตํ†ต์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Argument Resolver์ž…๋‹ˆ๋‹ค. Spring Argument Resolver API ์—”๋“œํฌ์ธํŠธ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ(ํŒŒ๋ผ๋ฏธํ„ฐ)๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ํ•„์š”..

2020. 8. 10. 18:12

[Spring boot] Spring boot Security๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 1 - Google ๊ณ„์ • ์ธ์ฆ

์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ, ์˜ค๋Š˜์€ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Spring boot Security ๋””ํŽœ๋˜์‹œ๋ฅผ ์ด์šฉํ•ด OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ ํ† ํฐ๊ณผ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ถŒํ•œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ , ๋ถ€์—ฌ ๋ฐ›์€ ID์™€ Secret๋ฅผ ์ด์šฉํ•˜์—ฌ ํ† ํฐ์„ ๋ฐ›๋Š” ๋ฐฉ์‹์ด์—ˆ์ฃ . ์ด๋ฅผ ํ† ๋Œ€๋กœ Spring boot security๋ฅผ ์ด์šฉํ•˜์—ฌ ํšŒ์› ๊ฐ€์ž…๊ณผ ์ธ์ฆ์„ ๋™์‹œ์— ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ง€๊ธˆ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŠธ๋Š” ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํ•˜์—ฌ๊ธˆ, OAuth2 ๋กœ๊ทธ์ธ๋ถ€ํ„ฐ User Entity ์—ฐ๋™๊นŒ์ง€ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ฉฐ ์ด๋ฒˆ์— ๋‹ค๋ฃฐ ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์ธ Spring boot security ..

2020. 8. 7. 15:22

[Spring boot] Spring boot Security๋กœ ์‹œ์ž‘ํ•ด๋ณด๋Š” ์ธ์ฆ

Spring Framework๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋‚˜ REST API ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ธ์ฆ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ธ์ฆ์ด๋ž€, ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‹๋ณ„ํ•˜๊ณ ์ž ํ•˜๋Š” ์‚ฌ์šฉ์ž ํ˜น์€ ๊ด€๋ฆฌ์ž๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Spring์„ ์ด์šฉํ•ด์„œ ์ธ์ฆ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, JPA๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž Entity๋ฅผ ๋งŒ๋“ค๊ณ , ์—ฐ๋™ํ•˜์—ฌ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋™๊ธฐํ™” ํ•œ ํ›„, ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ์ด๋ฏธ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Spring boot Security์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring boot Security๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€, ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฐœ๋…๋“ค์„ ๊ณต..

2020. 7. 25. 23:29

[Algorithm] - 2020 Kakao InternShip for Tech Developers Coding test ๋ฌธ์ œ ํ’€์ด

์ตœ๊ทผ ๋“ค์–ด ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ, ๊ฐ์ข… ํ…Œ์ŠคํŠธ ๋“ฑ์œผ๋กœ ์ธํ•˜์—ฌ ๋ธ”๋กœ๊ทธ์— ๋Œ€ํ•œ ๊ธ€ ํฌ์ŠคํŒ…์ด ์ž์ฃผ ์•ˆ๋˜๊ณ  ์žˆ๋Š” ์ ์— ๋Œ€ํ•ด ๊นŠ์ด ๋ฐ˜์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ณ„๊ธฐ๋กœ ํ•˜์—ฌ๊ธˆ ์˜ค๋Š˜์€ ์ œ๊ฐ€ ๋‚ด์ผ ์น˜๋ฃจ๊ฒŒ ๋  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์˜ค๋Š˜ ํ•˜๋ฃจ ๋‚ ์„ ์žก๊ณ , ์—ฐ์Šตํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”. ์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์นด์นด์˜ค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ๋‘ ๋ฒˆ์งธ์ธ 2020 ์นด์นด์˜ค ์ธํ„ด์‹ญ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด์™€ ์งค๋ง‰ํ•œ ํ›„๊ธฐ๋ฅผ ๋‚จ๊ฒจ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. (์ฐธ๊ณ ๋กœ ์ด๋ฒˆ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋Š” ๋‚œ์ด๋„๊ฐ€ ๊ฝค ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.) Question 01. ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ ๋ฌธ์ œ ์›๋ฌธ: (https://programmers.co.kr/learn/courses/30/lessons/67256) ์Šค๋งˆํŠธํฐ ์ „ํ™” ํ‚คํŒจ๋“œ์˜ ๊ฐ ์นธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆซ์ž๋“ค์ด ์ ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ „ํ™” ํ‚คํŒจ๋“œ์—์„œ ์™ผ์†๊ณผ ์˜ค๋ฅธ์†์˜ ์—„์ง€์†๊ฐ€๋ฝ๋งŒ์„ ์ด์šฉํ•ด..

[Spring] JPA์˜ ํ”Œ๋Ÿฌ์‹œ(flush)

JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์˜์†์‹œ์ผœ ์ปค๋ฐ‹ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, JPA์˜ commit()์„ ํ˜ธ์ถœํ•  ๋•Œ ํ•ญ์ƒ ๋ฐœ์ƒํ•˜๋Š” flush()๋Š” ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ๋…€์„์ผ๊นŒ์š”? flush() ์ปค๋ฐ‹ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด JPA ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์ด DB๋กœ ๋ฐ˜์˜๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ commit() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ด๊ฒƒ์ด ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์‚ฌ์‹ค์€ commit() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ flush() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์ง€๊ณ , ์‹ค์ œ๋กœ๋Š” flush() ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด์„œ DB์— ๋ฐ˜์˜๋˜์–ด์ง‘๋‹ˆ๋‹ค. ์ฆ‰, flush๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋‚ด์šฉ์„ DB์— ๋ฐ˜์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋ฉฐ, ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— ์žˆ๋Š” SQL ์ฟผ๋ฆฌ๊ฐ€ DB ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜์†์„ฑ ์ปจํ…์Šค..

2020. 6. 24. 20:04

[Spring] JPA ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๊ตฌ์กฐ๋กœ ๋ณด๋Š” ์ด์ 

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ JPA์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ƒ๋ช… ์ฃผ๊ธฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์˜ ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด์„œ Java๋กœ ๊ตฌํ˜„๋œ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ DB๋กœ ์ ์žฌ๋˜๊ณ  ์‚ญ์ œ๋˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์ฒ˜์Œ์— ์ €๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด์ฐจํ”ผ Connection์ด ์ƒ์„ฑ๋˜์–ด์•ผ ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ฅธ Statement๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•˜๋Š”๋ฐ, ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์„ฑ์ƒ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, Connection์ด ์—ฌ๋Ÿฌ๊ฐœ ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— Connection Pool์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ๊ณ , ๋Œ€ํ‘œ์ ์œผ๋กœ HikariCP๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ฃ . ๊ทธ ๋‹ค์Œ์—๋Š” ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„๊ณผ ํ•จ๊ป˜ ์ปค๋ฐ‹๊นŒ์ง€ ํ•ด์ฃผ๋Š” ๋…€์„์ด ..

2020. 6. 23. 16:23

[Spring] JPA์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ƒ๋ช…์ฃผ๊ธฐ

Spring Framework๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” DB ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ด์šฉํ•˜์—ฌ DB Connection์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค๋„ฅ์…˜์ด ์—ฐ๊ฒฐํ•˜๊ณ  ๋Š์–ด์ง€๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Connection Pool(DBCP, HikariCP), ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ CRUD๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ORM์ด ์žˆ์Šต๋‹ˆ๋‹ค. JPA๋Š” ์—ฌ๊ธฐ์„œ Java ์–ธ์–ด์˜ ํ‘œ์ค€ ORM์— ์†ํ•ฉ๋‹ˆ๋‹ค. Spring boot๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์š”์ฆ˜์—๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์— ๋งž์ถฐ์ ธ ์žˆ๋Š” Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”. ๊ทธ๋Ÿฐ๋ฐ, Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ์ฒด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์Šค์Šค๋กœ..

2020. 6. 4. 11:48

[Spring boot] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค๊ธฐ Old & New

Spring boot๋กœ ๊ฐœ๋ฐœํ•œ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์Šคํ„ด์Šค์— ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” WAS๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ Docker ์ด๋ฏธ์ง€๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring boot์—์„œ ๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Install Docker ๋จผ์ € Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋‚ด ์ปดํ“จํ„ฐ์— Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Docker๋ฅผ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”. 2016/07/06 - [Infrastructure/Docker] - Docker, ๊ทธ๊ฒƒ์€ ๋ฌด์—‡์ด๊ณ , ์„ค์น˜๋Š” ์–ด๋–ป๊ฒŒํ• ๊นŒ? Docker, ๊ทธ๊ฒƒ์€ ๋ฌด์—‡์ด๊ณ , ..

2020. 5. 27. 20:15

[Spring boot] DAO์™€ DTO

์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ DB์™€ ๊ฐ™์ด ์ด์šฉํ•˜๋ฉด์„œ, DAO, DTO๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ DAO, DTO๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ํ•œ ๋ฒˆ ์ œ๋Œ€๋กœ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. DAO DAO๋Š” Data Access Object์˜ ์•ฝ์ž๋กœ ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด DB์˜ data์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์™œ ํ•„์š”ํ• ๊นŒ์š”? ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ DB์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ SQL ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Java์—์„œ ์ง์ ‘์ ์œผ๋กœ SQL ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Connection์„ ์ƒ์„ฑํ•˜๊ณ  PrepareStatement๋ฅผ ๋งŒ๋“ค๊ณ , ์ง์ ‘ SQL ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ Connection์„ ๋‹ซ๋Š” ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ณต์žกํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ”๋”ฉํ•˜๋Š” ..

2020. 5. 23. 22:58

[Spring Data] Hibernate, JPA ๊ทธ๋ฆฌ๊ณ  Spring Data JPA

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ค„ ๋ณธ JDBC์™€ Spring JDBC๋Š” ์ž๋ฐ”์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ดˆ ์ธํ„ฐํŽ˜์ด์Šค์˜€๊ณ , ์ด๋“ค ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ์ž‘์—…๋“ค, ์—ฐ๊ฒฐ ์„ธ์…˜, ๊ทธ๋ฆฌ๊ณ  ๊ด€์‹ฌ์ ์˜ ๋ถ„๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐœ์ „๋œ ๋ชจ์Šต์„ ๋ณด์˜€๋Š”๋ฐ์š”. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ทธ์— ์ด์–ด์„œ Hibernate, JPA, Spring Data JPA์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. JPA JPA๋Š” Java Persistence API์˜ ์•ฝ์ž๋กœ ์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์–‘์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๋ง๊ทธ๋Œ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹จ์ง€, Java ๋ผ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ Best Practice๋ฅผ JPA๋ผ๊ณ  ํ•˜..

2020. 5. 22. 16:31

[Spring boot] JDBC์™€ Spring JDBC ๊ทธ๋ฆฌ๊ณ  MyBatis

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ MVC ํŒจํ„ด๊ณผ Spring Data Rest๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•œ REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์—ˆ๋Š”๋ฐ์š”. ๊ทธ๋Ÿฐ๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ DB์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋˜ ๋””ํŽœ๋˜์‹œ๊ฐ€ ์žˆ์—ˆ์ฃ . ๋ฐ”๋กœ Spring Data JPA์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๊ธฐ์กด์˜ Spring์„ ์‚ฌ์šฉํ–ˆ๋˜ ๋ถ„์ด์‹œ๋‚˜, STS ๋‚ด์ง€ ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์…จ๋˜ ๋ถ„๋“ค์€ JPA๋ณด๋‹ค๋Š” MyBatis์— ์ต์ˆ™ํ•˜์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MyBatis๋Š” ๊ธฐ์กด์˜ Spring ์ฒ˜๋Ÿผ ์˜์กด์„ฑ ์ฃผ์ž…์„ XML ํŒŒ์ผ์„ ์ด์šฉํ•ด ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๊ณ , ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ๋ฉ”์†Œ๋“œ์— DB ์ฟผ๋ฆฌ๋ฅผ ์งˆ์˜ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ์‹์„ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring Application์ด ์–ด๋–ป๊ฒŒ DB์™€ ์—ฐ๊ฒฐํ•˜์—ฌ Spring Data JPA๊นŒ์ง€ ์˜ค๊ฒŒ ๋˜์—ˆ๋Š”์ง€..

2020. 5. 20. 21:04

[Spring boot] Spring Data Rest๋ฅผ ์ด์šฉํ•œ REST API ๊ฐœ๋ฐœ 2

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Spring Data Rest๋ฅผ ์ด์šฉํ•ด Domain๊ณผ Repository Interface๋งŒ์„ ๊ตฌํ˜„ํ•˜์—ฌ HATEOAS์— ์ค€์ˆ˜ํ•œ REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ REST API๋ฅผ ์„ค๊ณ„ํ•˜๋‹ค๋ณด๋ฉด, HATEOAS์˜ ๊ตฌ์กฐ๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ ํด๋ž˜์Šค์˜ ์ •๋ณด๊ฐ€ ๋‚˜์˜จ๋‹ค๊ฑฐ๋‚˜, ์ด ์™ธ์˜ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๊ฑฐ๋‚˜, ๋งŒ์•ฝ User ์ •๋ณด๋ฅผ ๊ฐ€์ ธ๋‹ค ์ค€๋‹ค๋ฉด, ํŒจ์Šค์›Œ๋“œ ์ •๋ณด์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ์ˆจ๊ฒจ์•ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring Data Rest์— Controller + Service ์กฐํ•ฉ์„ ๋„ฃ์–ด์„œ ๋‚˜๋งŒ์˜ REST API๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. RepositroyRestController ์ง€๋‚œ ํฌ..