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