🔙 Backend

    JPA :: Query Method 기능

    JPA :: Query Method 기능

    스프링 데이터 JPA 가 제공하는 마법같은 기능이 있다. 바로 “쿼리 메소드” 기능인데, 결론부터 말하면 3가지 기능이 있다. 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용해서 Repository interface 에 쿼리 직접 정의 Method 이름으로 Query 생성 메소드 이름을 분석해서 JPQL 쿼리 실행 예) 이름과 나이를 기준으로 회원을 조회하려면 ? // 순수 JPA Repository public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :us..

    Spring Boot :: Spring Data 패키지 구조

    Spring Boot :: Spring Data 패키지 구조

    Spring Data JPA 를 활용해서 인터페이스를 사용할 때 JpaRepository 를 상속받아서 사용한다. 이 JpaRepository 안에 들어가면 또 다른 Repository 를 상속받고 또 상속받고 ,, 이 구조에 대해서 기록해두고자 한다. 인터페이스 살펴보기 먼저 MemberRepository 라는 레포지토리를 만들어보았다. public interface MemberRepository extends JpaRepository { } 여기서 JpaRepository 안에 들어가보자. 패키지 위치는 org.springframework.data.jpa.repository 이다. JpaRepository 는 PagingAndSortingRepository 를 상속받고 있고, PagingAndSort..

    Spring Boot :: Spring Data JPA

    Spring Boot :: Spring Data JPA

    인터페이스만 정의해도 CRUD 기능을 사용할 수 있다 ? 테스트 코드를 통해서 CRUD 기능이 동작하는지 간단하게 테스트해보자. 테스트 순서 Entity 생성 순수 JPA Repository 생성 후 테스트 Data JPA Repository 생성 후 테스트 Entity 생성 먼저 Member Entity 를 만들자. @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username"}) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String usernam..

    JPA :: Auditing 엔티티 공통 정보 추가하기

    JPA :: Auditing 엔티티 공통 정보 추가하기

    Auditing JPA 에서 도메인을 RDB 테이블에 매핑할 때, 도메인들이 공통으로 가지고 있는 필드들 존재 생성일자, 수정일자, 생성자, 수정자 등 JPA 에서 Audit 기능 제공 Spring Data JPA 에서 시간 값을 자동으로 넣어줌 Auditing 예시 코드 build.gradle 에 의존성 추가 dependency { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' } 스프링 부트에서 gradle 로 의존성을 관리한다면 spring-boot-starter-data-jpa 만 추가해주면 된다. BaseTimeEntity.java @Getter @MappedSuperclass @EntityListeners(Audi..

    JUnit :: Test 실패 - No tests found for given includes

    JUnit :: Test 실패 - No tests found for given includes

    IntelliJ 에서 JUnit 을 이용해서 테스트를 진행하는 도중 에러가 발생했다. 해결방법은 간단하다. IntelliJ 설정에서 Build, Execution, Deployment > Build Tools > Gradle 로 들어간다. 아래 화면에서 Run tests using 옵션을 Gradle 에서 IntelliJ IDEA 로 변경한다. 끝.

    Spring Boot :: JPA란?

    Spring Boot :: JPA란?

    이동욱님의 스프링 부트와 AWS 로 혼자 구현하는 웹 서비스 와 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 기본편 을 보다가 JPA 에 대해 이해하기 쉽게 설명된 부분이 있어 인용해서 적어보았다. 웹 서비스를 개발하면서 피할 수 없는 문제는 DB 를 다루는 일이다. 특히 백엔드 개발자를 희망하고 공부하면서 느끼는 점은 DB를 다룰 일이 생각보다 많다는 것. 당장 백엔드 프레임워크를 이용해서 어플리케이션 개발에 몰두하기에도 시간이 부족한데, DB는 또 언제 공부하는지.. 어쨌든 RDB 를 이용하는 프로젝트에서 어떻게 객체지향 프로그래밍을 할 수 있을까 에 대한 해답으로 JPA 라는 자바 표준 ORM (Object Relational Mapping) 기술을 만나게 된다. 참고로 MyBatis, i..

    Gradle :: Lombok 추가 시 이슈

    Gradle :: Lombok 추가 시 이슈

    Annotation 을 사용하기 위해 build.gradle 에 dependency 를 추가하는 과정에서 여러 이슈들이 있었다. 오늘은 그 이슈들을 해결하는 과정을 리마인더하기 위해 적어보려 한다. 먼저 lombok 을 사용하기 위해 build.gradle 에 다음 문구를 추가했다. implementation('org.projectlombok:lombok') 이후 아래 DTO 코드에 Annotation 을 추가하고 Unit test 를 진행했다. @Getter @RequiredArgsConstructor public class HelloResponseDto { private final String name; private final int amount; } 테스트 코드를 실행했는데 아래 에러 발생.. h..

    Spring Boot :: 처음 시작하는 Gradle 프로젝트 (build.gradle)

    Spring Boot :: 처음 시작하는 Gradle 프로젝트 (build.gradle)

    spring initializr 를 사용하면 빠르게 spring boot 의 설정을 할 수 있지만, 공부하는 입장에서 build.gradle 의 코드가 무슨 역할을 하는지, 추가로 의존성 추가가 필요하면 어떻게 해야 하는지는 알고 넘어가보자. 먼저 IntelliJ 에서 New Project 로 Gradle 프로젝트를 생성한 후에 build.gradle 파일을 지우고 아래 코드들을 순서대로 작성해보자. 다 작성하고 나면 spring boot 에 필요한 최소 설정은 다 추가되어 있을 것이다. // build.gradle buildscript { ext { springBootVersion = '2.1.7.RELEASE' } repositories { mavenCentral() } dependencies { c..