전체 글
-
[SpringBoot] 테스트 코드 작성에 대하여 / 멀티 모듈의 장점 / API 설계 및 배포 / 코드 작성 관련(다형성, lombok, import문)Back-end/TIL 2022. 3. 24. 09:16
스타트업 백엔드 인턴으로 근무하며 배운 내용을 까먹지 않기 위해 정리하는 글입니다. 📌 테스트 코드 작성에 대하여 테스트 코드 작성에 대해서 나는 절대적인 기준이 있다고 생각했다. 하지만 회사에서 테스트 코드를 작성하고 팀장님께 피드백을 받으며 테스트 코드 작성에는 절대적인 규칙은 없고, 상황에 따라 적절한 방식을 선택하면 되는 것임을 깨달았다. ▶️ 테스트를 위한 데이터(객체, 변수) 준비를 위한 방법: @BeforeAll vs. @BeforeEach vs. 테스트 메서드 내 //given 테스트를 수행하는데 오래 걸리지 않는 상황리아면 3가지 방식 중 어떤 것을 사용할지는 각 회사의 표준이나 개인의 취향에 따라 많이 갈리는 편이다. 성능 이슈가 발생하는 상황이나 이로인해 테스트가 깨지는 상황이 아니라..
-
[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 ..