Spring MVC를 이용해서 컨트롤러에 값을 주고 받을때는 HTTP 요청 프로퍼티를 분석하여 그에 따라 특정 클래스로 바인딩이 되게끔 하고 컨트롤러에서 특정 객체를 Model Object에 집어 넣어 View를 리턴하는 식으로 주고받게 된다.
그러나 메시지 컨버터는 그런 개념이 아니라 HTTP 요청 메시지 본문과 HTTP 응답 메시지 본문을 통째로 하나의 메시지로 보고 이를 처리한다.
Spring MVC에서 이러한 작업을 하는데 사용되는 어노테이션이 @RequestBody와 @ResponseBody이다.
@RequestBody를 이용하여 파라미터를 받으면 HTTP 요청 메시지 본문을 분석하는 것이 아니라 그냥 하나의 통으로 받아서 이를 적절한 클래스 객체로 변환하게 되고 @ResponseBody를 사용하여 특정 값을 리턴하면 View 개념이 아닌 HTTP 응답 메시지에 그 객체를 봐로 보내는 개념으로 리턴하게 되는 것이다.
메세지 컨버터를 이용해서 다룰 수 있는 데이터 형태는 정해져있는데 그런 데이터 처리를 위해서 MultiValueMap<String, String>
, XML, JSON이 필요하다고 한다.
미션5에 보니까 Json, Ajax, XHR 통신을 이용한다고 하는데 여기에서 메시지 컨버터를 제대로 느낄 수 있을것 같다.
"답변하기" 버튼을 눌렀을 때 디비에 그 값들은 잘 전달이 된다. 근데 화면에 출력이 안된다.
값은 분명히 잘 전달되었기 때문에 뷰에서 문제가 있다고 생각했다. 일단 자바지기님 영상을 다시 보면서 완전 똑같이 따라했는데도 작동이 안되었다.
그래서 다른 팀원들의 PR된 코드를 보면서 어떤 점이 다른지 모두 확인을 해보았지만 별 다른점을 찾을 수가 없다.
내가 무슨 실수를 했는지 어떻게 찾아야할지를 몰라서 결국에 같은 팀원 분들에게 직접 코드를 보여주면서 여쭤봤다.
그랬더니 바로 해결 됐다. 문제는 단지 Getter가 없었던 것. ㅠㅠ
Getter 전부 있었는데 @OneToMany 해줬던 List만 유일하게 Getter가 없었던 것이다....너무 허무했다. 하지만 물어보길 잘했다.
잘못 pull해서 커밋 완전 망가졌는데 이 명령어 하나로 다시 원위치 됐다. 살았다.
git reset --hard ORIG_HEAD
pull이나 merge하는 경우에 ORIG_HEAD를 남기게 되는데 pull을 잘못 받거나 merge를 잘못하면 이 명령어를 쓰면 된다
git pull origin 브랜치이름
git pull 잘못사용하면 커밋 엉망진창된다.
먼저 로컬에서 reset, revert 를 이용해서 푸쉬하고 싶은 시점으로 간다. 그리고 -f (강제) 를 이용해서 푸쉬한다.
git push -f origin 브랜치이름
깃 명령어를 익히는 것도 좋지만 그래프를 보고 무엇을 해야 할지 스스로 선택하는 게 더 좋아요. 화이팅!