IT Developer/Spring

Spring 기초 <5. Spring에서 @Component, @Service, @Repository, @Controller 차이>

TEMA_ 2025. 3. 22. 13:23
반응형

스프링 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 개발 방법과 실무 적용법을 배워봅시다!

 

 

반응형