๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป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..