SpringHomework2 - BBoyun/homework2 GitHub Wiki



            Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•œ ์ข…ํ•ฉ์ •๋ณด ์‹œ์Šคํ…œ ํ™ˆํŽ˜์ด์ง€ ๊ตฌํ˜„


๊ฐœ์š”

  1. ํ”„๋กœ๊ทธ๋žจ ์„ค๋ช…
  2. ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ ๋ฐ ๋™์ž‘ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์„ค๋ช…

1.ํ”„๋กœ๊ทธ๋žจ ์„ค๋ช…

์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ข…ํ•ฉ์ •๋ณด ์‹œ์Šคํ…œ์—์„œ ํ•™์  ์กฐํšŒ ๋ฐ ์ˆ˜๊ฐ•์‹ ์ฒญ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ,

๋‹ค์Œ 4๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

1.1 ํ•™๊ธฐ๋ณ„ ์ด์ˆ˜ ํ•™์  ์กฐํšŒ ๊ธฐ๋Šฅ : ํ•™๊ธฐ๋ณ„ ์ด์ˆ˜ํ•™์  ์กฐํšŒ์™€ ์ƒ์„ธ๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด ํ•™๊ธฐ๋ณ„ ์„ธ๋ถ€ ์ด์ˆ˜ ๊ณผ๋ชฉ์„ ๋ณด์—ฌ์ค€๋‹ค.

1.2 ์ด์ˆ˜ ๊ตฌ๋ถ„๋ณ„ ํ•™์  ์กฐํšŒ ๊ธฐ๋Šฅ : โ€œ๊ตํ•„โ€ ,โ€œํ•ต๊ตAโ€ ,โ€œํ•ต๊ตBโ€,"์ผ๊ต","์ž์œจ", โ€œ์ „์ง€โ€, โ€œ์ „์„ โ€, โ€œ์ „๊ธฐโ€ ๊ตฌ๋ถ„๋ณ„ ํ•™์  ์กฐํšŒ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

1.3 ์ˆ˜๊ฐ• ์‹ ์ฒญ ๊ธฐ๋Šฅ :2018 ํ•™๋…„๋„ 1ํ•™๊ธฐ ์ˆ˜๊ฐ• ์‹ ์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

1.4 ์ˆ˜๊ฐ• ์‹ ์ฒญ ์กฐํšŒ ๊ธฐ๋Šฅ : ์ˆ˜๊ฐ• ์‹ ์ฒญ ๋‚ด์—ญ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.


2. ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ ๋ฐ ๋™์ž‘ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์„ค๋ช…

2.1 ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†

Tomcat์— ์˜ํ•ด ์„œ๋ฒ„๊ฐ€ ์ž‘๋™ํ•˜๋ฉด ๋งจ์ฒ˜์Œ "home.jsp" ํŒŒ์ผ์ด ์‹คํ–‰๋˜์–ด ์ฒ˜์Œ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

๊ฐ ๋ชฉ๋ก๋ณ„๋กœ ${pageContext.request.contextPath}/url"๋กœ ์ง€์ •ํ•ด ๋†“์•˜๋‹ค.

  • ํ•™๊ธฐ๋ณ„ ์ด์ˆ˜ ํ•™์ ์กฐํšŒ : ${pageContext.request.contextPath}/semesterSearch

  • ๊ตฌ๋ถ„๋ณ„ ํ•™์  ์กฐํšŒ : ${pageContext.request.contextPath}/classificationSearch

  • ์ˆ˜๊ฐ• ์‹ ์ฒญํ•˜๊ธฐ : ${pageContext.request.contextPath}/enrollment

  • ์ˆ˜๊ฐ• ์‹ ์ฒญ ์กฐํšŒ : ${pageContext.request.contextPath}/enrollmentSearch


2.2 ์›นํŽ˜์ด์ง€ ์ธ์ฆ ์—ฌ๋ถ€ ์ฒดํฌ

์›นํŽ˜์ด์ง€์—์„œ 4๊ฐ€์ง€ ํ•ญ๋ชฉ ๋ชจ๋‘ ์ธ์ฆ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์ธ "ํ•™๊ธฐ๋ณ„ ์ด์ˆ˜ ํ•™์  ์กฐํšŒ"๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ์ธ ์ฐฝ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

์ž˜๋ชป๋œ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์˜€์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

์„œ๋ฒ„์— ์ธ์ฆ๋œ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ์ดˆ๊ธฐํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ , ํ•˜๋‹จ์— logout ๋ฒ„ํŠผ์ด ์ƒ๊ธด๋‹ค.

