Back-end/TIL
-
[SpringBoot] @TestInstance / @WithUser & @WithAccount / 중복된 코드에 대한 메서드 분리Back-end/TIL 2022. 3. 21. 09:00
특정 API의 POST와 UPDATE 시 예외처리 코드를 추가하는 업무를 진행했다. 업무를 진행하며 배운 내용에 대해 잊지 않기 위해 작성하였다. 📌 SpringBoot의 테스트 코드 작성시 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 해당 어노테이션은 테스트 인스턴스의 라이프 사이클을 설정할 때 사용한다. PER_METHOD: 테스트 함수 당 1개의 인스턴스가 생성된다. PER_CLASS: 테스트 클래스 당 1개의 인스턴스가 생성된다. 라이프 사이클을 클래스 단위로 설정하면, @BeforeAll, @AfterAll 어노테이션을 static method가 아닌 곳에서도 사용할 수 있다. 장점 매 테스트 메서드마다 클래스의 인스턴스를 생성하는데 필요한 자원이 많을 ..
-
[SpringBoot] ManyToOne으로 설정된 엔티티 조회Back-end/TIL 2022. 3. 17. 09:18
# ManyToOne으로 설정된 엔티티 조회 //예시 Entity @Entity class PharmacyMenu { ... @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "upper_menu_id") private PharmacyMenu upperPharmacyMenu; ... } //예시 Repository 코드 @Query("select pm.id as id, " + "pm.upperPharmacyMenu.id as upperMenuId " + "from PharmacyMenu pm " + "where pm.id = :menuId") Optional findByMenuId(@Param("menuId") Long menuId); 필요한 값은 uppe..
-
[SpringBoot] Repository에서 nativeQuery 사용시 / private final로 변수 선언하는 이유 / Page vs. SliceBack-end/TIL 2022. 3. 16. 09:39
# Repository에서 nativeQuery 사용시 //Bad @Query(...) Page findAll(Pageable pageable); //Good @Query(...) Page findAll(Pageable pageable); public interface DtoVo { Long getId(); } 첫 번째 방식: Object 배열의 인덱스로 접근해야 하므로, 오류 발생 가능성이 크다. 두 번째 방식 interface에 필요한 필드를 불러오는 getter 메서드만 선언해둔다. Spring Data JPA에서 @Query()에서 설정한 변수 값으로 DtoVo에 바로 매핑해준다. (nativeQuery외에 일반 JPQL에서도 동일하게 작동함) //예시 코드 @Query("select pm.id ..
-
[SpringBoot] JPA를 통해 엔티티 반환시 DtoVo 사용하기Back-end/TIL 2022. 3. 16. 09:28
📌 상황 Spring Data JPA를 통해 엔티티 조회시 기존에는 아래와 같이 코드를 작성하였다. //기존 코드 Page findByMenuKorNameContains(String menuKorName, Pageable pageable); Page findByMenuEngNameIgnoreCaseContains(String menuEngName, Pageable pageable); 위의 코드가 틀린 것은 아니지만, 몇가지 문제점이 존재한다. 1. 기존의 방식은 엔티티 자체가 반환되기 때문에 만약 조회시 특정 필드 값만 필요하다면, 불필요한 필드 값이 모두 반환되는 상황이다. 2. 불필요한 필드가 많거나 해당 필드의 타입이 text와 같이 사이즈가 크다면, 성능 이슈가 발생할 수 있다. 즉, 기존의 방식..