스프링 부트 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에서 컨트롤러를 작성하는 과정은 간단하지만, 설계 방식에 따라 코드의 품질과 유지 보수성이 크게 달라질 수 있습니다. 위의 예제들을 참고해 실무에 적합한 컨트롤러를 구현해 보세요.
스프링 부트의 강력한 기능을 최대한 활용하여 안정적이고 효율적인 애플리케이션을 개발하시길 바랍니다! 😊
'스프링 부트3' 카테고리의 다른 글
스프링 부트 3의 의존성 주입 기초 (0) | 2024.12.05 |
---|---|
REST API를 스프링 부트 3로 구현하기 (0) | 2024.12.05 |
스프링 부트 3 프로젝트 구조 이해 (0) | 2024.12.05 |
스프링 부트 3의 핵심 의존성 관리 (0) | 2024.12.05 |
스프링 부트 3 Starter 프로젝트 이해하기 (0) | 2024.12.05 |