GET /api/travel-logs (파라미터로 tripId, location, logDate 등 전달)getTravelLogsByTrip):tripId)에 속한 여행일지 목록을 조회합니다.TravelLogResponseDto):travel-log-list.html): 필터링 및 검색을 위한 입력 필드, 페이지네이션 컨트롤, 그리고 여행일지 목록이 표시될 영역을 구현했습니다. 로딩, 빈 상태, 에러 상태에 대한 UI도 함께 처리했습니다.travel-log-list.js):GET /api/travel-logs/{travelLogId}TravelLogService.getTravelLogDetail: 여행일지의 기본 정보(제목, 내용, 별점 등)를 조회합니다.GET /api/travel-logs/{travelLogId}/tagsTravelLogService.getTagsByTravelLog: 해당 여행일지에 연결된 모든 해시태그 목록을 조회합니다. 이를 위해 TravelLogTagRepositoryCustom을 구현하여 복잡한 조회 로직을 처리했습니다.GET /api/photos/{travelLogId}TravelLogService.getPhotos: 해당 여행일지에 첨부된 모든 사진 목록을 사용자가 지정한 순서대로 정렬하여 조회합니다. (findByTravelLogOrderByDisplayOrderAsc)travel-log-detail.html): 사진을 넘겨볼 수 있는 캐러셀, 해시태그 목록, 본문 영역 등 상세 페이지 UI를 구성했습니다.travel-log-detail.js):기능 구현과 함께, 데이터 계층의 역할을 명확히 하고 효율성을 높이기 위해 Repository와 DTO 설계를 고도화했습니다.
커스텀 Repository: TravelLogTagRepositoryCustom과 같이, 단순 CRUD를 넘어선 복잡한 조회(e.g., 특정 여행일지의 태그 조회)는 별도의 커스텀 Repository로 분리하여 구현했습니다. 이는 기본 Repository의 역할을 명확하게 유지하고 코드의 유지보수성을 높입니다.
View 맞춤형 DTO: TravelLogResponseDto, TravelPhotoResponseDto 등 각 API의 응답 목적에 맞는 전용 DTO를 설계했습니다. 이를 통해 엔티티를 외부에 직접 노출하지 않으면서, 클라이언트가 필요로 하는 데이터만 가공하여 전달하는 효율적인 구조를 만들었습니다.