Spring
๋ฌธ์ ์ํฉ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํด ์๋ฒ๋ฅผ ๋ด๋ฆด ๋ ํํ ์๋ฒ๊ฐ ์ด๋ค ์์ฒญ์ ์ํํ๊ณ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?ํด๋น ์์ฒญ์ ๋๊น์ง ์ํํ์ง ๋ชปํ๊ณ ์คํจํ๊ฒ ๋ ๊ฒ์
๋๋ค.ํนํ ๋ฐฐํฌ๊ฐ ์ฆ์ ํ๊ฒฝ์ด๋ผ๋ฉด ๋์ฑ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ ๊ฒ์
๋๋ค. [๋ณดํ] ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ ๋ง ์งง์ ์ฃผ๊ธฐ๋ก ๋ฐฐํฌ๋ฅผ ํด์๋๋ฐ, ์์ ๊ฐ์ ์ํฉ์ ๋ํด์ ์ด๋ ํ ์ฒ๋ฆฌ๋ ํ์ง ์๊ณ ์์์ต๋๋ค.๋ํ ๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ก์ง์ด ๋์ด๋๋ฉด์, ์๋ฒ๋ฅผ ๋ด๋ฆด ๋ ํํ ๋น๋๊ธฐ ํ์ ๋ค์ด๊ฐ ์๋ ์์ฒญ๋ค์ ๋ชจ๋ ์์ด๋ฒ๋ฆด ๊ฒ์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.์ค์ ๋ก ๊ทธ๋ด๊น?์ค์ ๋ก ์์ฒญ๋ค์ ๋ชจ๋ ์์ด๋ฒ๋ฆด์ง ํ์ธ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ๊ฐ๋จํ๊ฒ ์์ฒญ์ด ์์ฒญ ๋๋ฆฌ๊ฒ ์ฒ๋ฆฌ๋๋ api ํ๋๋ฅผ ๋ง๋ค์์ต๋๋ค.์ค๋ ๋๋ฅผ 20์ด๊ฐ sleep ์ํจ ํ "Request Success!"๋ฅผ ๋ฐํํ๋..
Spring
JPA์์ ์ฐ๊ด๊ด๊ณ ๋งคํ์ด๋ ๊ฐ๋
์ ๋ํด ์์๋ณด๊ธฐ ์ ์, ์ ์ฐ๊ด๊ด๊ณ ๋งคํ์ด๋ผ๋ ๊ฒ์ ํด์ผ ํ๋์ง ์์์ผ ํ๋ค. ๐ค ์ฐ๊ด๊ด๊ณ ๋งคํ์ ์ ํด์ผ ํ ๊น? ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ๋ฌ๋ค์์ด ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. JPA๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ด๋ฐ ํจ๋ฌ๋ค์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ ์ค๊ณ๋๋ก ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ค๋ฉด ๊ฐ์ฒด ์ค์ฌ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ์ง ๋ชปํ๊ฒ ๋๊ณ , ๋ฐ์ดํฐ ์ค์ฌ์ ์ธ ์ฝ๋๊ฐ ๋ ์๋ฐ์ ์๋ค. ์์๋ฅผ ์ดํด๋ณด์. 1. Actor ํ
์ด๋ธ๊ณผ Musical ํ
์ด๋ธ์ด ์๋ค. 2. ๋ฐฐ์ฐ๋ ํ๋์ ๋ฎค์ง์ปฌ์ ์ถ์ฐํ ์ ์๋ค. 3. ๋ฐฐ์ฐ์ ๋ฎค์ง์ปฌ์ ๋ค๋์ผ ๊ด๊ณ์ด๋ค. ์์ ๊ฐ์ ์๊ตฌ์ฌํญ์ ๋ํ ํ
์ด๋ธ์ ์๋์ ๊ฐ์ด ์ค๊ณํ ์ ์๋ค. ์ด๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ๋ก ์ฎ๊ฒจ์ ์ค๊ณํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ํฐํฐ..
Spring
์ฐํ
์ฝ ๋ ๋ฒจ2 ๋ฏธ์
์ ์งํํ๋ฉด์ Dao์ Repository์ ์ฐจ์ด์ ๋ํด์ ๋ง์ ์ด์ผ๊ธฐ๊ฐ ์ค๊ณ ๊ฐ๋ ๊ฒ์ ๋๊ผ๋ค. ํ์ง๋ง ์์ง Dao๋ง์ผ๋ก๋ ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ Repository์ ๋ํด์ ๊น๊ฒ ์๊ฐํด๋ณด์ง ์์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฒ ์งํ์ฒ ๋ฏธ์
์์ ์๊ตฌ์ฌํญ์ด ๋ณต์กํด์ง๋ฉด์ ์ฌ๋ฌ Dao๋ค์ด ์๊ฒผ๊ณ , Repository๋ฅผ ์จ์ผ ํ๋ ์ํฉ์ด ์๋ค. ํ์ด๊ฐ ์ ์ํด์ ์ฌ์ฉํ๊ธด ํ์ง๋ง, Repository์ ํ์์ฑ์ ์กฐ๊ธ ๋๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ Dao์ Repository์ ๋ํด์ ์ ๋๋ก ์์๋ณด๊ธฐ๋ก ํ๋ค! DAO๋? Data Access Object์ ์ฝ์๋ก, ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฐ์ฒด์ด๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ํคํ
์ฒ์ Application ๊ณ์ธต์์ ๋ฐ๋ก ๋ฐ์ดํฐ์ ์ ๊ทผ์ ํ๋ ๊ฒ์ด ์๋๋ผ, Dao(Persistence ๊ณ์ธต)๋ฅผ..
Spring
์ฌ๊ธฐ ๊ฐ๋จํ ์ฅ๋ฐ๊ตฌ๋ ์ดํ๋ฆฌ์ผ์ด์
์ด ์์ต๋๋ค. ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ์ถ๊ฐ, ์ ๊ฑฐ, ์กฐํํ๋ ๋ฑ ์ธ ๊ฐ์ง์ ์ผ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋๋ ์๋ฌด๋ ๋ด ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ๋ด์ ์๋ ์์ต๋๋ค! ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์์ ์ ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ๋ด์ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ํ์ ๋ด๊ธฐ ์ ์ ์ํ์ ๋ด์ผ๋ ค๋ ์ฌ์ฉ์์ ์ธ์ฆ ์์
์ ๋จผ์ ์ํํด์ผํฉ๋๋ค. ์ธ์ฆ ์์
์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ก ์งํ๋ฉ๋๋ค. 'Authorization' ํค๋ ์ถ์ถ ์ถ์ถ๋ ์ ๋ณด๋ก ์ฐ๋ฆฌ์ ์ฅ๋ฐ๊ตฌ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ์์ธ์ง ํ์ธ ์ด ์์
์ ์ํ ์ถ๊ฐ, ์ํ ์ ๊ฑฐ, ์ํ ์กฐํ API์ ๋ชจ๋ ์ถ๊ฐ๊ฐ ๋์ด์ผ ํฉ๋๋ค. @RestController public class CartController { @PostMapping("/carts/products/{productId..
Spring
ํ
์คํธ๊ฐ ๋๋ฌด ๋ฌด๊ฒ๊ณ ๊ท์ฐฎ์์ ๐ฎ๐จ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ธ๋ถ ํ๊ฒฝ๊ณผ ํจ๊ป ๋์ํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ
์คํธํ๊ธฐ๋ ์ฐธ ์ด๋ ค์ด ์ผ์ด๋ค. ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์๋น์ค์์ ๋ก์ง์ ๋ง๊ฒ ์ ๋๋ก ๋์ํ๋์ง๋ฅผ ํ
์คํธํ๊ณ ์ถ์๋ฐ, ํ
์คํธ๋ฅผ ํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ค์ ๋ฃ์ด๋๋ ๋ฑ๋ฑ ๊ธฐํ ์ค์ ๋ค์ ํ๋๋ฐ ๋ ๋ง์ ์๊ฐ์ ๋ค์ฌ์ผํ๋ค. ๋ ํ
์คํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ด์ฌํ๋ฉด์ ๋ถํฐ๋, ํ
์คํธ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ง์์ฃผ๋ ๋ฑ ํ์ฒ๋ฆฌ๋ฅผ ์ ๋๋ก ํ์ง ์์์ ์ ์ฒด ํ
์คํธ๋ฅผ ๋๋ ธ์ ๋ ์์์น ๋ชปํ๊ฒ ํ
์คํธ์ ์คํจํ๋ ๊ฒฝํ์ ๋ง์ด ํด๋ดค์ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ
์คํธ ๋๋ธ(Test Double)์ด๋ผ๋ ๊ฐ๋
์ด ๋์๋ค. xUnit Test Patterns์ ์ ์์ธ ์ ๋ผ๋ ๋ฉ์ค์๋ก์ค(Gerard Meszaros)๊ฐ..