์ ์ฒด ๊ธ (135) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Advice ๋์ ์์ ์คํ๋ง์์๋ ๋ค์ฏ ๊ฐ์ง์ ๋์ ์์ ์ ์ ๊ณตํ๋ค. ์ด๋๋ฐ์ด์ค ๋ฉ์๋์ ๋์ ์์ ์ ์๋ฆฌ๋จผํธ ํ์์ ๊ฐ๊ฐ , , , , ์๋ฆฌ๋จผํธ๋ฅผ ์ด์ฉํ์ฌ ์ง์ ํ๋ค. 1. ํฌ์ธํธ์ปท์ผ๋ก ์ง์ ๋ ๋ฉ์๋ ํธ์ถ ์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ์ฒ๋ฆฌํ ๋ด์ฉ๋ค์ ๊ธฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. package com.springbook.biz.common; public class BeforeAdvice { public void beforeLog(){ System.out.println("[์ฌ์ ์ฒ๋ฆฌ] ๋น์ฆ๋์ค ๋ก์ง ์ํ ์ ๋์"); } } 2. ํฌ์ธํธ์ปท์ผ๋ก ์ง์ ๋ ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ณ ๋์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌํ ์ฒ๋ฆฌ ๋ก์ง์ ์ถ๊ฐํ ๋ ์ฌ์ฉํ ์ ์๋ค. package com.springbook.biz.common; public clas.. ํฌ์ธํธ์ปท ํํ์ 1) ๋ฆฌํดํ์ ์ง์ ๋ฆฌํดํ์ ์ง์ ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ '*'์บ๋ฆญํฐ๋ฅผ ์ด์ฉํ๋ค. ํํ์ ์ค๋ช * ๋ชจ๋ ๋ฆฌํดํ์ ํ์ฉ void ๋ฆฌํดํ์ ์ด void์ธ ๋ฉ์๋ ์ ํ !void ๋ฆฌํดํ์ ์ด void๊ฐ ์๋ ๋ฉ์๋ ์ ํ 2) ํจํค์ง ์ง์ ํจํค์ง ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ๋๋ '*', '..'์บ๋ฆญํฐ๋ฅผ ์ด์ฉํ๋ค. ํํ์ ์ค๋ช com.springbook.biz ์ ํํ๊ฒ com.springbook.biz ํจํค์ง๋ง ์ ํ com.springbook.biz.. com.springbook.biz ํจํค์ง๋ก ์์ํ๋ ๋ชจ๋ ํจํค์ง ์ ํ com.springbook..impl com.springbook ํจํค์ง๋ก ์์ํ๋ฉด์ ๋ง์ง๋ง ํจํค์ง ์ด๋ฆ์ด impl๋ก ๋๋๋ ํจํค์ง ์ ํ 3) ํด๋์ค ์ง์ ํด๋์ค ์ด๋ฆ์ ์ง์ ํ ๋๋ '*', '+' ์บ๋ฆญํฐ๋ฅผ ์ง.. AOP ์๋ฆฌ๋จผํธ : AOP ์ค์ ์ ๋ฃจํธ ์๋ฆฌ๋จผํธ. ํ์ ์๋ฆฌ๋จผํธ๋ก , ๊ฐ ์๋ค. : ํฌ์ธํธ์ปท์ ์ง์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์ฌ๋ฌ ๊ฐ ์ ์ํ ์ ์์ผ๋, ๊ฐ๊ฐ ์ ์ผํ ์์ด๋๋ฅผ ํ ๋นํด์ผ ํ๋ค. : ํต์ฌ ๊ด์ฌ์ ํด๋นํ๋ ํฌ์ธํธ์ปท ๋ฉ์๋์ ํก๋จ ๊ด์ฌ์ ํด๋นํ๋ ์ด๋๋ฐ์ด์ค ๋ฉ์๋๋ฅผ ๊ฒฐํฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. public class LogAdvice{ public void printLog(){ System.out.println("[๊ณตํต ๋ก๊ทธ] ๋น์ฆ๋์ค ๋ก์ง ์ํ ์ ๋์"); } } ์์ ์ฝ๋๋ฅผ ํด์ํ๋ฉด, getPointcut์ผ๋ก ์ค์ ํ ํฌ์ธํธ์ปท ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ log๋ผ๋ ์ด๋๋ฐ์ด์ค ๊ฐ์ฒด์ printLog()๊ฐ ์คํ๋๊ณ ์ด๋ printLog() ๋ฉ์๋ ๋์ ์์ ์ด ๋ผ๋ ๋ด์ฉ์ ์ค์ ์ด๋ค. : aspect์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋, Advi.. AOP ์ฉ์ด 1. Joinpoint ์กฐ์ธ ํฌ์ธํธ๋ ํด๋ผ์ด์ธํธ๊ฐ ํธ์ถํ๋ ๋ชจ๋ ๋น์ฆ๋์ค method๋ก์, BoardServiceImpl์ด๋ UserServiceImpl ํด๋์ค์ ๋ชจ๋ method๋ฅผ ์กฐ์ธํฌ์ธํธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. 2. Pointcut ํด๋ผ์ด์ธํธ๊ฐ ํธ์ถํ๋ ๋ชจ๋ ๋น์ฆ๋์ค method๊ฐ ์กฐ์ธํฌ์ธํธ๋ผ๋ฉด, ํฌ์ธํธ์ปท์ ํํฐ๋ง๋ ์กฐ์ธํฌ์ธํธ๋ฅผ ์๋ฏธํ๋ค. 3. Advice ํก๋จ ๊ด์ฌ์ ํด๋นํ๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ๋ ๋ฆฝ๋ ํด๋์ค์ method๋ก ์์ฑ๋๋ค. ์ด๋๋ฐ์ด์ค๋ก ๊ตฌํ๋ method๊ฐ ์ธ์ ๋์ํ ์ง ์คํ๋ง ์ค์ ํ์ผ์ ํตํด์ ์ง์ ํ ์ ์๋ค. ๋์ ์์ ์ 5๊ฐ์ง๋ก ์ง์ ํ ์ ์๋ค. before after after-returning after-throwing around 4. Weaving ํฌ์ธํธ์ปท์ผ๋ก ์ง.. AOP ์ค์ ํ๊ธฐ 1. pom.xml ์ค AOP ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ org.aspectj aspectjrt ${org.aspectj-version} org.aspectj aspectjweaver 1.8.8 2. applicationContext.xml์ aop ๋ค์์คํ์ด์ค ์ถ๊ฐ AOP๋? AOP: Aspect Oriented Programming; ๋น์ฆ๋์ค ์ปดํฌ๋ํธ ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ๋ ๊ฐ์ง ์์น์ ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์์ง๋๋ฅผ ์ ์งํ๋ ๊ฒ์ด๋ค. IoC๋ ๋ฎ์ ๊ฒฐํฉ๋์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด๊ณ , AOP๋ ์์ง๋์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด๋ค. AOP๋ ๋ถ๊ฐ์ ์ธ ๊ณตํต ์ฝ๋๋ค์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ์ฃผ๋ชฉํ๋ค. ์คํ๋ง์ AOP๋ ํด๋ผ์ด์ธํธ๊ฐ ํต์ฌ ๊ด์ฌ์ ํด๋นํ๋ ๋น์ฆ๋์ค ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, ํก๋จ ๊ด์ฌ์ ํด๋นํ๋ ๋ฉ์๋๋ฅผ ์ ์ ํ๊ฒ ์คํํ์ค๋ค. ์ด๋, ํต์ฌ ๊ด์ฌ ๋ฉ์๋์ ํก๋จ ๊ด์ฌ ๋ฉ์๋ ์ฌ์ด์์ ์์ค์์ ๊ฒฐํฉ์ ๋ฐ์ํ์ง ์๋๋ค. [์๋ฌ] "useSSL" ์ํฐํฐ์ ๋ํ ์ฐธ์กฐ๋ ';' ๊ตฌ๋ถ์๋ก ๋๋์ผ ํฉ๋๋ค. ์ด ์๋ฌ๋ฅผ ๊ณ ์น๋ ค๋ฉด & ๊ธฐํธ๋ฅผ &๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค. intelliJ๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด ๋ถ๋ช ๋นจ๊ฐ ์ค๋ก ์ค๋ฅ๋ฅผ ๋ํ๋ด์ฃผ๊ณ ์์ํ ๋ค. SpringApplication Spring Initializr๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฑ๋๋ Application ํด๋์ค @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ์ปค์คํฐ๋ง์ด์ง ํ๊ณ ์ถ๋ค๋ฉด ๋ก์ปฌ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. SpringApplication app = new SpringApplication(Application.class); @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication app.. ์คํ๋ง๋ถํธ, ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ JAR “๋ ๋ฆฝ์ ์ผ๋ก ์คํ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ”์ด ์คํ๋ง๋ถํธ์ ์ฃผ์ํ ๋ชฉ์ ์ค ํ๋์ด๋ค. org.springframework.boot spring-boot-maven-plugin pom.xml์ spring-boot-maven-plugin์ด ํด์ฃผ๋ ์ผ์ด ๋ฐ๋ก ํจํค์ง์ด๋ค. jar ์์ jar ํ์ผ๋ค์ ๊ทธ๋๋ก ๋ฌถ์ด๋ ์ ์๋๋ก ์ง์ํด์ ํ๋์ jar ํ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ํจํค์งํ ์ ์๋ค. ๋ชจ๋ mvn ๋ช ๋ น์ด๋ ํ๋ก์ ํธ์ ํ ๋๋ ํ ๋ฆฌ์์ ์คํํ๋ฉด ๋๋ค. ์๋๋ ๋ํ์ ์ผ๋ก ์ฐ์ด๋ ๋ช ๋ น์ด๋ค์ด๋ค. mvn clean mvn package ใ ก> ์คํ ๊ฐ๋ฅํ JAR ํ์ผ “ํ๋๊ฐ" ์์ฑ๋๋ค. mvn clean package ใ ก> ํ ๋ฒ์ ์คํํ ์๋ ์๋ค. mvn package -DskipTests ใ ก> test๋ ๊ฑด๋๋ด๋ค. jav.. ์คํ๋ง ๋ถํธ ํฌํธ ๋ฒํธ ๋ณ๊ฒฝ, ๋๋คํฌํธ, ํฌํธ ๋ฒํธ ํ์ธํ๊ธฐ ํฌํธ ๋ฒํธ ๋ณ๊ฒฝํ๊ธฐ server.port=7070 ๋๋ค ํฌํธ๋ก ๋ณ๊ฒฝํ๊ธฐ server.port=0 eventListener๋ก ํฌํธ ๋ฒํธ ํ์ธํ๊ธฐ ServletWebServerInitializedEvent๋ ์น์๋ฒ๊ฐ ์ด๊ธฐํ, ์์ฑ์ด ๋๋ฉด ํธ์ถ๋๋ eventListener์ด๋ค. ์๋ธ๋ฆฟ ์ ํ๋ฆฌ์ผ์ด์ ใ ก> ์น ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐ ๋๋ฌธ์ ์น ์๋ฒ๋ฅผ ์ ์ ์๋ค. package com.jueun.demo; import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; import org.springframework.boot.web.servlet.context.ServletWebServerInitializedEvent; i.. ์ด์ 1 ยทยทยท 6 7 8 9 10 11 12 ยทยทยท 14 ๋ค์