본문 바로가기
Spring Boot

springboot @Component, @Service 차이점

by 비타민찌 2025. 12. 18.
728x90

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는 '이 클래스는 비즈니스 로직의 중심이다'라는 의도 표현용 애노테이션이라고 이해하면 됩니다.

 

이렇게 역할에 맞게 애노테이션을 구분해 사용하는 것이 
코드 가독성, 유지보수성, 그리고 팀 협업 측면에서 큰 도움이 됩니다.

 

 

728x90

댓글