스프링/스프링 핵심 원리 - 고급편

7. V2 적용

sdafdq 2024. 1. 14. 18:07

컨트롤러

@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;
    }
}

이제 다음으로 호출하는 메소드에, 서비스에 traceId를 넘겨준다.

 

 

서비스

public void orderItem(TraceId traceId, String itemId){
    TraceStatus status = null;
    try{
        status = trace.beginSync(traceId,"OrderService.orderItem()");

        orderRepository.save(status.getTraceId(),itemId);

        trace.end(status);
    } catch (Exception e){
        trace.exception(status, e);
        throw e;
    }
}

그럼 beginSync하면서 Id를 유지하며 level만 증가시킨다. 마찬가지로 리포지토리에 traceId를 넘긴다.

 

 

리포지토리

public void save(TraceId traceId, String itemId){
    TraceStatus status = null;
    try{
        status = trace.beginSync(traceId,"OrderRepository.save()"); // 현재 메소드 명

        if(itemId.equals("ex")){
            throw new IllegalStateException("예외 발생!!");
        }

        sleep(1000);

        trace.end(status);
    } catch (Exception e){
        trace.exception(status, e);
        throw e;
    }
}

 

 

 

 

 

traceId가 잘 유지되며 레벨도 예쁘게 찍힌다.

 

sleep, 저게 쓰레드를 슬립시키는 메소드를 따로 만들어 둔 건데,

그럼 1초 이내로 웹브라우저에서 새로고침하여 요청을 동시에 해 볼 것이다.

 

잘 구분 된다.

 

이제, ex가 나거나 혹은 time=에서 저 item=ㅁㅁㅁms의 ㅁㅁㅁ 부분만 정수로 바꿔 예를 들어 2000 이상이 걸린 것 들은 id를 가져와 필터링 하면 될 것 이다.

 

 

'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글

9. 필드 동기화  (0) 2024.01.14
8. V2 정리  (0) 2024.01.14
6. V2 파라미터로 동기화  (0) 2024.01.14
5. 로그 추적기 적용  (0) 2024.01.14
4. 로그추적기 V1 프로토타입  (0) 2024.01.05