영속성이란 프로그램이 종료되어도 데이터가 사라지지 않는 특성을 말한다.
영속성을 갖지 못한 데이터는 메모리에만 존재하기 때문에 프로그램이 종료되면 사라지게 된다.
영속성은 파일 시스템, 관계형 데이터베이스 또는 객체 데이터 베이스를 활용하여 구현한다.
JDBC(Java Database Connectivity)는 Java 프로그램이 데이터베이스 관리 시스템에 액세스할 수 있도록 하는 표준 API의 JavaSoft 사양이다. JDBC API는 Java 프로그래밍 언어로 작성된 인터페이스 및 클래스 세트로 구성된다.
이러한 표준 인터페이스와 클래스를 사용하여 프로그래머는 데이터베이스에 연결하는 응용 프로그램을 작성하고 SQL로 작성된 쿼리를 보내고 결과를 처리할 수 있다.
JDBC는 표준 사양이므로 JDBC API를 사용하는 하나의 Java 프로그램은 해당 특정 DBMS에 대한 드라이버가 존재하는 한 모든 DBMS(데이터베이스 관리 시스템)에 연결할 수 있다.
Persistence Framework는 JDBC를 사용하기 위한 복잡하고 번거로운 작업 없이 간단한 작업으로 데이터베이스와 연동할 수 있게 제공하는 프레임워크다. 이 프레임워크를 사용하면 시스템을 빠르고 안정적으로 개발이 가능하다.
Persistence Framework에는 ORM과 SQL Mapper가 있다.
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을 전달해 결과를 받아서 프로그래밍 해왔다.
객체 관계 매핑(Object Relational Mapping, ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 테이블을 자동으로 매핑(연결)하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환 가능성을 두고 만들어진 것이 아니기 때문에 불일치(패러다임의 불일치)가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.
반복적인 DB Connection, SQL 재사용성을 개선하고자 만들어졌다. 객체와 관계형 데이터베이스의 데이터를 개발자가 작성한 SQL로 매핑시켜주는 프레임워크다.
개발자가 SQL을 직접 작성해야 하며 SQL문을 실행하고 얻은 데이터를 객체로 매핑시켜준다.
SQL-Mapper 중 Mybatis가 유명하다.
국내에선 Mybatis가 더 많이 검색되는 듯 하다.
h2는 인 메모리 데이터베이스이며 RDBMS다.
인 메모리 데이터베이스 TIL
노션에 작성한 RDBMS vs NoSQL
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.