스프링 Spring
5. Spring에서 @Component, @Service, @Repository, @Controller 차이
안녕하세요! 태마입니다.
Spring 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
스프링 Spring
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. Spring Bean이란?
Spring에서는 객체(Bean)를 직접 생성하고 관리합니다.
IoC(Inversion of Control) 컨테이너가 객체의 생명주기를 관리하며, 개발자는 Bean을 등록하기 위해
@Component, @Service, @Repository, @Controller 같은 애너테이션을 사용합니다.
📌 Spring Bean을 사용하는 이유
✔ 객체를 Spring 컨테이너가 직접 관리 → 객체 생성을 개발자가 직접 할 필요 없음
✔ 의존성 주입(DI) 가능 → 유지보수가 용이해짐
✔ 싱글톤(Singleton)으로 관리 → 성능 최적화
📌 Spring Bean은 "Spring이 직접 생성하고 관리하는 객체"임.
2. @Component – 가장 기본적인 Bean 등록 애너테이션
@Component는 Spring Bean으로 등록하는 가장 기본적인 애너테이션입니다.
이 애너테이션을 사용하면 Spring 컨테이너가 자동으로 해당 클래스를 Bean으로 등록합니다.
📌 @Component 사용 예시
@Component
public class MyComponent {
public String getMessage() {
return "Hello from MyComponent!";
}
}
📌 @Component의 특징
✔ 가장 기본적인 Bean 등록 방식
✔ 추상적인 개념으로, 특정 역할을 나타내지는 않음
✔ 다른 애너테이션(@Service, @Repository, @Controller)도 결국 @Component를 확장한 것
📌 @Component는 "Spring Bean으로 등록하는 가장 기본적인 방법"임.
3. @Service – 비즈니스 로직을 담당하는 서비스 계층
@Service는 비즈니스 로직을 처리하는 서비스 계층(Service Layer)에 사용됩니다.
이는 @Component의 확장 개념이며, 비즈니스 로직을 수행하는 클래스임을 명확하게 나타내기 위해 사용됩니다.
📌 @Service 사용 예시
@Service
public class UserService {
public String getUser() {
return "User Data";
}
}
📌 @Service의 특징
✔ 비즈니스 로직을 담당하는 클래스에 사용
✔ @Component를 확장한 개념
✔ 트랜잭션 관리(@Transactional)와 함께 사용 가능
📌 @Service는 "비즈니스 로직을 처리하는 클래스에 사용"됨.
4. @Repository – 데이터베이스와의 연결을 담당
@Repository는 데이터베이스와의 연결을 담당하는 DAO(Data Access Object) 클래스에 사용됩니다.
이 애너테이션을 사용하면 Spring이 자동으로 예외 변환(Exception Translation)을 적용해줍니다.
📌 @Repository 사용 예시
@Repository
public class UserRepository {
public String findUserById(Long id) {
return "User " + id;
}
}
📌 @Repository의 특징
✔ DAO 클래스에서 사용됨
✔ JPA, MyBatis 등의 데이터 계층과 함께 사용 가능
✔ Spring이 자동으로 데이터 관련 예외를 변환하여 던져줌
📌 @Repository는 "데이터베이스와의 연결을 담당하는 DAO 클래스에 사용"됨.
5. @Controller – 웹 요청을 처리하는 컨트롤러 계층
@Controller는 Spring MVC에서 웹 요청을 처리하는 컨트롤러 계층(Controller Layer)에서 사용됩니다.
이는 클라이언트의 요청을 받아 적절한 서비스를 호출하고, View를 반환하는 역할을 합니다.
📌 @Controller 사용 예시
@Controller
public class UserController {
@GetMapping("/user")
public String getUser() {
return "user";
}
}
📌 @Controller의 특징
✔ 클라이언트의 요청을 받아 처리하는 역할
✔ Spring MVC에서 사용
✔ View를 반환하는 방식(Thymeleaf, JSP 등)과 함께 사용됨
📌 @Controller는 "웹 요청을 받아 처리하는 역할"을 담당함.
✅ 여기까지 Spring에서 @Component, @Service, @Repository, @Controller의 개념을 배웠습니다!
👉 "그렇다면, @RestController와 @Controller는 어떤 차이가 있을까요?"
✅ 2부에서 @RestController와 @Controller의 차이점과 실무에서의 적용법을 배워봅시다!
2. 상세 주제 정리
1. @RestController – REST API 응답을 위한 컨트롤러
@RestController는 JSON 형식의 데이터를 반환하는 REST API 컨트롤러에 사용됩니다.
이는 @Controller와 @ResponseBody를 합친 개념으로,
모든 메서드의 반환값이 자동으로 JSON으로 변환됩니다.
📌 @RestController 사용 예시
@RestController
public class ApiController {
@GetMapping("/api/user")
public String getUser() {
return "User Data";
}
}
📌 @RestController의 특징
✔ REST API 응답을 처리하는 컨트롤러
✔ 모든 메서드의 반환값이 JSON으로 변환됨
✔ 별도로 @ResponseBody를 붙이지 않아도 됨
📌 @RestController는 "REST API 컨트롤러"로, 데이터를 반환하는 역할을 함.
2. @Controller vs @RestController – 어떤 것을 사용할까?
비교 항목@Controller@RestController
용도 | View 반환(Thymeleaf, JSP 등) | JSON 데이터 반환 (REST API) |
@ResponseBody 필요 여부 | 필요 (@ResponseBody 추가해야 함) | 불필요 (자동 JSON 변환) |
사용 사례 | 웹 애플리케이션 (MVC) | REST API 개발 |
📌 웹 애플리케이션을 개발할 때는 @Controller, REST API를 개발할 때는 @RestController 사용이 적절함.
✅ 여기까지 Spring에서 @Component, @Service, @Repository, @Controller의 차이와 @RestController의 개념을 배웠습니다!
👉 "그렇다면, Spring Boot에서 REST API를 개발할 때 어떤 방식으로 구현해야 할까요?"
✅ 다음 회차에서 Spring Boot에서 REST API 개발 방법과 실무 적용법을 배워봅시다!
'IT Developer > Spring' 카테고리의 다른 글
Spring 기초 <8. Spring에서 RequestParam vs PathVariable 차이점> (0) | 2025.03.25 |
---|---|
Spring 기초 <7. Spring Boot에서 REST API 개발 (GET, POST, PUT, DELETE)> (0) | 2025.03.24 |
Spring 기초 <6. Spring MVC 기본 개념과 동작 원리 (DispatcherServlet 구조)> (0) | 2025.03.23 |
Spring 기초 <4. Spring의 IoC (Inversion of Control)와 DI (Dependency Injection) 개념> (0) | 2025.03.21 |
Spring 기초 <3. Spring Boot 프로젝트 설정 (Gradle vs Maven, Dependency Management)> (0) | 2025.03.20 |
Spring 기초 <2. Spring Boot 3.x와 Spring 6의 주요 변경 사항> (1) | 2025.03.19 |
Spring 기초 <1. Spring Framework vs Spring Boot vs STS 차이점> (2) | 2025.03.18 |