Loading...
2020. 11. 7. 22:37

[Kubernetes] 1. Container Deployment์™€ Kubernetes

์ €์—๊ฒŒ ์žˆ์–ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” Docker Swarm์„ ์ง€๋‚˜ ์ด์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋˜ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํˆด์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์ด์ง์„ ํ•œ ํšŒ์‚ฌ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๊ฒŒ ๋˜์–ด ์ฃผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํˆด๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ๋•Œ๋ถ€ํ„ฐ Docker Swarm ๋ณด๋‹ค๋Š” Kubernetes๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ผ์ด ์ž์ฃผ ์ƒ๊ฒจ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์€ Docker๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋งŒ Kubernetes์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ณ , ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ๋“œ๋ฆฌ๋Š” ๊ธ€์˜ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค. Container Deployment์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ์˜ค๊ธฐ๊นŒ์ง€.. Kubernetes๋Š” Go ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Google์—์„œ ๊ฐœ๋ฐœํ•˜์—ฌ 2014๋…„์— ๊ณต๊ฐœ๋œ Container Orchestration to..

2020. 11. 2. 22:10

[MSA] 6. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 2 - Two-Phase commit๊ณผ Saga

์ด์ „ ๊ธ€์— ์ด์–ด์„œ MSA ๋‚ด์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์›ํ™œํžˆ ํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋”๋ถˆ์–ด ๋ชจ๋†€๋ฆฌํ‹ฑ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•œ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ DB ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” Commit๊ณผ Rollback์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MSA์—์„œ๋Š” ๊ฐ ์„œ๋น„์Šค๋ณ„๋กœ DB ์ธ์Šคํ„ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ถ„๋ฆฌ๋จ์— ๋”ฐ๋ผ ๊ด€๊ณ„ํ˜•์œผ๋กœ ๋งบ์–ด์ง„ Entity๋“ค์€ ์„œ๋กœ๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ์šด์˜๋˜๊ณ , ๊ทธ๋“ค ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋ฌด๋„ˆ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ์ด๋“ค ์ผ๊ด€์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1. Two-Phase Commit Two-Phase Commit์ด๋ž€, 2๋‹จ๊ณ„์— ๊ฑฐ์ณ์„œ ์˜์†ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ์•„..

2020. 9. 27. 19:53

[MSA] 5. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 1 - ํŠธ๋žœ์žญ์…˜์˜ ์ดํ•ด์™€ MSA์—์„œ ๋ฐ”๋ผ๋ณด๋Š” ํŠธ๋žœ์žญ์…˜

์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ์–ด๋–ค ์ œ๋ชฉ์„ ๋ถ™์—ฌ์•ผ ํ• ์ง€ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. MSA์—์„œ ํŠธ๋žœ์žญ์…˜์˜ ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๋Œ€๋‘๋˜๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๊ธฐ๋ณธ ์ด์•ผ๊ธฐ์™€ ๋ชจ๋†€๋ฆฌ์‹์˜ ํŠธ๋žœ์žญ์…˜, MSA์—์„œ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์ •๋ง ๊นŠ๊ฒŒ ๋‹ค๋ค„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 3 ํŒŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด ์ง„ํ–‰๋  ์˜ˆ์ •์ด๋ฉฐ 1๋ฒˆ์งธ ํŒŒํŠธ์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์„ ์ด์•ผ๊ธฐ ํ•˜๊ณ , ๋ชจ๋†€๋ฆฌ์‹์˜ ํŠธ๋žœ์žญ์…˜์„ ๋‹ค๋ค„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. What is Transaction ? ํŠธ๋žœ์žญ์…˜์ด๋ž€, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ์ž‘์—…์—๋Š” ๊ฒ€์ƒ‰(SELECT), ์ˆ˜์ •(UPDATE), ์‚ฝ์ž…(INSERT), ์‚ญ์ œ(DELETE)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ..

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. 14. 21:53