logout ๋ฒ„ํŠผ์— ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ–๋‹ค ๋Œ€๋ฉด ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋ณ€ํ•œ๋‹ค.

logout ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ •์ƒ์ ์œผ๋กœ logout์ด ๋œ๋‹ค.


2.3 ํ•™๊ธฐ๋ณ„ ์ด์ˆ˜ ํ•™์  ์กฐํšŒ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ
home.jsp์—์„œ Controller์˜ @RequestMapping("/semesterSearch") ๋ถ€๋ถ„์„ ์ฐพ์•„ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

์ด ๋ฉ”์†Œ๋“œ์—์„œ๋Š” courseService ๊ฐ์ฒด์— getCurrent()๋ฅผ ๋ถˆ๋Ÿฌ์„œ courses ๋ผ๋Š” Course ํƒ€์ž…์˜ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ ,

semesterSearch.jsp ํŒŒ์ผ์— courses ๋ผ๋Š” ์ด๋ฆ„๊ณผ courses ๋ฆฌ์ŠคํŠธ๋ฅผ model์— ๋‹ด์•„์„œ ๋ณด๋‚ด์ค€๋‹ค.

courseService ๊ฐ์ฒด๋Š” CourseServiceํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•œ๊ฒƒ์ด๋‹ค.

CourseController์—์„œ CourseService๋ฅผ ์ด์šฉํ•˜๊ณ  CourseService์—์„œ๋Š” CourseDAO๋ฅผ ์ด์šฉํ•˜์—ฌ,

DAO์—์„œ sqlStatement๋ฅผ ํ†ตํ•ด์„œ DataBase ์— ์ ‘๊ทผํ•˜๊ณ  ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋“ค์„ ์ตœ์ข…์ ์œผ๋กœ๋Š” Controller ๊ฐ€ ๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค.

Controller ์—์„œ๋Š” semesterSearch.jsp ํŒŒ์ผ๋กœ ์ด๋™๊ณผ ํ•จ๊ป˜ model ๊ฐ์ฒด์— Course ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ด์•„ ๊ฐ™์ด ๋ณด๋‚ด์ฃผ๊ณ ,

semesterSearch.jsp์—์„œ๋Š” ํ•™๋…„/ํ•™๊ธฐ๋ณ„๋กœ ์ด์ˆ˜ ์ดํ•™์ ์„ ๋ณด์—ฌ์ค€๋‹ค.

๋‹ค์Œ์€ semesterSearch.jsp์ฝ”๋“œ์˜ ์ผ๋ถ€์ด๋‹ค.

jstl์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋œ semesterSearch.jsp ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŽ˜์ด์ง€ ์ถœ๋ ฅ์ด ๋œ๋‹ค.

์œ„์˜ ํ…Œ์ด๋ธ”์—๋Š” ๋งํฌ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฐ ๋งํฌ๋ณ„๋กœ ${pageContext.request.contextPath}/url์„ ํ†ตํ•ด ์ƒ์„ธ๋ณด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

ex) 2013 ๋…„๋„ 1ํ•™๊ธฐ ๋งํฌ ํด๋ฆญ

์œ„์˜ ๋ฉ”์†Œ๋“œ๋Š” 2013 ๋…„ 1ํ•™๊ธฐ ๋งŒ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋กœ, courseService๋ฅผ ์ด์šฉํ•˜์—ฌ getDetail ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์˜€๋‹ค.

getDetail ๋ฉ”์†Œ๋“œ๋Š” ๋…„๋„์™€ ํ•™๊ธฐ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ courseDao ๊ฐ์ฒด์˜ getCoursesDetail ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

courseDao ๊ฐ์ฒด์˜ getCoursesDeatil ๋ฉ”์†Œ๋“œ๋„ ๋…„๋„์™€ ํ•™๊ธฐ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ DB์˜ ๋…„๋„์™€ ํ•™๊ธฐ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋Š” CourseDAO ํด๋ž˜์Šค์˜ getCoursesDetail ๋ฉ”์†Œ๋“œ ๋‚ด์šฉ์ด๋‹ค.

์ „๋‹ฌํ•ด ์ค„ ํƒ€์ž…์€ Integer.class ๋‚˜ String.class์ฒ˜๋Ÿผ spring์—์„œ ์ง€์ •๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ CourseMapper ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋‹ค์Œ์€ CourseMapper ํด๋ž˜์Šค์ด๋‹ค.

