깃허브 PR(풀리퀘스스트, PullRequest)
Kerenl360 해커톤에서 공지로 이번 깃헙 관리는 각자 fork를 한 후에 PR을 사용해서 업데이트하라고 했다. 나는 PR이 뭔지 몰랐기에 한 번 찾아보도록 했다.
새로운 코드 변경사항을 원본 소스 코드에 병합하기 위해 제안하는 것으로 병합하기 전에 자신의 코드를 병합해도 되는지 설명과 소스코드를 함께 보내주면서 요청하는 것이다.
찾아보니깐 생각보다 별로 어려운 내용이 아니었던 것 같다. 자주 사용해봐야 익숙해질꺼 같다.
@ModelAttribute VS @RequestBody
보통 클라이언트에서 서버로 데이터를 전송할 때 서버에서 받아들이는 방법이 @ModelAttribute, @RequestBody, @RequestParam 이 있는것으로 나는 알고 있다. 그런데 @RequestParam은 확실히 이해가 되지만 @ModelAttribute와 @RequestBody는 구별을 하기가 어려워서 자세히 비교해볼려고 한다.
@ModelAttribute는 HTTP요청의 파라미터를 객체로 바인딩하기 위해 사용한다.
파라미터를 객체로 변환하고, 이를 컨트롤러 메서드 내에서 사용한다. 주로 HTML폼 데이터를 처리할 때 사용한다.
@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
// user 객체를 사용하여 사용자 생성 로직 수행
return "userCreated"; // 뷰 이름 반환
}
@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 형식이 아닌 데이터는 처리할 수 없다