스프링에서 사용하는 디자인 패턴들을 알아볼 것이다.
템플릿 메서드 패턴
전략 패턴
템플릿 콜백 패턴
프록시 패턴
데코레이션 패턴
팩토리 패턴? 도 배울 것 같다.
이번엔 템플릿 메서드 패턴.
기존의 코드 보면.
@GetMapping("/v2/request")
public String request(@RequestParam("itemId") String itemId){
TraceStatus status = null;
try{
status = trace.begin("OrderController.request()");
orderService.orderItem(status.getTraceId(),itemId);
trace.end(status);
return "ok";
} catch (Exception e){
trace.exception(status, e);
throw e;
}
}
이런 식으로 지저분 하다.
여기서 이 컨트롤러의 핵심 로직은, 저 orderService.orderItem 밖에 없다.
위 아래로 try catch를 비롯하여 미사여구가 잔뜩 붙어있다.
따지고 보면,
TraceStatus status = null;
try{
status = trace.begin("OrderService.orderItem()"); // 현재 메소드 명
//로직
trace.end(status);
} catch (Exception e){
trace.exception(status, e);
throw e;
}
이런 형태이다.
저 부분들은 고정된 것 이기 때문에,
우리는 현재 메소드 명과 로직만 넣어주면 된다.
저렇게 고정된 것에서 일정 부분만 바뀌는 것,
이 문제를 효과적으로 해결하기 위한 디자인 패턴이 바로 템플릿 메소드 패턴이다.
대략 아까 쓰레드 이용 했듯이,
저기 안에 인자로 로직을 넣는 것이 아닐까?
supplier도 있고.
'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글
19. 익명 클래스 (0) | 2024.01.15 |
---|---|
18. 템플릿 메서드 패턴 예제 (0) | 2024.01.14 |
16. 쓰레드로컬 주의사항 (0) | 2024.01.14 |
15. 쓰레드로컬 적용 (0) | 2024.01.14 |
14. 쓰레드로컬 예시 (0) | 2024.01.14 |