์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. API ์์ธ ์ฒ๋ฆฌ HTML ํ์ด์ง์ ๊ฒฝ์ฐ ๊ทธ์ ๋ง๋ ์ค๋ฅ ํ์ด์ง๋ง ์์ผ๋ฉด ๋๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, API์ ๊ฒฝ์ฐ ๊ณ ๋ คํด์ผ ํ ์ ์ด ๋ ๋ง๋ค. ์ค๋ฅ ํ์ด์ง๋ ๋จ์ํ ํด๋ผ์ด์ธํธ์๊ฒ ์ค๋ฅ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ๋์ด์ง๋ง, API๋ ๊ฐ ์ค๋ฅ ์ํฉ์ ๋ง๋ ์ค๋ฅ ์๋ต ์คํ์ ์ ํ๊ณ JSON์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด์ผ ํ๋ค. @RequestMapping ์ ๋ ธํ ์ด์ ์ produces ์ต์ ์ MediaType.APPLICATION_JSON_VALUE์ผ๋ก ์ค์ ํ๋ฉด, HTTP ํค๋์ Accept ๊ฐ์ด application/json์ผ ๋๋ง ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. ์คํ๋ง ๋ถํธ ๊ธฐ๋ณธ ์ค๋ฅ ์ฒ๋ฆฌ ์คํ๋ง ๋ถํธ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์ค๋ฅ ๋ฐฉ์(BasicErrorController..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์๋ธ๋ฆฟ ์์ธ ์ฒ๋ฆฌ - ์์ธ ์ฒ๋ฆฌ ๋ฐฉ์ ์คํ๋ง์ด ์๋ ์์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค. 1. Exception(์์ธ) 1-1. ์๋ฐ์ ๋ฉ์ธ ๋ฉ์๋๋ฅผ ์ง์ ์คํํ๋ ๊ฒฝ์ฐ ์คํ ๋์ค์ ์์ธ๋ฅผ ์ก์ง ๋ชปํ๊ณ ์ฒ์ ์คํํ ๋ฉ์ธ ๋ฉ์๋๋ฅผ ๋์ด์ ์์ธ๊ฐ ๋์ ธ์ง๋ฉด, ์์ธ ์ ๋ณด๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์ฐ๋ ๋๋ ์ข ๋ฃ๋๋ค. 1-2. ์น ์ ํ๋ฆฌ์ผ์ด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์์ฒญ ๋ณ๋ก ๋ณ๋์ ์ฐ๋ ๋๊ฐ ํ ๋น๋๊ณ , ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์์์ ์คํ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์์ธ๋ฅผ ์ก์ง ๋ชปํ๊ณ ์๋ธ๋ฆฟ ๋ฐ์ผ๋ก๊น์ง ์์ธ๊ฐ ์ ๋ฌ๋๋ฉด WAS๊น์ง ์์ธ๊ฐ ์ ๋ฌ๋๊ณ , WAS๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ์ค๋ฅ ํ๋ฉด์ด ๋ํ๋๋ค. ์ด ๊ฒฝ์ฐ HTTP ์ํ ์ฝ๋๊ฐ 500์ ..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๊ณตํต ๊ด์ฌ ์ฌํญ '๋ก๊ทธ์ธ ์ฒ๋ฆฌ(1) - ์ฟ ํค, ์ธ์ '์์ ์ ์ํ ์๊ตฌ์ฌํญ์ ๋ฐ๋ฅด๋ฉด ๋ก๊ทธ์ธ์ ํ ์ฌ์ฉ์๋ง ์ํ ๊ด๋ฆฌ ํ์ด์ง์ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋ค. ํ์ง๋ง ์ํ ๊ด๋ฆฌ ํ์ด์ง์ URL์ ์ง์ ํธ์ถํ๋ฉด ๋ก๊ทธ์ธ์ ํ์ง ์์ ์ฌ์ฉ์๋ ์ ์ํ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค. ์ํ ๊ด๋ฆฌ ์ปจํธ๋กค๋ฌ์์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋ก์ง์ ์ผ์ผ์ด ์์ฑํ ์๋ ์์ง๋ง, ๋ฑ๋ก/์์ /์ญ์ /์กฐํ ๋ฑ ๋ชจ๋ ์ปจํธ๋กค๋ฌ ๋ก์ง์ ๊ณตํต์ผ๋ก ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋ฉฐ ๋ก๊ทธ์ธ๊ณผ ๊ด๋ จ๋ ๋ก์ง์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์์ฑํ ๋ชจ๋ ๋ก์ง์ ๋ค ์์ ํด์ผ ํ๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค. ์ด๋ ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ๋ฌ ๋ก์ง์์ ๊ณตํต์ผ๋ก ๊ด์ฌ์ด ์๋ ๋ถ๋ถ์ '๊ณตํต ๊ด์ฌ์ฌ'๋ผ๊ณ ํ๋๋ฐ, ํด๋น ์ํฉ์์์ ๊ณตํต ๊ด์ฌ์ฌ๋ '์ธ์ฆ'์ด..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๋ก๊ทธ์ธ ์๊ตฌ์ฌํญ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ํํธ ํ์ต์ ์๋ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ ๊ณผ์ ์ ํตํด ์ด๋ฃจ์ด์ง๋ค. 1. ๋ก๊ทธ์ธ ์ ํ ํ๋ฉด์๋ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ๋ฒํผ์ด ์กด์ฌํ๋ค. 2. ๋ก๊ทธ์ธ ํ ํ ํ๋ฉด์๋ ํ์ ์ด๋ฆ, ์ํ ๊ด๋ฆฌ ๋ฒํผ, ๋ก๊ทธ์์ ๋ฒํผ์ด ์กด์ฌํ๋ค. 3. ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ์ํ์ ์ ๊ทผํ๊ณ , ๊ด๋ฆฌํ ์ ์๋ค. ๋ง์ฝ ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์๊ฐ ์ํ ๊ด๋ฆฌ์ ์ ๊ทผํ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ค. ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๋ก๊ทธ์ธ ์ปจํธ๋กค๋ฌ๋ ์๋น์ค ๋ก์ง์ ํธ์ถํ์ฌ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ํ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ณ , ๋ก๊ทธ์ธ์ ์คํจํ๋ฉด BindingResult์ reject() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ObjectError๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ณด๋ฅผ ๋ค์ ์ ๋ ฅํ๋๋ก ๋ก๊ทธ์ธ ํผ์ ๋ทฐ ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. Bean Validation์ด๋ ๊ฒ์ฆ ์ ๋ ธํ ์ด์ ๊ณผ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์ ๊ธฐ์ ํ์ค์ผ๋ก, ๊ฐ์ ๋น์ด์๋ ์ฌ๋ถ๋ ๋ฒ์๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ผ๋ฐ์ ์ธ ๋ก์ง์ ๊ฒ์ฆํ ๋ ๋ชจ๋ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์๊ฒ ๊ณตํตํํ๊ณ ํ์คํํ ๊ฒ์ด๋ค. ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ build.gradle์ ๋ค์๊ณผ ๊ฐ์ด ์์กด๊ด๊ณ๋ฅผ ์ถ๊ฐํด ์ฃผ๋ฉด ๋๋ค. implementation 'org.springframework.boot:spring-boot-starter-validation' ๊ฒ์ฆ ์ ๋ ธํ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฉํ ์ ์๋ค. @NotBlank ๋น ๊ฐ์ธ ๊ฒฝ์ฐ ํน์ ๊ณต๋ฐฑ๋ง ์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค. @NotNull null์ ํ์ฉํ์ง ์๋๋ค. @Range(min = 10,..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๊ฒ์ฆ ์ปจํธ๋กค๋ฌ์ ์ค์ํ ์ญํ ์ค ํ๋๋ HTTP ์์ฒญ์ด ์ ์์ธ์ง ๊ฒ์ฆํ๋ ๊ฒ์ด๋ค. ํด๋ผ์ด์ธํธ ๊ฒ์ฆ๋ง์ผ๋ก๋ ์กฐ์์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ทจ์ฝํ๊ณ , ์๋ฒ๋ง์ผ๋ก ๊ฒ์ฆํ๋ฉด ์ฆ๊ฐ์ ์ธ ๊ณ ๊ฐ ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๋ค. ๋ฐ๋ผ์ ๋์ ์ ์ ํ ์์ด ์ฌ์ฉํ๋ ์ต์ข ์ ์ผ๋ก ์๋ฒ ๊ฒ์ฆ์ ๊ฑฐ์น๋๋ก ์ค๊ณํด์ผ ํ๋ค. ๊ฒ์ฆ ์ง์ ์ฒ๋ฆฌ ๋ก์ง 1. Map errors = new HashMap();์ ์ ์ธํ์ฌ ์ค๋ฅ๋ฅผ ๋ณด๊ดํ ๋ณ์๋ฅผ ์ง์ ํ๊ณ ๊ฒ์ฆ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋๋ช ์ key๋ก, ์ค๋ฅ ๋ฉ์์ง๋ฅผ value๋ก ์ ์ฅํ๋ค.(์ค๋ฅ ์์ธ์ด ํน์ ํ๋๊ฐ ์๋๋ผ ํ๋ ๋ฒ์๋ฅผ ๋์ด์๋ ์ค๋ฅ๋ผ๋ฉด globalError๋ฅผ key๋ก ์ฌ์ฉํ๋ค.) ์ดํ ๋ทฐ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉ์์๊ฒ..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๋ฉ์์ง / ๊ตญ์ ํ ๋ฉ์์ง ๊ธฐ๋ฅ์ ๋ค์ํ ๋ฉ์์ง๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ผ์ปซ๋๋ค. ์ฌ๋ฌ ํ๋ฉด์ ๋ณด์ด๋ ์ํ๋ช , ๊ฐ๊ฒฉ ๋ฑ์ ์ผ์ผ์ด ํ๋์ฝ๋ฉํ ์ํฉ์์ ์ดํ์ ๋จ์ด๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ด๋ จ๋ ํ์ผ์ ์ ๋ถ ๊ณ ์ณ์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํ๋ค. ๋์ ๋ฉ์์ง ๊ด๋ฆฌ์ฉ ํ์ผ์ ๋ฉ์์ง๋ฅผ ์ ์ํ๊ณ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ฐฉ์์ ์ฑํํ๋ค๋ฉด ๊ด๋ฆฌ ํ์ผ๋ง ์์ ํ๋ฉด ๋๋ค. ์ด๋ฌํ ๋ฉ์์ง ํ์ผ์ ๊ฐ ๋๋ผ์ ์ธ์ด๋ณ๋ก ๊ด๋ฆฌํ๋ฉด ์๋น์ค๋ฅผ ๊ตญ์ ํํ ์ ์๋ค. HTTP accept-language ํค๋ ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ธ์ด๋ฅผ ์ ํํ๋ ๋ฑ ์ ๊ทผ ๊ตญ๊ฐ๋ฅผ ์ธ์ํ์ฌ ํด๋น ๊ตญ๊ฐ์ ์ธ์ด๋ก ์ ๊ณตํ๊ฒ ๋๋ค. ์คํ๋ง ๋ฉ์์ง ์์ค ์ค์ spring.messages.basename=..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์์ฒญ ๋งคํ ๋งคํ ์ ๋ณด ํด๋์ค์ @Controller๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ๋ฐํ ๊ฐ์ด String์ด๋ฉด ๋ทฐ ์ด๋ฆ์ผ๋ก ์ธ์๋๋ ๋ฐ๋ฉด, @RestController์ ๊ฒฝ์ฐ ๋ทฐ ์ด๋ฆ์ด ์๋ ํด๋น ๋ฌธ์์ด์ HTTP ๋ฐ๋์ ๋ฐ๋ก ์ ๋ ฅํ๊ฒ ๋๋ค. ๋๋ถ์ด @RequestMapping์ ์ด์ฉํจ์ผ๋ก์จ ํน์ URL๊ณผ ๋งคํ์ด ๊ฐ๋ฅํ๋ฐ, ์ฌ๋ฌ ๊ฐ์ URL์ ๋ฐฐ์ด๋ก ๋ฑ๋กํจ์ผ๋ก์จ ๋ค์ค ์ค์ ๋ ๊ฐ๋ฅํ๋ค. HTTP ๋ฉ์๋ @RequestMapping์ ๋ฉ์๋ ์์ฑ์ ์ถ๊ฐํ์ง ์์ผ๋ฉด ๋ฉ์๋์ ๊ด๊ณ์์ด ํธ์ถ๋์ง๋ง, @RequestMapping(value = "/mapping-get", method = RequestMethod.GET)์ ๊ฐ์ด ์์ฑ์ ์ง์ ํ ๊ฒฝ์ฐ ๋ฉ์๋๊ฐ ์ผ์นํ์ง ์์ ๋ 40..