Springboot 이해하기 - @ModelAttribute, @ParameterObject

Kim Hyewon·2024년 11월 13일
0

Springboot

목록 보기
1/1

@ModelAttribute

@ModelAttribute는 폼 데이터를 Java 객체에 바인딩하기 위해 사용됩니다.

@ModelAttribute의 동작 방식

  • 객체의 필드에 값을 설정하기 위해 setter 메서드가 필요합니다.

  • 객체 생성 및 필드 설정

    • @ModelAttribute는 요청 파라미터를 기반으로 새로운 객체를 생성하고, 각 필드에 값을 설정합니다. 이 과정에서 리플렉션이 사용되지만, 필드에 직접 접근하는 대신 setter 메서드를 통해 값을 설정합니다. 이는 Java의 접근 제어 원칙에 따라 필드에 직접 접근하는 것을 피하기 위해서 입니다.
    • 캡슐화: 객체 지향 프로그래밍에서 캡슐화 원칙을 준수하기 위해, 필드에 직접 접근하기보다는 setter 메서드를 통해 값을 설정하는 것이 일반적입니다. 따라서, @ModelAttribute를 사용할 때는 setter 메서드가 필요합니다.
  • 예시

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

    // Setter 메서드가 필요합니다.
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

@RestController
public class UserController {

    @PostMapping("/register")
    public ResponseEntity<String> register(@ModelAttribute User user) {
        return ResponseEntity.ok("Registered: " + user.getName() + ", Age: " + user.getAge());
    }
}

@RequestParam과 @ResponseBody는 리플렉션을 통해 직접 매개변수에 값을 할당할 수 있지만, @ModelAttribute는 객체의 필드에 값을 설정하기 위해 setter 메서드를 요구합니다. 이는 객체 지향 프로그래밍의 캡슐화 원칙을 준수하기 위한 설계입니다.

@ParameterObject

@ParameterObject는 메서드의 매개변수로 객체를 사용하여 여러 개의 요청 파라미터를 묶어 전달할 수 있도록 해주는 어노테이션입니다. 이 어노테이션을 사용하면, 여러 개의 쿼리 파라미터를 하나의 객체로 매핑할 수 있어 코드가 더 깔끔해지고 가독성이 향상됩니다.

@ParameterObject vs. @ModelAttribute

  1. 복잡한 파라미터 구조 처리 용이
  • GET 메서드에서 여러 개의 쿼리 파라미터가 필요할 때, @ParameterObject를 사용하면 이러한 파라미터를 하나의 객체로 묶어 관리할 수 있습니다. 이는 코드의 가독성을 높이고, 유지보수를 용이하게 합니다.
  1. 명확한 문서화
  • @ParameterObject를 사용하면 OpenAPI에서 해당 객체의 모든 필드를 문서화할 수 있습니다. 이는 API 소비자에게 각 필드의 의미와 형식을 명확하게 전달하는 데 도움이 됩니다.
  1. Swagger UI에서의 표현
  • @ParameterObject를 사용하면 Swagger UI에서 요청 파라미터가 객체로 표현되므로 사용자에게 더 나은 경험을 제공합니다. 사용자들은 객체의 각 필드에 대해 이해하고 입력할 수 있습니다.
  • 예시
    • @ModelAttribute 사용 시 Swagger UI에서 Object 형식으로 제공된다.
    • @ParameterObject사용 시 Reqeust 객체 정보가 자세하게 표기된다.
  1. 파라미터 재사용
  • OpenAPI 3.0의 components 섹션을 활용하여, 여러 엔드포인트에서 재사용할 수 있는 파라미터 객체를 정의할 수 있습니다. 이는 중복을 줄이고 API의 일관성을 높이는 데 기여합니다.

OpenAPI 3.0에서는 @ParameterObject를 사용하는 것이 권장됩니다. 이는 복잡한 요청 파라미터를 처리하고, API 문서의 가독성을 높이며, 사용자에게 더 나은 경험을 제공합니다. 특히 GET 메서드에서 여러 쿼리 파라미터를 다룰 때, @ParameterObject는 매우 유용한 선택입니다.

참고문헌

profile
볼일 없는 상태에서 별볼일 있는 블로그로 키우는 중입니다.

0개의 댓글

관련 채용 정보