[Spring] @Component, @Controller, @Service, @Repository의 차이

선ㅎㅣ·2024년 12월 16일
0

매일메일

목록 보기
2/3

Spring Framework에서 사용되는 @Component, @Controller, @Service, @Repository는 모두 스프링 컨테이너에서 관리되는 빈(Bean)으로 등록하기 위한 스테레오타입 애너테이션입니다. 각 애너테이션은 개발자의 의도를 나타내고, 해당 클래스의 역할에 따라 더 명확한 의미를 제공합니다.


1. @Component

  • 역할: 가장 기본적인 스테레오타입 애너테이션으로, 특정 역할이 정해지지 않은 일반적인 빈을 등록할 때 사용합니다.
  • 주요 특징:
    • 스프링이 클래스를 스캔하여 빈으로 등록합니다.
    • 다른 애너테이션들(@Controller, @Service, @Repository)은 @Component를 확장한 형태입니다.
  • 사용 예:
    • 특정 계층에 속하지 않는 유틸리티 클래스나 공통 기능을 가진 클래스.
    @Component
    public class UtilityService {
        public String process(String input) {
            return input.toUpperCase();
        }
    }

2. @Controller

  • 역할: MVC 패턴의 컨트롤러 역할을 하는 클래스에 사용됩니다.
  • 주요 특징:
    • HTTP 요청을 처리하고 클라이언트에 응답을 반환합니다.
    • @RequestMapping 또는 @GetMapping, @PostMapping 등의 애너테이션과 함께 사용하여 URL을 매핑합니다.
    • 데이터를 반환하거나 뷰를 렌더링하는 역할을 수행합니다.
  • 사용 예:
    • HTTP 요청을 처리하는 웹 계층.
    @Controller
    public class HomeController {
        @GetMapping("/home")
        public String home() {
            return "home"; // home.jsp 또는 home.html 렌더링
        }
    }

3. @Service

  • 역할: 비즈니스 로직을 처리하는 클래스에 사용됩니다.
  • 주요 특징:
    • 서비스 계층을 나타내며, 트랜잭션이나 로깅 등 비즈니스 로직을 구현하는 데 사용됩니다.
    • 명시적으로 비즈니스 로직을 처리하는 계층임을 표현하여 가독성과 유지보수를 용이하게 합니다.
  • 사용 예:
    • 데이터를 조합하거나, 복잡한 비즈니스 로직을 수행하는 클래스.
    @Service
    public class OrderService {
        public void processOrder(String orderId) {
            // 비즈니스 로직 처리
        }
    }

4. @Repository

  • 역할: 데이터 접근 계층(DAO) 클래스에 사용됩니다.
  • 주요 특징:
    • 데이터베이스와의 상호작용을 담당합니다.
    • 스프링에서 데이터 예외를 스프링 데이터 액세스 예외로 변환하는 역할을 수행합니다.
      • 예: SQLException → DataAccessException.
    • JPA, MyBatis 등 ORM 또는 데이터 액세스 프레임워크와 함께 사용됩니다.
  • 사용 예:
    • 데이터베이스 CRUD 작업을 담당하는 클래스.
    @Repository
    public class UserRepository {
        public User findById(Long id) {
            // 데이터베이스에서 사용자 조회
        }
    }

주요 차이점 정리

애너테이션역할계층추가 역할
@Component범용적인 빈으로 사용모든 계층빈 등록
@ControllerHTTP 요청/응답 처리웹 계층URL 매핑 및 뷰 반환
@Service비즈니스 로직 처리서비스 계층비즈니스 로직 표현, 가독성 향상
@Repository데이터베이스 접근데이터 계층데이터 액세스 예외 변환(DataAccessException)

추가 팁

  • 이 네 가지 애너테이션은 모두 컴포넌트 스캔에 의해 스프링 컨텍스트에 등록됩니다.
  • 스테레오타입 애너테이션을 적절히 사용하면 계층별 역할을 명확히 구분하고 코드의 가독성과 유지보수를 개선할 수 있습니다.

0개의 댓글