diff --git a/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderControllerV2.java b/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderControllerV2.java new file mode 100644 index 00000000..898a403a --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderControllerV2.java @@ -0,0 +1,30 @@ +package com.example.advanced.app.v2; + +import com.example.advanced.trace.TraceStatus; +import com.example.advanced.trace.hellotrace.HelloTraceV2; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class OrderControllerV2 { + + private final OrderServiceV2 orderService; + private final HelloTraceV2 trace; + + @GetMapping("/v2/request") + public String request(String itemId) { + + TraceStatus status = null; + try { + status = trace.begin("OrderController.request()"); + orderService.orderItem(status.getTraceId(), itemId); + trace.end(status); + return "ok"; + } catch (Exception e) { + trace.exception(status, e); + throw e; + } + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderRepositoryV2.java b/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderRepositoryV2.java new file mode 100644 index 00000000..852abd9e --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderRepositoryV2.java @@ -0,0 +1,39 @@ +package com.example.advanced.app.v2; + +import com.example.advanced.trace.TraceId; +import com.example.advanced.trace.TraceStatus; +import com.example.advanced.trace.hellotrace.HelloTraceV2; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class OrderRepositoryV2 { + + private final HelloTraceV2 trace; + + public void save(TraceId traceId, String itemId) { + + TraceStatus status = null; + try { + status = trace.beginSync(traceId, "OrderRepository.save()"); + // 저장 로직 + if (itemId.equals("ex")) { + throw new IllegalStateException("예외 발생!"); + } + sleep(1000); + trace.end(status); + } catch (Exception e) { + trace.exception(status, e); + throw e; + } + } + + private void sleep(int millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderServiceV2.java b/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderServiceV2.java new file mode 100644 index 00000000..c9cff37e --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/app/v2/OrderServiceV2.java @@ -0,0 +1,27 @@ +package com.example.advanced.app.v2; + +import com.example.advanced.trace.TraceId; +import com.example.advanced.trace.TraceStatus; +import com.example.advanced.trace.hellotrace.HelloTraceV2; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class OrderServiceV2 { + + private final OrderRepositoryV2 orderRepository; + private final HelloTraceV2 trace; + + public void orderItem(TraceId traceId, String itemId) { + TraceStatus status = null; + try { + status = trace.beginSync(traceId, "OrderService.orderItem()"); + orderRepository.save(status.getTraceId(), itemId); + trace.end(status); + } catch (Exception e) { + trace.exception(status, e); + throw e; + } + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/trace/hellotrace/HelloTraceV2.java b/spring-core/advanced/src/main/java/com/example/advanced/trace/hellotrace/HelloTraceV2.java new file mode 100644 index 00000000..fed0e211 --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/trace/hellotrace/HelloTraceV2.java @@ -0,0 +1,60 @@ +package com.example.advanced.trace.hellotrace; + +import com.example.advanced.trace.TraceId; +import com.example.advanced.trace.TraceStatus; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class HelloTraceV2 { + + private static final String START_PREFIX = "-->"; + private static final String COMPLETE_PREFIX = "<--"; + private static final String EX_PREFIX = "