[Docker] HAProxy๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด HAProxy๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. What is HAProxy ? ์ด๋ฆ„๋งŒ ๋†“๊ณ  ๋ณด๋ฉด ํ”„๋ก์‹œ์˜ ์—ญํ• ์„ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ธ ๋“ฏ ๋ณด์ž…๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. HAProxy์˜ ๋ณธ๋ž˜ ๊ธฐ๋Šฅ์€ Reverse Proxy ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๊ณ , ๋ณธ๋ž˜๋Š” High Availbility Proxy์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  TCP / HTTP Load Balancer๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. nginx๋ž‘ ๋‹ค๋ฅธ ์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”? nginx์—์„œ๋„ ๋ฌผ๋ก  Reverse Proxy, Load Balancer ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ HAProxy๋Š” ์—ฌ๊ธฐ์— Active Health Check ๊ธฐ๋Šฅ์„ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (nginx์—์„œ๋„ Active Health Ch..

2020. 6. 10. 12:25

[Docker] nginx web server๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

์ตœ๊ทผ ๋“ค์–ด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ™œ์šฉํ•˜๋ ค ๋…ธ๋ ฅํ•˜๋ฉด์„œ๋„ ๊ฐ€๋”์€ Docker๋ฅผ ๋‹ค์‹œ ๋Œ์•„๋ณด๋Š” ๊ฒฝํ–ฅ์ด ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ๊ทธ ์ค‘์—์„œ๋„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์€ ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค๋„ 100๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Docker Compose, Docker Swarm์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค๋Š” ์ . ์ด ๋ถ€๋ถ„์€ ์ˆ˜๋™์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ๋งŽ์ด ๋œ์–ด์ฃผ์—ˆ๊ณ , ๊ทธ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์šด์˜์„ ๋งŽ์ด ์„ ํ˜ธํ–ˆ๋˜ ์ ์ด ๊ธฐ์–ต์— ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ์„œ๋ก ์„ ์ ‘๊ณ , ์ด์ œ ๋ณธ๋ก ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ณด์ฃ . ์ด์ „์— ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์— ๋Œ€ํ•œ ๊ธ€์„ ์˜ฌ๋ ธ๋˜ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์€ ์‹ค๋ฌด์—์„œ ๋งŽ์ด ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ์ด์ง€๋งŒ ์ด๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ญ์‹œ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ์•Œ๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ..

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. 6. 2. 11:17

[Network] Load Balancing (๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ)์˜ ๊ฐœ๋…๊ณผ ์ดํ•ด

์ฒ˜์Œ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ , ์ด๋ฅผ ์šด์˜ํ•˜๋Š” ๋ฐ๊นŒ์ง€ ๋งŽ์€ ํ•™์Šต ์‹œ๊ฐ„์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด Servlet, JSP, Spring์„ ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜์•„๊ฐ€์„œ๋Š” ๋” ๋‚˜์€ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด Flask, Django, Nest.js ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์ฃ . ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„ ๊ณต๋ถ€๋Š” ์ด๊ฒƒ์ด ๋์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์„œ๋ฒ„๋ฅผ ์ธํ„ฐ๋„ท์— ์„œ๋น„์Šคํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๊ฒƒ์„ ๊ณ ๋ฏผํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ 10, 100๋ช…๋งŒ ์ ‘์†ํ•ด์„œ ๋๋‚  ์ผ์ด๋ผ๋ฉด ๊ทธ๋ƒฅ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ , ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋๋‚  ์ผ์ด์ง€๋งŒ, ๋งŒ์•ฝ ์ˆ˜์‹ญ๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž๋“ค์ด ๋‚ด ์„œ๋ฒ„์— ์ ‘์†ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ์š”? ๋งŒ์•ฝ, ์„œ๋ฒ„๊ฐ€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, 1๋งŒ ๋ช… ์•„๋‹ˆ..

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์„ ๋‹ซ๋Š” ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ณต์žกํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ”๋”ฉํ•˜๋Š” ..