개발하는 쿠키
article thumbnail

책과는 다르게 Intellij, Gradle 설정을 사용했습니다.

Intellij 프로젝트 만들기

File > New > Project 를 통해 새로운 프로젝트를 만든다.

Intellij 프로젝트 생성하기

Spring Initializr Generator를 클릭한 후 원하는 프로젝트 이름과 저장소를 정하고, Next를 누른다.

Spring Initializr 사용하기

Lombok, Spring Boot Dev Tools, Spring Data JPA  Depentency를 선택 후 Create를 누른다.

Intellij 에 H2 데이터베이스 연결 설정하기

Intellij 오른쪽 탭에서 Database > + > Data Source > H2 를 선택한다.

H2데이터베이스 서버가 없으면 설치하라는 메시지가 나온다. Download를 클릭해서 설치하면 된다.

h2 데이터베이스 생성하기

build.gradle파일에 들어가 보면 선택했던 dependency들이 설정돼있는 것을 확인할 수 있다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

여기에 jdbc와 h2 데이터베이스 설정을 추가하자.

   // 이 두 가지를 추가해야 한다.
   implementation 'org.springframework.boot:spring-boot-starter-jdbc'
   runtimeOnly 'com.h2database:h2'
   
   // 그러면 build.gradle은 다음과 같아야 한다.
   dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'


    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

설치된 H2 데이터베이스 우클릭 > Create a new database를 눌러서 원하는 데이터베이스 이름과 비밀번호를 설정한다.

h2 데이터베이스 생성하기2

생성된 데이터베이스 정보를 그대로 Intellij H2 Data Source 창에 입력한다.

Test Connection 을 눌러 연결 성공 뜨면 Apply > Ok 를 누르면 된다.

src > recources > application.properties에 h2 데이터베이스 정보를 등록한다.

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:./jpadb
spring.datasource.username=sa
spring.datasource.password=

객체 매핑 시작

@Entity
@Table(name="MEMBER")
public class Member {
	@Id
    @Column(name = "ID")
    private String id;
    
    @Column(name = "NAME")
    private String username;
    
    // 매핑정보 없는 필드
    private Integer age;

}

JPA는 매핑 어노테이션을 이용해서 어떤 객체가 어떤 테이블과 연관 있는지 알아낸다.

@Entity: 이 클래스가 테이블과 매핑한다는 것을 알 수 있다.

@Table: 엔티티 클래스에 매핑할 테이블 정보를 알 수 있다.

@Id: 엔티티 클래스의 필드를 테이블의 기본 키에 매핑한다.

@Column: 필드를 컬럼에 매핑한다.

매핑정보가 없는 필드: 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다.

 

persistence.xml 설정

JPA를 실행하기 위한 기본 설정 파일을 설정해야한다.

우리는 위에서 gradle 및 application.properties 파일 설정을 통해 완료했다.

 

데이퍼베이스 방언

방언: SQL표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능

JPA는 다양한 방언 클래스를 제공한다.

 

애플리케이션 개발

코드는 크게 아래와 같이 3가지로 나뉜다.

- 엔티티 매니저 설정

- 트랜젝션 관리

- 비즈니스 로직

 

엔티티 매니저 설정

엔티티 매니저 생성 과정

- 엔티티 매니저 팩토리 생성

persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성한다.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");

엔티티 매니저 팩토리를 생성하는 비용은 아주 크다. JPA를 동작시키기 위하니 기반 객체, 데이터베이스 커넥션 풀을 생성하기 때문이다.

따라서 애플리케이션 전체에서 1번만 생성하고 공유해야 한다.

 

- 엔티티 매니저 생성

EntityManager em = emf.createEntityManager();

엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다.

엔티티 매니저를 사용해서 엔티티를 데이터베이스에 CRUD 한다.

엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안 된다.

 

- 종료

마지막으로 사용이 끝난 엔티티 매니저, 엔티티 매니저 팩토리는 다음처럼 종료해야 한다.

em.close(); // 엔티티 매니저 종료
emf.close(); // 엔티티 매니저 팩토리 종료

 

트랜젝션 관리

JPA를 사용하면 트랜잭션 안에서 데이터를 변경해야 한다.

EntitTransaction tx = em.getTransaction();
try {

    tx.begin(); // 트랜잭션 시작
    logic(Em); // 비즈니스 로직 실행
    tx.commit(); // 트랜잭션 커밋
    
} catch (Exception e){
    tx.rollback(); // 예외발생시 트랜잭션 롤백
}

 

비즈니스 로직

JPQL

// 목록 조회
TypedQuery<Member> query = em.createQuery("SELECT m FROM MEMBER m", Member.class);
List<member> members = query.getResultList();

 

정리

JPA환경 설정 및 객체를 이용해 테이블에 CRUD 하는 애플리케이션을 만들었다.

코드량이 줄고, SQL을 자동생성해 주는 것은 JPA의 극히 일부분이다.

다음장을 통해 핵심 기능인 영속성 관리에 대해 알아본다.

 


참고자료

- https://www.yes24.com/Product/Goods/19040233 "자바 ORM 표준 JPA 프로그래밍-김영한"

반응형
profile

개발하는 쿠키

@COOKIE_

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!