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

๐Ÿ’ปStudy

(40)
๋ฌธ์„œ ์ถœ๋ ฅ ๋ฐฉ๋ฒ• 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..
๊ฐ์ฒด DI๋ฅผ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค์ •์€ ํฌ๊ฒŒ xml ๋ฐฉ์‹, ์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ์ž๋ฐ” ํŒŒ์ผ์„ ์ด์šฉํ•œ ์„ค์ •์„ ํ•œ๋‹ค. servlet-context.xml //์ดํ•˜ ์ƒ๋žต ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฃผ์ž…ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ํ•„์š”์น˜ ์•Š์€ ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ์ด ์ƒํƒœ๋กœ ์‹คํ–‰ํ•˜๋ฉด ListController์—์„œ ๋„ ํฌ์ธํ„ฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์„ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ฃผ์ž…์ด ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. context namespace๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ํƒœ๊ทธ๊ฐ€ ์žˆ์–ด์•ผ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค๋Š” ์ธ์‹์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ListController.java public class ListController implements Controller{ @Autowired private NoticeService noticeSer..
๋ฐ์ดํ„ฐ ์„œ๋น„์Šค ํด๋ž˜์Šค ์ถ”๊ฐ€ / ์„œ๋น„์Šค ๊ฒฐํ•ฉ๋ ฅ ๋‚ฎ์ถ”๊ธฐ / DB ์—ฐ๊ฒฐ์ •๋ณด ๋ถ„๋ฆฌ / Spring ์„ค์ • ๋ถ„๋ฆฌ * ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค ํด๋ž˜์Šค(NoticeService) ์ค€๋น„ํ•˜๊ธฐ ๊ณต์ง€์‚ฌํ•ญ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฟŒ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด Notice.java(entity), NoticeService.java ํŒŒ์ผ์„ ์ค€๋น„ํ•˜์˜€๋‹ค. (www.newlecture.com ์ฐธ๊ณ ) NOTICE ํ…Œ์ด๋ธ” CREATE TABLE NOTICE ( ID NUMBER NOT NULL, TITLE NVARCHAR2(100) NOT NULL, WRITER_ID NVARCHAR2(50) NOT NULL, CONTENT CLOB, REGDATE TIMESTAMP (6) DEFAULT systimestamp NOT NULL, HIT NUMBER DEFAULT 0 NOT NULL, FILES NVARCHAR2(1000), PUB NUMBER(1,0) DEFAULT 0 NOT N..
์ •์  ํŒŒ์ผ ๋งคํ•‘ / Tiles์™€ TilesResolver * ์ •์  ํŒŒ์ผ ๋งคํ•‘ ์‹ค์Šต์„ ์œ„ํ•ด www.newlecture.com html ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„์„œ webapp ํด๋” ์•ˆ์— ๋„ฃ๋Š”๋‹ค. index.jsp ํŒŒ์ผ์„ ํผ๋ธ”๋ฆฌ์‹ฑ ๋œ index.html์˜ ๋‚ด์šฉ๋ฌผ๋กœ ๋ฐ”๊พผ ๋’ค ์‹คํ–‰ํ•˜๋ฉด ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ํ•ด๋‹น ๊ฒฝ๋กœ(webapp/images/logo.png)์— ํŒŒ์ผ์ด ์žˆ์Œ์—๋„ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ์ด์œ ๋Š”, ์Šคํ”„๋ง์ด ์ •์ ์ธ ํŒŒ์ผ(html, ์ด๋ฏธ์ง€ ๋“ฑ)์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋„๋ก ๋ง‰์•„๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. jsp ํŒŒ์ผ์€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€ ๋“ฑ์€ url์œผ๋กœ ์š”์ฒญํ–ˆ์„ ๋•Œ 404๊ฐ€ ๋œฌ๋‹ค. (localhost:8080/images/logo.png) ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •์  ํŒŒ์ผ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ '/images/**'์œผ๋กœ ์š”์ฒญํ–ˆ์„ ๋•Œ '/images/' ๊ฒฝ๋กœ์—์„œ ์ฐพ์•„๋ณด๊ฒŒ ..
[Maven] ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ค๋ฅ˜ / ์ธ๋ฑ์Šค / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์„ค์น˜ํ•˜๊ธฐ * ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ค๋ฅ˜ ๋ฌธ์ œ Java Resources > Libraries > Maven Dependencies ์•ˆ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘์—์„œ ํ•˜์œ„ ํ•ญ๋ชฉ์ด ์•ˆ ์—ด๋ฆฌ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๋‚ด์šฉ์ด ๊นจ์ง„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒฝ์šฐ, ์ดํด๋ฆฝ์Šค๋ฅผ ๋‹ซ๊ณ  C:\Users\๊ณ„์ •๋ช…\.m2\repository ์•ˆ์˜ ๋‚ด์šฉ์„ ์ง€์šด๋‹ค. ์ดํด๋ฆฝ์Šค๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ์ดํด๋ฆฝ์Šค ์šฐ์ธก ํ•˜๋‹จ์˜ ์ดˆ๋ก์ƒ‰ ๋ฐ”๊ฐ€ ์›€์ง์ด๋ฉด์„œ(Building workspace...) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋‹ค์šด๋ฐ›์•„์ง„๋‹ค. Java Resources ํด๋”์˜ ๋นจ๊ฐ„ ๋А๋‚Œํ‘œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค. * ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ์ดํด๋ฆฝ์Šค์—๋Š” Maven Repository๋ฅผ ์Šค์Šค๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. Show Views์—์„œ Maven..
[Maven] Maven์˜ ๊ฐœ๋… / Maven ์„ค์น˜ํ•˜๊ณ  IDE ์—†์ด Maven ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๊ธฐ / Build LifeCycle๊ณผ Phase * Maven์˜ ๊ฐœ๋… Maven์ด๋ž€ ๋นŒ๋“œ(build) ํˆด์˜ ์ผ์ข…์ด๋‹ค. ๋นŒ๋“œ๋ž€ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ JVM์ด๋‚˜ WAS๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ํŒจํ‚ค์ง• ํ•˜๋Š” ๊ณผ์ • ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๋งํ•œ๋‹ค. ๋ฉ”์ด๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ •, ์ฝ”๋“œ ์ž‘์—… ๋“ฑ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดํด๋ฆฝ์Šค์™€ ๊ฐ™์€ IDE์—์„œ๋„ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ IDE๋Š” ๋นŒ๋“œ ํˆด๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค. ๋นŒ๋“œ ํˆด์ด ๋นŒ๋“œ ๊ณผ์ •์—์„œ์˜ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ • ๋“ฑ์— ๊ด€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด IDE๋Š” ๋” ๋‹ค์–‘ํ•œ ๋ฒ”์œ„๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๋” ํฐ ๋‹จ์œ„์˜ ๋„๊ตฌ์ด๋‹ค. IDE๋Š” ํ˜•์ƒ๊ด€๋ฆฌ, ๋””๋ฒ„๊ฑฐ, ์ปดํŒŒ์ผ๋Ÿฌ, ํƒ์ƒ‰๊ธฐ, ์ฝ˜์†”, ํŽธ์ง‘๊ธฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค. Maven์€ ํŠน์ •ํ•œ IDE์— ์ข…์†๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์ดํด๋ฆฝ์Šค, Visual Studio Code, IntellijJ ๋“ฑ ์—ฌ๋Ÿฌ IDE..