Replies: 1 comment 1 reply
|
고생하셨습니다! |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
섹션2. 예제 만들기
1️⃣ 프로젝트 생성
Project : Gradle - Groovy
Language : Java
Spring Boot : 3.4.3
Project Metadata
Dependencies
2️⃣ 예제 프로젝트 만들기 - V0
만들면서 학습 해볼 애플리케이션은 Controller → Service → Repository 순으로 만들어보자.
✅ OrderRepositoryV0
3️⃣ 로그 추적기 - 요구사항 분석
➡️ 상황
✅요구사항
모든 public 메서드의 호출과 응답 정보를 로그로 출력
애플리케이션의 흐름을 변경하면 안됨
메서드 호출에 걸린 시간
정상 흐름과 예외 흐름 구분
메서드 호출의 깊이 표현
HTTP 요청을 구분
정상 요청
OrderRepository.save() time=1004ms : 응답 시간 1초 정도
예외 발생
4️⃣ 로그 추적기 V1 - 프로토타입 개발
애플리케이션의 모든 로직에 직접 로그를 남겨도된다. 하지만 그것보다 효율적인 개발이 필요하다. 특히 트랜잭션 ID와 깊이를 표현하는 방법은 기존 정보를 이어 받아야 하기 때문에 단순히 로그만 남긴다고 해결할 수 있는 것은 아니다.
로그 추적기를 위한 기반 데이터를 가지고 있는
TraceId,TraceStatus클래스를 만들자.TraceId
createNextId
createPreviousId
TraceStatus
TraceStatus는 로그를 시작할 때의 상태 정보를 가지고 있다. 이 상태 정보는 로그를 종료할 때 사용된다.
TraceId : 내부에 트랜잭션 ID와 level을 가지고 있다.
startTimeMs : 로그 시작시간이다. 로그 종료시 이 시작 시간을 기준으로 시작~종료까지 전체 수행 시간을 구할 수 있다.
message : 시작시 사용한 메시지이다. 이후 로그 종료시에도 이 메시지를 사용해서 출력한다.
HelloTraceV1
공개 메서드
비공개 메서드
📝테스트 코드 작성
5️⃣ 로그 추적기 V1 - 적용
✅ 요구사항
모든 PUBLIC 메서드의 호출과 응답 정보를 로그로 출력애플리케이션의 흐름을 변경하면 안됨로그를 남긴다고 해서 비즈니스 로직의 동작에 영향을 주면 안됨메서드 호출에 걸린 시간정상 흐름과 예외 흐름 구분예외 발생시 예외 정보가 남아야 함메서드 호출의 깊이 표현
HTTP 요청을 구분
아직 구현 못한 것들은 위에 나와있듯이 메서드 호출의 깊이, HTTP 요청을 구분하는 일이다. 다음 장에서 구현을 해보자.
메서드 호출의 깊이가 왜알아야 할까?
6️⃣ 로그 추적기 V2 - 파라미터로 동기화 개발
✅ 테스트 코드
beginSync()를 호출할 때 직전 로그의 traceId정보를 넘겨주어야한다.
출력 결과(로그) - begin_end_level2
7️⃣ 로그 추적기 V2 - 적용
✅ V2 적용 하기
메서드 호출의 깊이 추가
HTTP 요청 구분 추가
처음 로그를 남기는 OrderController.request()에서 로그를 남길 때 어떤 깊이와 어떤 트랜잭션 ID를 사용했는지 다음 차례인 OrderService.orderItem()에서 로그를 남기는 시점에 알아야한다.
현재 로그의 상태 정보인 트랜잭션ID와 level이 다음으로 전달되어야 한다.
로그의 상태 정보는 TraceStatus.traceId에 담겨있다. 따라서 traceId를 컨트롤러에서 서비스를 호출할 때 넘겨주면 된다.
traceId를 넘기도록 V2 전체 코드를 수정하자.
OrderControllerV2 추가된 코드 및 설명
OrderServiceV2
OrderServiceV2 추가된 코드 및 설명
OrderRepositoryV2
OrderRepositoryV2 추가된 코드 및 설명
정상 로그 실행
✅ 요구사항
모든 PUBLIC 메서드의 호출과 응답 정보를 로그로 출력애플리케이션의 흐름을 변경하면 안됨로그를 남긴다고 해서 비즈니스 로직의 동작에 영향을 주면 안됨메서드 호출에 걸린 시간정상 흐름과 예외 흐름 구분예외 발생시 예외 정보가 남아야 함메서드 호출의 깊이 표현HTTP 요청을 구분HTTP 요청 단위로 특정 ID를 남겨서 어떤 HTTP 요청에서 시작된 것인지 명확하게 구분이 가능해야 함트랜잭션 ID (DB 트랜잭션X)🚨남은 문제
HTTP 요청을 구분하고 깊이를 표현하기 위해서
TraceId를 파라미터로 넘기는 것 말고 다른 대안은 없을까?All reactions