Spring(29)
-
JPQL은 만능이 아니다!
Spring Boot JPA JPQL 문제 JPQL은 만능이 아니다 되게 오랜만에 글을 쓰네요! 입사를 하고 나서 바쁘고,, 돈을 받으니 하고 싶었던걸 하다보니 블로그 작성을 하지 않았는데 .. 껄껄 다시 작성하려고 합니당 이번에 맞닥드린 문제는 JPQL를 사용하면서 데이터를 뽑아낼 때 처한 문제를 풀어내보려고 합니다. 일단 제목이 스포를 해버렸네요ㅎㅎ 조회 쿼리 Client에서 RequestParam으로 데이터를 받아서 해당 되는 데이터를 DTO로 핏하게 보내주는 작업을 하고 있었습니다. @Query ( "SELECT new com.imaslab.fms.dtos.car.OnsiteServiceReceiverManageDTO(fu.id, fu.name, fu.phone, fc.name, rs.id, rs..
2021.12.23 -
[Spring] BDDMockito VS Mockito
BDDMockito VS Mockito 최근 테스트 코드를 작성하는 것에 재미가 들려서 내가 이해할겸 정리해본다.🥸 순수 Mockito에서 BDD의 Given / When / Then을 위해서 다음과 같이 when( obj ) 메서드와 thenReturn() 이용하고 verify() 구문을 이용해 검증한다. 이런식으로 특정 상황에 대한 (when과 같이) 우리가 가짜로 결과를 만들어 주는 것을 Stubbing(스터빙) 이라고 한다. 즉, 가짜로 수행할 객체를 넣어주는 것이다. when(phoneBookRepository.contains(momContactName)) .thenReturn(false); phoneBookService.register(momContactName, momPhoneNumber);..
2021.08.12 -
[Spring] TDD VS BDD
TDD 란? Test Driven Development TDD는 Test Driven Development으로 테스트가 개발을 주도한다는 개념으로 사용된다. TDD는 테스트를 먼저 만들고 테스트를 통과하기 위한 행동들이 모두 개발을 주도하는 것을 목표로 한다. TDD 예제 Step 1. 우선 만들고 싶은 Class와 해당 TestClass를 생성한다. public class Example { } class HelloBotTest { ExampleTest helloBot = new ExampleTest(); } Step 2. 내가 원하는 기능을 만들고 반환값이 있는지 없는지 만들고 TestClass를 작성한다. public class Example { } class HelloBotTest { Example..
2021.08.12 -
@Mock객체를 사용해서 Page타입 객체 테스트코드 작성하기
Mock을 사용해서 Page타입 테스트 코드 작성하기 Page타입을 어떻게 테스트 코드를 짜야할까..? @Mock 객체는 빈 껍데기에 불과하기 때문에 @Mock객체에서 실행되는 메서드의 결과값을 미리 선언해둬야한다. → 이 부분 때문에 Page타입의 리턴값을 어떻게 미리 작성을 해야할까 라는 의문이 되었다...!!! 단위 테스트를 하고 싶은 곳은 어디인가 Service단에서 매개변수로 받은 데이터로 Repository에서 잘 데이터가 가공되서 넘어오는지를 검사하고 싶었다. devicePacketLogRepository.findAllByDeviceIdentityAndIdLessThanAndCreationDateTimeBetweenOrderByCreationDateTimeDesc(deviceIdentity,..
2021.07.29 -
[Spring JPA] 즉시로딩과 지연로딩
즉시로딩과 지연로딩 Member를 조회할 때 Team도 함께 조회해야 할까? 단순히 member 정보만 사용하는 비즈니스 로직 Println(member.getName()); 지연로딩 LAZY을 사용해서 프록시로 조회 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @ManyToOne(fetch = FetchType.LAZY)//이 부분이 LAZY @JoinColumn(name = "TEAM_ID") private Team team; 지연로딩 지연 로딩 LAZY을 사용해서 프록시로 조회 Member member = em.find(Member.class, 1L); Team team = ..
2021.06.28 -
Spring JPA [상속관계 맵핑]
상속관계 매핑 관계형 데이터베이스는 상속 관계 X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 ➔ 조인 전략 통합 테이블로 변환 ➔ 단일 테이블 전략 서브타입 테이블로 변환 ➔ 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn public class Item { @Id @GeneratedValue ..
2021.06.17