blog - 14

Lumi·2021년 8월 25일
0
post-thumbnail

댓글 구현



연관 관계가 이어져 있다는것을 설명하고자 한다.

  • 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를 사용했을떄와 같다.

댓글 삭제 부분은 나중에 구현해보도록 하겠다..

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글