개발천재

[Spring Boot] Bean을 정의하는 어노테이션 본문

개발 준비/Spring Boot

[Spring Boot] Bean을 정의하는 어노테이션

세리블리 2025. 2. 18. 23:44
반응형
@Component, @Service, @Repository, @Controller는 모두 스프링 빈을 정의하는 어노테이션

 

 

스프링에서 관리하는 객체들은 스프링 컨테이너에 의해 생성되고 관리된다. 이를 통해 객체 간의 의존성을 관리하고, 코드가 효율적이고 유지보수가 쉬워진다. 스프링은 여러 종류의 **빈(Bean)**을 관리하는데, 이때 사용하는 어노테이션들이 @Component, @Service, @Repository, @Controller, @Bean이다.

 

@Component, @Service, @Repository, @Controller는 모두 스프링 빈을 정의하는 어노테이션이지만, 이름과 사용 목적에 따라 미묘한 차이가 있다.

 

@Component: 스프링이 관리하는 일반적인 객체
@Service: 비즈니스 로직을 처리하는 서비스 클래스
@Repository: 데이터베이스와 관련된 객체
@Controller: 웹 요청을 처리하는 컨트롤러 클래스
@Bean: 메소드에서 직접 객체를 정의하여 스프링이 관리하게 함

 

 


기본적인 차이점

@Component는 가장 일반적인 빈을 정의할 때 사용된다. 나머지 어노테이션들은 특정 역할을 명확히 구분하기 위한 의미가 추가된 어노테이션이다.


@Service, @Repository, @Controller는 애플리케이션의 계층을 명확히 나타내기 위한 역할을 한다. 즉, 이들은 단순히 빈을 등록하는 것 외에, 그 역할을 명확하게 구분하기 위해 사용하는 것이다.

 

각 어노테이션은 역할을 구분하는 데 도움을 주고, 코드의 가독성과 유지보수성을 높여준다.

@Component는 일반적인 빈
@Service는 비즈니스 로직을 처리하는 서비스
@Repository는 데이터베이스 작업을 처리하는 객체
@Controller는 웹 요청을 처리하는 컨트롤러로 사용

따라서 역할에 맞는 어노테이션을 사용하는 것이 좋다.

 

 


 

 

@Component

일반적인 빈을 등록할 때 사용된다. 특별한 역할이 없고, 그저 객체가 스프링 컨테이너에서 관리되기를 원할 때 사용한다.
기본적인 빈 등록용으로 사용되며, 역할을 따로 구분하지 않는다.

@Component
public class MyComponent {
    // 어떤 특정 역할 없이, 그냥 스프링에서 관리하는 빈
}

 

 

 

@Service

비즈니스 로직을 처리하는 서비스 클래스에 사용된다.

@Component와 기능적으로는 동일하지만, 서비스 계층을 명확하게 구분할 때 사용한다. @Service를 사용하면, 코드의 가독성이나 의미가 더 분명해져서, 나중에 읽을 때 이 클래스가 비즈니스 로직을 처리하는 클래스라는 것을 쉽게 알 수 있다.

@Service
public class UserService {
    // 비즈니스 로직 처리
}

 

 

 

@Repository

데이터베이스와 관련된 작업을 처리하는 클래스에 사용된다.
@Component와 같지만, 데이터 액세스를 위한 *DAO 계층을 명시적으로 나타내기 위해 사용된다.
또한, 예외 처리와 관련된 기능도 제공하는데, 예를 들어, JPA 예외를 스프링의 데이터 액세스 예외로 변환하는 기능이 있다.

@Repository
public class UserRepository {
    // 데이터베이스 작업 처리
}

 

*DAO : DAO(Data Access Object) 계층은 데이터베이스와의 상호작용을 담당하는 계층이다. 쉽게 말해, 데이터베이스에서 데이터를 가져오거나 저장하는 작업을 처리하는 역할을 하는 객체를 말한다.

 

 

 

@Controller

웹 애플리케이션의 컨트롤러를 정의할 때 사용된다.
@Component와 비슷하지만, 웹 요청을 처리하는 역할을 명확히 하기 위해 사용된다.
@RestController는 JSON 응답을 다룰 때 사용되고, @Controller는 일반적으로 **뷰(View)**를 반환하는 웹 애플리케이션에 사용된다.

@Controller
public class UserController {
    @GetMapping("/user")
    public String getUser() {
        return "userInfo";  // 뷰 이름 반환
    }
}




 


 

[참고]

반응형