[스프링부트 시리즈6]JPA로 DB 사용하기

데이터베이스 사용하는 방법.

Featured image

JPA로 DB 사용하기

SBB는 방문자가 질문이나 답변을 남길 수 있는 게시판 서비스입니다. 방문자가 글을 작성하면 데이터가 생성되는데 이런 데이터를 작성하려면 저장 및 조회 등의 기능을 구현해야 합니다.
대부분의 웹 서비스들은 이를 관리하기 위해 DB를 사용하는데 DB 관리는 SQL이라는 언어를 통해서 이루어지지만 DB는 자바를 이해하지 못합니다.
따라서 ORM(Object Relation Mapping)이라는 툴을 사용해 자바 문법으로 직접 DB를 다룰 수 있습니다.

ORM, JPA 이해하기

JPA는 뭔가요?

스프링부트는 JPA(java Persistance API)를 사용해 ORM 표준으로 사용합니다. JPA는 인터페이스의 모음으로서 이 인터페이스를 구현할 실제 클래스가 필요합니다. JPA를 구현한 실제클래스는 대표적으로 하이버네이트(Hibernate)가 있으며, 하이버네이트는 JPA의 인터페이스를 구현한 실제 클래스이자 자바의 ORM 프레임워크로서 스프링부트에서 DB관리를 쉽게 하도록 도와줍니다.

H2 데이터베이스 설치하기

JPA를 사용하기 위해선 DB를 먼저 설치해야 하는데 여기에서는 간편한 H2 데이터베이스를 사용합니다.

  1. build.gradle.kts 파일에 다음과 같이 입력해 H2 데이터베이스를 설치합니다.
    dependencies { 
      implementation 'org.springframework.boot:spring-boot-starter-web' 
      testImplementation 'org.springframework.boot:spring-boot-starter-test'
      developmentOnly 'org.springframework.boot:spring-boot-devtools' 
      compileOnly 'org.projectlombok:lombok' 
      annotationProcessor 'org.projectlombok:lombok'
      runtimeOnly 'com.h2database:h2'
    }
    (... 생략 ...)
    

    위의 코드스니펫은 이클립스 기준이기에 인텔리제이에서 쓰려면 아래와 같이 쓰면 된다.

build

우측 패널의 그레이들 아이콘 선택 후 Reload All Gradle Projects를 클릭해 필요한 라이브러리를 설치하자.

  1. 설치한 H2 DB를 사용하려면 src/main/resource 디렉터리의 application.properies파일에 새 설정을 추가해야 합니다. 아래와 같은 application.properties 파일을 작성합니다.
    # DATABASE
    spring.h2.console.enabled=true
    spring.h2.console.path=h2-console
    spring.datasource.url=jdbc:h2:~/local
    spring.datasource.driverClassName=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    

    작성된 항목은 다음과 같습니다:

    • spring.h2.console.enabled: H2 콘솔 접속 여부입니다. True로 설정합니다. H2 콘솔을 H2 DB를 웹 UI로 보여줍니다.
    • spring.h2.console.path: H2 콘솔로 접속하기 위한 URL 경로입니다.
    • spring.h2.datasource.url: 데이터베이스에 접속하기 위한 경로입니다.
    • spring.datasource.driverClassName: 데이터베이스에 접속할 때 사용하는 드라이버 클래스명입니다.
    • spring.datasource.username: 데이터베이스의 사용자명 입니다.(기본값 sa로 설정)
    • spring.datasource.password: 데이터베이스의 비밀번호 입니다. (로컬 개발용도이므로 패스워드는 없습니다.)
  2. spring.datasource.url에 설정한 경로에 해당하는 데이터베이스 파일을 만들어야 합니다. spring.datasource.urljdbc:h2~/local로 설정했으므로 사용자의 홈 디렉터리 아래에 H2 데이터베이스 파일로서 local.mv.db라는 파일을 생성해야 합니다. 이 파일을 생성하려면 CMD를 사용합니다. 사용자의 홈 디렉터리(C:\Users\사용자명)copy con local.mv.db명령을 입력 후 ctrl + Z -> Enter 를 누르면 생성됩니다. 이때 파일은 빈 파일입니다. cmd
  3. 홈 디렉터리에 새로 만든 local.mv.db파일을 확인합니다.

    예를 들어 jdbc:h2:~/test 라고 설정을 했다면 test.mv.db라는 파일을 생성하고 local.mv.db 파일을 새로 만들 때 파일명 뒤에 .txt 확장자가 붙지 않도록 하십시오. test.mv.db

  4. 이제 H2 콘솔을 사용해 데이터베이스에 접속할 수 있습니다. 로컬 서버를 재시작하고 브라우저에서 URL 주소로 H2 콘솔에 접속하십시오.

    http://localhost:8080/h2-console

  5. 다음과 같은 H2 콘솔 화면이 나타납니다. 언어 설정에서 한국어를 선택하십시오. 콘솔접속
  6. 콘솔화면에서 JDBC URL 경로를 application.properties파일에 설정한 데이터베이스 연결주소인 jdbc:h2:~/local 로 변경하고 연결 버튼을 누르십시오.

JDBC는 Java Database Connectivity의 약자입니다. 자바 프로그램에서 DB와 상호작용 용도의 자바 API입니다.

  1. 다음과 같이 접속된 화면이 나옵니다. 콘솔

JPA 환경설정하기


H2 데이터베이스를 사용할 준비가 완료되었고, 자바 프로그램이 H2 데이터베이스를 사용할 수 있도록 해야합니다. 자바 프로그램에서 DB에 데이터를 저장하거나 조회하려면 JPA를 사용해야 합니다. 하지만 JPA를 사용하기 위한 밑작업이 필요합니다.

  1. 다음처럼 build.gradle.kts 파일을 수정합니다.
  dependencies { 
  	implementation("org.springframework.boot:spring-boot-starter-web")
	  implementation("org.projectlombok:lombok:1.18.22") // 롬복 의존성 추가
	  annotationProcessor("org.projectlombok:lombok:1.18.22")
	  testImplementation("org.springframework.boot:spring-boot-starter-test")
	  developmentOnly("org.springframework.boot:spring-boot-devtools")
	  runtimeOnly ("com.h2database:h2")
	  implementation ("org.springframework.boot:spring-boot-starter-data-jpa") 
  }

전과 같이 우측 그레이들 패널을 열어 Reload All Gradle Project를 클릭해 변경사항을 적용하면 JPA 라이브러리가 설치됩니다.

Implementation이란?
build.gradle.kts에서 작성한 implementation은 필요한 라이브러리 설치를 위한 설정으로서, 해당 라이브러리가 변경되어도 이 라이브러리와 관련된 모든 모듈을 컴파일하는 대신 변경된 부분 모듈만 컴파일하므로 프로젝트 리빌드 속도가 빠릅니다

  1. JPA 설정을 위해 이번에는 application.properties 파일을 다음과 같이 수정합니다.
  # DATABASE 
  spring.h2.console.enabled=true 
  spring.h2.console.path=/h2-console 
  spring.datasource.url=jdbc:h2:~/local 
  spring.datasource.driverClassName=org.h2.Driver
  spring.datasource.username=sa 
  spring.datasource.password=

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

JPA 추가한 설정 항목은:

spring.jpa.hibernate.ddl-auto의 규칙을 더 알아보자. 우리는 spring.jpa.hibernate.ddl-autoupdate로 설정했다. 또 어떤 설정값이 있는지 알아보자.