본문 바로가기
Programming

JPA란?

by BTC_티모 2023. 6. 14.

탑신병자 듀오 팀 티모입니다.

오늘은 JPA에 대해서 알아보겠습니다.


 

JPA(JAVA Persistence API)는 자바의 ORM 기술 표준으로 사용되는 인터페이스입니다.

  • ORM(Object-Relational Mapping)은 곧 객체와 관계형 DB의 매핑을 의미하며,
    기술적으로 매핑 방법만 프레임워크에게 전달하면 INSERT, SELECT, UPDATE 등의 SQL 쿼리를 직접 작성하지 않고 프레임워크를 이용해 데이터를 저장할 수 있습니다.
  • 주로 이용되는 ORM 프레임워크로는 Hibernate, OpenJPA 등이 있습니다.

 

JPA는 애플리케이션과 JDBC 사이에 위치합니다.

사용자가 JPA를 사용하면, JPA 내부에서 JDBC API를 이용해 SQL을 호출해 DB와 통신합니다.

즉, 사용자가 JDBC API를 직접 사용하지 않게 되며 JPA는 ORM 프레임워크에 저장한대로 알아서 관련 SQL를 생성하고 그 결과를 적용해줍니다. 

 

JPA을 사용하는 이유는 여러가지가 있습니다.

  1. 생산성
    JPA를 이용하게 되면 사용자는 반복적인 코드를 작성하지 않아도 된다는 장점이 있습니다.
    SQL 작성 후 JDBC API를 실행하고, 결과를 매핑하는 과정을 모두 사용자가 일일이 해야 했던 번거로움을 해결해줍니다.

  2. 유지보수
    DB 엔티티에 속성값이 추가될 때 관련 SQL 쿼리문을 직접 수정해야 하는 번거로움 역시 해결해줍니다.

  3. 패러다임의 불일치 해결
    객체로 구성되는 자바 언어와 데이터로 구성되는 DB 간 상속이나 연관관계 등의 패러다임이 다르고,
    이를 해결하기 위해 사용자가 추가로 코드를 작성해야 하는 복잡한 과정을 없애줍니다. 

  4. 성능
    사용자와 JDBC 사이에서 일어나는 DB와의 통신 과정을 자동으로 최적화해주어 보다 효율적으로 동작합니다.
      
  5. 데이터 접근 추상화 및 벤더 독립성
    JPA에 DB 정보만 알려주면 알아서 그에 맞게 전달해주므로 관계형 DB 벤더마다 다른 사용법 때문에 사용자가 겪는 불편함을 해결해줍니다.

 

Spring에서의 JPA 적용 예시입니다.

  • build.gradle 파일에 JPA 관련 라이브러리를 추가해줍니다.
    • implementation 'org.springframework.boot:spring-boot-starter-data-jpa

  • 스프링 부트(resources/application.properties)에 JPA 설정을 추가합니다.
    • spring.jpa.show-sql=true
      show-sql : JPA가 생성하는 SQL을 출력한다.
    • spring.jpa.hibernate.ddl-auto=none
      ddl-auto : JPA는 테이블을 자동으로 생성하는 기능을 제공하는데 none 를 사용하면 해당 기능을 끈다.
      create 를 사용하면 엔티티 정보를 바탕으로 테이블도 직접 생성해준다.

  • JPA 엔티티 매핑
    • 객체와 관계형 DB의 테이블을 @Entity 어노테이션으로 매핑합니다.
      gradle 설정이 제대로 반영되지 않는 경우 새로고침해줍니다.

예시

package hello.hellospring.domain;

import javax.persistence.*;

@Entity
public class Member {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

지금까지 JPA에 대해 간단히 알아보았습니다.

감사합니다.

'Programming' 카테고리의 다른 글

[C#] .NET Winform 간단한 UI 구성 방법  (0) 2023.06.22
UML 다이어그램 종류와 목적  (0) 2023.06.19
[Vue] Vuex 개념 및 설치  (0) 2023.06.09
Golang 프레임워크 비교  (0) 2023.06.08
[C#] .NET Winform 개발환경 구성  (0) 2023.06.06

댓글