Spring
์ฌ๊ธฐ ๊ฐ๋จํ ์ฅ๋ฐ๊ตฌ๋ ์ดํ๋ฆฌ์ผ์ด์
์ด ์์ต๋๋ค. ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ์ถ๊ฐ, ์ ๊ฑฐ, ์กฐํํ๋ ๋ฑ ์ธ ๊ฐ์ง์ ์ผ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋๋ ์๋ฌด๋ ๋ด ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ๋ด์ ์๋ ์์ต๋๋ค! ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์์ ์ ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ๋ด์ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ํ์ ๋ด๊ธฐ ์ ์ ์ํ์ ๋ด์ผ๋ ค๋ ์ฌ์ฉ์์ ์ธ์ฆ ์์
์ ๋จผ์ ์ํํด์ผํฉ๋๋ค. ์ธ์ฆ ์์
์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ก ์งํ๋ฉ๋๋ค. 'Authorization' ํค๋ ์ถ์ถ ์ถ์ถ๋ ์ ๋ณด๋ก ์ฐ๋ฆฌ์ ์ฅ๋ฐ๊ตฌ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ์์ธ์ง ํ์ธ ์ด ์์
์ ์ํ ์ถ๊ฐ, ์ํ ์ ๊ฑฐ, ์ํ ์กฐํ API์ ๋ชจ๋ ์ถ๊ฐ๊ฐ ๋์ด์ผ ํฉ๋๋ค. @RestController public class CartController { @PostMapping("/carts/products/{productId..
์ฐ์ํํ
ํฌ์ฝ์ค/ํ๊ณ
์ฐ์ํํ
ํฌ์ฝ์ค ๋ ๋ฒจ2๋ ์คํ๋ง ํ๋ ์์ํฌ์ ๋ํด์ ํ์ตํ๋ค. ๋ ๋ฒจ2 ์ฒซ ๋ฒ์งธ ๋ฏธ์
์, ๋ ๋ฒจ1 ๋ฏธ์
์์ ๋ง๋ค์๋ ์ฝ์ ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์์ ์น์ผ๋ก ์ ํํ๋ ๊ฒ์ด์๋ค. ์ฌ์ค ๋ ๋ฒ์งธ ๋ฏธ์
์ด ๊ฑฐ์ ๋๋๊ฐ๋ ์์ ์ด์ง๋ง, ์งง๊ฒ๋ผ๋ ๊ธฐ๋ก์ ๋จ๊ธฐ๊ณ ์ถ์ด ํ๊ณ ๋ฅผ ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค. ๋๋ ์คํ๋ง์ ๋ํด์ ์ ๋ชจ๋ฅธ๋ค. ๊ฒฝํ์ ํด๋ดค์ง๋ง ๊น์ ์ดํด๋ ์๋ ์ ๋์ด๋ค. ๊ทธ๋์ ์ฒ์์ ๋ฏธ์
์ ์งํํ๋ฉด์ ๋ถ๋ช
ํ ํด๋ดค๋๋ฐ ๋ญ์๋๋ผ..?๋ฅผ ๋ฐ๋ณตํ๋ค.. ๋ญ๊ฐ ์ด๋ ดํํ๊ฒ ๊ธฐ์ต์ด ๋๋ ๋ฏํ๋ฉด์ ์ ๋ง ํ๋๋ ์ ๋๋ก ๋ชจ๋ฅด๋๊ตฌ๋ ์ถ์๋ค ๐ญ ๊ทธ๋ฆฌ๊ณ ์คํ๋ง์ด ๋๋ฌด ๋ฐฉ๋ํ๋ค ๋ณด๋๊น ์ ๋ง ๊ณต๋ถ ๋ฐฉํฅ์ ๋ํด์๋ ๋ง์ ๊ณ ๋ฏผ์ ํด์ผ ํ๋ค. ๋น์ฅ ๋ฏธ์
์ ๊ตฌํํ ์ ๋๋ก๋ ์๊ณ ์์ง๋ง, ์ด๋ ์ ๋๊น์ง ๊น๊ฒ ๊ณต๋ถ๋ฅผ ํด์ผ ํ ์ง๋ ๋ด๊ฐ ํ๋จํด์ผ ํ๋ค. ์ฌ์ค ์์ง๋ ์ ๋ชจ..
Spring
ํ
์คํธ๊ฐ ๋๋ฌด ๋ฌด๊ฒ๊ณ ๊ท์ฐฎ์์ ๐ฎ๐จ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ธ๋ถ ํ๊ฒฝ๊ณผ ํจ๊ป ๋์ํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ
์คํธํ๊ธฐ๋ ์ฐธ ์ด๋ ค์ด ์ผ์ด๋ค. ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์๋น์ค์์ ๋ก์ง์ ๋ง๊ฒ ์ ๋๋ก ๋์ํ๋์ง๋ฅผ ํ
์คํธํ๊ณ ์ถ์๋ฐ, ํ
์คํธ๋ฅผ ํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ค์ ๋ฃ์ด๋๋ ๋ฑ๋ฑ ๊ธฐํ ์ค์ ๋ค์ ํ๋๋ฐ ๋ ๋ง์ ์๊ฐ์ ๋ค์ฌ์ผํ๋ค. ๋ ํ
์คํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ด์ฌํ๋ฉด์ ๋ถํฐ๋, ํ
์คํธ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ง์์ฃผ๋ ๋ฑ ํ์ฒ๋ฆฌ๋ฅผ ์ ๋๋ก ํ์ง ์์์ ์ ์ฒด ํ
์คํธ๋ฅผ ๋๋ ธ์ ๋ ์์์น ๋ชปํ๊ฒ ํ
์คํธ์ ์คํจํ๋ ๊ฒฝํ์ ๋ง์ด ํด๋ดค์ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ
์คํธ ๋๋ธ(Test Double)์ด๋ผ๋ ๊ฐ๋
์ด ๋์๋ค. xUnit Test Patterns์ ์ ์์ธ ์ ๋ผ๋ ๋ฉ์ค์๋ก์ค(Gerard Meszaros)๊ฐ..
์ฐ์ํํ
ํฌ์ฝ์ค/ํ๊ณ
์ฝ ๋๋ฌ ๊ฐ์ ๋ ๋ฒจ1 ๊ธฐ๊ฐ์ด ๋๋ฌ๋ค. ๋ง์์ ์ฌ์ ์์ด ์ด๊ฒ์ ๊ฒ ํ๋ค๋ณด๋ ๋ฏธ์
์ด ๋๋ ๋๋ง๋ค ๋๋์ ๋ณด๋ ์๊ฐ์ ๊ฐ์ง ๋ชปํด ํํ๊ฐ ๋๋ค. ๊ทธ๋์ ๊ธ์ ์์ฑํ๋ฉด์ ๋ ๋ฒจ1 ๊ธฐ๊ฐ์ ๋ฆ๊ฒ๋๋ง ๋์๋ณด๊ณ , ๋ ๋ ๋ฒจ2๋ฅผ ์ ๋ณด๋ด๊ธฐ ์ํด ๋ค์ง๋ ํ๋ ค๊ณ ํ๋ค! ๋ฒ์จ ๊ธฐ์ต์ด ๊ฐ๋ฌผ๊ฐ๋ฌผํ๋ค.. 1. ์ฒซ ๋ฒ์งธ ๋ฏธ์
, ์๋์ฐจ ๊ฒฝ์ฃผ ํ๋ฆฌ์ฝ์ค ์ต์ข
์ฝํ
์ดํ๋ก ์๋ฐ๋ฅผ ์ณ๋ค๋ณด์ง๋ ์์๋๋ ์ฒซ ๋ฏธ์
๋ ์ง๋์ ๋บ๋ค. ํ๋ฆฌ์ฝ์คํ๋ฉด์๋ ํ๊ต ์กธ์
๊ณผ์ ๋๋ฌธ์ ์จ์ ํ ์ง์คํ์ง ๋ชปํ๋๋ฐ, ๊ทธ ์ฌ์ด์ ๊ณต๋ถ ์ข ํ ๊ป ํํ๊ฐ ๋๋ค.. ์ฒซ ํ์ดํ๋ก๊ทธ๋๋ฐ์ด๋ผ ์ด์ํ๊ธฐ๋ ํ๊ณ ๋ญ๋๊น ์ฐธ ์ ๊ธฐํ ๊ฒฝํ์ด๋ผ ์๊ฐํ๋ค. ์๋ฐ๋ฅผ ํ๋ผ๋น ๊น๋จน์ด๋ฒ๋ ค์ ์๋ฌด๊ฒ๋ ์ ๋๋ก ๋ชปํ๋ ๋๋ฅผ ๋ณด๊ณ ํ์ด๋ ๋ฌด์จ ์๊ฐ์ ํ์๊น ๐
๋์์ ์๋ฐ๋ฅผ ์ง์ง ์ด์ฌํ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ถํ์ค๋ฅด..
์ฐ์ํํ
ํฌ์ฝ์ค/๋ฏธ์
์ฐ์ํํ
ํฌ์ฝ์ค ์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ฏธ์
์ ์งํํ๋ฉฐ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ๋ ๋ด์ฉ์ ๊ณต์ ํ๋ ค๊ณ ํ๋ค. 1. ๊ณ ๋ฏผ ์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ฏธ์
์ ๊ตฌํํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ ๋ถ๋ถ์ ‘๊ฐ์ฒด๊ฐ ํ๋๋ก ๊ฐ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์ด๋์์ ์์ฑํด์ฃผ์ด์ผ ํ ์ง’ ์ด๋ค. ํ๋์ ์์ฑ๋ '์ฌ๋ค๋ฆฌ'๋ผ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ง์ ๋ถํ๋ค์ด ํ์ํ๋ค. (์์ง 2์ฃผ์ฐจ ๋ณ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์..) ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์ด๋์ ์์ฑํด์ผ ํ ์ง ์กฐ์ฐจ ํ์คํ๊ฒ ๋ต์ ๋ด๋ฆฌ๊ธฐ ์ด๋ ค์ ๋ค. ๋จผ์ ์ฌ๋ค๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ๋ถํฐ ์ดํด๋ณด์. 1.1. ์ฌ๋ค๋ฆฌ ๊ตฌ์ฑ ์ฌ๋ค๋ฆฌ(Ladder) ํ๋๋ ๋๋ค๋๋ค(Lines)์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๋ค. ๋๋ค๋ ํ๋(Line)๋ ๋๋ค๋ ์กด์ฌ ์ ๋ฌด์ ์ํ๋ค(List)์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๋ค. (LineStatus๋ boolean ๊ฐ์ด๋ค.) ๊ทธ๋ ๋ค๋ฉด ์ฌ๋ค๋ฆฌ ํ๋๋ฅผ ๋ง..