요구사항 페이지는 계층구조를 가지고 있고, 상위 페이지가 삭제되면 하위 페이지까지 개념적으로 삭제된다. 즉 페이지 하위에 페이지가 무한대로 있을 수 있는데, 상위 페이지가 삭제되면 하위 페이지까지 UI에서 보이지 않아야 한다는 이야기. 고민 포인트1 Hierarchy를 가진 비슷한 예로 대댓글이 무한대로 펼쳐지는 것을 생각해볼 수 있는데, 보통 댓글의 정책은 대댓글이 있으면 삭제를 막던가, 혹은 삭제된 단일 댓글에 대해서만 삭제된 댓글입니다 와 같이 보여준다. 그러나 페이지는 그렇게 처리할 수 없다. 단일 페이지는 단일 화면에서 보이기 때문이다. 보통 삭제 처리는 DB에서 관념적으로 flag 처리를 한다. 때문에 삭제와 복원이 매우 빈번한 페이지의 특성상 하위 페이지의 모든 flag를 바꾸는 것은 무리이다. 물론 주기적으로 batch job을 돌려 업데이트를 해줄 수 있지만.. 일단 보류해본다. 왜냐하면 삭제된 페이지를 복원했을 때, 자식이 실제로 삭제되지 않았으면 똑같이 복원되어야 하기 때문이다 😂 이 경우 플래그를 하나 더 두는 수밖에 없다. isParentDeleted 라던가.. 해결 => recursive query를 하위부터 상위의 방향으로 사용해서 삭제된 부모가 있는지 체크 고민 포인트2 페이지가 삭제되면 휴지통으로 이동하며, 이 페이지가 삭제되었는지 여부를 클라이언트에서 알 수 있어야 한다. 단순히 단일 페이지가(혹은 그 페이지의 먼 조상이)삭제되었는지를 체크할 때는, recursive하게 쿼리를 처리하면 된다. 하지만 페이지 정보를 불러오는 API에서 매 요청마다 recursive 쿼리를 요청하는 것은 오버헤드가 크다. 페이지 정보는 자주 불리기 때문이다. 또 삭제와 복원이 매우 빈번하기 때문에, 삭제 여부를 캐싱하기도 애매하다. 해결 => 삭제 여부를 체크하는 API를 별도로 분리해서 휴지통에서만 사용하도록 처리