1. ์ด๋ฒ ์ฃผ์ ํ์ตํ ๋ด์ฉ
- ์ ํจ์ฑ ๊ฒ์ฌ์ ๋ํด ํ์ต์ ํ์๋ค.
- DTO์ ๋ํด ํ์ต
- Dozer๋ฅผ ์ด์ฉํ ๋ ํธํ Mapping
- Test Code
2. ์ค์ ์ ์ผ๋ก ํ์ตํ ๋ถ๋ถ
- ๊ฐ์์ ๋ฆฌ๋ทฐ๋ฅผ ํตํ์ฌ ์ด์ ์ข์ ์ฝ๋์ ํ์ ์๊ธฐ ์์ํ๋ค. ๊ธฐ์กด์ ๋ด๊ฐ ์์ฑํ๋ ๋ฐฉ์๊ณผ ๋๋ฌด ๋ฌ๋ผ ์์ง ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ฏธ์ํ ๋ถ๋ถ์ด ๋ง์๋ค. ๊ทธ๋์ ์ด๋ฒ ์ฃผ๋ ์ง๊ธ๊น์ง ๋ฑ ๋ฐฐ์ด ๋ถ๋ถ์ ๋ง์ด ์์ฑ์ ํด๋ณด์ ์๊ฐ์ ํ์๊ณ ๊ฐ์๋ฅผ ๋ง์ด ๋ณด๊ณ ์ฝ๋์ ๋ํด ์๊ฐํ๋ ์๊ฐ์ ๊ฐ์ก๋ค. ์ฝ๋๋ฅผ ์ ์ด๋ ๊ฒ ์์ฑ์ ํ์๊น ์๊ฐ์ ํด๋ณด๋ฉด์ ๋ ๊ณต๋ถํด์ผ ๋๋ ๋ด์ฉ๋ค์ด ์๊ฒผ๋ค.
- HTTP Status์ ๋ํด์ ๋ค์ ๊ณต๋ถ๋ฅผ ํ๊ฒ ๋์๋ค. ๊ธฐ์กด์ ๋ด๊ฐ ์๊ณ ์๋ ๋ด์ฉ์ผ๋ก ๋ก์ง์ด ์ฑ๊ณตํ๋ฉด status_code๋ OK(200)์ ๋๊ฒจ์ค๋ค๊ณ ์๊ฐ์ ํ๋ค. ํ์ง๋ง Mapping()๋ง๋ค ๊ทธ ๊ธฐ์ค์ด ๋ค๋ฅด๋ค๋ ๊ฑธ ์๊ฒ ๋์ด์ ๋ค์ ํ์ตํ๊ณ ์๋ค.
- ๊ธฐ๋ณธ๊ธฐ์ ์ถฉ์คํ์ Dozer๋ฅผ ํตํ์ฌ ํธํ๊ฒ Mapping์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์์ง ๊ธฐ๋ณธ์ ์ธ Builder์ ๋ํด ๋ถ์กฑํ ๋ถ๋ถ์ด ์๋ค๊ณ ์๊ฐํ์ฌ Dozer๋ฅผ ์ฌ์ฉํ์ง ์์๋ค. ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ์ ํ๋ฉด ๋ฌผ๋ก ํธํ๊ฒ ์ง๋ง ๊ฐ๋ฐ์๋ผ๋ฉด ๊ธฐ๋ณธ์ด ๋จผ์ ๊ฐ๋ฅํด์ผ ๋๋ค๊ณ ์๊ฐํ๋ค. ๋ํ์ ์ธ ์๋ก Jackson์ด ์๋ค. RestApi๋ฅผ ๋ง๋ค๋ฉด์ ํญ์ ์ฌ์ฉํ๋ Jackson์ ๋ํด์๋ ์์ธํ๊ฒ ์์ง ๋ชปํ๋ค. ControllerAdvice์์ status ์ฝ๋์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์์ธ๋ฅผ ๋ง๋ค์ด ํ ์คํธ๋ฅผ ํด๋ณด๋ ์์ฑ์ ์ค๋ฅ๊ฐ ์๊ฒผ๋ค. ์๊ณ ๋ณด๋๊น Builder๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ ์ฒด ์์ฑ์๋ ๋ง๋ค์์ง๋ง ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ด์ ์๊ธด ์ค๋ฅ์ธ๋ฐ ๊ทธ ์ด์ ๊ฐ Jackson์ด DTO๋ฅผ ํธ์ถํ๊ณ ์ญ ์ง๋ ฌํ๋ฅผ ํ๋ ๊ณผ์ ์์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ์ธ๋ฐ ์ด๋ฌํ ๊ธฐ๋ณธ์ ์ธ ์ค์๋ฅผ ๋ณด๊ณ ๊ธฐ๋ณธ๊ธฐ์ ์ค์์ฑ์ ๋ค์ ํ๋ฒ ๋๋ผ๊ฒ ๋์๋ค.
mockMvc.perform(post("/user")
.contentType(APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsString(user)))
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.message").value("์๋ชป๋ ์
๋ ฅ์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์."))
.andExpect(jsonPath("$.code").value("400"))
.andExpect(jsonPath("$.validation.email").value("์ด๋ฉ์ผ์ ์
๋ ฅํ์ธ์"))
.andDo(print());
3. ๋๋์
ํญ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ด๊ฐ ํ๋ฆฐ ๋ฐฉํฅ์ผ๋ก ์์ฑ์ ํ๊ณ ์๋ค๊ณ ์๊ฐ์ ํ๋๋ฐ ์ด์ ๋ ์ด๋ป๊ฒ ์์ฑํ๋๊ฒ ์ข์ ์ฝ๋์ ํ??์ ๋์ถฉ์ ์๊ฒ ๋ค. ํ์ง๋ง ์์ง ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋๊ฒ ์ ์ผ ์ด๋ ต๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ํตํ์ฌ ๋ก์ง์ ์์ฑ์ ํ๋ ค๊ณ ํ๋ ๋๋ฌด ์ด๋ ค์ ๋ค. ๋ถ๋ช ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋น ๋ฅด๊ฒ ๋๋์ง๋ง ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ ์๊ฐ์ด ๋ ๋ง์ด ๊ฑธ๋ ธ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ด๋ ต๊ฒ ๋๋ผ๋ฉด์ ๊ณ ํต์ ๋ฐ๋๊ฑธ ๋ณด๋ฉด ์กฐ๊ธ์ฉ์ด๋๋ง ์ฑ์ฅ์ ํ๊ณ ์๋ค๊ณ ๋ฏฟ๊ณ ์๋ค. ์ง๊ธ์ ํ๋ค๊ฒ ์์ฑ์ ํ๊ณ ์์ง๋ง ๊พธ์คํ TDD์ ๋ํด ์ฐ์ตํ๋ค๋ฉด ์ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
'๐์ฃผ์ธ์ฅ ํ๊ณ ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ๋์จ ์คํ๋ง [ 15๊ธฐ ] - 7์ฃผ์ฐจ ํ๊ณ (0) | 2023.03.28 |
---|---|
์ฝ๋์จ ์คํ๋ง [ 15๊ธฐ ] - 6์ฃผ์ฐจ ํ๊ณ (0) | 2023.03.20 |
์ฝ๋์จ ์คํ๋ง[15๊ธฐ] - 4์ฃผ์ฐจ ํ๊ณ (0) | 2023.03.06 |
์ฝ๋์จ ์คํ๋ง[15๊ธฐ] - 3์ฃผ์ฐจ ํ๊ณ ๋ก (0) | 2023.02.26 |
์ฝ๋์จ ์คํ๋ง[15๊ธฐ] - 2์ฃผ์ฐจ ํ๊ณ ๋ก (0) | 2023.02.19 |