본문 바로가기
스프링 부트3

스프링 부트 3에서 컨트롤러 작성하기

by 굿센스굿 2024. 12. 5.
반응형

 

스프링 부트 3는 개발 생산성과 유연성을 극대화하기 위해 설계된 프레임워크로, 컨트롤러는 웹 애플리케이션의 핵심적인 역할을 담당합니다. 이 글에서는 스프링 부트 3에서 컨트롤러를 작성하는 기본적인 방법과 실무에서 활용할 수 있는 다양한 예제를 소개합니다.


1. 스프링 부트 3 컨트롤러란?

컨트롤러는 클라이언트의 요청(Request)을 처리하고, 적절한 응답(Response)을 반환하는 역할을 합니다. 스프링 부트 3에서 컨트롤러는 @RestController 또는 @Controller 어노테이션을 사용해 정의합니다.

  • @RestController: RESTful 웹 서비스 개발에 주로 사용되며, 반환 값은 기본적으로 JSON 형태로 직렬화됩니다.
  • @Controller: 뷰(View)를 반환하는 MVC 애플리케이션에서 주로 사용됩니다.

2. 컨트롤러 작성 기본 예제

2-1. 의존성 설정

스프링 부트 3 프로젝트를 생성할 때, Spring Web 의존성을 추가해야 합니다.
build.gradle 예시:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

2-2. 기본 컨트롤러 예제

다음은 간단한 RESTful 컨트롤러를 작성하는 예제입니다.

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello(@RequestParam(defaultValue = "World") String name) {
        return "Hello, " + name + "!";
    }
}

위 코드는 /hello 엔드포인트에 요청이 들어오면 "Hello, {name}!"이라는 메시지를 반환합니다.

  • @GetMapping: HTTP GET 요청을 처리합니다.
  • @RequestParam: 요청 파라미터를 매핑합니다. 기본값을 설정할 수 있습니다.

3. 실무에서 활용할 수 있는 예제

예제 1: CRUD API 작성하기

다음은 간단한 사용자 관리 API를 작성하는 예제입니다.

package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;
import java.util.*;

@RestController
@RequestMapping("/users")
public class UserController {

    private final Map<Integer, String> userDatabase = new HashMap<>();

    @PostMapping
    public String createUser(@RequestParam String name) {
        int id = userDatabase.size() + 1;
        userDatabase.put(id, name);
        return "User created with ID: " + id;
    }

    @GetMapping("/{id}")
    public String getUser(@PathVariable int id) {
        return userDatabase.getOrDefault(id, "User not found");
    }

    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable int id) {
        if (userDatabase.remove(id) != null) {
            return "User deleted";
        } else {
            return "User not found";
        }
    }
}
  • @PostMapping: HTTP POST 요청 처리.
  • @PathVariable: URL 경로 변수 매핑.
  • @DeleteMapping: HTTP DELETE 요청 처리.

예제 2: JSON 요청 처리

다음은 JSON 데이터를 요청 및 응답으로 처리하는 컨트롤러 예제입니다.

package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;
import com.example.demo.model.User;

@RestController
@RequestMapping("/api")
public class ApiController {

    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        user.setId(1); // 예시로 ID 할당
        return user;
    }
}
  • @RequestBody: 요청 본문 데이터를 객체로 변환.
  • 사용자 클래스 정의 예:
package com.example.demo.model;

public class User {
    private int id;
    private String name;

    // Getter & Setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

예제 3: 글로벌 예외 처리

컨트롤러에서 발생하는 예외를 관리하는 예제를 소개합니다.

package com.example.demo.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleIllegalArgument(IllegalArgumentException ex) {
        return "Error: " + ex.getMessage();
    }
}
  • @RestControllerAdvice: 전역 예외 처리 클래스 정의.
  • @ExceptionHandler: 특정 예외를 처리하는 메서드 정의.

4. 결론

스프링 부트 3에서 컨트롤러를 작성하는 과정은 간단하지만, 설계 방식에 따라 코드의 품질과 유지 보수성이 크게 달라질 수 있습니다. 위의 예제들을 참고해 실무에 적합한 컨트롤러를 구현해 보세요.

스프링 부트의 강력한 기능을 최대한 활용하여 안정적이고 효율적인 애플리케이션을 개발하시길 바랍니다! 😊

반응형