@RequestParam vs @ModelAttribute
강의에 나온 내용은 아니지만 개인적으로 개발을하다 궁금한 점이 생겨서 질문 드립니다.
조회 API를 만들 때 (GET요청)Controller단에서 파라미터를 받는 방식이 @RequestParam, @ModelAttribute 크게 2가지 있는데 2가지 방식중 어떤 방식을 선호하지는지 질문드립니다.
@RequestParm을 사용했을 때는 Controller단에서 바로 직관적으로 어떤 파라미터를 받는지 확인이 가능하다는 장점이 있지만 Service단으로 파라미터를 넘겨줄 때, 하나하나 넘겨줘야해서 파라미터가 추가되었을 때 불편하다는 점이 있을 테고
@ModelAttribute를 사용했을 때는 수정에는 유리하겠지만 가독성은 떨어질 것 같다는 생각이 듭니다.
강사님은 어떤 생각을 가지고 계신지, 현업에서는 주로 어떤방식으로 개발을 하는지 의견주시면 감사하겠습니다.
답변 2
1
안녕하세요, psam1017 님!
저는 @ModelAttribute 를 선호합니다. 이유는 크게 2가지 인데요.
강의에서 보여드린 것처럼 파라미터 검증에 대한 책임과, 최소한의 가공 책임을 가질 수 있는 공간이 생깁니다.
Controller에서 이를 담당한다면 책임이 분산됩니다.
해당 로직에 대해 보다 쉬운 단위 테스트도 가능합니다.
실무에서는 API가 조금만 복잡해져도 파라미터가 수십개가 넘어가므로, 모든 필드를 하나하나
@RequestParam으로 선언하기가 현실적으로 어렵습니다.
도움이 되셨기를 바랍니다.
감사합니다~! 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
@RequestParam과 @ModelAttribute는 사용하는 상황과 선호에 따라 선택할 수 있습니다. 두 어노테이션은 목적이 다르기 때문에 선호도를 논하기 전에 각각의 사용 목적을 알고 사용하는 것이 중요합니다.
@RequestParam은 주로 단일 파라미터를 처리할 때 사용되며, 간단한 HTTP 요청 파라미터를 메소드 파라미터로 쉽게 가져올 수 있는 장점이 있습니다. 파라미터가 적고, 관리가 간편할 때 유용합니다. URL 쿼리 파라미터가 직관적으로 컨트롤러 메소드에 매핑되므로 API 문서를 작성하거나 API의 사용성을 논할 때 가독성이 좋습니다.
반면, @ModelAttribute는 요청 파라미터를 객체로 바인딩해주어 복잡한 객체를 만들어야 하는 경우에 유용합니다. 특히 도메인 객체나 DTO(Data Transfer Object)를 사용할 때 객체의 프로퍼티에 자동으로 바인딩되므로, 다수의 파라미터를 한 번에 처리할 수 있으며 파라미터 추가나 변경이 있을 때 유연하게 대응할 수 있습니다.
현업에서는 상황에 따라 두 방식을 적절히 혼합해서 사용합니다. 파라미터가 많고 복잡한 경우 @ModelAttribute를 통해 객체로 바인딩하고, 간단한 파라미터 처리가 필요할 때는 @RequestParam을 사용하는 경향이 있습니다. 유지 보수성, 가독성, 그리고 API를 사용하는 클라이언트와의 커뮤니케이션 측면을 고려하여 상황에 맞는 방법을 선택하는 것이 좋습니다.
강의 내용과는 직접적인 관련이 없지만, 체계적인 테스트 프로세스를 구축하는 데 있어서도 이러한 설계 결정이 중요할 수 있으며, 각 방식별로 테스트 케이스를 만들고 관리해야 할 것입니다.
private 상수 테스트 관련 질문
0
83
1
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
125
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
159
2
테스트 문서화 질문입니다
0
104
2
단위테스트 질문이 있습니다
0
96
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
100
2
ERD 가장자리에 있는 도메인 테스트 질문
0
87
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
134
2
OrderCreateRequest DTO에 대해서 궁금한점
0
101
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
154
2
계층 관련 질문이 있습니다.
0
138
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
123
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
134
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
228
2
Service+Repository 통합테스트 관련 질문입니다.
0
150
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
183
2
test 용 .yml
0
90
2
throws Exception
0
79
2
카페키오스크 클래스 문의 ,,
0
87
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
173
2
테스트 코드에서 필요한 생성자
0
138
1
tearDown 순서
0
116
2
@Builder 생성자 private
0
136
2
@DisplayName gradle / intellJ
0
93
2





