DEV/Spring

[Spring Boot 기초] ORM, JPA의 개념과 JPA 사용 설정

Bi3a 2023. 9. 13. 01:05

728x90

Spring boot 기초 깨부시기

Table of Contents

     

     

     

     

    ORM

    ORM : Object Relation Mapping (객체 - 관계 맵핑)
    관계형 데이터베이스(RDBMS)의 데이터를 java에서 배운 객체와 연결시키는 것입니다.

     

    ORM의 장점

    • 개발자가 SQL 쿼리가 아닌 직관적인 객체지향적 코드로 데이터 조작과 접근이 가능합니다.
    • ORM은 독립적으로 작성되며 각 객체는 재활용이 가능해 재사용과 유지보수가 편리합니다.
    • DBMS에 종속적이지 않아 DBMS의 교체에 있어도 비용과 시간, 리스크가 덜합니다.
    • 매핑을 토대로 SQL을 자동 생성해 RDBMS의 데이터 구조와 java의 객체지향적 모델의 간극을 좁힐 수 있습니다.
    • java의 경우 java에서 활용한 일부 메소드를 그대로 채택하여 사용이 가능해 가공이 편리합니다.

     

    ORM의 단점

    • 잘못 설계된 경우 구조의 일관성 문제로 인해 대다수 ORM에 문제가 생기므로 속도와 성능 저하가 유발됩니다.
    • 프로시저가 많은 시스템의 경우에는 ORM의 객체지향적 장점을 활용하기 어렵습니다.
    • 다량의 / 복잡한 대형 쿼리의 경우에는 SQL로 처리하는 것보다 ORM이 상대적으로 더욱 복잡할 수 있습니다.

     

    JPA

    JPA : Java Persistance API
    JPA는 java 진영에서 ORM(Object-Relational Mapping)의 기술 표준으로 사용하는 인터페이스의 모음입니다.
    java 진영의 Spring Boot는 JPA를 사용하여 데이터베이스를 처리합니다.
    JPA는 인터페이스기 때문에 이를 구현할 실제 클래스가 필요합니다.
    앞으로의 Spring Boot 학습 간 JPA를 구현한 Spring 대표 클래스인 Hibernate를 사용하겠습니다.

     

    H2

    H2: 개발용 등 소규모 프로젝트에 자주 운용되는 데이터베이스로, 파일 기반의 경량 데이터베이스입니다.
    앞으로 매핑할 데이터를 저장할 데이터베이스입니다.
    실제 운영 시스템은 H2가 아닌 규모있는 DB를 사용하는 것이 일반적입니다.
    앞으로의 Spring Boot 학습 간 H2 데이터베이스를 사용하겠습니다.

     

    H2 데이터베이스 설치 및  JPA + 하이버네이트 환경설정 방법

     

    1. 파일 설정 (파일명: /프로젝트명/build.gradle)

    dependencies {
        runtimeOnly 'com.h2database:h2'
        // H2 데이터베이스 라이브러리 : 설치 후 refresh gradle project
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        // JPA 라이브러리 : 설치 후 refresh gradle project
    }

     

    2. 파일 설정 (파일명: /프로젝트명/src/main/resources/application.properties)

    # DATABASE // H2 Database
    spring.h2.console.enabled=true
    ## H2 콘솔의 접속을 허용할지의 여부
    spring.h2.console.path=/h2-console
    ## 콘솔 접속을 위한 URL 경로
    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
    ## 엔티티 기준 테이블 생성 규칙 정의
    	### none - 엔티티가 변경되더라도 데이터베이스를 변경 X
    	### update - 엔티티의 변경된 부분만 적용
    	### validate - 변경사항이 있는지 검사만 실시
    	### create - 스프링부트 서버가 시작 시 모두 drop하고 재생성
    	### create-drop - create와 동일하나모두 drop
        ### ★ 개발 환경에서는 일반적으로 update, 운영 환경에서는 none / validate가 사용됌

     

    3. 사용자의 홈디렉터리에 데이터베이스 접속 경로로 설정한 이름명의 db 파일 생성

        상단의 코드 예시의 경우 local.mv.db 명의 빈 파일 생성(데이터베이스 파일)

    ** 홈디렉터리 - 윈도우: C:\Users\(사용자명) , 맥: /Users/(사용자명)