jpa

    QueryDsl에서 DTO로 조회할 때 @QueryProjection 사용하기

    지난 포스트에서 QueryDsl을 사용해서 DTO를 조회할 때 다음과 같이 했습니다.import static org.프로젝트.account.entity.QAccount.account;import static org.프로젝트.member.entity.QMember.member;@RequiredArgsConstructorpublic class MemberRepositoryImpl implements MemberRepositoryCustom { private final JPAQueryFactory query; @Override public Optional findMemberProfile(Long memberId) { return Optional.ofNullable( query ..

    SpringDataJpa와 QueryDsl 함께 사용하기 (feat. @DataJpaTest)

    SpringDataJpa를 사용하면 JpaRepository를 implements 한 레포지토리를 통해 쉽게 쿼리문을 만들어 사용합니다.하지만 조금 더 복잡한 쿼리를 작성하려고 한다면 @Query 등을 사용하여 JPQL문을 작성해줘야 하죠.JPQL을 작성할 때에는 텍스트(ex - "select m.id from member m")로 작성해야 합니다.그러다 보면 자칫 오타가 나더라도 컴파일 시에는 확인할 수 없고 런타임에 발견되어 예상치 못한 문제가 발생될 수 있습니다.QueryDsl은 모두 Java 코드로 이뤄져 있어 컴파일 시에 오타를 확인할 수 있습니다.또한, 일부 로직을 메서드로 만들어 재사용할 수도 있죠.이러한 장점들은 복잡한 쿼리문을 작성할 때에 매우 유리하게 작용될 수 있다 생각합니다. 제가 ..

    단위 테스트 - Service (feat. 테스트 더블)

    [사용 스택]- Spring Boot 3.x- Java 17- Spring data JPA- H2- Junit 5- mockito 레포지토리 테스트에 이어서 서비스에서 단위 테스트를 작성한 방법을 소개하겠습니다. Service서비스의 역할은 레포지토리를 사용하여 데이터를 요청하고 가져온 데이터로 비즈니스 로직을 수행하는 것입니다.서비스를 테스트하기 위해서는 레포지토리를 주입받아야 하는데,이 레포지토리가 실제 의존성을 주입받아 사용된다면,서비스를 테스트하는 단위 테스트라고 말하기 어렵습니다.(오히려 서비스와 레포지토리 모두를 한 번에 테스트하는 통합 테스트라고 생각합니다.)그렇기 때문에 레포지토리의 의존성을 줄여줄 필요가 있습니다.이를 위해 테스트 더블(Test Double)을 사용할 것입니다!! 테스트 ..

    단위 테스트 - Repository (feat. 테스트 픽스쳐)

    [사용 스택]- Spring Boot 3.x- Java 17- Spring data JPA- H2- Junit 5- mockito  기존에 진행했던 프로젝트를 혼자서 리팩터링 하기로 했습니다.리팩터링을 진행하면서 기존의 비즈니스 로직을 헤치는 일이 생기지 않도록테스트 코드를 작성할 필요가 있었습니다.또한, SpringBootTest를 사용하는 것은 전체를 부팅하면서 시간이 오래 걸린다는 단점이 있어서 단위 테스트에는 적합하지 않다고 생각하고 다른 것들로 대체해서 사용했습니다.테스트 코드를 작성하는 순서는 다른 클래스들과의 의존성이 가장 낮은 레포지토리부터서비스, 컨트롤러 순으로 했습니다. Repository레포지토리 테스트는 @DataJpaTest 를 사용했습니다.이를 사용하면 Jpa 테스트에 필요한 빈..

    [Spring Boot] JPA - MySQL

    Mybatis vs JPA MySQL 데이터베이스를 연결하는 방법으로 두 가지 중 어떤 방법을 선택할지 고민했습니다. Mybatis는 직접 쿼리를 작성한 후 XML 또는 어노테이션을 사용해서 데이터 맵핑을 하는 방법이고, JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공해주어서 쿼리를 작성할 필요가 없습니다. Mybatis를 사용해봤던 경험으로 저는 Mybatis를 사용하면서 장기간 프로젝트를 이어나가면 코드가 조금 복잡할 수 있겠다 생각했습니다. (물론 제가 실력이 부족해서..ㅎㅎ) JPA를 사용할 경우 얻을 수 있는 장점으로 여러 가지가 있겠지만 저는 밑에 있는 이유 때문에 JPA를 선택했습니다. - 코드를 더욱 간결하게 만들 수 있습니다. - 보다 높은 유연성과 확장성을 제공합니다. 아직 JPA..