일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Login
- useEffect
- 워드프레스
- firebase
- @Entity
- router
- 구글애널리틱스
- @Repository
- 플러그인
- 데이터베이스
- JPA
- 구글
- Thymeleaf
- linkedhastset
- 구글알고리즘
- configureviewresolvers()
- 리액트오류
- GET
- addflashattribute()
- set
- ChatGPT
- mergeattributes()
- HttpSession
- Polylang
- addallattributes()
- GA4
- @Query
- 인텔리제이
- SEO
- post
- Today
- Total
개발천재
[Spring Boot] Bean을 정의하는 어노테이션 본문
@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"; // 뷰 이름 반환
}
}
[참고]
'개발 준비 > Spring Boot' 카테고리의 다른 글
[Spring Boot] WebMvcConfigurer 이해하기 (1) | 2025.02.19 |
---|---|
[Spring Boot] Validation, 검증하기 (2) | 2025.02.18 |
[Spring Boot] Intercepter와 HandlerInterceptor (1) | 2025.02.18 |
[Spring Boot] JPA에서 save()가 update 역할을 하는 이유 (1) | 2025.02.18 |
[Spring Boot] JPA와 Hibernate (2) | 2025.02.17 |