스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 템플릿 메소드 패턴 로그 추적기 도입 전과 후의 코드를 비교해보자. 로그 추적기 도입 전 - V0 //OrderControllerV0 코드 @GetMapping("/v0/request") public String request(String itemId) { orderService.orderItem(itemId); return "ok"; } 로그 추적기 도입 후 - V3 //OrderControllerV3 코드 @GetMapping("/v3/request") public String request(String itemId) { TraceStatus status = null; tr..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 필드 동기화 앞서 로그 추적기를 만들어서 다음 로그를 출력할 때 트랜잭션ID와 level을 동기화 하는 문제를 해결하기 위해 TraceId를 파라미터로 넘겼다. TraceId를 파라미터로 넘기지 않기 위해 새로운 로그 추적기를 만들어보겠다. LogTrace 로그 추적기를 위한 최소한의 기능인 begin(), end(), exception()을 정의했다. public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus status,..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 로그 추적기 - V2 앞 Spring Advanced #1. 로그 추적기 (1) 에서 로그 추적기의 기능을 어느정도 개발했지만, 아직 메소드의 호출 깊이가 표현이 안되고, HTTP 요청이 구분이 안된다는 문제가 있다. 통틀어서 로그에 대한 문맥(Context) 정보가 필요하다. 로그 추적기 요구사항 모든 Public 메소드의 호출과 응답 정보를 로그로 출력 애플리케이션의 흐름을 변경하면 안됨 메소드 호출에 걸린 시간 정상 흐름과 예외 흐름, 예외 발생시 예외 정보가 남아야 한다. 메소드 호출 깊이 표현 HTTP 요청 구분 HTTP 요청 단위로 특정 ID를 남겨서 어떤 HTTP ..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 프로젝트 생성 2. 예제 프로젝트 - V0 상품을 주문하는 프로세스라고 가정하고, 일반적인 웹 애플리케이션에서 Controller -> Service -> Repository 로 이어지는 흐름을 단순하게 만들어보겠다. OrderRepositoryV0 @Repository 어노테이션 안에는 @Component 어노테이션이 내장되어 있기 때문에, 의존관계 주입을 위해 따로 어노테이션을 선언할 필요가 없다. @Service, @Controller 도 마찬가지이다. @Repository @RequiredArgsConstructor public class OrderRepositoryV0..
스프링 DB 2편 - 데이터 접근 활용 기술의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 스프링 AOP 주의 사항 - 초기화 시점 InitTest @PostConstruct 와 @Transactional 을 함께 사용하면 초기화 코드가 먼저 실행되고, 그 다음에 트랜잭션 AOP가 적용되기 때문에 초기화 시점에 아래 메소드에서는 트랜잭션이 적용되지 않는다. @PostConstruct @Transactional public void initV1() { boolean isActive = TransactionSynchronizationManager.isActualTransactionActive(); log.info("Hello init @PostConstr..
스프링 DB 2편 - 데이터 접근 활용 기술의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 스프링 트랜잭션 복습 Spring DB #4. 스프링과 문제 해결 - 트랜잭션 (1), Spring DB #4. 스프링과 문제 해결 - 트랜잭션 (2)에서 배웠던 내용들을 더 자세히 살펴보는 글 입니다. PlatformTransactionManager : 스프링이 제공하는 트랜잭션 추상화 인터페이스 TransactionTemplate : 템플릿 콜백 패턴을 지원하는 클래스. 정상적으로 동작하면 커밋을 해주고, 오류가 생기면 롤백을 시켜준다. @Transactional : 스프링이 제공하는 트랜잭션 AOP 어노테이션, 프록시를 사용해서 프록시가 트랜잭션을 대신 처..