[JumpToSpringBoot] 2-02. ORM과 JPA

juuns·2023년 3월 22일
post-thumbnail

1. ORM


1.1. ORM이란?

웹 서비스는 데이터를 처리할 때 대부분 데이터베이스를 사용한다. 본 프로젝트 또한 질문 답변 게시판이므로 데이터를 저장, 조회, 수정하는 등의 기능을 구현해야 한다.

그런데 DB를 사용하려면 SQL query라는 구조화된 질의를 작성하고 실행하는 등의 복잡한 과정이 필요하다. 이때, ORM(Object Relational Mapping)을 이용하면 자바 문법만으로도 DB를 다룰 수 있다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다.

ORM을 이용하면 데이터베이스의 종류에 상관 없이 일관된 코드를 유지할 수 있어서 프로그램을 유지, 보수하기가 편리하다. 또한, 내부에서 안전한 SQL 쿼리를 자동으로 생성해주므로 개발자가 달라고 통일된 쿼리를 작성할수 있고 오류 발생률도 줄일 수 있다.


1.2. SQL query VS ORM

다음과 같은 question 테이블이 있다고 하자.

idsubjectcontent
1안녕하세요가입 인사드립니다^^
2질문 있습니다.ORM이 궁금합니다
.........

  • SQL query
insert into question (subject, content) values ('안녕하세요', '가입 인사드립니다 ^^');
insert into question (subject, content) values ('질문 있습니다', 'ORM이 궁금합니다');
  • ORM
Question q1 = new Question();
q1.setSubject("안녕하세요");
q1.setContent("가입 인사드립니다 ^^");
this.questionRepository.save(q1);

 Question q2 = new Question();
q2.setSubject("질문 있습니다");
q2.setContent("ORM이 궁금합니다");
this.questionRepository.save(q2);

코드의 양만 보면 ORM이 길어보일 수도 있지만, SQL 문법을 따로 배우지 않아도 된다는 장점이 있다. 이처럼 데이터를 관리하는 데 사용하는 ORM 클래스를 Entity라고 한다. ORM을 사용하면 내부에서 SQL 쿼리를 자동으로 생성해주므로 직접 작성하지 않아도 된다. 즉, Java만 알아도 데이터베이스에 질의할 수 있다.


2. JPA


스프링부트는 JPA(Java Persistence API)를 사용하여 데이터베이스를 처리한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping)의 기술 표준으로 사용하는 인터페이스의 모음이다.

JPA는 인터페이스이다. 따라서 인터페이스를 구현하는 실제 클래스가 필요하다. JPA를 구현한 대표적인 실제 클래스에는 하이버네이트(Hibernate)가 있다. SBB도 JPA + 하이버네이트 조합을 사용한다.


3. H2 데이터베이스


3.1. H2 데이터베이스란?

H2 데이터베이스는 주로 개발용이나 소규모 프로젝트에서 사용되는 파일 기반의 경량 데이터베이스이다. 개발 시에는 H2를 사용해 빠르게 개발하고, 실제 운영 시스템은 좀 더 규모있는 DB를 사용하는 것이 일반적인 개발 패턴이다.


3.2. H2 데이터베이스 설치

Step 1. 라이브러리 설치

[파일명: build.gradle]

dependencies {
    ...
    runtimeOnly 'com.h2database:h2'
    ...
}

Step 2. 데이터베이스 설정

[파일명: applications.properties]

# DATABASE
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:~/SpringBoot/JumpToSpringBoot/dbfile/local
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
  • spring.h2.console.enabled - H2 콘솔의 접속을 허용할지의 여부
  • spring.h2.console.path: 콘솔 접속을 위한 URL 경로
  • spring.datasource.url: 데이터베이스 접속을 위한 경로
  • spring.datasource.driverClassName: 데이터베이스 접속시 사용하는 드라이버
  • spring.datasource.username: 데이터베이스의 사용자명 (사용자명은 기본 값인 sa로 설정한다.)
  • spring.datasource.password: 데이터베이스의 패스워드. (본 프로젝트는 로컬 개발 용도로만 사용하기 때문에 패스워드를 설정하지 않음.)

Step 3. 데이터베이스 파일 만들기

spring.datasource.url에 설정한 경로에 해당하는 데이터베이스 파일을 마들어야 한다. 위와 같은 경우, /SpringBoot/JumpToSpringBoot/dbfile 밑에 local.mv.db라는 파일을 생성해야 한다. 설정한 디렉토리에서 touch local.mv.db를 이용해 생성하면 된다. 파일은 내용 없이 빈 파일로 생성한다.


3.3. H2 콘솔 접속

http://localhost:8080/h2-console에 접속하면 다음과 같은 화면을 볼 수 있다.

언어를 한국어로 설정하고, JDBC URL을 application.properties에서 설정한 것과 같이 입력한다. 그리고 연결 버튼을 눌러보자.

그러면 다음과 같은 화면을 볼 수 있다. 왼쪽에 ANSWERS와 같은 것들은 현재 없을 것이다.


3.4. JPA 환경설정

H2 데이터베이스를 사용할 준비가 완료되었다. 이제 자바 프로그램에서 H2 데이터베이스를 사용할 수 있게 해야한다. 자바 프로그램에서 데이터베이스에 데이터를 저장하거나 조회하려면 JPA를 사용해야 한다. 따라서 사용하기 전에 설치 및 설정을 해보자.

[파일명: build.gradle]

dependencies {
    ...
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    ...
}

[파일명: applications.properties]

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update

본 시리즈는 "점프 투 스프링부트"를 공부하며 작성하는 글입니다.
출처: "점프 투 스프링부트." WikiDocs. 2023년 1월 18일 수정, 2023년 1월 26일 접속, https://wikidocs.net/book/7601.

0개의 댓글