๐ปStudy/Spring (23) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ POST ์ ๋ ฅ - ํ์ผ ์ ๋ก๋ form ํ๊ทธ์์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ํน๋ณํ ์ง์ ํ์ง ์๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก POST ๋ฐฉ์์ผ๋ก "uid=newlec&name=dragon"์ฒ๋ผ &๋ก ๊ตฌ๋ถ๋ "ํค=๊ฐ"์ด ์ ์ก๋๋ค. url์ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ์คํธ๋ง๊ณผ ๊ฐ์ ํ์์ด๋ค. ๋ฌธ์์ด๋ง ๋ณด๋ผ ๋๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ณด๋ด๋ ๋์ง๋ง ๋ฐ์ด๋๋ฆฌ ๊ฐ์ ๋ณด๋ผ ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋ฌ๋ฆฌํด์ผ ํ๋ค. (=>multipart) multipart ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ ๊ทธ๋ฆผ์ฒ๋ผ ํํธ๋ฅผ ๋๋์ด์ ์ ์กํ๊ฒ ๋๋ค. (์ฒซ ๋ฒ์งธ ํํธ๋ uid, ๋ ๋ฒ์งธ ํํธ๋ name, ์ธ ๋ฒ์งธ ํํธ๋ file...) ํด๋ผ์ด์ธํธ์์ ๊ฐ์ ์ ์กํ ๋์ ๊ธฐ๋ณธ ๋ฐฉ์์ด application/x-www-form-urlencoded ์ด๋ผ์ multipart ๋ฐฉ์์ ์ค์ ํด์ผ ํ๋ ๊ฒ์ฒ๋ผ, ์๋ฒ์์๋ .. POST ์ ๋ ฅ (ํ ์คํธ๋ฐ์ค, ์ฝค๋ณด๋ฐ์ค, ์ฒดํฌ๋ฐ์ค, ๋ผ๋์ค๋ฒํผ) / ํํฐ๋ฅผ ์ด์ฉํ ํ๊ธ ์ธ์ฝ๋ฉ * admin์ ์ํ ์ปจํธ๋กค๋ฌ ์ถ๊ฐ ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ก์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐํ๋ค. NoticeController.java (com.newlecture.web.controller.admin.board) @Controller("adminNoticeController") @RequestMapping("/admin/board/notice/") public class NoticeController { @RequestMapping("list") public String list() { return ""; } @RequestMapping("reg") @ResponseBody //์ ๋ ฅ๊ฐ์ ์ฌ์ฉ์์๊ฒ ๋ค์ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ๊ธฐ ์ํด์ ์ฌ์ฉ public String reg() { return "reg"; } @Re.. ์ ๋ ฅ์ ์ข ๋ฅ / QueryString ์ ๋ ฅ ์ง๊ธ๊น์ง๋ ์คํ๋ง MVC๋ฅผ ์ด์ฉํ ๋งคํ, ์ถ๋ ฅ์ ์์๋ณด์๋ค. ์ด์ ๋ถํฐ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ๋ค. * QueryString ์ ๋ ฅ ์ปจํธ๋กค๋ฌ์์ ์ ๋ ฅ ๋๊ตฌ์ธ HttpServletRequest๋ฅผ ์ป์ด์์ getParameter ๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ ์๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ด์ ์ ์ฌ์ฉํ๋ ์๋ธ๋ฆฟ์์์ ๋ฐฉ๋ฒ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค. ์คํ๋ง์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์กฐ๊ธ ๋ ๋์ ๋ฐฉ๋ฒ ์ญ์ ์ ๊ณตํ๋ค. ์ ๋ ฅ ๋๊ตฌ๊ฐ ์๋ ์ ๋ ฅ ๊ฐ์ ์ป์ด์ค๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฌ์ฉ์๊ฐ "p=1" ์ด๋ผ๋ ์ต์ ์ผ๋ก ์์ฒญ์ ๋ณด๋์ ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์์ฒญ์ ๋ฐ์ ํด๋นํ๋ ์ปจํธ๋กค๋ฌ์๋ "1"์ด๋ผ๋ ๊ฐ์ ๋๊ฒจ์ฃผ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ปจํธ๋กค๋ฌ๋ "p"๋ผ๋ ๋ณ์๋ก ๊ฐ์ ์ป์ด์์ ์ฌ์ฉํ ์ ์๋ค. * HttpServletRequest ์ฌ์ฉ.. ๋ฐ์ดํฐ ํํ / JSON ์ถ๋ ฅํ๊ธฐ ์๋ฒ์์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ํด๋ผ์ด์ธํธ์์ ๊ทธ ๊ฐ์ฒด ๊ฐ์ ๋ฐ์ ์ ์๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋๋ฐ, ๊ฐ์ ๋ฐ๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๋ฐ๋ก ๋ฌธ์์ด๋ก ๋ฐ๋ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ ํํ๋ xml, csv, json ๋ฑ์ด ์๋ค. csv๋ ์ผํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ๊ตฌ๋ถํ๋ ๋ฐ์ดํฐ์ด๋ค. ์๋ฅผ ๋ค์ด ์๋ฒ์์ ๊ณต์ง์ฌํญ์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๊ณ ํ์ ๋๋ฅผ ๊ฐ์ ํด๋ณด์. csv ํ์ ์ ๊ตฌ๋ถ์๊ฐ ์ผํ ๋ฟ์ด๋ฏ๋ก ์ด๋ค ๊ฒ ์ ๋ชฉ์ด๊ณ ๋ด์ฉ์ธ์ง ๊ตฌ๋ถํ๊ธฐ๊ฐ ์ด๋ ต๋ค. csv์ ํ๊ณ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด xml์ด๋ค. xml์ ์ด์ฉํ๋ฉด ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ, ์ฆ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ฒฉํด์ ๋ ํฐ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ์ ์๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋น๋ํด์ง๊ณ ์ฑ๋ฅ์ด ์ ์ข๋ค๋ ๋จ์ ์ด ์๋ค. ์์ฆ์๋ csv์ xml์ ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ jso.. @RestController์ ํ๊ธ ์ถ๋ ฅ ์ค์ * @RestController ์ปจํธ๋กค๋ฌ ํ๋๋ฅผ ์๋ก ์์ฑํ๋ค. NoticeController.java package com.newlecture.web.controller.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; //RESTFULํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐํํ๋ ํด๋์ค @RestController("apiNoticeController") @RequestMapping("/api/notice/") public class NoticeController { @RequestMapping("list") public String list(.. ๋ฌธ์ ์ถ๋ ฅ ๋ฐฉ๋ฒ 4๊ฐ์ง, @ResponseBody ResourceViewResolver๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ, TilesViewResolver๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์์ ์ดํด ๋ณด์์ผ๋ ์ด๋ฒ ํฌ์คํ ์์๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ป์ด์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ๊ณผ @ResponseBody ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. * ์๋ธ๋ฆฟ ๊ฐ์ฒด(HttpServletResponse)๋ฅผ ์ด์ฉํ์ฌ ์ปจํธ๋กค๋ฌ์์ ์ง์ ๋ฌธ์์ด ์ถ๋ ฅํ๊ธฐ HttpServletResponse ๊ฐ์ฒด์ getWriter() ํจ์๋ฅผ ํตํด ๋ฌธ์๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. index ํจ์์์ void๋ฅผ ๋ฆฌํดํ๋๋ผ๋(๋ฆฌํด๊ฐ์ด ์์) ๋ฉ์๋ ์์์ ์ง์ ์ถ๋ ฅํ๋ฏ๋ก ์ ์์ ์ผ๋ก ์คํ ์ ํ๋ฉด์ ๋ฌธ์์ด์ด ํฌํจ๋ ๋ฌธ์๊ฐ ๋ฌ๋ค. HomeController.java @Controller @RequestMapping("/") public .. ์ปจํธ๋กค๋ฌ๋ฅผ ์ํ ์ด๋ ธํ ์ด์ ๊ฐ๋ ์ ๋ฆฌ xml์ผ๋ก ์ค์ ํ์ ๋๋ "/index"๋ผ๋ ์์ฒญ์ ๋ฐ์ผ๋ฉด xml์ ์ค์ ๋ url๊ณผ ์ปจํธ๋กค๋ฌ ํด๋์ค bean ์ ๋ณด๋๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ๋งคํ๋๋ค. Controller๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ๊ฐ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ handelRequest ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ์ฌ ๊ตฌํํ๊ณ ModelAndView ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค. ์ฌ์ฉ์์ ์์ฒญ("/index")์ ๋ฐ๋ผ ์ปจํธ๋กค๋ฌ๊ฐ ๋งคํ๋๊ธฐ ์ ์ ๊ฑฐ์ณ์ผ ํ๋ ๊ฒ์ด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(์๋ธ๋ฆฟ)์ด๋ค. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ MVC ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฌ์ฉ์์ ์์ฒญ๊ณผ ์ปจํธ๋กค๋ฌ ์ฌ์ด ์กฐ์จ์ ์ญํ ์ ํ๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ์ ๋ถ ๋ฐ์ ํ ์ ์ ํ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ ์ญํ ์ ํ๋ค. xml ๋ฐฉ์์ ์ด๋ ธํ ์ด์ ๋ฐฉ์์ผ๋ก ์์ ํ๋ฉด ๊ฐ๊ฐ์ ์ปจํธ๋กค๋ฌ๊ฐ Controller ์ธํฐํ์ด์ค๋ฅผ ์์ํ ํ์๊ฐ ์์ผ.. ์ด๋ ธํ ์ด์ ์ผ๋ก ์๋น์ค ๊ฐ์ฒด ์์ฑํ๊ธฐ(@Service) / ์ปจํธ๋กค๋ฌ ์ ๋ฆฌํ๊ธฐ (@Controller) ์ด์ ํฌ์คํ ์์๋ ์์ฑ๋ ๊ฐ์ฒด์ DI๋ง ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด, ์ด๋ฒ์๋ ๊ฐ์ฒด ์์ฑ๊น์ง ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฒ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ๋ค. service-context.xml ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค. base-package ์์ ์๋ ํด๋์ค ์ค์์ @๊ฐ ๋ถ์ ํ์ผ์ ์ฐพ์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋ฌ๋ผ๋ ํ๊ทธ์ด๋ค. ์ปดํฌ๋ํธ ์ค์บ์ ํ๊ฒ ๋๋ฉด ์์ฐํ ๊ทธ ์์์ @Autowired๊ฐ ๋ถ์ ๋ฉ์๋๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ ํ๊ทธ๋ ์ง์๋ ๋๋ค. ์ด๋ ธํ ์ด์ ์ปจํผ๊ทธ๋ณด๋ค ์์ ํ๊ทธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. JDBCNoticeService.java package com.newlecture.web.service.jdbc; //๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ IoC ์ปจํ ์ด๋์ ๋ด๋ ์ปดํฌ๋ํธ ์ด๋ ธํ ์ด์ //@Component //@Controller, @Service, @Rep.. ์ด์ 1 2 3 ๋ค์