깃허브의 PR과 @ModelAttribute VS @RequestBody의 차이점.

이선우·2024년 7월 20일
0

개발 관련 지식

목록 보기
1/13

2024-07-20

깃허브 PR(풀리퀘스스트, PullRequest)

Kerenl360 해커톤에서 공지로 이번 깃헙 관리는 각자 fork를 한 후에 PR을 사용해서 업데이트하라고 했다. 나는 PR이 뭔지 몰랐기에 한 번 찾아보도록 했다.

PR이란

새로운 코드 변경사항을 원본 소스 코드에 병합하기 위해 제안하는 것으로 병합하기 전에 자신의 코드를 병합해도 되는지 설명과 소스코드를 함께 보내주면서 요청하는 것이다.

Github에서 PR을 하는 방법

  1. Github에서 pullrequest를 누르기
  2. Comparing changes 창에서 base 에는 pull 요청을 받게 될 브랜치, compare 에는 base로 요청을 보낼 브랜치를 작성
  3. create pull request 누르기

찾아보니깐 생각보다 별로 어려운 내용이 아니었던 것 같다. 자주 사용해봐야 익숙해질꺼 같다.

@ModelAttribute VS @RequestBody

보통 클라이언트에서 서버로 데이터를 전송할 때 서버에서 받아들이는 방법이 @ModelAttribute, @RequestBody, @RequestParam 이 있는것으로 나는 알고 있다. 그런데 @RequestParam은 확실히 이해가 되지만 @ModelAttribute와 @RequestBody는 구별을 하기가 어려워서 자세히 비교해볼려고 한다.

@ModelAttribute

@ModelAttribute는 HTTP요청의 파라미터를 객체로 바인딩하기 위해 사용한다.
파라미터를 객체로 변환하고, 이를 컨트롤러 메서드 내에서 사용한다. 주로 HTML폼 데이터를 처리할 때 사용한다.

@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
// user 객체를 사용하여 사용자 생성 로직 수행
return "userCreated"; // 뷰 이름 반환
}

@RequestBody

@RequestBody는 HTTP요청의 본문에 담긴 데이터를 객체로 바인딩하기 위해 사용한다.
요청 본문의 데이터를 변환하여 객체로 받아오며, 주로 JSON, XML 또는 기타 데이터 형식의 요청을 처리할 때 사용한다.

@PostMapping("/user")
public String createUser(@RequestBody User user) {
// user 객체를 사용하여 사용자 생성 로직 수행
return "userCreated"; // 뷰 이름 반환
}

결과적으로 주로 @ModelAttribute는 요청의 파라미터를 객체로 바인딩하고 뷰로 전달하는 목적으로 사용되고, @RequestBody는 요청 본문의 데이터를 객체로 바인딩하는 목적으로 사용된다.

결론

  • 본문의 Json, xml, text등의 데이터가 HttpMessageConverter를 통해 파싱되어 Java 객체로 변환된다.
  • @RequestBody를 사용할 객체는 필드를 바인딩할 생성자나 setter 메서드가 필요없다.
  • 단, 직렬화를 위한 기본 생성자가 필수이며, 데이터 바인딩을 위한 필드를 알아내기 위해 getter나 setter중 한 가지는 정의가 되어야한다.
  • @ModelAttribute는 HTTP 파라미터 데이터를 Java 객체에 매핑한다. 따라서 데이터를 바인딩할 수 있는 생성자 또는 setter가 필요하다.
  • Query String 또는 Form 형식이 아닌 데이터는 처리할 수 없다
profile
백엔드 개발자 준비생

0개의 댓글