본문 바로가기
TIL

JPA (Java Persistence API) (22.10.23 TIL)

by winteringg 2022. 10. 23.

 JPA 란 자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API이며, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. (스프링의 몇 가지 표준 인터페이스중 orm 을 사용하기 위해 만든 인터페이스) ORM 이기 때문에 자바 클래스와 DB 테이블을 매핑한다.

 ORM (Object Relation Mapping) 이란 객체와 DB 테이블이 매핑하는 것을 말한다. 즉, 코드 상에서 생성한 객체가 DB 상의 어떤 테이블과 연결이 된다는 것을 의미한다. 이렇게 되면 내가 객체를 조작함으로써 DB 를 만질 수 있다. JPA 에서 DB 접근을 시도할 때 직접 sql 의 쿼리문을 만들지 않는다. 다만 객체를 이용한 메서드를 통해 이를 관리할뿐이다.

  • 쿼리문일경우 --> SELECT * FROM POST
  • 메서드로 관리할 경우 --> postRepository.findAll()

post 테이블의 모든 내용을 가져올 때, JPA 에서는 postRepository 라는 객체와 post 테이블을 매핑한 후 findAll() 이라는 메서드를 통해 정보를 가져온다. 전체적인 구조는 다음과 같다.

1) JDBC (Java Database Connectivity) : 자바에서 DB 에 접속할 수 있도록 해주는 자바 API 이다. DB 의 종류는 많고 이에 따른 연결 설정도 다양하다. 만약 개발자가 사용하는 DB에 따라 이러한 설정을 모두 정의하고 사용하게 된다면 코드는 매우 복잡해질 수 있다. 더군다나 여러 종류의 DB를 사용하게 된다면 코드는 더욱 복잡해질 수 있다. 대부분의 해결책은 각각 엔드 포인트에 대한 드라이버 설정을 관리하는 driver 매니저를 만들고 이를 API 화 시키는 것이다.

 또한 Java 에서는 아래와 같이 여러 DB 와의 연결을 지원할 수 있게 해준다.

이러한 JDBC를 사용하여 코딩을 하면 다음과 같이 DB에 쿼리를 날릴 수 있다.

Connection conn = null;
try {
    String dbConnectionString = "jdbc:Driver 종류://IP:포트번호/DB명"
    String dbUser = "DB 아이디"
    String dbPassword = "DB 비밀번호"
}catch(SQLException ex){
    // 에러 발생
}finally{
    if(conn != null) try {conn.close();} catch(SQLException ex){}
}


2) Hibernate : JPA 의 인터페이스를 구현한 구현체이다. “Hibernate는 JPA의 구현체이다” 로부터 도출되는 중요한 결론 중 하나는 JPA를 사용하기 위해서 반드시 Hibernate를 사용할 필요가 없다는 것이다. Hibernate의 작동 방식이 마음에 들지 않는다면 언제든지 DataNucleus, EclipseLink 등 다른 JPA 구현체를 사용해도 되고, 심지어 본인이 직접 JPA를 구현해서 사용할 수도 있다. 다만 그렇게 하지 않는 이유는 단지 Hibernate가 굉장히 성숙한 라이브러리이기 때문일 뿐이다.

3) JPA : JPA 는 영속성 컨텍스트인 EntityManager를 통해 Entity를 관리하고 이러한 Entity가 DB와 매핑되어 사용자가 Entity에 대한 CRUD를 실행을 했을 때 Entity와 관련된 테이블에 대한 적절한 SQL 쿼리문을 생성하고 이를 관리하였다가 필요시 JDBC API를 통해 DB에 날리게 된다.

  • Entity : Entity는 DB의 Entity와 동일한 개념이고 단지 이를 Java라는 객체지향 언어에서 객체로 관리하는 것을 의미한다. 즉, Entity를 관리한다는 것은 우리가 코드 상에서 쓰이는 DB의 테이블을 객체화 해서 관리한다는 것을 의미한다.
  • 영속성 컨텍스트 : entity 를 저장하는 비휘발성 환경이라는 뜻이다. 영속성 컨텍스트는 entity 에 대한 캐시라고 이해하면 쉽다.

4) Spring Data JPA : 스프링에서 JPA를 보다 편리하게 사용할 수 있도록 지원하는 프로젝트로 다음과 같은 3가지의 특성을 지원한다.

  • CRUD 처리를 위한 공통 인터페이스를 제공한다.
  • repository 개발 시 인터페이스만 작성하면 실행시점에 스프링이 알아서 해당 메서드 이름에 적합한 쿼리를 날리는 구현체를 만들어 Bean 으로 등록해준다.
  • CRUD를 위한 여러 메소드들이 자동으로 생성된다.

 

 

 

참고 :

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레

suhwan.dev

 

Design of JDBC - Javatpoint

Design of JDBC with java tutorial, features, history, variables, object, programs, operators, oops concept, array, string, map, math, methods, examples etc.

www.javatpoint.com

 

 

JDBC - Introduction

JDBC - Introduction What is JDBC? JDBC stands for Java Database Connectivity, which is a standard Java API for database-independent connectivity between the Java programming language and a wide range of databases. The JDBC library includes APIs for each of

www.tutorialspoint.com

'TIL' 카테고리의 다른 글

Java 다형성, instanceof (22.10.25 TIL)  (0) 2022.10.25
Java Arrays 클래스 (22.10.24 TIL)  (0) 2022.10.24
DTO 란 (22.10.22 TIL)  (0) 2022.10.22
소프트 스킬의 중요성 (22.10.21 TIL)  (0) 2022.10.21
잡념 없애기 (22.10.20 TIL)  (1) 2022.10.20

댓글