댓글 구현


연관 관계가 이어져 있다는것을 설명하고자 한다.
- Board class를 보게 되면 reply를 호출하면 Reply가 호출이 될테고 다시 Reply에서 Board를 호출을 하면서 계속해서 반복되기 떄문에 무한참조가 일어나게 된다.
이를 막기 위해서 다양한 처리를 할수가 있는데 그중 하나는 @JsonIgnoreProperties 이다
@JsonIgnoreProperties({"board"})
- 만약 Board를 통해서 Reply를 호출하고 이후 Reply에서 Board를 호출하게 될떄 어노테이션을 추가하게 된다면
- Board에서 Reply를 호출할떄 하나의 조건을 추가하는데 바로 {board}라는 변수는 호출을 하지 말라는 의미이다.
detail.jsp

- 댓글 창을 구성하는 jsp이다.

- 이런식으로 구성이 된다.
board.js

- detail.jsp에서 값을 받아오면 js에서 받아온값으로 송신을 해주는 코드이다.
-> 값을 받아올수 있는 이유는 Model을 통해서 detail.jsp에 들어갈떄 값을 뿌려주기 떄문이다.
api

- board.js에서 지정한 url로 받아주기 위해서 api를 구성하였다.
Service

- 어려운 로직은 없기 떄문에 부가적인 설명은 생략하겠다.
dto, Autowired의 원리
데이터를 받을 떄 보통은 컨트롤러에서 dto를 만들어서 받는것이 좋다.
- dto를 사용하지 않은 이유는 프로젝트가 작기 떄문에
-> 거대해진다면 데이터가 많아지기 때문에 dto를 사용하는 것이 좋다.
Dto

- 들어오는 값을 받아줄 class를 만들고 들어오는 값에 해당하는 변수들을 입력해 준다.
Service

- 기본 댓글쓰기의 로직을 수정한 것이다.
- 영속화를 위해서 Dto에 저장한 값을 이용하여 board와 user를 찾고 그후 builder를 이용해 값을 저장한것이다.
Api

- 기본 댓글쓰기 로직을 수정한 것이다.
- 많은 값을 따로따로 받기 보다는 Dto에 설정한 값만을 받으면 코드가 한결 간결해지고 가독성이 좋아진다.
Autowired = DI의 일종
생성자를 대체해주는 어노테이션
시스템이 시작을 할떄 Spring 컨테이너 = Ioc에 Bean을 저장을 한다.
이후 new를 해서 사용을 할떄 Ioc에 있는 Bean을 사용해서 주입을 시켜준다.

- 이것과 같은 역할을 해주는 것이 @Autowired이다.

- 좀더 간단한 방법이다.
역할을 모두 @Autowired를 사용했을떄와 같다.
댓글 삭제 부분은 나중에 구현해보도록 하겠다..