반응형 Spring Framework/Spring Framework Advanced13 [스프링 핵심 원리 - 고급편] 05. 동적 프록시 기술 리플렉션 지금까지 프록시를 사용해서 기존 코드를 변경하지 않고, 로그 추적기라는 부가 기능을 적용할 수 있었다. 그런데 문제는 대상 클래스 수 만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 점이다. 로그 추적을 위한 프록시 클래스들의 소스코드는 거의 같은 모양을 하고 있다. 자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있다. 쉽게 이야기해서 프록시 클래스를 지금처럼 계속 만들지 않아도 된다는 것이다. 프록시를 적용할 코드를 하나만 만들어두고 동적 프록시 기술을 사용해서 프록시 객체를 찍어내면 된다. 자세한 내용은 조금 뒤에 코드로 확인해보자. JDK 동적 프록시를 이해하기 위해서는 먼저 자바의 리플.. 2022. 7. 12. [스프링 핵심 원리 - 고급편] 04. 프록시 패턴과 데코레이터 패턴 예제 프로젝트 만들기 v1 다양한 상황에서 프록시 사용법을 이해하기 위해 다음과 같은 기준으로 기본 예제 프로젝트를 만들어보자. 예제는 크게 3가지 상황으로 만든다. v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록 v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록 v3 - 컴포넌트 스캔으로 스프링 빈 자동 등록 실무에서는 스프링 빈으로 등록할 클래스는 인터페이스가 있는 경우도 있고 없는 경우도 있다. 그리고 스프링 빈을 수동으로 직접 등록하는 경우도 있고, 컴포넌트 스캔으로 자동으로 등록하는 경우도 있다. 이런 다양한 케이스에 프록시를 어떻게 적용하는지 알아보기 위해 다양한 예제를 준비해보자. v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록 지금까지 보아왔던 .. 2022. 7. 11. [스프링 핵심 원리 - 고급편] 03. 템플릿 메서드 패턴과 콜백 패턴 템플릿 메서드 패턴 - 시작 지금까지 로그 추적기를 열심히 잘 만들었다. 요구사항도 만족하고, 파라미터를 넘기는 불편함을 제거하기 위해 쓰레드 로컬도 도입했다. 그런데 로그 추적기를 막상 프로젝트에 도입하려고 하니 개발자들의 반대의 목소리가 높다. 로그 추적기 도입 전과 도입 후의 코드를 비교해보자. 로그 추적기 도입 전 - V0 코드 // OrderControllerV0 코드 @GetMapping("/v0/request") public String request(String itemId) { orderService.orderItem(itemId); return "ok"; } // OrderServiceV0 코드 public void orderItem(String itemId) { orderReposit.. 2022. 7. 11. [스프링 핵심 원리 - 고급편] 02. 쓰레드 로컬 - ThreadLocal 필드 동기화 - 개발 앞서 로그 추적기를 만들면서 다음 로그를 출력할 때 트랜잭션ID 와 level 을 동기화 하는 문제가 있었다. 이 문제를 해결하기 위해 TraceId 를 파라미터로 넘기도록 구현했다. 이렇게 해서 동기화는 성공했지만, 로그를 출력하는 모든 메서드에 TraceId 파라미터를 추가해야 하는 문제가 발생했다. TraceId 를 파라미터로 넘기지 않고 이 문제를 해결할 수 있는 방법은 없을까? 이런 문제를 해결할 목적으로 새로운 로그 추적기를 만들어보자. 이제 프로토타입 버전이 아닌 정식 버전으로 제대로 개발해보자. 향후 다양한 구현제로 변경할 수 있도록 LogTrace 인터페이스를 먼저 만들고, 구현해보자. LogTrace 인터페이스 package hello.advanced.trace.l.. 2022. 7. 11. 이전 1 2 3 4 다음 반응형