You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@responsebody : HTTP 메시지 컨버터를 사용해서 응답한다. 이 애노테이션은 인터페이스에 사용해도 된다.
@RequestParam(”itemId”) String itemId : 인터페이스는 @RequestParam(”itemId”)의 값을 생략하면 itemId 단어를 컴파일 이후 자바 버전에 따라 인식하지 못할 수 있다. 인터페이스에서는 꼭 넣어주자. 클래스에는 생략해도 대부분 잘 지원된다.
코드를 보면 request(), noLog() 두 가지 메서드가 있다. request()는 LogTrace를 적용할 대상이고, noLog()는 단순히 LogTrace를 적용하지 않을 대상이다.
@import(AppV1Config.class) : 클래스를 스프링 빈으로 등록한다. AppV1Config.class를 스프링 빈으로 등록한다. → 일반적으로 @configuration 같은 설정 파일을 등록할 때 사용하지만, 스프링 빈을 등록할 때도 사용할 수 있다.
@SpringBootApplication(scanBasePackages = "hello.proxy.app") : @componentscan의 기능과 같다. 컴포넌트 스캔을 시작할 위치를 지정한다. 이 값을 설정하면 해당 패키지와 그 하위 패키지를 컴포넌트 스캔한다. 이 값을 사용하지 않으면 ProxyApplication이 있는 패키지와 그 하위 패키지를 스캔한다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
섹션5. 프록시 패턴과 데코레이터 패턴
1️⃣ 프로젝트 생성
✅ 프로젝트 설정
2️⃣ 예제 프로젝트 만들기 V1
다양한 상황에서 프록시 사용법을 이해하기 위해 다음과 같은 기준으로 기본 예제 프로젝트를 생성하자
예제는 크게 3가지 상황으로 만든다.
실무에서는 스프링 빈으로 등록할 클래스는 인터페이스가 있는 경우도 있고 없는 경우도 있음
이런 다양한 케이스에 프록시를 어떻게 적용하는지 알아보자.
OrderRepositoryV1
OrderControllerV1
🗒️ 위 코드들 설명
@RequestMapping : 스프링 MVC는 타입에 @controller 또는 @RequestMapping 애노테이션이 있어야 스프링 컨트롤러로 인식한다. 스프링 컨트롤러는 인식해야 HTTP URL이 매핑되고 동작한다. 애노테이션은 인터페이스에 사용하기도 한다.
@responsebody : HTTP 메시지 컨버터를 사용해서 응답한다. 이 애노테이션은 인터페이스에 사용해도 된다.
@RequestParam(”itemId”) String itemId : 인터페이스는 @RequestParam(”itemId”)의 값을 생략하면 itemId 단어를 컴파일 이후 자바 버전에 따라 인식하지 못할 수 있다. 인터페이스에서는 꼭 넣어주자. 클래스에는 생략해도 대부분 잘 지원된다.
코드를 보면 request(), noLog() 두 가지 메서드가 있다. request()는 LogTrace를 적용할 대상이고, noLog()는 단순히 LogTrace를 적용하지 않을 대상이다.
OrderControllerV1Impl
🗒️ 위 코드 설명
ok3️⃣ 예제 프로젝트 만들기 V2
✅ v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록
이번에는 인터페이스가 없는 Controller, Service, Repository를 스프링 빈으로 수동 등록해보자.
OrderControllerV2
ok4️⃣ 예제 프로젝트 만들기 V3
🗒️ 위 코드 설명
5️⃣ 요구사항 추가
✅ 기존 요구사항
모든 PUBLIC 메서드의 호출과 응답 정보를 로그로 출력
애플리케이션의 흐름을 변경하면 안됨
메서드 호출에 걸린 시간
정상 흐름과 예외 흐름 구분
메서드 호출의 깊이 표현
HTTP 요청을 구분
예시
➡️ But!
✅ 요구사항 추가
가장 어려운 문제는 원본 코드를 전혀 수정하지 않고, 로그 추적기를 **도입**하는 것이다. 이 문제를 해결하려면 프록시(Proxy)의 개념을 먼저 이해해야 한다.
All reactions