[JPA] ORM과 JPA 이해하기
1. 서론
Spring Framework의 많은 프로젝트를 보면 많은 사람들이 JPA라는 기술을 사용한다. 오늘은 이 JPA라는 기술에 대해 설명해보고자 한다.
2. ORM
JPA를 알기 위해서 우선 ORM 이라는 것에 대해 알아보자. ORM 이란 Object-Relational Mapping의 약자이다. ORM은 SQL을 사용하지 않고 데이터베이스를 관리할 수 있는 도구이다. 데이터베이스에 테이블을 만들고 CRUD 기능을 사용하기 위해서는 SQL 쿼리를 데이터베이스 서버에 전달해야 한다. 하지만 코드만으로 이런 SQL 쿼리를 대신할 수 있도록 도와주는 것이 ORM이다.
예를 들어보면 User라는 테이블에 id, name, age라는 열이 있다고 가정하자.
id | name | age |
1 | 금장 | 26 |
2 | 준범 | 24 |
... | ... | ... |
이런 User 테이블에 데이터를 저장하기 위해서는 아래와 같은 SQL 쿼리를 작성해야 한다.
INSERT INTO User (id, name, age) values (1, '금장', 26);
INSERT INTO User (id, name, age) values (2, '준범', 24);
이러한 SQL 쿼리 대신 ORM을 이용한다면 아래와 같은 코드로 대체될 수 있다. (Java 기준)
User user1 = new User();
user1.setId(1);
user1.setName("금장");
user1.setAge(26);
User user2 = new User();
user2.setId(2);
user2.setName("준범");
user2.setAge(24);
위와 같이 자바 코드만으로 데이터베이스에 CRUD 기능을 이용할 수 있는 것이 ORM이다. 예전 Django Framework로 개발할 때에도 ORM이라는 것을 사용한 적이 있다. Django 같은 경우 따로 설치 없이 프레임워크 자체적으로 지원을 해주기 때문에 하나의 큰 장점이라고 생각했다.
3. JPA 란 무엇인가
JPA는 Java Persistence API의 약자이다. Spring boot는 JPA를 ORM 기술의 표준으로 사용한다. JPA는 인터페이스로 이루어져 있기 때문에 이를 이용하기 위해서는 구현체가 필요하다. JPA의 구현체는 대표적으로 Hibernate 가 있다. 앞으로 데이터베이스를 관리할 때는 JPA와 Hibernate의 조합을 이용할 것이다.
4. JPA 환경설정
JPA를 이용하기 위해서는 우선 데이터베이스 세팅이 필요하다. 간단한 테스트를 위해서는 H2 데이터베이스를, 이외의 경우에는 MySQL, PostgreSQL 등 필요한 데이터베이스를 이용하면 될 것 같다.
1. build.gradle 설정
스프링 부트의 build.gradle 파일에서 JPA 관련 의존성을 받아주자.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
의존성을 받고 gradle을 새로 빌드하면 JPA 라이브러리가 설치된다.
2. application.yml
application.yml 에서 필요한 JPA 설정을 해준다.
spring:
jpa:
properties:
hibernate:
format_sql: true # true 설정 시 SQL 쿼리를 보기 쉽게 포맷팅하여 로그에 출력
show_sql: true # 모든 SQL 쿼리를 로그에 출력
dialect: org.hibernate.dialect.PostgreSQLDialect # DB SQL언어 설정
hibernate:
ddl-auto: create # DB가 스키마를 생성, 갱신 또는 유지하는 방법을 지정
# create : DB 삭제 후 새로운 스키마 생성
# update : DB 변경사항만 적용
# validate : DB와 엔티티 클래스 간의 일관성 검사
# none : DB 스키마 관리 X (수동 관리하는 경우 사용)
# production 환경에서는 validate 혹은 none을 사용