JPA

1. JPA의 개요와 설정 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 25. 15:44

1. JPA(Java Persistence API)란?

  • ORM(Object-Relational Mapping)을 위한 Java 표준 API(인터페이스 집합)
  • ORM : 객체와 RDB를 Mapping
  • JPA 구현체 : HIBERNATE, OpenJpa, EclipseLink, DataNucleus, ...
  • Persistence(영속성) : 애플리케이션 종료 후에도 객체(데이터)가 유지되는 것

 

2. ORM(Object/Relational Mapping) Framework - HIBERNATE

  • 객체와 DB테이블 간의 연결을 해주는 프레임웍
  • 객체 모델(object model)과 관계형 모델(relational model)의 차이를 해소

 

3. 객체 모델과 관계형 모델의 비교

 

4. SQL Mapper(MyBatis) vs ORM framework(HIBERNATE)

  • SQL Mapper : DB중심 개발, 성능이 좋음, 복잡한 일처리, SQL직접작성
  • ORM framework : 애플리케이션 중심 개발, Table자동 생성

 

5. Spring Data와 Spring Data JPA

  • Spring Data - 저장소 종류가 달라도 일관된 데이터 처리 방법을 제공
  • Spring Data JPA - JPA를 위한 저장소(JpaRepository)와 관련 기능을 제공

 

6. Project생성

  • application.properties에 설정 추가

# datasource설정 - 스키마 이름(sprinboot_basic), id, pwd를 본인에게 맞게 변경하세요.
spring.datasource.url=jdbc:mysql://localhost:3306?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=4862
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 쿼리를 콘솔에 출력하게
spring.jpa.show-sql=true

# 콘솔에 출력되는 쿼리를 보기 좋게 포맷팅
spring.jpa.properties.hibernate.format_sql=true

# 실제 사용할 DB의 종류 - hibernate가 DB별로 제공
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

# DB 자동 초기화
# create : 기존 테이블 삭제 후 새로 테이블 생성(개발)
# create-drop : create와 동일. 단, 종료시 테이블 삭제(개발)
# update : 기존 테이블을 삭제하지 않고, 변경 사항(컬럼 추가)만 적용(개발)
# validate : 엔티티와 테이블의 매핑 확인(운영)
# none : 사용하지 않음(운영)
spring.jpa.hibernate.ddl-auto=create
  • DB자동 초기화
    • create : 기존 테이블 삭제 후 새로 테이블 생성(개발)
    • create-drop : create와 동일. 단, 종료시 테이블 삭제(개발)
    • update : 기존 테이블을 삭제하지 않고, 변경 사항(컬럼 추가)만 적용(개발)
    • validate : 엔티티와 테이블의 매핑 확인(운영)
    • none : 사용하지 않음(운영)
@SpringBootApplication
public class Ch4Application implements CommandLineRunner {

    @Autowired
    EntityManagerFactory emf;

    public static void main(String[] args) {
    
        
        // TOMCAT 실행되지 않게 하는 코드
        SpringApplication app = new SpringApplication(Ch4Application.class);
        app.setWebApplicationType(WebApplicationType.NONE);
        app.run(args);
        
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("emf = " + emf);
    }
}
  • 설정이 잘되었다면 emf에 빈객체가 주입이 되었어야 한다.