Course ๋นˆ ๊ฐ์ฒด์— DB์—์„œ ๊ฐ€์ ธ์˜จ ๋‚ด์šฉ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ฃผ๊ณ  Course ๊ฐ์ฒดํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋Š” detailView.jsp ํ™”๋ฉด์— ์ƒ์„ธ ๋‚ด์—ญ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

์•„๋ž˜๋Š” 2017๋…„ 2ํ•™๊ธฐ์˜ ๋งํฌ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ์Šต์ด๋‹ค.


2.3 ์ด์ˆ˜ ๊ตฌ๋ถ„๋ณ„ ํ•™์  ์กฐํšŒ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ

home.jsp์—์„œ Controller์˜ @RequestMapping("/classificationSearch")๋ถ€๋ถ„์„ ์ฐพ์•„ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์˜ ๋™์ž‘์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • sum(์ดํ•™์ )์„ ์„ ์–ธ
  • ๊ฐ ์ด์ˆ˜ ๊ตฌ๋ถ„ ๋ณ„ ํ•™์ ์„ courseService ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์™€ ๋”ํ•˜๋Š” ๋™์ž‘
  • credits ๋ผ๋Š” HashMap์„ ๋งŒ๋“ค์–ด ๊ฐ ์ด์ˆ˜ ๊ตฌ๋ถ„๋ณ„๋กœ ํ•™์ ์„ ๋”ํ•˜๋Š” ๋™์ž‘

๋™์ž‘ ์ˆ˜ํ–‰ ํ›„ model ๊ฐ์ฒด์— credits๋ฅผ credits ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ ํ•œ๋‹ค์Œ classificationSearch.jsp์— ์ „๋‹ฌํ•œ๋‹ค.

๋‹ค์Œ์€ courseService ๊ฐ์ฒด์˜ getCredits ๋ฉ”์†Œ๋“œ ์ด๋‹ค.

courseService ๊ฐ์ฒด๋Š” CourseDAO ํด๋ž˜์Šค์— getCreditbyClassification ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด DB์—์„œ ์•„๋ž˜์˜ sql ๋ฌธ์„ ํ†ตํ•ด ์ธ์ž๋กœ ๋ฐ›์€ classification ๋ณ„๋กœ ๋”ํ•ด์ฃผ๋Š” ๋™์ž‘์„ ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด classificationSearch.jsp ์—๋Š” ์ตœ์ข…์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค.


2.4 ์ˆ˜๊ฐ• ์‹ ์ฒญํ•˜๊ธฐ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ

home.jsp์—์„œ Controller์˜ @RequestMapping("/enrollment")๋ถ€๋ถ„์„ ์ฐพ์•„ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

enrollment ๋ฉ”์†Œ๋“œ์—์„œ๋Š” model ์— ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ €์žฅํ•˜๊ณ  enrollment.jsp ์— ๊ฐˆ ๋•Œ ๊ฐ™์ด model์„ ๋ณด๋‚ด์ค€๋‹ค.

  • ์œ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜๊ฐ•์‹ ์ฒญ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

  • ์ž˜๋ชป๋œ ํ˜•์‹์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ

  • ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ ํ•ญ๋ชฉ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ˆ˜๊ฐ•์‹ ์ฒญ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ž…๋ ฅํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด DB๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

๊ทธ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด, ์ˆ˜๊ฐ• ์‹ ์ฒญ์„ ๋ˆŒ๋ €์„ ๋•Œ action=โ€œ${pageContext.request.contextPath}/doenrollmentโ€(์•„๋ž˜ ํ™”๋ฉด)์„ ํ†ตํ•ด Controller ์˜ RequestMapping(โ€œ/doenrollmentโ€) ๋˜์žˆ๋Š” ๋ฉ”์†Œ๋“œ์˜ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๊ฒŒ ๋œ๋‹ค.

๊ทธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

courseService๊ฐ์ฒด์˜ insert๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ์—๋Š” insert, update, delete๊ฐ€ ์žˆ๋‹ค.

CourseDAO ํด๋ž˜์Šค์•ˆ์˜ insert ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ ํ•„๋“œ (year,semester,subjectCode,subject,classification,grade) ์˜ ๊ฐ’๋“ค์„ course๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€ ๋„ฃ์–ด์ฃผ๊ณ , ์ด ํ•„๋“œ๊ฐ’์„ DB ์— ๋ฐ˜์˜์‹œํ‚ค๋Š” ์ผ์„ ํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์‹ค์ œ๋กœ DB ์ƒ์— ๋ฐ˜์˜๋˜๋Š” ๋ชจ์Šต์„ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๊ธฐ์กด์— ์ž…๋ ฅํ•œ DB ๋‚ด์šฉ

  • DB์— ๋ฐ˜์˜๋œ ํ›„ ('์Šคํ”„๋งํ…Œ์ŠคํŠธ' ๊ณผ๋ชฉ ์ถ”๊ฐ€)

