본문 바로가기

spring/그 외 알게 된 것

@Service, @Restcontroller를 붙여주는 이유는?

@Service와 @RestController를 사용하는 이유는 각각의 역할을 명확히 하기 위해서이다. 각 어노테이션이 붙는 클래스는 특정 기능을 수행하도록 지정되어 있으며, Spring 프레임워크에서 이를 관리하는 방식에 차이가 있다.

1. @Service

  • 목적: @Service는 비즈니스 로직을 수행하는 서비스 클래스를 정의할 때 사용된다.
  • 기능: 이 어노테이션이 붙은 클래스는 Spring 컨테이너에 의해 빈(Bean)으로 관리된다. 이는 싱글톤 패턴으로 동작하며, 클래스 내의 모든 메서드에 트랜잭션을 적용할 수 있다. 예를 들어, @Transactional을 사용하면 해당 클래스의 메서드가 트랜잭션 범위 내에서 실행되도록 보장한다.
  • 동작 원리: @Service 클래스는 스프링이 자동으로 프록시 객체를 만들어 호출할 때 동적으로 관리한다. 실제로 코드상에서는 바뀌지 않지만, 스프링 컨테이너가 프록시 객체를 사용하여 메서드를 호출하게 된다.
  • 서비스와 컴포넌트의 차이: @Service는 @Component와 같은 빈 등록 기능을 하지만, 개발자들에게 서비스 클래스임을 명확하게 알려주기 위한 용도로 사용된다. 이를 통해 서비스 계층과 다른 계층을 구분할 수 있다.

2. @RestController

  • 목적: @RestController는 RESTful 웹 서비스를 구현하는 컨트롤러를 정의할 때 사용된다.
  • 기능: @RestController는 @Controller와 @ResponseBody의 결합으로, HTTP 요청을 받아 처리하고 그 결과를 JSON 형식으로 응답한다. 즉, 클라이언트에 데이터를 전달할 때 JSON 형태로 자동 변환해주기 때문에, API 계층에서 주로 사용된다.
  • 동작 원리: @RestController는 HTTP 요청을 처리하고, 그 결과를 JSON 형식으로 변환하여 반환한다. @ResponseBody는 응답의 본문(body)을 자동으로 JSON으로 변환하는 역할을 하며, 이를 통해 API의 응답을 클라이언트가 쉽게 사용할 수 있게 된다.
  • 컨트롤러 역할: @RestController가 사용되는 클래스는 API 계층을 담당하며, DispatcherServlet에서 메서드 매핑을 통해 요청된 URL에 맞는 메서드를 찾아 실행한다.

  • @Service는 비즈니스 로직을 담당하는 서비스 클래스에서 사용되며, 트랜잭션을 관리하고, 스프링이 해당 클래스의 프록시 객체를 동적으로 생성하여 사용한다.
  • @RestController는 RESTful API 컨트롤러를 정의하며, 응답 데이터를 자동으로 JSON 형식으로 변환하여 반환한다.

 

'spring > 그 외 알게 된 것' 카테고리의 다른 글

DI  (0) 2024.08.07
ResponseEntity  (0) 2024.07.12
이거 봐야해 : 영속성  (0) 2024.07.10
예외던지기  (0) 2024.07.03
Gson과 Json은 뭐가 다를까  (0) 2024.07.02