티스토리 뷰

DEV/Java

Spring의 @RequestMapping

berom 2023. 7. 5. 12:04

@RequestMapping 왜 쓰냐?

- 특정 URL에 메서드를 맵핑 함으로써 유지보수와 가독성 상승
- @RequestMapping이 없으면, 경로를 직접 분기를 경로가 생길 때마다 해줘야 한다

Spring을 사용하면 자주 쓰는 @RequestMapping 왜 쓰는지 알아봅시다

예제 코드

아래 예시에서는 사용자가 /login을 입력하면 login() 메서드가, /join을 입력하면 join() 메서드가 호출됩니다.

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String path = sc.nextLine();

        // path = "/login" -> uc.login()
        // path = "/join" -> uc.join();
        UserController uc = new UserController();

        if(path.equals("/login")){
            uc.login();
        }else if(path.equals("/join")){
            uc.join();
        }
        
    }
}

public class UserController {
    public void login(){
        System.out.println("login() 호출됨");
    }

    public void join(){
        System.out.println("join() 호출됨");
    }
}

위와 같이 코드를 작성할 경우, 몇 가지 어려움이 있습니다

  1. 새로운 경로 추가의 어려움

    • 새로운 경로를 추가하기 위해서는 if-else 구문을 계속 확장해야 합니다.
    • 이는 코드의 가독성을 저하시키며, 실수의 가능성을 높입니다.
  2. 중복 코드

    • 비슷한 동작을 하는 경로가 추가될 경우, 코드의 중복이 발생할 수 있습니다.
    • 이는 유지보수를 어렵게 만듭니다.

Request Mapping의 필요성

위와 같은 문제를 해결하기 위해 등장한 개념이 바로 Request Mapping입니다.
이는 특정 URL에 대한 요청을 특정 메서드와 매핑시키는 역할을 합니다.

스프링 프레임워크에서는 @RequestMapping 어노테이션을 사용해 이를 수행하며, 이는 컨트롤러 클래스 또는 메서드에 적용할 수 있습니다.

예를 들어, UserController 클래스를 다음과 같이 수정할 수 있습니다.

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @RequestMapping("/login")
    public void login() {
        System.out.println("login() 호출됨");
    }

    @RequestMapping("/join")
    public void join() {
        System.out.println("join() 호출됨");
    }
}

이렇게 하면, 스프링 프레임워크가 /login/join URL 요청을 각각 login()join() 메서드에 자동으로 매핑해줍니다.
이를 통해, if-else 구문을 사용하지 않고도 요청 경로에 따라 적절한 메서드를 호출할 수 있게 됩니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'DEV > Java' 카테고리의 다른 글

DispatcherServlet은 어떻게 View와 Controller를 구별할까  (0) 2023.07.05
DispatcherServlet 왜 필요한가  (0) 2023.07.05
Spring Security  (0) 2023.07.04
Easy Random  (0) 2023.06.02
JDBC  (0) 2023.06.02