본문 바로가기

TIL

[Spring][SpringMVC][Controller][패키지구조]

728x90
  • API 엔드 포인트인 Controller의 구성 요소를 이해할 수 있다.

Controller 클래스는 SpringMVC에서 클라이언트 요청 최종 목적지이다.

 

애플리케이션을 제작하기 위해서 실질적으로 제일 먼저해야되는 일은 애플리케이션의 경계를 설정하는 것과 애플리케이션 기능 구현을 위한 요구사항을 수집하는 일이다

패키지 구조 생성

기능 기반 패키지 구조계층 기반 패키지 구조가 있다

기능 기반 패키지 구조(package-by-feature) : 애플리케이션의 패키지를 애플리케이션에서 구현해야 하는 기능을 기준으로 패키지를 구성하는 것이다. 이렇게 나누어진 패키지 안에는 하나의 기능을 완성하기 위한 계층별(API계층, 서비스 계층, 데이터 액세스 계층) 클래스들이 모여있다.

기능 기반 패키지 구조 예

회원을 관리하기 위한 회원 기능과 커피를 관리하기 위한 커피 기능을 각각 coffee와 member라는 패키지로 나누었으며 각각의 패키지 안에 레이어 별 클래스들이 존재한다

계층 기반 패키지 구조(package-by-layer) : 패키지를 하나의 계층(layer)으로 보고 클래스들을 계층별로 묶어서 관리하는 구조를 말한다.

계층 기반 패키지 구조 예

Controller, DTO패키지는 API계층에 해당되고 , model, service패키지는 비즈니스 계층에 해당되며 repository는 데이터 액세스 계층에 해당된다.

위 두 가지 패키지 구조는 애플리케이션의 요구사항이나 특성에 따라서 상황에 맞게 적절하게 사용하면 된다

다만 Spring Boot팀에서는 테스트와 리팩터링이 용이하고, 향후에 마이크로 서비스 시스템의 분리가 상대적으로 용이기능 기반 패키지 구조 사용을 권장하고 있다. 

 

Point

  • Spring Boot 애플리케이션으로서 동작하기 위한 엔트리 포인트에는 @SpringBootApplication을 추가한다.
  • main() 메서드 내에서 SpringApplication.run()을 호출하면 Spring Boot 기반의 애플리케이션으로 동작한다.
  • @RestController를 클래스에 추가함으로써 해당 클래스를 REST API의 리소스(자원, Resource)를 처리하기 위한 API 엔드포인트로 동작하게 해 준다.
  • @RequestMapping을 Controller 클래스 레벨에 추가하여 클래스 전체에 사용되는 공통 URL(Base URL)을 설정할 수 있다.
728x90

'TIL' 카테고리의 다른 글

[SpringFramework][Architecture]  (0) 2022.10.22
[SpringFramework][PSA]  (0) 2022.10.22
[Spring MVC] [Spring API계층]  (0) 2022.10.20
[SpringFramework][AOP]  (0) 2022.10.15
[SpringFramework][IoC/DI기초]  (0) 2022.10.15