Closed
Description
이슈 개요
BoardQueryAdapter(RDB Adapter)
// 기존 코드
@Override
public Optional<Board> findById(Long id) {
return boardEntityMapper.toOptionalDomain(
getQuerydsl().createQuery()
.select(boardEntity)
.from(boardEntity)
.where(
boardEntity.id.eq(id),
boardEntity.status.ne(BoardStatus.REMOVED)
).fetchOne()
);
}
현재 BoardQueryAdapter의 findById와 findAll 메서드는 상태가 REMOVED인 게시글을 조회하지 않도록 설계되어 있습니다. 2025년 1월 15일에 진행된 라이브 코드 리뷰에서 이 문제에 대한 논의가 필요하다는 의견이 있어, 이를 이슈로 등록하게 되었습니다.
아래의 관점 외에도 추가적으로 제시할 의견이 있다면 함께 논의해보면 좋겠습니다.
- 관점 A : 메서드 명을 그대로 사용하고 REMOVED 필터를 사용하지 않습니다.
- REMOVED 상태인 게시물을 DB에서 포함하여 조회하면, 사용자에게 해당 게시물이 삭제되었다는 정보를 제공할 수 있습니다.
- 관점 B : 메서드 명에 REMOVED 상태를 제외한다고 명시하고 REMOVED 필터를 사용합니다.
- REMOVED 상태인 게시물을 DB에서 제외하고 조회하면, 사용자에게 해당 게시물이 삭제되었다는 정보를 제공이 어렵습니다.
- 게시물이 실제로 존재하지 않는 경우와 존재했던 게시물이 삭제된 경우는 명확한 차이가 있습니다.
- 사용자의 실수나 악의적인 게시글 ID 입력에 대한 적절한 처리가 필요합니다. 이러한 처리는 사실상 비효율적이며 적합하지 않다고 생각합니다.
- REMOVED 상태인 게시물을 DB에서 제외하고 조회하면, 사용자에게 해당 게시물이 삭제되었다는 정보를 제공이 어렵습니다.
부연 설명
관점 A : 메서드 명을 그대로 사용하고 REMOVED 필터를 사용하지 않습니다.
@Override
public Optional<Board> findById(Long id) {
return boardEntityMapper.toOptionalDomain(
getQuerydsl().createQuery()
.select(boardEntity)
.from(boardEntity)
.where(
boardEntity.id.eq(id)
).fetchOne()
);
}
관점 B : 메서드 명에 REMOVED 상태를 제외한다고 명시하고 REMOVED 필터를 사용합니다.
@Override
public Optional<Board> findByIdExcludingRemoved (Long id) {
return boardEntityMapper.toOptionalDomain(
getQuerydsl().createQuery()
.select(boardEntity)
.from(boardEntity)
.where(
boardEntity.id.eq(id),
boardEntity.status.ne(BoardStatus.REMOVED)
).fetchOne()
);
}