Spring

Spring

[Spring Boot] Graceful shutdown์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•˜๊ธฐ

๋ฌธ์ œ ์ƒํ™ฉ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ๋‚ด๋ฆด ๋•Œ ํ•˜ํ•„ ์„œ๋ฒ„๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?ํ•ด๋‹น ์š”์ฒญ์€ ๋๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์‹คํŒจํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํŠนํžˆ ๋ฐฐํฌ๊ฐ€ ์žฆ์€ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋”์šฑ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. [๋ณดํ‹€] ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์ •๋ง ์งง์€ ์ฃผ๊ธฐ๋กœ ๋ฐฐํฌ๋ฅผ ํ•ด์™”๋Š”๋ฐ, ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์— ๋Œ€ํ•ด์„œ ์–ด๋– ํ•œ ์ฒ˜๋ฆฌ๋„ ํ•˜์ง€ ์•Š๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.๋˜ํ•œ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋กœ์ง์ด ๋Š˜์–ด๋‚˜๋ฉด์„œ, ์„œ๋ฒ„๋ฅผ ๋‚ด๋ฆด ๋•Œ ํ•˜ํ•„ ๋น„๋™๊ธฐ ํ์— ๋“ค์–ด๊ฐ€ ์žˆ๋˜ ์š”์ฒญ๋“ค์„ ๋ชจ๋‘ ์žƒ์–ด๋ฒ„๋ฆด ๊ฒƒ์ด๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.์‹ค์ œ๋กœ ๊ทธ๋Ÿด๊นŒ?์‹ค์ œ๋กœ ์š”์ฒญ๋“ค์„ ๋ชจ๋‘ ์žƒ์–ด๋ฒ„๋ฆด์ง€ ํ™•์ธ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์ฒญ์ด ์—„์ฒญ ๋Š๋ฆฌ๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š” api ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.์Šค๋ ˆ๋“œ๋ฅผ 20์ดˆ๊ฐ„ sleep ์‹œํ‚จ ํ›„ "Request Success!"๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”..

Spring

[JPA] ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ์ •๋ฆฌ

JPA์—์„œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์ด๋ž€ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์—, ์™œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์ด๋ผ๋Š” ๊ฒƒ์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๐Ÿค” ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์„ ์™œ ํ•ด์•ผ ํ• ๊นŒ? ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด๋Ÿฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ์„ค๊ณ„๋Œ€๋กœ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด ๊ฐ์ฒด ์ค‘์‹ฌ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๊ณ , ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜๋ฐ–์— ์—†๋‹ค. ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž. 1. Actor ํ…Œ์ด๋ธ”๊ณผ Musical ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. 2. ๋ฐฐ์šฐ๋Š” ํ•˜๋‚˜์˜ ๋ฎค์ง€์ปฌ์— ์ถœ์—ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 3. ๋ฐฐ์šฐ์™€ ๋ฎค์ง€์ปฌ์€ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์ด๋‹ค. ์œ„์™€ ๊ฐ™์€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ…Œ์ด๋ธ”์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ฐ์ฒด๋กœ ๋ฐ”๋กœ ์˜ฎ๊ฒจ์„œ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ..

Spring

Dao์™€ Repository์— ๋Œ€ํ•ด์„œ...

์šฐํ…Œ์ฝ” ๋ ˆ๋ฒจ2 ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ Dao์™€ Repository์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ๋งŽ์€ ์ด์•ผ๊ธฐ๊ฐ€ ์˜ค๊ณ  ๊ฐ€๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง Dao๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Repository์— ๋Œ€ํ•ด์„œ ๊นŠ๊ฒŒ ์ƒ๊ฐํ•ด๋ณด์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ฒˆ ์ง€ํ•˜์ฒ  ๋ฏธ์…˜์—์„œ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณต์žกํ•ด์ง€๋ฉด์„œ ์—ฌ๋Ÿฌ Dao๋“ค์ด ์ƒ๊ฒผ๊ณ , Repository๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์™”๋‹ค. ํŽ˜์–ด๊ฐ€ ์ œ์•ˆํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธด ํ–ˆ์ง€๋งŒ, Repository์˜ ํ•„์š”์„ฑ์„ ์กฐ๊ธˆ ๋Š๋‚€ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ Dao์™€ Repository์— ๋Œ€ํ•ด์„œ ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค! DAO๋ž€? Data Access Object์˜ ์•ฝ์ž๋กœ, ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์˜ Application ๊ณ„์ธต์—์„œ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, Dao(Persistence ๊ณ„์ธต)๋ฅผ..

Spring

[Spring] Interceptor๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ? - DispatcherServlet ๋‚ด๋ถ€ ์ฝ”๋“œ ์‚ดํŽด๋ณด๊ธฐ

์—ฌ๊ธฐ ๊ฐ„๋‹จํ•œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ์ถ”๊ฐ€, ์ œ๊ฑฐ, ์กฐํšŒํ•˜๋Š” ๋”ฑ ์„ธ ๊ฐ€์ง€์˜ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์•„๋ฌด๋‚˜ ๋‚ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ๋‹ด์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค! ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ž์‹ ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ƒํ’ˆ์„ ๋‹ด๊ธฐ ์ „์— ์ƒํ’ˆ์„ ๋‹ด์œผ๋ ค๋Š” ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ž‘์—…์„ ๋จผ์ € ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. 'Authorization' ํ—ค๋” ์ถ”์ถœ ์ถ”์ถœ๋œ ์ •๋ณด๋กœ ์šฐ๋ฆฌ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšŒ์›์ธ์ง€ ํ™•์ธ ์ด ์ž‘์—…์€ ์ƒํ’ˆ ์ถ”๊ฐ€, ์ƒํ’ˆ ์ œ๊ฑฐ, ์ƒํ’ˆ ์กฐํšŒ API์— ๋ชจ๋‘ ์ถ”๊ฐ€๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @RestController public class CartController { @PostMapping("/carts/products/{productId..

Spring

Mockito.mock(), @Mock๊ณผ @MockBean์˜ ์ฐจ์ด์ 

ํ…Œ์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋ฌด๊ฒ๊ณ  ๊ท€์ฐฎ์•„์š” ๐Ÿ˜ฎ‍๐Ÿ’จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์€ ์™ธ๋ถ€ ํ™˜๊ฒฝ๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋ž€ ์ฐธ ์–ด๋ ค์šด ์ผ์ด๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์žˆ๋Š” ์„œ๋น„์Šค์—์„œ ๋กœ์ง์— ๋งž๊ฒŒ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์€๋ฐ, ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ๋„ฃ์–ด๋†“๋Š” ๋“ฑ๋“ฑ ๊ธฐํƒ€ ์„ค์ •๋“ค์„ ํ•˜๋Š”๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์—ฌ์•ผํ•œ๋‹ค. ๋˜ ํ…Œ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ด€์—ฌํ•˜๋ฉด์„œ ๋ถ€ํ„ฐ๋Š”, ํ…Œ์ŠคํŠธ ํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ์ฃผ๋Š” ๋“ฑ ํ›„์ฒ˜๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š์•„์„œ ์ „์ฒด ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ ธ์„ ๋•Œ ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋Š” ๊ฒฝํ—˜์„ ๋งŽ์ด ํ•ด๋ดค์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋”๋ธ”(Test Double)์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋‚˜์™”๋‹ค. xUnit Test Patterns์˜ ์ €์ž์ธ ์ œ๋ผ๋“œ ๋ฉ”์Šค์ž๋กœ์Šค(Gerard Meszaros)๊ฐ€..

milllllllie
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก