[TIL] 11월 4일: JPA

Jung·2021년 11월 4일
1

TIL

목록 보기
43/77
post-thumbnail

영속성(Persistence)

영속성이란 프로그램이 종료되어도 데이터가 사라지지 않는 특성을 말한다.
영속성을 갖지 못한 데이터는 메모리에만 존재하기 때문에 프로그램이 종료되면 사라지게 된다.
영속성은 파일 시스템, 관계형 데이터베이스 또는 객체 데이터 베이스를 활용하여 구현한다.

데이터가 영속성을 가지기 위해 Spring에서 사용하는 방법

  1. JDBC (Java)
  2. Spring JDBC
  3. Persistence Framework

JDBC

JDBC(Java Database Connectivity)는 Java 프로그램이 데이터베이스 관리 시스템에 액세스할 수 있도록 하는 표준 API의 JavaSoft 사양이다. JDBC API는 Java 프로그래밍 언어로 작성된 인터페이스 및 클래스 세트로 구성된다.

이러한 표준 인터페이스와 클래스를 사용하여 프로그래머는 데이터베이스에 연결하는 응용 프로그램을 작성하고 SQL로 작성된 쿼리를 보내고 결과를 처리할 수 있다.

JDBC는 표준 사양이므로 JDBC API를 사용하는 하나의 Java 프로그램은 해당 특정 DBMS에 대한 드라이버가 존재하는 한 모든 DBMS(데이터베이스 관리 시스템)에 연결할 수 있다.

Persistence Framework

Persistence Framework는 JDBC를 사용하기 위한 복잡하고 번거로운 작업 없이 간단한 작업으로 데이터베이스와 연동할 수 있게 제공하는 프레임워크다. 이 프레임워크를 사용하면 시스템을 빠르고 안정적으로 개발이 가능하다.

Persistence Framework에는 ORM과 SQL Mapper가 있다.

JPA

JPA(Java Persistence API)는 자바의 ORM 기술에 대한 표준 명세를 정의한 것이다. JPA는 표준 명세일 뿐이라서 JPA만으로는 실제 무언가를 할 수는 없다. JPA 표준 명세를 실제로 구현한 구현체들은 Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등이 있다. 이 구현체들을 ORM Framework, JPA 구현체 또는 JPA Provider라고 부른다.

스프링 부트에서 Spring Data JPA dependency를 추가하면, 기본으로 Hibernate가 연동된다.

JPA를 사용하기 이전에는 JDBC를 사용하여 직접 DB에 Connection 후 SQL을 전달해 결과를 받아서 프로그래밍 해왔다.

ORM

객체 관계 매핑(Object Relational Mapping, ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.

OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 테이블을 자동으로 매핑(연결)하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환 가능성을 두고 만들어진 것이 아니기 때문에 불일치(패러다임의 불일치)가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.

장점

  • 객체 지향적인 코드로 직관적인 비즈니스 로직 작성
  • DBMS 종속성이 줄어들고 종류에 관계 없이 빠르게 적용
  • 쿼리에 집중할 필요 없이 빠르게 개발
  • 재사용 유지 보수 편리성이 증가
  • 패러다임의 불일치 해결

단점

  • 초기 적용에 러닝 커브가 어느 정도 있다.
  • 프로젝트의 복잡성이 커질경우 난이도가 올라간다.
  • 잘못 적용할 경우 속도 저하가 발생 할 수 있다.
  • ORM을 항상 적용할 수 있는 것은 아니다.

SQL-Mapper

반복적인 DB Connection, SQL 재사용성을 개선하고자 만들어졌다. 객체와 관계형 데이터베이스의 데이터를 개발자가 작성한 SQL로 매핑시켜주는 프레임워크다.
개발자가 SQL을 직접 작성해야 하며 SQL문을 실행하고 얻은 데이터를 객체로 매핑시켜준다.
SQL-Mapper 중 Mybatis가 유명하다.

장점

  • SQL을 작성할 줄 안다면 수월하게 사용이 가능하다.
  • 세부적인 SQL 변경 시 편리하다.

단점

  • DBMS에 따라 SQL 문법이 다르기에 DBMS에 종속적이다.
  • 개발 시 SQL을 작성해야 한다.
  • DBMS 변경시 SQL문의 재사용이 어렵다.
  • 2개 이상의 DBMS 지원시 유지 보수가 어렵다.

구글 트렌드 (Hibernate vs Mybatis)

전 세계

국내

국내에선 Mybatis가 더 많이 검색되는 듯 하다.

h2

h2는 인 메모리 데이터베이스이며 RDBMS다.

h2 특징

  • 매우 빠른 오픈 소스 JDBC API
  • 임베디드 및 서버 모드; 메모리 내 데이터베이스
  • 브라우저 기반 콘솔 애플리케이션
  • 작은 설치 공간: 약 2MB의 jar 파일 크기

인 메모리 데이터베이스 TIL
노션에 작성한 RDBMS vs NoSQL

jpa 리포지토리 문서 링크

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.repositories

참고
“What Is JDBC?” IBM, https://www.ibm.com/docs/en/informix-servers/12.10?topic=started-what-is-jdbc.

JeffreyBool. “Spring-Boot%20&%20Java/(Env)-vs-Code%EC%97%90%EC%84%9C-Spring-Boot-%Ec%8b%a4%Ed%96%89%Ec%8b%9c%Ed%82%a4%Ea%b8%b0/ #3.” Githubmemory, https://githubmemory.com/repo/kooku94/kooku-s-log/issues/3.

운전사 주인 택시. “Orm(Object Relational Mapping)이 뭘까? 🤔.” 빠리의 택시 운전사, TISTORY, 26 Sept. 2021, https://geonlee.tistory.com/207.

밀래 . “[DB] Orm, SQL Mapper 이란?” 밀래의 코딩북, TISTORY, 28 May 2021, https://firework-ham.tistory.com/110.

H2 Database Engine, https://www.h2database.com/html/main.html.

profile
97kim.github.io

0개의 댓글