프로젝트 생성라이브러리 살펴보기 View 환경설정빌드하고 환경설정Java11버전IDE : Eclipse스프링 부트 스터디 사이트로 이동해서 스프링 프로젝트 생성https://start.spring.io프로젝트 선택 \- Project Gradle Proje
spring-boot-starter-web \- spring-boot-start-tomcat :톰캣 \- spring-webmvc: 스프링 웹 MVC spring-boot-starter-thymeleaf : 타임리프 엔진 (View)spring-boot-start
resources/static/index.html
이클립스 서버 멈춤으로 변경하고,터미널창에서 현재 작업하고있는 경로로 이동./gradlew buildcd build/libsjava -jar hello-spring-0.01-SNAPSHOP.jar실행확인정적 콘텐츠MVC의 템블릿 엔진API스프링 부트 정적 콘텐츠 기능h
@ResponseBody 중요!html에 나오는 body태그가 아니라 http에서 header, body가 있는데 body에 return(응답부분) 값(데이터)을 직접 넣어주겠다는 의미기존 템플릿과 차이점은 뷰가 없다. 데이터만 들어간다는 것!쿼리스트링에 내가 "안녕"
@GetMapping("/v0/request")뒤에 파라미터를 넣어어주면 ok라고 나온다./v0/request?itemId=2예외를 넣어준 부분을 보면 에러페이지가 나오고 콘솔창에 예외발생! 이라는 글자가 나온다.!/v0/request?itemId=ex
모든 PUBLIC 메서드의 호출과 응답 정보를 로그로 출력애플리케이션의 흐름을 변경하면 안됨 (로그를 남긴다고해서 비즈니스 로직의 동작에 영향을 주면 안됌)메서드 호출에서 걸린 시간정상흐름과 예외 흐름 구분 (예외발생시 예외정보가 남아야함)메서드 호출의 깊이 표현HTT
HelloTraceV1 trace : HelloTraceV1을 주입 받는다. 참고로 HelloTraceV1어노테이션을 가지고 있기 때문에 컴포넌트 스캔의 대상이 된다. 따라서 자동으로 스프링 빈으로 등록된다.trace.begin("OrderController.reque
트랜잭션
이제 로그추적기를 애플리케이션에 적용
앞서 로그추적기를 만들면서 로그를 출력할 때 트랜잭션ID 와 level을 동기화 하는 문제가 있었다.이 문제를 해결하기 위해 TraceId를 파라미터로 넘기도록 구현.이렇게 해서 동기화는 성공했지만, 로그를 출력하는 모든 메서드에 TraceId 파라미터를 추가해야하는
FieldLogTrace 스프링에 빈으로 등록해야 한다.
잘 만든 로그추적기를 실제 서비스에 배포했다 가정.테스트할 때는 문제가 없는 것 처럼 보인다. 사실 직전에 만든 Field
쓰레드 로컬은 해당 쓰레드만 접근할 수 있는 특별한 저장소.쉽게 말해서 물건보관창고를 떠올리자.!여러 사람이 같은 물건 보관창구를 사용하더라도 창구직원은 사용자를 인식해서 사용자별로 확실하게 물건을 구분한다.사용자A, 사용자B 모두 창구 직원을 통해서 물건을 보관하고,
FieldLogTrace 에서 발생했던 동시성 문제를 ThreadLocal로 해결해보자!TraceId traceIdHolder 필드를 쓰레드 로컬을 사용하도록 ThreadLocal traceIdHolder로 변경하면된다. 필드 대신에 쓰레드 로컬을 사용해서 데이터를 동