웹심화 컨트롤러 서비스 레이어 분리

시스템 복잡도 증가에 따른 유지보수성 향상을 위해 컨트롤러(Controller)서비스(Service) 레이어를 분리하는 설계 방식을 정리했다.

계층별 책임 정의

역할에 따라 클래스를 분리하여 코드의 명확성을 확보한다.

1. Controller: 요청 제어

사용자 요청을 수신하고 응답 방식을 결정하는 인터페이스 역할을 수행한다.

@RestController
public class OrderController {
    private final OrderService orderService;

    @PostMapping("/order")
    public ResponseEntity<String> placeOrder(@RequestBody OrderRequest request) {
        // 요청 수신 후 서비스 호출 및 결과 응답
        orderService.processOrder(request);
        return ResponseEntity.ok("주문이 성공적으로 접수되었습니다.");
    }
}

2. Service: 비즈니스 로직 실행

핵심 로직(연산, 데이터 가공, 트랜잭션 관리 등)을 수행하는 처리 영역이다.

@Service
public class OrderService {
    private final InventoryRepository inventoryRepository;
    private final OrderRepository orderRepository;

    @Transactional
    public void processOrder(OrderRequest request) {
        // 재고 확인, 결제 처리, DB 저장 등 비즈니스 로직 수행
    }
}

레이어 분리의 이점

  • 책임 분리: 컨트롤러는 외부 통신에, 서비스는 내부 로직에 집중한다.
  • 재사용성: 서비스 로직은 다양한 클라이언트(웹, 모바일 등)에서 공통으로 사용할 수 있다.
  • 유지보수 효율: 로직 수정 시 컨트롤러에 미치는 영향을 최소화하며, 그 반대의 경우도 동일하다.

설계 원칙

레이어 분리는 변동성이 큰 외부 인터페이스(컨트롤러)와 핵심 가치인 비즈니스 로직(서비스)을 분리하는 과정이다.

이러한 구조는 프로젝트 규모 확장 시에도 시스템의 안정성을 유지하게 하는 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts