AJAX란?
Asynchronous JavaScript and XML 비동기적인 웹 애플리케이션 제작을 위한 웹 개발기법
기존의 웹 애플리케이션은 브라우저가 서버로부터 받은 페이지가 중복적인 부분이 생기는 경우가 있는데 이때마다 페이지 전체를 전달받아서 대역폭의 낭비가 발생한다.
반면 AJAX 애플리키션은 필요한 데이터만 서버에 요청해서 받는다. 웹서버의 응답을 처리하기 위해 클라이언트 쪽에서 자바스크립트를 쓴다.
웹서버에서 전적으로 처리되던 데이터 처리가 일부분은 클라이언트에서 처리된다. 따라서 서로 교환하는 데이터량과 서버의 데이터 처리량이 줄어서 응답성이 향상된다.
6-1. AJAX를 활용한 답변 추가 1
6-2. AJAX를 활용한 답변 추가 2
댓글 작성하기 버튼을 누르면 서버로 데이터 전송이 되지 않도록 변경한다.
/questions/{{id}}/answers와 /api/questions/{{id}}/answers ??
api를 앞에 붙이면 html이 아닌 json과 같이 데이터만 응답으로 보낸다는 뜻
answerRepository.save(answer)의 리턴값은 answer가 된다.
스프링 MVC가 컨트롤러에 해당되는 create메소드를 알아서 json으로 변환해주는가?
→ No, @RestController 가 필요하다.
@JsonProperty
자바 객체에서 json 데이터로 변환하고 싶은 필드에 어노테이션을 붙여준다.
Could not write JSON: Infinite recursion (StackOverflowError); 에러
20190720 [문제해결] Infinite recursion (StackOverflowError)
원인 : 양방향 매핑을 해서
@RestController를 붙인 컨트롤러에서 값을 반환하면 객체를 JSON 타입으로 ObjectMapper가 변환시켜준다. 여기서 JSON 타입에 대한 무한루프가 발생하고 스택오버 플로우가 뜬다.
블로그에 나온대로 양방향 매핑을 맺은 필드에 대해 어노테이션을 붙인다. (@JsonManagedReference, @JsonBackReference)
// Question class
@OneToMany(mappedBy = "question")
@OrderBy("id asc")
@Where(clause = "deleted = false")
@JsonManagedReference
private List<Answer> answers = new ArrayList<>();
// Answer class
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_answer_to_question"))
@JsonProperty
@JsonBackReference
private Question question;
이렇게하니깐 해결되었다
Ajax 장점만 알고 단점은 잘 몰랐는데 단점이 더 많은 것 같은 건 기분탓일까요..?😂