CODE SQUAD/FeedBack 정리

[Review] 스프링 카페 6단계 - 댓글 (2022/03/17)

샤아이인 2022. 3. 25.

 

 

[Shine] 스프링 카페 6단계 - 댓글 by zbqmgldjfh · Pull Request #120 · codesquad-members-2022/java-spring-cafe

안녕하세요! Shine 입니다! 우선 리뷰를 해주시는 리뷰어 님께 감사의 인사를 전합니다! 이번 과제를 수행하며... 요구사항에서는 게시물에 자신이 쓴 댓글이 있으면 삭제 불가라 되어있지만... 그

github.com

1. 질문

질문 1) 댓글을 작성하면 Session은 뷰, 서버 중 어디서 넘겨야 하는가?

이번 댓글 기능 구현 에 사용한 DTO는 다음과 같습니다.

public class ReplyDto {
    private String userId;
    private String contents;
    // 생략...
}

이를 통해 사용자로부터 댓글의 내용과, 세션에 저장된 userId를 넘겨 받게 됩니다.
여기서 질문이 있습니다!

  1. 컨트롤러에서 처리하기
    아니면 그냥 Controller에서 contents만 받은후, 컨트롤러에서 session에 접근하여 userId를 가지고 오는 방법이 있습니다.
  2. 뷰에서 session정보 함께 넘기기
    userId를 html상에서 제출을 누를때 Thymeleaf의 session 속성을 통해 contents와 함께 보내고 있습니다.
    왜냐하면 사용자가 댓글을 달기 위해 넘어오는 정보에 contents와 session 정보가 담겨있어야 한다고 생각했기 때문입니다.
 
<input type="hidden" th:value="${session.SESSIONED_USER.userId}" name="userId">

일단 2번 방식을 선택했습니다. 어떤 방식이 더 적합할까요? => 다시 일단 1번 방식으로 변경 (생각이 왔다 갔다...)

 

답변

 

2. 코드 리뷰

1. Enum 사용이 적절한가?

 

2. QueryLoader의 사용

이에 대한 나의 생각은 다음과 같았다.

리뷰어의 생각에 대하여 바로 받아드리기가 힘든것 같다.

Query.yml로 따로 쿼리만을 모아 관리하면 분명 편한데?... 어떻게 각 class 마다 하드코딩한게 더 편한걸까?

이게 Test 코드 였다면 인정할 수 있다. Test 코드는 상수로 뽑거나, 쿼리를 외부 파일에서 관리 하면 테스트를 바로 이해하기 어렵기 때문에 그러한 방식은 피한다고 읽은적 있다.

 

하지만 위 코드는 production 코드이다. 마이바티스도 따로 XML로 쿼리만을 관리 하는데.... 왜 이방식이 더 어렵다 하는것 일까?

좀더 의견을 듣고 싶지만.... 답변이 8일째 달리지 않는다...

최근 다시 확인해 보니 답변을 달아 주셨다!!

여기서 리뷰어 님과의 생각 차이가 조금 생긴것 같다. 리뷰어 님이 리뷰가 잘 이해가 된다.

다만 아직 난 위에서 언급한 "불상사" 를 몸소 채험하지 못했기 때문에 조금은 납득할수 없는 부분도 있는것 같다.

 

향후 개발을 진행하다보면 위 리뷰어 떠오르는 순간이 있을것 같다.

그때 Wheejuni 님께 답장을 꼭 보내며 감사의 말을 다시한번 전해야 겠다.

 

3. Interface 의 사용

상수를 정의하면서 객체 생성을 막기 위해 interface를 사용했는데... 이는 적절하지 못했던 방식인것 같다.

생성자 자체를 private 로 막아 사용해야 겠다!

댓글