๐ป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์๋ง ๊ด์ฌ์ ๋๊ณ ์์๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ์ฌ์ฉ์์ ์ํ๋ ์ ๋ฌด๋ฅผ ๋ถ์ํด์ ๊ทธ์ ๋ํ ๋ก์ง์ ๊ตฌํํด์๋ค๋ ์๋ฏธ์ด๋ค. ํ์ง๋ง ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ธ์๋ ๊ฐ๋ฐ์ ๋๋ ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๊ณผ ์ด์์ ์ํด ํ์๋กํ๋ ์ฝ๋๊ฐ ์๊ณ , ์ด๋ฌํ ์ฃผ ์ ๋ฌด ๋ก์ง ์ธ์ ์ฝ๋์๋ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์๋ค. => ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ฃผ ์ ๋ฌด(์ฌ์ฉ์์ ๊ด์ )์์ ๋ค๋ฅธ ๊ด์ (๋ก๊ทธ ์ฒ๋ฆฌ, ๋ณด์ ์ฒ๋ฆฌ, ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ)์ผ๋ก๋ ๋ด์ฉ์ด ํ์ฅ๋๋ค. ์ด๋ฐ ๋ก์ง๋ค์ ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ ๋ค์ ์์นํ๋ ๋ณด์กฐ .. ์ด์ 1 2 3 ๋ค์