๋˜ํ•œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ƒ์— ์ œ๋Œ€๋กœ ๋ฐ˜์˜์ด ๋˜์—ˆ์„ ๋•Œ ์›น์ƒ์—์„œ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ ํ™”๋ฉด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ด๋ ‡๊ฒŒ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ์‹œ์ผœ์ฃผ๋Š” ๊ฒ€์ฆ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

Controller ์— @Valid annotation ์— ์˜ํ•ด form ๋ฐ์ดํ„ฐ ์•ˆ์— ๋‚ด์šฉ์ด ์ œ๋Œ€๋กœ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ ,

์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ BindingResult ๊ฐ์ฒด์˜ result ์— ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ( if(result.hasErrors()) ) ๋‹ค์‹œ ์ž…๋ ฅ ์ฐฝ์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ ,

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด DB์— ์ž…๋ ฅ์„ํ•˜๊ณ  ์ž…๋ ฅ์ด ์™„๋ฃŒ๋œ ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

๋งŒ์•ฝ form ๋ฐ์ดํ„ฐ ์•ˆ์— ๋‚ด์šฉ์ด ์ œ๋Œ€๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š์•„์„œ ๋‹ค์‹œ ์ž…๋ ฅ์ฐฝ์œผ๋กœ ๋Œ์•„๊ฐ”์„ ๋•Œ,

๊ธฐ์กด์˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž…๋ ฅํ–ˆ๋˜ ๋‚ด์šฉ๋“ค๋„ ์ „๋ถ€ ๋‹ค ์‚ฌ๋ผ์ ธ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Data Buffering ์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค.

Data Buffering์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” spring form์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%> ๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋ฐ›์•„์˜จ๋‹ค.

์œ„ ์‚ฌ์ง„ ๋งจ ์•„๋ž˜์ค„์„ ๋ณด๋ฉด <sf:errors cssClass="error" path="year"></sf:errors>์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ,

์ด๊ฒƒ์€ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ ๊ฐ๊ฐ์˜ ์ž…๋ ฅ์ฐฝ ์•„๋ž˜์— ๋ฌด์—‡์ด ์ž˜๋ชป ๋˜์—ˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  path=โ€œ์ด๋ฆ„โ€์„ ํ†ตํ•ด ์ด๋ฆ„์„ ๊ฐ–๋Š” ์†์„ฑ๊ฐ’์œผ๋กœ ๋ฐ”์ธ๋”ฉ์— ์‚ฌ์šฉ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •๋“ค์„ ํ†ตํ•ด Data Binding , Data Validation , Data Buffering ์ด ์ด๋ฃจ์–ด ์งˆ ์ˆ˜ ์žˆ๋‹ค.


2.5 ์ˆ˜๊ฐ• ์‹ ์ฒญ ์กฐํšŒ ๋ฉ”๋‰ด๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ

${pageContext.request.contextPath}/enrollmentSearch์— ์˜ํ•ด Controller์—

@RequestMapping(โ€œenrollmentSearchโ€) ์ธ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์œ„ ๋ฉ”์†Œ๋“œ์—์„œ๋Š” courseService ๊ฐ์ฒด์˜ getCurrent ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜จ Course๋ฐ์ดํ„ฐ๋ฅผ courses ๋ฆฌ์ŠคํŠธ ์•ˆ์— ๋„ฃ๊ณ 

enrollmentSearch.jsp ํŽ˜์ด์ง€๋กœ ๊ฐˆ ๋•Œ model ์— ๋„ฃ์–ด์ฃผ์–ด ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

CourseService ํด๋ž˜์Šค์˜ getCurrent ๋ฉ”์†Œ๋“œ์—์„œ๋Š” CourseDAO ํด๋ž˜์Šค์˜ getCourses() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ ์ด ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

getCurrent ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋“  ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

์ด๋Ÿฐ๊ณผ์ •์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ Controller์—์„œ model ์— ๋‹ด๊ณ  enrollmentSearch.jsp๋กœ ๊ฐ€๊ฒŒ ๋˜๋ฉด

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ ํ™”๋ฉด์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