Replies: 1 comment
|
수고하셧습니다 ! |
0 replies
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.
프로젝트 생성
main 실행

예제 프로젝트 만들기 - V0
Repository
Service
또는 @requiredargsconstructor 가 없다면
Controller
정상출력
ex 입력시
로그추적기 - 요구사항 분석
요구사항
예시
참고
모니터링 툴을 도입하면 많은 부분이 해결되지만 지금은 학습이 목적
로그추적기 V1 - 프로토타입개발
애플리케이션의 모든 로직에 로그를 남겨도 됨
그것보다는 효율적인 방법이 필요함
깊이를 표현하는 방법을 기존 정보에 이어 받아야하기 때문에 단순히 로그만 남긴다고 해결할 수 있는건 아니다.
요구사항에 맞추어 애플리케이션에 효과적으로 로그를 남기기 위한 로그 추적기를 개발해보자
먼저 로그 추적기를 위한 기반 데이터를 가지고 있는 ‘TraceId’, ‘TraceStatus’ 클래스를 만들어 보자.
TraceId 클래스
로그 추적기는 트랜잭션 ID와 깊이를 표현하는 방법이 필요하다
여기서는 트랜잭션ID 와 깊이를 표현하는 level을 묶어서 ‘TraceId’라는 개념을 만들었다.
‘TraceId’는 단순히 ‘id’(트랜잭션ID)와 ‘level’정보를 함께 가지고 있다.
createNextId()
다음 TranceId 를 만든다. 예제 로그를 보면 깊이가 증가해도 트랜잭션 ID 는 같다. 대신에 깊이가 하나 증가한다
new TraceId(jd, level + 1)따라서
createNextId()를 사용해서 현재TraceId를 기반으로 다음TraceId를 만들면 ‘id’는 기존과 같고 ‘level은 하나 증가한다.createPreviousId()
createNextId()의 반대 역할을 한다.id는 기존과 같고,level은 하나 감소한다.isFirstLevel()
첫번째 레벨 여부를 편리하게 확인할 수 있는 메서드
TraceStatus클래스
로그의 상태 정보를 만드는것
로그를 시작하면 끝이 있어야 한다.

TraceStatus는 로그를 시작할때의 상태 정보를 가지고 있다. 이 상태 정보는 로그를 종료할때 사용된다.traceId: 내부에 트랜잭션 ID와 level을 가지고 있다.startTimeMs: 로그 시작 시간이다. 로그 종료시 이 시작 시간을 기준으로 시작~종료까지 전체 수행 구간을 구할 수 있다.message: 시작시 사용한 메세지이다. 이후 로그 종료시에도 이 메세지를 사용해서 출력한다.TraceId,TraceStatus를 사용해서 실제 로그를 생성하고 처리하는 기능을 개발해보자.HelloTraceV1을 사용해서 실제 로그를 시작하고 종료할 수 있다. 그리고 로그를 출력하고 실행시간도 측정할 수 있다.@Component: 싱글톤으로 사용하기 위해 스프링 빈으로 등록한다. 컴포넌트 스캔의 대상이 된다.공개 메서드
로그 추적기에서 사용되는 공개 메서드는 다음 3가지이다.
하나씩 알아보자
TraceStatus begin(String message)TraceStatus를 반환한다.void end(TraceStatus status)TraceStatus)를 전달받는다. 이 값을 활용해서 실행시간을 계산하고 종료시에도 시작할때와 동일한 로그 메시지를 출력할 수 있다.void exception(TraceStatus status, Exception e)TraceStatus,Exception정보를 함께 전달받아서 실행시간, 예외정보를 포함한 결과 로그를 출력한다.비공개 메서드
complete(TraceStatus status, Exception e)String addSpace(String prefix, int level): 다음과 같은 결과를 출력한다.prefix :
-->prefix: ‘←-’
prefix: ‘<X—’
참고로
HelloTraceV1는 아직 모든 요구사항을 만족하지는 못한다. 이후에 기능을 하나씩 추가할 예정이다.테스트 작성
이제 다음시간에 실제 애플리케이션에 적용해볼 것임
All reactions