코드리뷰 후 Spring 기술 매니저님에게 받은 질문을 아래와 같이 정리해보았다.
@RequiredArgsConstructor 어노테이션은 boardService dependcy를 주입시키기 위한 어노테이션입니다. 자동적으로 constructor를 생성해줍니다.
BoardController를 예시로 들으면 private final BoardService boardService를 먼저 인스턴스 변수로 만든 뒤 아래와 같이 코드를 직접 작성해야합니다.
public BoardController (BoardService boardService) {
this. boardService = boardService;
}
@Getter 어노테이션을 사용함으로써 getter 메서드가 해당 클래스의 모든 개인 필드에 대하여 자동적으로 생성이 되었습니다. 해당 메서드를 사용하여 외부에서 액세스 할 수 있습니다.
@Setter 어노테이션을 사용할 수는 있지만 모든 필드를 언제든지 업데이트 할 수 있는 위험이 있어 Board entity에는 적합하지 않다고 생각했습니다.
반면, update 메서드를 생성해서 쓰는 이유는 캡슐화가 가능하고 유지 보수에 더 수월하다고 생각하였습니다.
해당 부분에 추가적으로 설명해주시면 큰 도움이 될 것 같습니다.
Board Entity에서 반환할게 없으므로, dto를 사용하여 사용자에게 잘 삭제 되었다는 메시지를 보내기 위해 사용하였습니다.
게시판을 삭제하기 전에 사용자가;
board에서는 아이디와 매칭하는지 board1에서는 비밀번호가 정확하게 매칭하는지
확인하기 위해 board와 동일하게 사용하였는데,
굳이 필요가 없을 것 같아 아래와 같이 수정하였습니다.
Board board = boardRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
boardRepository.findByIdAndPassword(id, password).orElseThrow(
() -> new IllegalArgumentException("비밀번호가 일치하지 않습니다.")
);
boardRepository.deleteByIdAndPassword(id, password);
return new ResponseDto(true, "Deleted Successfully");
}