본문 바로가기
SpringBoot

Controller와 Service란?

by 노아입니다 2025. 3. 19.

1. Controller와 Service란?

Controller

  • 클라이언트의 요청(Request)을 받아 적절한 응답(Response)을 반환하는 역할
  • 주로 @RestController 또는 @Controller 어노테이션을 사용
  • 요청을 처리하고 비즈니스 로직이 필요한 경우 Service에 위임

Service

  • 비즈니스 로직을 처리하는 계층
  • @Service 어노테이션을 사용하여 정의
  • 데이터베이스 조회, 계산, 외부 API 호출 등의 로직을 담당하며 Controller에서 이를 호출하여 사용

2. Controller와 Service의 관계

  1. 사용자가 클라이언트(예: 웹 브라우저, 모바일 앱)에서 요청을 보냄
  2. Controller가 요청을 받아 Service에 전달
  3. Service는 비즈니스 로직을 수행한 후 필요한 데이터를 반환
  4. 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. 정리

  1. Controller는 요청을 받아 적절한 응답을 반환하는 역할
  2. Service는 비즈니스 로직을 처리하는 역할
  3. 두 계층을 분리함으로써 코드의 유지보수성과 확장성을 높일 수 있음

위 내용을 참고하여 Spring Boot 기반 웹 애플리케이션을 개발할 때 Controller와 Service를 효과적으로 분리하고 활용해 보세요!