본문 바로가기
반응형

Spring Framework33

[스프링 핵심 원리 - 고급편] 03. 템플릿 메서드 패턴과 콜백 패턴 템플릿 메서드 패턴 - 시작 지금까지 로그 추적기를 열심히 잘 만들었다. 요구사항도 만족하고, 파라미터를 넘기는 불편함을 제거하기 위해 쓰레드 로컬도 도입했다. 그런데 로그 추적기를 막상 프로젝트에 도입하려고 하니 개발자들의 반대의 목소리가 높다. 로그 추적기 도입 전과 도입 후의 코드를 비교해보자. 로그 추적기 도입 전 - V0 코드 // OrderControllerV0 코드 @GetMapping("/v0/request") public String request(String itemId) { orderService.orderItem(itemId); return "ok"; } // OrderServiceV0 코드 public void orderItem(String itemId) { orderReposit.. 2022. 7. 11.
[스프링 핵심 원리 - 고급편] 02. 쓰레드 로컬 - ThreadLocal 필드 동기화 - 개발 앞서 로그 추적기를 만들면서 다음 로그를 출력할 때 트랜잭션ID 와 level 을 동기화 하는 문제가 있었다. 이 문제를 해결하기 위해 TraceId 를 파라미터로 넘기도록 구현했다. 이렇게 해서 동기화는 성공했지만, 로그를 출력하는 모든 메서드에 TraceId 파라미터를 추가해야 하는 문제가 발생했다. TraceId 를 파라미터로 넘기지 않고 이 문제를 해결할 수 있는 방법은 없을까? 이런 문제를 해결할 목적으로 새로운 로그 추적기를 만들어보자. 이제 프로토타입 버전이 아닌 정식 버전으로 제대로 개발해보자. 향후 다양한 구현제로 변경할 수 있도록 LogTrace 인터페이스를 먼저 만들고, 구현해보자. LogTrace 인터페이스 package hello.advanced.trace.l.. 2022. 7. 11.
[스프링 핵심 원리 - 고급편] 01. 예제 만들기 build.gradle plugins { id 'org.springframework.boot' version '2.5.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compi.. 2022. 7. 11.
Controller에서 다양한 자료구조 파라미터 받기(HTML) 이번에 프로젝트를 진행하던 중 사용자 정보를 무한 인풋 (+버튼을 누르면 input이 무한정 생성)으로 해달라는 요구사항이 들어와서 헷갈렸던 경험이 있었다. 프로젝트를 마무리하고 정리할 겸 스프링에서 다양한 자료구조를 받을 수 있는 방법에 대하여 서술해 보자 ※HTML을 통해 Data를 받을 때 자바에선 다양한 Annotation이 쓰인다. 자바에서 쓰이는 Annotation의 정의는 따로 하지 않겠다. Map로 받는 경우 HTML Template Controller @Controller public class TestController { @GetMapping("index.do") public String index() { return "index.html"; } @PostMapping("test.do.. 2022. 3. 29.
반응형