1. Controller와 Service란?
Controller
- 클라이언트의 요청(Request)을 받아 적절한 응답(Response)을 반환하는 역할
- 주로 @RestController 또는 @Controller 어노테이션을 사용
- 요청을 처리하고 비즈니스 로직이 필요한 경우 Service에 위임
Service
- 비즈니스 로직을 처리하는 계층
- @Service 어노테이션을 사용하여 정의
- 데이터베이스 조회, 계산, 외부 API 호출 등의 로직을 담당하며 Controller에서 이를 호출하여 사용
2. Controller와 Service의 관계
- 사용자가 클라이언트(예: 웹 브라우저, 모바일 앱)에서 요청을 보냄
- Controller가 요청을 받아 Service에 전달
- Service는 비즈니스 로직을 수행한 후 필요한 데이터를 반환
- Controller는 반환된 데이터를 클라이언트에 응답으로 보냄
3. 예제 코드 (Spring Boot)
3.1. 프로젝트 설정
Maven이나 Gradle을 사용하여 Spring Boot 프로젝트를 생성합니다.
Maven 의존성 (pom.xml)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3.2. Controller 코드 작성
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<String> getUsers() {
return userService.getUserList();
}
}
설명:
- @RestController를 사용하여 REST API 엔드포인트를 정의
- /users 경로로 요청이 오면 UserService의 getUserList()를 호출하여 응답
3.3. Service 코드 작성
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
@Service
public class UserService {
public List<String> getUserList() {
return Arrays.asList("Alice", "Bob", "Charlie");
}
}
설명:
- @Service 어노테이션을 사용하여 Service 계층을 정의
- 사용자 리스트를 반환하는 getUserList() 메서드 구현
- 실제 애플리케이션에서는 DB에서 데이터를 조회하는 등의 작업을 수행
4. 실행 및 테스트
Spring Boot 애플리케이션을 실행한 후 아래의 엔드포인트를 호출하면 JSON 형식으로 사용자 목록이 반환됩니다.
요청 (HTTP GET)
GET http://localhost:8080/users
응답 (JSON)
[
"Alice",
"Bob",
"Charlie"
]
5. 정리
- Controller는 요청을 받아 적절한 응답을 반환하는 역할
- Service는 비즈니스 로직을 처리하는 역할
- 두 계층을 분리함으로써 코드의 유지보수성과 확장성을 높일 수 있음
위 내용을 참고하여 Spring Boot 기반 웹 애플리케이션을 개발할 때 Controller와 Service를 효과적으로 분리하고 활용해 보세요!
'SpringBoot' 카테고리의 다른 글
📌 Spring Boot에서의 Entity와 Repository 완전 정복 (0) | 2025.04.07 |
---|---|
"Thymeleaf란? Spring Boot와 함께하는 강력한 템플릿 엔진" (0) | 2025.03.26 |
스프링 부트 템플릿 엔진과 build.gradle 정리 (0) | 2025.03.19 |