BACKEND/KAU BACKEND 특강

Spring Persistence (영속성)

이-프 2023. 2. 3. 18:30

Persistence를 영어 그대로 해석한다면,

고집, 지속성, 집요 등으로 해석할 수 있다.

 

하지만 Spring에서 Persistence는 다르다.

Spring Persistence데이터를 영구적으로 저장하는 것을 의미한다.

 

데이터 액세스 레이어  (데이터 접근 계층)

 

여기도 모르는 단어가 참 많다.

단어 먼저 정리하고 넘어가자.

 

💡ORM(Object Relational Mapping ,객체-관계 매핑)

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결) 해주는 것

 

객체지향프로그래밍은 클래스를 사용해서 객체 위주로 코드를 작성하며, 

관계형 데이터베이스는 테이블을 사용하는데

이때, 객체 모델과 관계형 모델 간에 불일치가 존재할 수 있다. 

 

이를 ORM이 해결해주는데,

ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해서 불일치를 해결해준다. 

 

왼쪽이 상품에 대한 SQL문이다. Product란 테이블에 Category란 테이블을 매핑하여 상품에 대한 데이터를 갖고 온다. 

이때, RDB에서 가져온 data를 객체화해야하는데, 이것이 복잡하기 때문에 ORM을 자주 사용한다.

 

예를 들어, SQL문과 달리 p.setId()와 같은 매소드 호출로 데이터 조회가 가능한 것이 ORM이다. 

즉, 객체가 테이블이 되도록 매핑시켜주는 것이 ORM이다. 

 

이를 사용하면 query를 직접 작성하지 않아도 되기때문에 생산성이 훨씬 높아진다.


💡 JPA (Java Persistence API)

ORM 프로그래밍 모델의 표준 인터페이스 

 

 

출처 : https://victorydntmd.tistory.com/195

앞에서 설명한 Persistent와 같이

Persistent API : 데이터를 생성한 프로그램의 실행이 종료되더라고 사라지지 않는 데이터의 특성 

 

 

 

JPA를 사용하기 위해서는 JPA의 구현체들인 Hibernate,EclipseLink, DataNucleus와 같은 ORM 프레임워크를 사용한다.

 

Hibernate는 스프링 프레임워크가 채택한 표준 구현체로

SQL을 사용하지 않고 직관적인 코드(메소드)를 사용해 데이터를 조작할 수 있다.

 

이때, SQL을 직접 작성하지 않는다고 해서 JDBC API를 사용하지 않는건 아니다.

Hibernate가 지원하는 메서드 내에서 JDBC API가 동작하고 있음 !

단지, 개발자가 직접 SQL을 작성하지 않을 뿐 ! 


💡JDBC (Java Database Connectivity)

Java 랑 DB와 연결되서 서로 데이터 소스를 주고 받을 수 있게 Java에서 제공하는 API

JDBC는 JPA 이전에 사용하던 기술인데, 그 로직은 아래 사진과 같다.

 

출처 : https://sowon-dev.github.io/2021/03/22/210323jpaVSjdbc/

 

Java로 구성된 프로그램이 DB까지 가기 위해서 JDBC 드라이버 매니저가 DB맞춤으로 드라이버를 생성해주고

JDBC API에 맞게 동작할 수 있도록 처리해준다.

그래서 개발자들은 JDBC API를 변경하지 않고 JDBC 드라이버만 바꿔주면 어떤 제품의 DB든 연결할 수 있는 것 ! 

즉, 어떤 하나의 DB에 종속적으로 적용되지 않는다. 


💡 JDBC 과정 

 

DB랑 가장 가까운게 JDBC 드라이버인데

JDBC입장에서는 DB마다 JDBC 드라이버가 다 다르니까

이 모든 드라이버들을 관리해줄 매니저 역할이 필요할 것 ! 

 

그리고 DB 서버와 연결해야 하니 당연히 각 연결정보들도 필요할 거고 

만약 연결이 성공한다고 하면, 쿼리문도 필요하고, 결과값을 받아올 객체 등등도 필요할것이다.

 

출처 : https://velog.io/@seculoper235/DB-%EC%9E%91%EC%97%85-JDBC

 

 

 

[참고한 자료들]

https://velog.io/@withcolinsong/JDBC%EB%9E%80

https://velog.io/@seculoper235/DB-%EC%9E%91%EC%97%85-JDBC     

 

'BACKEND > KAU BACKEND 특강' 카테고리의 다른 글

스프링 프레임워크  (0) 2023.01.27
백엔드 엔지니어링이란?  (1) 2023.01.20
웹 프로그래밍이란?  (0) 2023.01.20