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

๐Ÿ’ปStudy/Spring

(23)
๊ฐ์ฒด 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/' ๊ฒฝ๋กœ์—์„œ ์ฐพ์•„๋ณด๊ฒŒ ..
Spring MVC ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ… / Dispatcher Servlet / View Resolver tomcat 9.0.3, sts 4.9.0 ๋‹ค์šด๋กœ๋“œ sts ์‹คํ–‰ ํ›„ perspective Java EE๋กœ ์„ค์ • Java EE๊ฐ€ ์—†์„ ๋•Œ๋Š” Help > Install New Software > work with์— http://download.eclipse.org/releases/2020-12 > web,xml,java ee and OSGi Enterprise Develoment ์„ค์น˜ Create a Maven project - Create a simple project ์„ ํƒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ด๋ฆฌ๋ฉด pom.xml์— ๋นจ๊ฐ„์ค„์ด ๋œจ๋Š”๋ฐ, web.xml์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. src - main - webapp ์•ˆ์— ํ†ฐ์บฃ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ ROOT - WEB-INF(์•ˆ์— web.xml ํŒŒ์ผ ์žˆ์Œ)๋ฅผ ๋ณต์‚ฌํ•ด ์™€์„œ ๋ถ™์ธ๋‹ค. pom.x..
Spring MVC Spring MVC๋ž€ Front Controller Pattern์— ๊ธฐ์ดˆํ•œ ์›น MVC ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. MVC model2 ๋ฐฉ์‹(์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–ผ์–ด๋†“์€ ๋ฐฉ์‹)์˜ ๋ฐœ์ „ ํ˜•ํƒœ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Dispatcher๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ , ๋ฐ˜ํ™˜๊ฐ’์„ jsp์— ์ „๋‹ฌํ•˜๋Š” ์ค‘๊ฐ„ ๋งค๊ฐœ์ฒด ์—ญํ• ์„ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ด๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ›์€ ํ›„, ๊ทธ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. ๋””์ŠคํŒจ์ฒ˜๊ฐ€ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ์˜ ๊ธฐ๋ณธ ์ž…๋ ฅ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ String, ์ •์ˆ˜ํ˜• ๋“ฑ์œผ๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ view ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋ฉด Dispatcher๋Š” jsp๋ฅผ ํ˜ธ..
Spring์œผ๋กœ AOP ๊ตฌํ˜„ (Around Advice) ๋ณด์กฐ ์—…๋ฌด์˜ ์‚ฌ์šฉ์— ๋”ฐ๋ผ ์Šคํ”„๋ง์€ Before Advice, After returnning Advice, After throwing Advice, Around Advice ๋„ค ๊ฐ€์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์ˆœ์ˆ˜ ์ž๋ฐ”๋กœ๋งŒ AOP๋ฅผ ๊ตฌํ˜„ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ Around Advice๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. (unounou.tistory.com/48) Program.java public class Program { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring/aop/setting.xml"); Exam proxy = (Exam) context.getBe..
์ˆœ์ˆ˜ ์ž๋ฐ”๋กœ AOP ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ kor, eng, math, com ๋„ค ๊ณผ๋ชฉ์˜ ์ด์ ์„ ๊ณ„์‚ฐํ•ด ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ํ”„๋กœ๊ทธ๋žจ์ด ๋„ˆ๋ฌด ๋А๋ฆฌ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์„ ๋•Œ ๊ฐœ๋ฐœ์ž๋“ค์€ ์‹คํ–‰์— ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๊ณ , ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด ๊ณ„์‚ฐํ•˜๋Š” ์†Œ์Šค๋ฅผ ๋ผ์›Œ๋„ฃ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•„์š”์— ์˜ํ•ด ์‚ฝ์ž…ํ•œ ๋ถ€๋ถ„์ด๋‹ค. (=>๋ณด์กฐ ์—…๋ฌด) ** ์†Œ์Šค ๊ตฌ์„ฑ Exam์€ NewlecExam์˜ ์ธํ„ฐํŽ˜์ด์Šค Program.java public class Program { public static void main(String[] args) { Exam exam = new NewlecExam(1,1,1,1); System.out.printf("total is %d\n", exam.total(..
AOP(Aspect Oriented Programming)์˜ ๊ฐœ๋… ์Šคํ”„๋ง์„ ๊ณต๋ถ€ํ•  ๋•Œ DI์™€ ํ•จ๊ป˜ ํ•ญ์ƒ ๊ฑฐ๋ก ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ AOP์ด๋‹ค. AOP๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด AOP ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” Object Oriented Programming์—๋งŒ ๊ด€์‹ฌ์„ ๋‘๊ณ  ์žˆ์—ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์›ํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋ถ„์„ํ•ด์„œ ๊ทธ์— ๋Œ€ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์™”๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์™ธ์—๋„ ๊ฐœ๋ฐœ์ž ๋˜๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฐœ๋ฐœ๊ณผ ์šด์˜์„ ์œ„ํ•ด ํ•„์š”๋กœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ์ฃผ ์—…๋ฌด ๋กœ์ง ์™ธ์˜ ์ฝ”๋“œ์—๋„ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค. => ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฃผ ์—…๋ฌด(์‚ฌ์šฉ์ž์˜ ๊ด€์ )์—์„œ ๋‹ค๋ฅธ ๊ด€์ (๋กœ๊ทธ ์ฒ˜๋ฆฌ, ๋ณด์•ˆ ์ฒ˜๋ฆฌ, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋“ฑ)์œผ๋กœ๋„ ๋‚ด์šฉ์ด ํ™•์žฅ๋œ๋‹ค. ์ด๋Ÿฐ ๋กœ์ง๋“ค์€ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์•ž ๋’ค์— ์œ„์น˜ํ•˜๋Š” ๋ณด์กฐ ..