Spring/Spring MVC
๋ฆฌ๋ค์ด๋ ํธ๋ ๋ง ๊ทธ๋๋ก re(๋ค์) + ์ง์ํ๋ค(direct) ๋ค์ ์ง์ํ๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋ผ์ฐ์ ๊ฐ www.test.com/page1 URL์ ์น ์๋ฒ์ ์์ฒญํ์ต๋๋ค. ์๋ฒ๋ HTTP ์๋ต ๋ฉ์์ง๋ฅผ ํตํด "www.test.com/page2 ๋ก ๋ค์ ์์ฒญํ์ธ์~" ๋ผ๊ณ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ค๋ฅธ URL(๊ธธ, ๋ฐฉํฅ) ์ ์ง์ํ ์ ์์ต๋๋ค. POST ๋ฑ๋ก ํ ์๋ก ๊ณ ์นจ ์น ๋ธ๋ผ์ฐ์ ์ ์๋ก ๊ณ ์นจ์ ๋ง์ง๋ง์ ์๋ฒ์ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ ์กํ๋ค. ์ํ ๋ฑ๋ก ํผ์์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ณ ์ ์ฅ์ ์ ํํ๋ฉด POST /add + ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ค. ์ด ์ํ์์ ์๋ก ๊ณ ์นจ์ ๋ ์ ํํ๋ฉด ๋ง์ง๋ง์ ์ ์กํ POST /add + ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ค์ ์ ์กํ๊ฒ ๋๋ค. ๊ทธ๋์ ๋ด์ฉ์ ๊ฐ๊ณ , ID๋ง ๋ค๋ฅธ ์ํ ๋ฐ์ดํฐ..
Spring/Spring MVC
์์ฒญ ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ @ModelAttribue Item item @PostMapping("/add") public String addItem(@ModelAttribute Item item,Model model) { itemRepository.save(item); model.addAttribute("item",item); return "basic/item"; } ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ธฐ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ํ๋กํผํฐ ์ ๊ทผ๋ฒ(setXxx)์ผ๋ก ์
๋ ฅํด์ค๋ค. public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model ..
Spring/Spring MVC
์ ์ ์ธ html ์ ๋์ html ๋ก ๋ฐ๊ฟ๋ณด์ ํ์๋ฆฌํ๋ ์์ HTML ํ์ผ์ ์น ๋ธ๋ผ์ฐ์ ์์ ์ด์ด๋ ๋ด์ฉ์ ํ์ธํ ์ ์๊ณ , ์๋ฒ๋ฅผ ํตํด ๋ทฐ ํ
ํ๋ฆฟ์ ๊ฑฐ์น๋ฉด ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค. ์์ HTML์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ๋ทฐ ํ
ํ๋ฆฟ๋ ์ฌ์ฉํ ์ ์๋ ํ์๋ฆฌํ์ ํน์ง์ ๋ค์ธ๋ด ํ
ํ๋ฆฟ ํ์๋ฆฌํ ๊ฐ๋จํ ์์๋ณด๊ธฐ ํ์๋ฆฌํ ์ฌ์ฉ ์ ์ธ ์์ฑ ๋ณ๊ฒฝ - th:href ๋ทฐ ํ
ํ๋ฆฟ์ ๊ฑฐ์น๋ฉด th:href ์ ๊ฐ์ด href ๋ก ๋์ฒด๋๋ฉด์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ๋๋ถ๋ถ์ HTML ์์ฑ์ th:xxx ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ์ํ ๋ชฉ๋ก ํ์ด์ง ์ํ ๋ฑ๋ก ๋ฒํผ html ์ํ ๋ฑ๋ก ์์ฑ ๋ณ๊ฒฝ - th:onclick onclick="location.href='addForm.html'" th:onclick="|locati..
Spring/Spring MVC
์คํ๋ง(์๋ฒ)์์ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ ์ ์ ๋ฆฌ์์ค ์) ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ ์ธ HTML, css, js๋ฅผ ์ ๊ณตํ ๋๋, ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค. ๋ทฐ ํ
ํ๋ฆฟ ์ฌ์ฉ ์) ์น ๋ธ๋ผ์ฐ์ ์ ๋์ ์ธ HTML์ ์ ๊ณตํ ๋๋ ๋ทฐ ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋ค. HTTP ๋ฉ์์ง ์ฌ์ฉ HTTP API๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ์๋ HTML์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ฏ๋ก, HTTP ๋ฉ์์ง ๋ฐ๋์ JSON ๊ฐ์ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค์ด ๋ณด๋ธ๋ค. HTTP ์๋ต - ์ ์ ๋ฆฌ์์ค, ๋ทฐ ํ
ํ๋ฆฟ ์ ์ ๋ฆฌ์์ค ์คํ๋ง ๋ถํธ๋ ํด๋์คํจ์ค์ ๋ค์ ๋๋ ํ ๋ฆฌ์ ์๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ค. /static , /public , /resources , /META-INF/resources src/main/resources ๋ทฐ ํ
ํ๋ฆฟ ๋ทฐ ํ
ํ๋ฆฟ์ ๊ฑฐ์ณ์ HTML์ด ์..
Spring/Spring MVC
HTTP ์์ฒญ ๋ฉ์์ง - ๋จ์ ํ
์คํธ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋ค๋ฅด๊ฒ, HTTP ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ง์ ๋์ด์ค๋ ๊ฒฝ์ฐ๋ @RequestParam , @ModelAttribute ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. InputStream ServletInputStream inputStream = request.getInputStream(); String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); log.info("messageBody={}",messageBody); HTTP ๋ฉ์์ง ๋ฐ๋์ ๋ฐ์ดํฐ๋ฅผ InputStream ์ ์ฌ์ฉํด์ ์ง์ ์ฝ์ ์ ์๋ค. @PostMapping("/request-body-string-v2") pu..
Spring/Spring MVC
์์ฒญ ๋งคํ @RestController public class MappingController { @RequestMapping("/hello-basic") public String helloBasic() { return "OK"; } @RestController @Controller ๋ ๋ฐํ ๊ฐ์ด String ์ด๋ฉด ๋ทฐ ์ด๋ฆ์ผ๋ก ์ธ์๋๋ค. ๊ทธ๋์ ๋ทฐ๋ฅผ ์ฐพ๊ณ ๋ทฐ๊ฐ ๋๋๋ง ๋๋ค. @RestController ๋ ๋ฐํ ๊ฐ์ผ๋ก ๋ทฐ๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ, HTTP ๋ฉ์์ง ๋ฐ๋์ ๋ฐ๋ก ์
๋ ฅํ๋ค. ๋ฐ๋ผ์ ์คํ ๊ฒฐ๊ณผ๋ก ok ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ์ ์๋ค. @RequestMapping("/hello-basic") /hello-basic URL ํธ์ถ์ด ์ค๋ฉด ์ด ๋ฉ์๋๊ฐ ์คํ๋๋๋ก ๋งคํํ๋ค. @RequestMapping ์ metho..
Spring/Spring MVC
Welcome ํ์ด์ง ๋ง๋ค๊ธฐ ์คํ๋ง ๋ถํธ์ Jar ๋ฅผ ์ฌ์ฉํ๋ฉด /resources/static/ ์์น์ index.html ํ์ผ์ ๋๋ฉด Welcome ํ์ด์ง๋ก ์ฒ๋ฆฌํด์ค๋ค. ๋ก๊น
๊ฐ๋จํ ์์๋ณด๊ธฐ ๋ณ๋์ ๋ก๊น
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค. ์คํ๋ง ๋ถํธ ๋ก๊น
๋ผ์ด๋ธ๋ฌ๋ฆฌ( spring-boot-starter-logging ) ๋ก๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Logback, Log4J, Log4J2 ๋ฑ๋ฑ ์ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ, SLF4J๋ ์ธํฐํ์ด์ค์ด๊ณ , ๊ทธ ๊ตฌํ์ฒด๋ก Logback ๊ฐ์ ๋ก๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๋ฉด ๋๋ค. ๋ก๊ทธ ์ ์ธ private final Logger log = LoggerFactory.getLogger(getClass()); @Slf4j public class LogTestController ..
Spring/Spring MVC
์คํ๋ง MVC ๊ตฌ์กฐ @RequestMapping ์ ๋
ธํ
์ด์
์ ํ์ฉํ ๋งค์ฐ ์ ์ฐํ๊ณ , ์ค์ฉ์ ์ธ ์ปจํธ๋กค๋ฌ @RequestMapping ์ ๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ์ด๋ค. ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ @RequestMapping RequestMappingHandlerMapping RequestMappingHandlerAdapter @Controller public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process() { return new ModelAndView("new-form"); } } @Controller ์คํ๋ง์ด ์๋์ผ๋ก ์คํ..