gimmickbutreal

[Spring Boot] JPA 본문

Programming/Spring Boot

[Spring Boot] JPA

isshosng 2022. 8. 10. 17:23

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

 

JPA란?

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

 

JPA는 인터페이스이며 따라서 인터페이스를 구현하는 실제 클래스가 필요합니다. JPA를 구현한 대표적인 실제 클래스에는 하이버네이트(Hibernate)가 있습니다.

 

H2 데이터베이스

JPA를 사용하기 전에 데이터를 저장할 데이터베이스를 설치합니다. 실제로 개발할 때는 Oracle, MSSQL 등의 데이터베이스보다는 설치도 쉽고 사용도 편리한 H2 데이터베이스를 많이 사용합니다. H2 데이터베이스는 주로 개발용이나 소규모 프로젝트에서 사용되는 파일 기반의 경량 데이터베이스입니다. 개발시에는 H2를 사용하여 빠르게 개발하고 실제 운영시스템은 좀 더 규모있는 DB를 사용하는 것이 일반적인 개발 패턴입니다.

 

아래와 같이 build.gradle 파일에서 dependencies 내에 runtimeOnly 'com.h2database:h2' 문장을 추가한 후 Refresh Gradle Project를 실행해줍니다. 여기서 runtimeonly란 build.gradle 파일의 runtimeOnly는 해당 라이브러리가 런타임시에만 필요한 경우에 사용하는 것으로써, 컴파일시에만 필요한 경우에는 compileOnly를 사용합니다.

설치한 H2 데이터베이스를 사용하기 위해서는 아래와 같이 설정을 해야 합니다. application.properties 파일을 아래와 같이 수정합니다.

참고로, h2 db는 일반 mysql과 다르게 휘발성 주 메모리를 기반으로 하는 인메모리 db입니다.

위에서 spring.datasource.url에 설정한 경로에 해당하는 데이터베이스 파일을 만들어야 합니다. spring.datasource.url을 jdbc:h2:~/local로 설정했기 때문에 사용자의 홈디렉터리(~/local) 밑에 local.mv.db라는 파일을 생성해야 합니다. 

터미널에서 local.mv.db 파일을 생성하며 touch local.mv.db 라는 명령어를 입력해줍니다.

 

그리고 http://localhost:8080/h2-console 사이트로 접속합니다.

위와 같이 나오게 됩니다. JDBC URL을 jdbc:h2:~/local로 입력한 후 연결합니다.

접속되었으며 H2 DB를 사용할 준비가 완료되었습니다. 이제 자바 프로그램에서 H2 DB를 사용할 수 있게 해야합니다. 자바 프로그램에서 데이터베이스에 데이터를 저장하거나 조회하려면 JPA를 사용해야 합니다. 이를 위해 사전 준비 작업을 시작합니다.

 

build.gradle 파일에서 아래와 같이 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'코드를 추가해줍니다. 

implememtation은 build.gradle에 해당 라이브러리 설치를 위해 일반적으로 사용하는 설정입니다. 해당 라이브러리가 변경되더라도 이 라이브러리와 연관된 모든 모듈들을 컴파일하지 않고 직접 관련이 있는 모듈들만 컴파일하기 때문에 rebuild 속도가 빠릅니다.

그리고 "Refresh Gradle Project"로 변경사항을 적용하면 JPA 라이브러리가 설치됩니다.

 

마찬가지로 JPA 설정을 위해 application.properties 파일을 수정합니다.

 

위에서는 값을 update로 설정했다.

다른 값들로 none, validate도 쓰이는 경우가 있다.

개발 환경에서는 보통 엔티티의 변경된 부분만 적용하는 update를 쓰고 운영환경에서는 엔티티가 변경되더라도 데이터베이스를 변경하지 않는 none이나 변경사항이 있는지 검사만 하는 validate도 사용된다.

 

멋사 스프링부트 위키독스 교육 정리

https://wikidocs.net/161164