일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- JSON
- 리눅스
- 설정
- 순서 보장
- 룸북
- 타임리프와 스프링
- js
- 자바스크립트 인라인
- cmd
- linux
- 개발시작전 자세
- 명령어
- 추천 사이트
- 프로젝트 클린
- 타임리프
- Test 룸북 사용하기
- 비밀번호 변경 명령어
- 다른사람 프로젝트 수정전 가져야할 자세
- 함수 인자값 id
- select
- Java
- #{..}
- 시퀀스 조회
- 스프링부트
- BindingResult
- it
- 하모니카 OS 5
- Intellij
- StringUtils.hasText
- 추천 프로그램
- Today
- Total
목록◆ SPRING BOOT/AOP (9)
웹개발 블로그
면접 질문으로 받았었던 AOP오늘은 다시 정리해서 올리려고 합니다. 핵심기능? 부가기능?업무로직을 포함하는 기능을 핵심기능(Core Concerns)이라 함.비즈니스 로직을 구현한 부분 ex) 책을 본다, 공부를 한다 핵심기능을 도와주는 부가적인 기능을 부가기능(Cross-cutting Concerns)이라 함. 로깅, 보안 등 시스템 전반에 산재되어 사용하는 기능ex) 눈을 뜬다, 눈을 감는다핵심기능에서 부가기능을 분리해서 모듈화하는 프로그래밍 기법 = AOP스프링 AOP스프링을 통해서 AspectJ를 사용하는건 어렵지만스프링 AOP를 사용하면 쉽게 사용 가능해진다. AOP 흐름Aspect(보안,인증, 로그 등 부가기능)부가기능(어드바이스)포인트컷(부가기능을 어디다 끼어놓을지, 위치정보) -- 특정 ..

PointCut조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능execution (포인트컷 지시자 중 하나)메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다. 형식 : execution(접근제어자? 반환타입 선언타입?메서드이름(파라미터) 예외?)메소드 실행 조인 포인트를 매칭한다.?는 생략할 수 있다.* 같은 패턴을 지정할 수 있다.예시1execution(public String hello.aop.member.MemberServiceImpl.hello(String)) 설명접근제어자 : public반환타입 : String선업타입 : hello.aop.member.MemberServiceImpl메서드이름 : hello파라미터 : (String)예외? : ..

스프링의 AOP를 처음 공부하거나 사용하면, AOP 적용 수 만큼 프록시가 생성된다고 착각하게 된다. > 스프링은 AOP를 적용할 때, 최적화를 진행해서 지금처럼 프록시는 하나만 만들고, 하나의 프록시에 여러 어드바이저를 적용한다. > 정리하면 하나의 target 에 여러 AOP가 동시에 적용되어도, 스프링의 AOP는 target 마다 하나의 프록시만 생성한다. client-> Proxy [ advisor1 , advisor2 ] -> target

어드바이스 종류@Around : 메서드 호출 전/후에 수행, 조인 포인트 실행 여부 선택, 반환 값 변환, 예외 변환 등이 가능 (가장 강력한 어드바이스)@Before : 조인 포인트 실행 이전에 실행@After Retuning : 조인 포인트가 정상 완료 후 수행@After Throwing : 메서드가 예외를 던지는 경우 수행@After : 조인 포인트가 정상 또는 예외에 관계없이 실행(finally) 예시package hello.aop.order.aop;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annot..

build.gradle 설정implementation 'org.springframework.boot:spring-boot-starter-aop' //직접 추가AOP부가기능(횡단관심사)을 보조하는 목적애스팩트- @Aspect- 어드바이스 + 포인트 컷 모듈화- 💥부가기능을 한 곳에서 관리하기 위해서 하나의 모듈로 만든것.어드바이스(부가기능)- @Around- @Before- @After...포인트 컷(적용할 위치)- @Around("값") 값"이 포인트컷 (포인트 컷 표현식을 확인해서 사용하자)어드바이저(하나의 어드바이저와 하나의 포인트컷)- 메소드명(){...}ex) doLog 메소드@Slf4j@Aspect //어드바이스 + 포인트컷을 모듈화 한 것public class AspectV1 { // aop..

✅핵심기능- Core Concerns- 업무 로직을 포함하는 기능✅부가기능 = 횡단 관심사(cross-cultting concerms)- 하나의 부가 기능이 여러 곳에 동일하게 사용된다는 뜻이다.✅부가기능 적용 문제를 정리하면 다음과 같다.1. 부가기능을 적용할 떄 아주 많은 반복이 필요하다.2. 부가 기능이 여러 곳에 퍼져서 중복 코드를 만들어낸다.3. 부가 기능을 변경할 떄 중복 때문에 많은 수정이 필요하다.4. 부가 기능의 적용 대상을 변경할 떄 많은 수정이 필요하다.OOP 방식으로는 해결이 어렵고 그래서 AOP 기능이 나온거다.AOP = 관점( 에스팩트를 사용한 프로그래밍 방식을 관점 지향 프로그래밍 AOP(Aspect-Oriented Programming)이라 함)AOP는 횡단 관심사를 도와주는..

설정위치dependencies{...} 안에다 작성 후에 코끼리 꾸욱~implementation 'org.springframework.boot:spring-boot-starter-aop' //aop 추가*코끼리 꾸욱! 설명 이 라이브러리르 추가하면 aspectweaver라는 aspectJ관련 라이브러리를 등록하고, 스프링부트가 AOP관련 클래스를 자동으로 스프링 빈에 등록한다. 스프링 부트가 없던 시절에는 @EnableAspectAutoProxy를 직접 사용해야하는데, 이 부분을 스프링 부트가 자동으로 처리해준다.스프링부트가 활성화하는 빈은 AopAutoConfiguration를 참고~!~!~
클라이언트 : 의뢰인, 서버에 필요한것을 요청 서버 : 서비스나 상품을 제공하는 사람 혹은 물건, 클라이언트의 요청 처리 @직접호출클라이언트 -----> 서버프록시 : 대리자 @간접호출클라이언트 ----> 프록시(대리자) ----> 서버=> 클라이언트의 요청한 결과를 서버에 직접 요청하는 것이 아닌 어떤 대리자를 통해서 대신 간접적으로 서버에 요청할 수 있다. 예) 직접 마트에서 장볼 수 있지만, 누군가에게 대신 부탁도 가능하잖아?@프록시 기능1. 접근제어- 권한에 따른 접근 차단- 캐시 : 한번 조회하면 변하지 않는 데이터라면 어딘가에 보관해두고 이미 조회한 데이터를 사용하는 것이 성능상좋다.- 지연로딩2. 부가기능 추가- 원래 서버가 제공하는 기능에 더해서 부가기능을 수행한다.ex) 요청 값 혹은 ..

클라이언트 : 서버에 필요한 것을 요청서버 : 클라이언트의 요청을 처리프록시 : 대리자, 간접호출 클라이언트 --------> 프록시 -----------> 서버 (간접호출) ※프록시는 대체 가능해야한다. 실제 서버처럼 동작할 수 있어야한다. 프록시를 통해서 할 수 있는 일은 크게 2가지로 구분할 수 있다.#접근 제어 - 권한에 따른 접근 차단 - 캐싱 - 지연 로딩 #부가 기능 추가 - 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다. - 예) 요청 값이나, 응답 값을 중간에 변형한다. - 예) 실행 시간을 측정해서 추가 로그를 남긴다. 프록시 객체가 중간에 있으면 크게 접근 제어와 부가 기능 추가를 수행할 수 있다.