@Enablejpaauditing
문제
- 게시글을 수정할 때, CreatedAt/ModifiedAt 값이 null로 반환되는 문제
해결
- @Enablejpaauditing 어노테이션 추가
@EnableJpaAuditing
@SpringBootApplication
public class HanghaebnbApplication {
public static void main(String[] args) {
SpringApplication.run(HanghaebnbApplication.class, args);
}
}
+추가 자료)
- Jpa Auditing 를 활성화시키는 annotation 입니다.
- Spring Audit 기능 : Spring Data JPA 에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 됩니다.
createdAt, modifiedAt 값이 String 타입이 아니라 배열로 반환됨
문제
- createdAt, modifiedAt 값이 String 타입이 아니라 배열로 반환됨
해결
- ResponseDto에 @JsonFormat(shape = JsonFormat.Shape.*STRING*, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") 추가
기술 매니저님 피드백)
경우에 따라 배열로 반환해 주는게 프론트엔드에서 값을 처리하기 편할 수도 있다. 따라서 이 부분은 상황에 맞게 반환타입을 주는게 좋다.
필터링 + 페이징 (with Spring Data JPA)
문제
- 페이징과 카테고리별/가격별 조회를 한 번에 하려다보니 쿼리가 복잡해져서 Spring Data JPA의 Query Method만으로는 조회가 어려운 상황이었다.
- @Query 어노테이션과 native query를 이용하여 해결하려 하였으나 native query와 페이징을 함께 사용하기가 까다로웠다.
해결
- countQuery를 이용하여 query문을 작성하고, @Param 어노테이션을 함께 사용하여 메서드를 생성하여 해결하였다.
@Query(countQuery = "select count(*) from room r where (r.price between :minPrice and :maxPrice) and r.type = :type", nativeQuery = true)
Page<Room> findByPriceBetweenAndType(@Param("minPrice") int minPrice,
@Param("maxPrice") int maxPrice,
@Param("type") String type,
Pageable pageable);
데이터 전달 시 타입 지정
문제
- String type으로 매개변수를 받아올 때 공백문자가 섞이는 에러발생
- 포스트맨에서 body - text로 놓고 {}없이 그냥 String 썼어야 함. 여태까지는 왜 이런 에러가 발생 안 했는지 생각해보니 여태까지는 dto로 받았었음.
해결
- 이 문제를 해결하기 위해 제네릭스를 사용해서 해결했다가, 코드의 통일성위해 dto로 responsebody로 json형식으로 받아오는 방식으로 바꿈.
if-else와 try-catch
문제
- if-else문 내부 throw → 특정 조건에서만 던져지는 exception
해결
- try-catch문으로 변경.
- catch시 try코드에서 어떤 exception이 터질지 알고있으니 그게 맞게 작성해주면 된다.
- ? → 지금은 IOException이나 직접만든 CustomException 두개로 catch를 하고있지만 에러가 더욱 많아지면 계속 해서 catch문을 추가해서 해당하는 에러를 잡아야하나?
- ! → 자바가 기본 제공하는 Exception중 해당 exception이 상속받는 상위 상위 상위 exception이 존재한다 초기에는 적절한 exception을 catch문으로 사용하여 잡으면 넓은 범위의 catch로 핸들링 할 수 있으며 이 범위는 최적화 과정에서 줄여나가면 된다.
'항해99 개발 일지 > [7주차] 클론 프로젝트' 카테고리의 다른 글
[10] 프로젝트 정리 (0) | 2023.01.01 |
---|---|
[08] 에러처리 Exception (0) | 2023.01.01 |
[07] Swagger (0) | 2023.01.01 |
[06] Spring 이메일 인증 구현 (1) | 2023.01.01 |
[05] Spring 페이징처리 + 키워드 검색기능 구현 (0) | 2022.12.30 |