본문 바로가기

Spring74

스프링 코어2 - 템플릿 콜백 패턴 이전에 전략 패턴을 학습하면서 봤던 ContextV2 는 변하지 않는 템플릿 역할을 한다. 그리고 변하는 부분은 파라미터로 넘어온 Strategy 의 코드를 실행해서 처리한다. 이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback)이라 한다. ( 즉 ContextV2의 excute메서드의 인자로 넘어가는 Strategy가 콜백이다. ) 콜백 프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. (위키백과 참고) ( callback 은 코드가 호출( call )은 되는데 코드를.. 2022. 1. 5.
스프링 코어2 -전략 패턴 템플릿 메서드 패턴의 단점 템플릿 메서드 패턴은 추상적인 템플릿(AbstractClass)과 그것을 상속한 SubClass간의 강한 결합이 필요로 하다. 이미 상속한다는 데서 강한 결합력을 가지게 된다. AbstractClass의 코드가 수정된다면 SubClass의 코드도 영향을 받기 때문이다. 하지만 전략 패턴은 상속보다 위임을 사용하기 때문에 두 클래스 간의 결합도가 낮아진다. 전략 패턴은 Context(변하지 않는 부분. 즉 로그 추적기) 클래스가 Strategy 타입 인터페이스를 필드에 들고 있고, 구현체인 Strategy객체를 외부에서 주입받는다. 그림으로 보면 아래와 같다. 전략 패턴을 간단히 구현해보고 이를 테스트 해보자 먼저 Context인 변하지 않는 부분은 비즈니스 로직의 수행되는 시간.. 2022. 1. 5.
스프링 코어2 - 템플릿 메서드 패턴(로그 추적기에 패턴 도입) 이전에 ThreadLocal을 사용하여 로그 추적기를 개발하였다. 하지만 로그 추적기를 도입한 코드와 도입하지 않은 코드를 보면 각 서비스 계층(controller, service, repository)에 로그 추적을 위한 코드가 삽입되어 SRP를 위반하는 코드이고, 보기에도 매우 지저분한 냄세가 나는 코드가 되었다. 로그 추적기 도입 전의 OrderController import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor @Res.. 2022. 1. 4.
스프링 코어2 - 로그추적기(feat.Thread Local) Thread Local 이전의 악취나는 로그 추적기 코드를 수정해보자. 먼저 새로운 HelloTrace인 FieldLogTrace를 만든다. FieldLogTrace는 이전과 거의 다 같고, 파라미터 대신 참조를 통해 traceId와 level의 정보를 알 수 있도록 했다. 하여 몇몇 메소드가 추가된다. FieldLogTrace import hello.advanced.app.trace.TraceId; import hello.advanced.app.trace.TraceStatus; import lombok.extern.slf4j.Slf4j; @Slf4j public class FieldLogTrace implements LogTrace{ private static final String START_PREF.. 2022. 1. 2.