스프링 컨트롤러스프링 매핑이란스프링 리퀘스트 매핑Spring @RequestMapping 목록backend

[Spring] MVC 컨트롤러와 RequestMapping

KUKJIN LEE
KUKJIN LEE
2024년 11월 12일
169

※ @Controller와 @RestController는 다릅니다.

Spring MVC에서 컨트롤러는 웹 애플리케이션의 요청을 처리하고, 데이터를 준비하여 적절한 뷰에 전달하는 역할을 합니다. 컨트롤러를 통해 특정 URL과 HTTP 메서드(GET, POST 등)에 따라 요청을 처리할 수 있으며, 이를 위해 @Controller@RequestMapping 어노테이션을 사용합니다.

◎ @Controller는 뷰 템플릿을 반환하는 웹 애플리케이션

◎ @RestController는 REST API를 위한 JSON 응답

 

1. @Controller 어노테이션

  • 역할: 해당 클래스가 컨트롤러 역할을 수행함을 Spring에게 알립니다.

  • 사용 방법: 클래스 수준에서 @Controller를 사용하여, 클래스 내의 메서드들이 웹 요청을 처리하도록 설정합니다.

import org.springframework.stereotype.Controller;

@Controller
public class MyController {
    // 여기에 요청 처리 메서드를 정의합니다.
}

 

2. @RequestMapping 어노테이션

  • 역할: 특정 URL 패턴과 요청 메서드를 컨트롤러의 메서드와 매핑합니다.

  • 사용 방법: 클래스와 메서드 수준에서 사용되며, URL 패턴과 HTTP 메서드(GET, POST 등)를 매핑할 수 있습니다. 클래스 수준에서 사용된 @RequestMapping의 URL 패턴은 모든 메서드에 공통으로 적용됩니다.

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/api") // 클래스 수준 매핑
public class MyController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    @ResponseBody
    public String sayHello() {
        return "Hello, Spring MVC!";
    }
}

위의 코드에서 /api/hello 경로로 들어오는 GET 요청은 sayHello 메서드에서 처리하며, Hello, Spring MVC!라는 응답을 반환합니다.

3. 세부 매핑 - @GetMapping, @PostMapping 등

Spring 4.3 이후로는 더 직관적인 매핑 어노테이션들이 제공됩니다. 따라서 아래 사용을 권장드립니다.

  • @GetMapping: GET 요청을 처리할 때 사용합니다.

  • @PostMapping: POST 요청을 처리할 때 사용합니다.

  • @PutMapping: PUT 요청을 처리할 때 사용합니다.

  • @DeleteMapping: DELETE 요청을 처리할 때 사용합니다.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

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

    @GetMapping("/profile")
    @ResponseBody
    public String getUserProfile(@RequestParam String username) {
        return "Profile of user: " + username;
    }

    @PostMapping("/create")
    @ResponseBody
    public String createUser(@RequestParam String username) {
        return "User " + username + " created successfully!";
    }
}
  • @GetMapping("/profile") 어노테이션은 /users/profile 경로로의 GET 요청을 처리하며, username이라는 요청 파라미터를 받아 사용자 프로필 정보를 반환합니다.

  • @PostMapping("/create") 어노테이션은 /users/create 경로로의 POST 요청을 처리하며, 사용자 이름을 입력 받아 새로운 사용자 생성을 나타내는 문자열을 반환합니다.

 

4. Path Variables와 Request Parameters

  • Path Variables: URL 경로에 변수를 포함시킬 수 있습니다. 예를 들어, /users/{id}와 같은 형태로 ID 값을 URL에 포함할 수 있습니다.

import org.springframework.web.bind.annotation.PathVariable;

@GetMapping("/users/{id}")
@ResponseBody
public String getUserById(@PathVariable("id") int userId) {
    return "User ID: " + userId;
}

Request Parameters: @RequestParam을 사용하여 쿼리 파라미터를 받아 처리할 수 있습니다.

@GetMapping("/search")
@ResponseBody
public String searchUser(@RequestParam String name) {
    return "Search result for user: " + name;
}

5. @ResponseBody 어노테이션

  • 컨트롤러 메서드가 반환하는 데이터를 HTTP 응답 본문으로 직접 변환하여 전송합니다. 예를 들어, JSON 형태로 데이터를 반환할 때 유용합니다.

@GetMapping("/json")
@ResponseBody
public Map<String, String> getJsonResponse() {
    Map<String, String> response = new HashMap<>();
    response.put("message", "Hello, JSON!");
    return response;
}

6. 요청 매핑의 결합 예제

아래는 클래스 수준의 URL 매핑과 함께 GET 및 POST 요청을 처리하는 예제입니다.

@Controller
@RequestMapping("/products")
public class ProductController {

    @GetMapping("/{id}")
    @ResponseBody
    public String getProduct(@PathVariable int id) {
        return "Product ID: " + id;
    }

    @PostMapping("/add")
    @ResponseBody
    public String addProduct(@RequestParam String name) {
        return "Product " + name + " added successfully!";
    }
}

위 예제에서 /products 경로는 클래스 수준에서 공통으로 적용되며, 그 하위 경로에서 각각의 메서드가 GET과 POST 요청을 처리합니다.

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &amp;nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12