본문 바로가기
프레임워크(Framework)/Spring Boot

[Spring Boot] 파라미터 전달 방식

by 송기동 2024. 4. 15.
728x90

# 파라미터 전달 방식은 클라이언트가 서버로 데이터를 전달하는 방법을 의미

쿼리 스트링 방식 (Query String, Query Parameter)

- URL 끝에 '?' 를 붙이고, 파라미터를 'key-value' 형태로 전달하는 방식

- 여러개이 매개변수를 전달할 때는 '&' 로 구분

- 주로 GET 메소드를 사용하여 데이터를 전달할 때 사용

- 간단하고 직관적인 방식이지만, 데이터가 URL에 노출되므로 보안에 취약할 수 있음

- 스프링 부트에서는 '@RequestParam' 을 통해 컨트롤러 메서드의 매개변수로 받아올 수 있음

ex) 'http://example.com/search?keyword=springboot&page=1' 에서 'keyword'와 'page'는 쿼리 문자열의 파라미터

@RestController
public class SearchController {
    
    @GetMapping("/search")
    public String search(@RequestParam("keyword") String keyword, @RequestParam("page") int page) {
        // keyword와 page를 사용하여 검색 로직을 수행
        return "검색 결과: 키워드 - " + keyword + ", 페이지 - " + page;
    }
}

 


경로 매개변수 방식 (Path Variable, Path Parameter)

- URL의 경로 부분에 파라미터가 포함

- 주로 RESTful API 에서 사용

- URL의 일부로 파라미터가 전달되므로, 리소스를 식별하고 검색하는데 사용

- 스프링 부트에서는 '@PathVariable' 을 사용하여 컨트롤러 메서드의 매개변수로 받아올 수 있음

ex) 'http://example.com/user/123' 에서 '123'은 사용자의 ID일 수 있음

@RestController
public class UserController {
    
    @GetMapping("/user/{userId}")
    public String getUser(@PathVariable("userId") Long userId) {
        // userId를 사용하여 사용자 정보를 조회하는 로직을 수행
        return "사용자 정보 조회: ID - " + userId;
    }
}

HTTP 요청의 바디(Body)를 통한 전달

- 주로 POST, PUT, PATCH 등의 메서드를 통해 전달

- 복잡한 데이터를 전송할 때 주로 사용

- 데이터는 일반적으로 JSON 또는 XML 형식으로 전달

- 스프링 부트에서는 '@RequestBody' 를 사용하여 요청 본문을 객체로 변환하여 받아올 수 있음

@RestController
public class JsonDataController {
   
   @PostMapping("/submitJsonData")
   public String submitJsonData(@RequestBody JsonData jsonData) {
       // 받아온 JSON 데이터를 처리하는 로직을 수행
       return "받은 JSON 데이터: " + jsonData.toString();
   }
}

폼(Form) 데이터를 통한 전달

- HTML 폼을 통해 전달되는 데이터

- 주로 'application/x-www-form-urlencoded' 또는 'multipart/form-data' 형식으로 전달

- 주로 웹 페이지에서 사용자 입력을 받을 때 사용

- 스프링 부트에서는 HTML 폼을 통해 전달된 데이터를 '@RequestParam' 을 사용하여 받아올 수 있음

<form action="/submitForm" method="post">
    <label for="username">사용자 이름:</label><br>
    <input type="text" id="username" name="username"><br>
    <label for="email">이메일:</label><br>
    <input type="email" id="email" name="email"><br><br>
    <input type="submit" value="제출">
</form>
@RestController
public class FormController {
    
    @PostMapping("/submitForm")
    public String submitForm(@RequestParam("username") String username, @RequestParam("email") String email) {
        // 폼 데이터를 사용하여 새로운 사용자를 생성하거나 다른 작업을 수행
        return "폼 제출 결과: 사용자 이름 - " + username + ", 이메일 - " + email;
    }
}
728x90