spring boot component vs service
@Component와 @Service는 기술적으로 동일하지만,
의미, 역할을 명확히 하기 위해 구분해서 사용합니다.
@Component와 @Service는 기술적으로 동일한 기능을 수행하지만,
코드의 의미와 역할을 명확히 표현하기 위해 목적에 따라 구분해서 사용합니다.
먼저 @Component는 스프링에서 가장 기본이 되는 빈 등록 애노테이션입니다.
이 클래스는 스프링이 관리하는 객체다 라는 의도를 표시하는 역할을 합니다.
이 애노테이션이 붙은 클래스는 스프링이 애플리케이션을 시작할 때
컴포넌트 스캔(Component Scan) 대상이 되고, ApplicationContext에 의해 스프링 빈으로 등록됩니다.
여기서 ApplicationContext는 BeanFactory를 확장한 인터페이스로,
우리가 흔히 말하는 스프링 컨테이너이며
빈의 생성, 관리, 의존성 주입(DI)을 전담하는 핵심 컴포넌트입니다.
@Service, @Controller, @Repository는 모두
내부적으로 @Component를 포함하고 있습니다.
즉, 빈으로 등록되는 방식이나 동작 자체에는 차이가 없습니다.
그럼에도 불구하고 이 애노테이션들이 존재하는 이유는
애플리케이션의 레이어와 역할을 명확히 드러내기 위함입니다.
- @Controller : 요청을 처리하는 프레젠테이션 계층
- @Service : 핵심 비즈니스 로직을 담당하는 계층
- @Repository : 데이터 접근 계층 (DAO)
모두 @Component의 의미를 구체화한 특수화된 형태인거죠.
실무에서는 보통 이런 기준으로 나눕니다.
- @Component
특정 레이어에 속하지 않는 공통 기능, 유틸리티, 헬퍼성 클래스,
또는 기술적인 역할을 수행하는 컴포넌트 - @Service
도메인 규칙을 포함한 비즈니스 로직을 구현하는 객체
즉,
@Component는 '이 클래스는 스프링이 관리해야 한다'는 기술적 선언에 가깝고,
@Service는 '이 클래스는 비즈니스 로직의 중심이다'라는 의도 표현용 애노테이션이라고 이해하면 됩니다.
이렇게 역할에 맞게 애노테이션을 구분해 사용하는 것이
코드 가독성, 유지보수성, 그리고 팀 협업 측면에서 큰 도움이 됩니다.

'Spring Boot' 카테고리의 다른 글
| SpringBoot 스프링 controller에서 json 받기 (RequestBody, @ResponseBody 어노테이션 사용) (0) | 2022.10.25 |
|---|---|
| [Springboot] ResponseEntity란? (1) | 2022.09.16 |
| Builder Pattern 빌더 패턴의 특징, 장점 (@Builder 사용이유, @Builder 예제) (6) | 2022.09.16 |
| [Spring data JPA] Auditing (AuditingEntityListener) (1) | 2022.09.15 |
| [Spring] Gradle 버전 확인 방법 (1) | 2022.09.15 |
댓글