목록BE (354)
오봉이와 함께하는 개발 블로그
필드 동기화 - 개발 이전 예제에서 다음 로그 출력을 위해 TraceId를 파라미터로 넘기도록 구현했다. 동기화는 성공했지만, 모든 메서드에 파라미터를 추가해야 하는 문제가 발생 위 문제 해결 방법을 찾아보자. LogTrace 인터페이스 먼저 프로토타입이 아닌 정식 버전으로 하기 때문에 인터페이스부터 생성해서 다양한 구현체에 대응할 수 있도록 해보자. public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus status, Exception e); } 로그 추적기를 위한 최소한의 기능 begin(), end(), exception()만 추가했다. Fi..
로그 추적기 V2 - 적용 기존 V1을 복사하여 V2로 변경 의존관계를 모두 변경해야함. 메서드 호출의 깊이와 HTTP 요청을 구분하려면 처음 남기는 Controlle에서 로그를 남길 때 어떤 깊이와 트랜잭션ID를 사용했는지 다음 차례인 Service에서 알아야 한다. 즉, 현재 정보를 다음 메서드로 전달 시켜야 하는 것 이 정보는 TraceStatus.traceId에 담겨 있기 때문에 traceId를 Controller에서 Service를 호출할 때 넘겨주면 된다. 코드 @RestController @RequiredArgsConstructor public class OrderControllerV2 { private final OrderServiceV2 orderService; private final ..
로그 추적기 V2 - 파라미터로 동기화 개발 트랜잭션 ID와 메서드 호출의 깊이를 표현하는 가장 단순한 방법은 첫 로그에서 사용한 ID와 level을 다음 로그에 넘겨주는 것이다. 현재 로그 상태 정보인 ID와 level은 TraceId에 있다. 따라서 TraceId를 다음 로그로 넘기면 된다. HelloTraceV2 @Slf4j @Component public class HelloTraceV2 { private static final String START_PREFIX = "--->"; private static final String COMPLETE_PREFIX = "
로그 추적기 V1 - 적용 OrderControllerV1 @RestController @RequiredArgsConstructor public class OrderControllerV1 { private final OrderServiceV1 orderService; private final HelloTraceV1 trace; @GetMapping("/v1/request") public String request(@RequestParam("itemId") String itemId) { TraceStatus status = null; try { status = trace.begin("OrderController.request()"); orderService.orderItem(itemId); trace.en..
로그 추적기 - 요구사항 분석 애플리케이션이 커지면 모니터링과 운영이 중요해진다. 병목이 발생하면 어디서 발생하는지 로그를 통해 확인하는 것이 매우 중요하다. 요구사항 모든 Public 메서드의 호출과 응답을 로그로 출력 애플리케이션의 흐름을 방해햐면 안됨 로그를 남긴다고 해서 비즈니스 로직 동작에 영향을 주면 안된다. 기능 메서드 호출에 걸린 시간 정상 흐름과 예외 흐름 구분 예외 발생 시 예외 정보가 남아야 함 메서드 호출의 깊이 표현 HTTP 요청을 구분 HTTP 요청 단위로 특정 ID를 남겨서 어떤 HTTP 요청에서 시작된 것인지 명확하게 구분 가능해야 함 트랜잭션 ID (DB 트랜잭션이 아님)를 통해 구분한다. HTTP 요청이 시작해서 끝날 때 까지 하나의 트랜잭션 예시 정상 요청 [796bcc..