data class CardResponse(
val id: Long,
val title: String,
val content: String,
val date: LocalDateTime,
val author: String,
val complete: Boolean,
val comments : List<CommentResponse> ?= null
)
API에서 요청에 따른 응답 중 comments를 답해야 할 상황이 있어 위 코드를 추가했다.
cardResponse에서 List CommentResponse를 불러오는 이유는
CommentEntity와 CommentResponse가 서로 다른 클래스이기 때문이다.
나도 처음 코드를 작성할 때에는 CommentEntity를 불러와,
comments data를 활용하려고 했었는데 디버그 중 문제점들을 확인했다.
CommentEntity는 DB에 저장되는 엔티티 클래스이고,
CommentResponse는 클라이언트에게 응답으로 보내는 DTO 클래스이다.
DB에서 요청하는 내용과 클라이언트의 요구사항이 다를 수 있기에
서로의 분리가 필요하다.
예시로 Entity에서는 비밀번호와 개인정보 등 민감한 정보가 있을 수 있지만,
DTO에서는 해당 내용들을 제외할 수 있다.
또한 Entity 클래스에서는 다른 Entity와의 관계가 있을 수 있지만
DTO 클래스에는 그런 관계를 단순화하거나 풀어낼 수 있다.
Response에 Entity를 담을 경우 발생할 수 있는 문제점들이 많다.
따라서 cardResponse에서 List CommentResponse를 불러오는 것은
CommentEntity를 CommentResponse로 변환하여 클라이언트에게 보내기 위한 것이다.
클라이언트는 필요한 정보만 받을 수 있고, Entity 클래스의 변경에 영향을 받지 않게 되었다.