의존성은 lombok과 spring web두개만 추가했다.
간단한 예제부터 만들어보자.
리포지
package hello.advance.v0;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class OrderRepositoryV0 {
public void save(String itemId) throws InterruptedException {
// 저장 로직
if (itemId.equals("ex")) {
throw new IllegalStateException("예외 발생!");
}
sleep(1000); // 1초 대기
}
private void sleep(int millis) throws InterruptedException {
try{
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
서비스
package hello.advance.v0;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepositoryV0 orderRepositoryV0;
public void orderItem(String ItemId) throws InterruptedException {
orderRepositoryV0.save(ItemId);
}
}
컨트롤러
package hello.advance.v0;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class OrderControllerV0 {
private final OrderServiceV0 orderServiceV0;
@GetMapping("/v0/request")
public String request(String itemId) throws InterruptedException {
orderServiceV0.orderItem(itemId);
return "ok";
}
}
새로운 회사에 입사했다고 해보자. 수년간 운영중인 거대한 프로젝트에 투입되었음. 전체 소스는 수십만 라인이고 클래스도 수백개 있다. 이때 내게 처음 맡겨진 요구사항이 로그 추적기를 만든다고 해보자.
요구사항은 다음과 같다.