[Spring] @Component - @Controller, @Service, @Repository, @Configuration 차이점

Junseo Kim·2021년 6월 11일
0

Spring

목록 보기
3/7
post-thumbnail

@Controller, @Service, @Repository, @Configuration은 모두 @Component가 붙어있다.

어노테이션은 기본적으로 메타정보를 나타내기 때문에 자체적으로 특정 기능이 있지는 않다. 또 상속과 같은 개념이 있는 것도 아니다.

스프링에서는 컴포넌트 스캔을 통해 @Component가 붙어있는 클래스들을 스캔해서 빈으로 등록하는데 이때, @Component를 가지고 있는 @Controller, @Service, @Repository, @Configuration 이 4가지 어노테이션이 붙어있는 클래스들도 빈으로 등록한다. 어노테이션은 상속을 지원하지 않기 때문에, 이런 처리는 자바가 아닌 스프링에서 해주는 것이다.

스프링에서는 각 어노테이션에 맞게 빈 등록 이외에 추가적인 처리를 지원한다.

@Controller

해당 클래스를 스프링 MVC 모듈의 컨트롤러로 인식하게 해준다.

@Service

이 어노테이션은 특별한 처리를 해주는 것은 아니지만, 개발자들에게 명시적으로 비즈니스 로직을 처리하는 클래스하는 것을 보여준다.

@Repository

해당 클래스를 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 한 단계 추상화하여 스프링 예외로 변환시켜 던져준다. (스프링의 DataAccessException) 이로 인해 db마다 다른 예외가 일어나도 서비스 단에 영향을 끼치지 않게 된다.

@Configuration

해당 클래스를 스프링 설정 정보로 인식한다. 또한 cglib을 통해 조작된 클래스가 빈으로 등록되게 하며, 이로 인해 빈들을 싱글톤으로 관리할 수 있다.

0개의 댓글