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.
강의 소개
우리는 기본편에서 스프링과 객체지향 개발의 기본기를 학습했음.
스프링을 더 잘 사용하기 위해선 세가지 핵심 원리를 알아야함.
스프링 내부 기술들은 몇가지 핵심 디자인 패턴으로 만들어져 있음
스프링을 깊이있게 이해하기 위해선 스프링이 자주 사용하는 디자인 패턴을 알아야함.
아래 패턴을 코드로 만들어보면서 학습해볼 예정
학습한 디자인 패턴을 애플리케이션에 적용하는 방법도 알아볼 예정.
동시성 문제와 쓰레드 로컬
웹 애플리케이션은 동시 여러 요청 처리를 위해 멀티 쓰레드를 사용하고,
이에 따라 동시성 문제가 발생할 수 있음.
발생할 수 있는 동시성 문제를 알아보고,
이를 해결할 수 있는 쓰레드 로컬에 대해 알아볼 예정.
스프링 AOP
실무에서 정말 많이 사용함.
스프링 AOP 의 기능 정리를 넘어
동작 원리를 파해치고 실무에서 사용법과 주의사항까지 알아볼 예정.
예제 프로젝트 만들기 -V0
상품 주문 프로세스,
컨트롤러 -> 서비스 -> 리포지토리 흐름을 단순하게
http://localhost:8080/v0/request?itemid=hello
이런식으로 요청하면 정상 반환하는것 확인 가능.
http://localhost:8080/request?itemid=ex
이렇게하면 에러 발생.
로그 추적기 - 요구사항 분석
회사 입사후 수년간 운영중인 거대 프로젝트에 투입됨.
소스코드 수십만 라인, 클래스도 수백개
프로젝트 중간에 병목이 생기고있음,
어디서 발생하는지 로그를 통해 확인하려함.
이런식의 로그를 작성하도록 하는게 목표.
요구사항
로그 추적기 V1 - 프로토타입 개발
모든 로직에 직접 로그를 남겨도 되긴하지만, 너무 비효율적임
특히 트랜잭션 ID 와 깊이를 표현하는 방법은 기존 정보를 받아야하기 때문에 단순히 로그를 남긴다고 해결할 수 있는것이 아님.
로그 추적기를 개발해볼건데, 처음엔 뭘 하는지 잘 모를것임.
일단 코드를 따라 치다가 나중에 테스트코드를 실행할때 보면 어떤건지 감이 잡힐 것임.
먼저 로그 추적기를 위한 기반 데이터를 가지고있는
TraceId,TraceStatus클래스를 만들어보자.로그 추적기는 트랜잭션 ID 와 깊이를 표현할 방법이 필요함.
여기서는 트랜잭션 ID 와 깊이를 표현하는 level 을 묶어 TraceId 를 만들었음.
Id 를 UUID 를 사용해 만들고, 로그정도에서 구분하는거니 앞에 8자리만 사용
깊이 증가를 표현하기 위해
createNextId()메서드 생성반대로 깊이 감소를 표현하기 위해
createPreviousId메서드 생성처음부터 이렇게 모든걸 다 설계해서 만들지 못한다!
개발 하다보면 만들어야 하는게 나올것임.
로그의 상태정보를 나타내는
TraceStatus로그 시작하면 끝이 있어야함.
시작 시간만 알면 각 스텝마다의 시간 계산이 가능하다.
traceId: 내부에 트랜잭션ID와 level을 가지고 있다.startTimeMs: 로그 시작시간이다. 로그 종료시 이 시작 시간을 기준으로 시작~종료까지 전체 수행 시간을 구할 수 있다.message: 시작시 사용한 메시지이다. 이후 로그 종료시에도 이 메시지를 사용해서 출력한다.TraceId, TraceStatus 사용해 실제 로그 생성하고, 처리하는 기능 개발해보자.
이를 사용해 실제 로그를 시작하고 종료할 수 있음.
그리고 로그를 출력하고 실행시간도 측정할 수 있음.
begin()TraceStatus를 반환end()exception()complete()addSpace()레벨에 따라 로그 메시지 만들어냄
-->|-->| |--><--|<--| |<--<X-|<X-| |<X-아직 모든 요구사항을 만족하진 못함. 로그를 시작하고 종료하는것만 만족.
이를 사용하는 테스트
참고: 이것은 온전한 테스트 코드가 아니다. 일반적으로 테스트라고 하면 자동으로 검증하는 과정이 필요하다. 이테스트는 검증하는 과정이 없고 결과를 콘솔로 직접 확인해야 한다. 이렇게 응답값이 없는 경우를 자동으로 검증하려면 여러가지 테스트 기법이 필요하다. 이번 강의에서는 예제를 최대한 단순화 하기 위해 검증 테스트를 생략했다.
이 코드에 앞으로 여러 기능을 넣을것이기 때문에 이 코드를 잘 이해해야 한다!!
All reactions