@Component, @Controller, @Service, @Repository의 차이에 대해서 설명해주세요.

2024. 12. 7. 17:05·백엔드 면접

이 애노테이션들은 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용합니다. 각 애노테이션은 클래스가 어떤 역할을 하는지를 명시적으로 나타내며, Spring의 @ComponentScan 기능을 통해 자동으로 Bean으로 등록됩니다. @Controller, @Service, @Repository 애노테이션은 내부적으로 @Component 애노테이션을 포함하고 있습니다.

 

@Component 애노테이션은 가장 일반적인 형태의 빈 등록 애노테이션으로, 특정 역할에 종속되지 않는 일반적인 Spring Bean을 나타냅니다. 공통 기능을 제공하는 유틸리티 클래스나 특정 계층에 속하지 않는 일반적인 컴포넌트를 정의할 때 사용됩니다.

 

@Service 애노테이션은 비즈니스 로직을 수행하는 클래스에 사용됩니다. 다른 애노테이션과 비교하여 특별한 처리를 해주는 애노테이션은 아니고, 핵심 비즈니스 계층을 인식하는 데 도움을 줄 수 있습니다.

 

@Controller 애노테이션은 Spring MVC에서 웹 요청을 처리하는 컨트롤러 클래스에 사용되며 프레젠테이션 레이어의 Bean을 나타냅니다.

 

@Repository 애노테이션은 데이터베이스와의 상호작용을 수행하는 클래스에 사용되며, 데이터 액세스 레이어의 Bean을 나타냅니다.

 


 

@Controller, @Repository 대신 @Component를 사용하면 안되나요?

 

Spring 6(Spring Boot 3) 이전 버전에서는 @Component + @RequestMapping 으로도 Spring Bean 및 핸들러로 등록되었습니다. 하지만 Spring 6 이후부터 @Controller 외에는 핸들러로 등록하지 않아 웹 요청을 정상적으로 수행할 수 없습니다.

 

public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping
		implements MatchableHandlerMapping, EmbeddedValueResolverAware {
    ...
    @Override
    protected boolean isHandler(Class<?> beanType) {
        return AnnotatedElementUtils.hasAnnotation(beanType, Controller.class); // 컨트롤러 애너테이션인지 확인
    }
    ...
}

 

@Repository 애노테이션은 데이터 계층의 예외를 스프링 예외로 변환해주는 기능을 가지고 있습니다. @Componenet를 사용할 경우 특정 데이터 접근 기술에 종속되어 유지보수 비용이 높은 코드를 작성하게 되는 문제가 발생합니다.

'백엔드 면접' 카테고리의 다른 글

TCP 3-way handshake에 대해서 설명해 주세요.  (0) 2024.12.10
동기 방식으로 외부 서비스(API)를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요?  (0) 2024.12.09
동일성과 동등성에 대해서 설명해 주세요.  (0) 2024.12.06
equals와 hashCode는 왜 함께 재정의해야 할까요?  (0) 2024.12.05
JPA ID 생성 전략에 대해 설명해 주세요.  (0) 2024.12.05
'백엔드 면접' 카테고리의 다른 글
  • TCP 3-way handshake에 대해서 설명해 주세요.
  • 동기 방식으로 외부 서비스(API)를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요?
  • 동일성과 동등성에 대해서 설명해 주세요.
  • equals와 hashCode는 왜 함께 재정의해야 할까요?
이런개발
이런개발
geun-00의 흔적 보관소
  • 이런개발
    내일이 기대되는 오늘
    이런개발
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 백엔드 면접
      • SQL N
        • SUM, MAX, MIN
        • SELECT
        • GROUP BY
        • JOIN
      • Spring
      • JPA
      • 트러블슈팅
      • Infra
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JPA
    raid
    티스토리챌린지
    오블완
    스프링
    데브코스
    토스 페이먼츠
    백엔드 면접
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
이런개발
@Component, @Controller, @Service, @Repository의 차이에 대해서 설명해주세요.
상단으로

티스토리툴바