공부/Database

JDBC, SQL Mapper, ORM

sandbackend 2023. 4. 6. 17:14

JDBC, SQL Mapper, ORM의 개념 이해하고 차이점 인지하기

JDBC (Java Database Connectivity)는 자바 언어를 통해 데이터베이스와 연결하여 데이터를 처리하기 위한 자바 API입니다. JDBC는 데이터베이스와의 연결, 쿼리 실행, 결과 처리 등 데이터베이스와의 상호작용을 담당합니다. 데이터베이스와 직접 통신하기 때문에 SQL 쿼리 작성에 대한 책임이 개발에게 있습니다.

SQL Mapper는 SQL 쿼리를 자동으로 생성하여 데이터베이스와 상호작용할 수 있도록 도와주는 라이브러리입니다. SQL Mapper는 다바 객체와 데이터베이스의 테이블 간의 매핑을 담당하여, SQL 쿼리를 자동으로 생성하여 객체를 데이터베이스에 삽입, 갱신, 삭제 등의 작업을 수행할 수 있습니다. 개발자가 SQL을 직접 작성하지 않고도 객체와 데이터베이스 간의 매핑을 처리 할 수 있습니다. 대표적인 SQL Mapper로는 MyBatic가 있습니다.

ORM (Object-Realtional Mapping)은 객체와 관계형 데이터베이스 간의 매핑을 담당하는 기술입니다. ORM은 객체 지향 프로그래밍과 관계형 데이터베이스의 데이터 모델 간의 차이를 해결하기 위해 사용됩니다. ORM은 객체를 데이터베이스에 삽입, 갱신, 삭제, 조회하는 작업을 자동으로 처리 할 수 있습니다. ORM을 사용하면 개발자는 SQL 작성하는 것이 아니라 객체를 조작하면서 자동으로 SQL이 생성됩니다. ORM은 자바에서 Hibernate, JPA등의 라이브러리가 대표적으로 사용됩니다.

따라서, JDBC는 직접 SQL을 작성하고 실행한느 것을 중심으로 하는 반면에 SQL Mapper와 ORM은 SQL 쿼리 작성을 자동화 하는 기술로, ORM은 객체와 관계형 데이터베이스 간의 매핑을 자동화한다는 점에서 SQL Mapper와 구별됩니다.

 

영상보고 내용 정리하기

https://www.youtube.com/watch?v=mezbxKGu68Y 

이들의 공통점은 뭘까요?

 

Persistance 영속성

 

영속성?

사라지지 않는 데이터의 특성, 영구히 저장되는 그 어떤것

 

결국에는 이 세기술 전부 어떻게 데이터베이스에 저장을 시킬 것이냐 어떻게 영속성을 구현할 것이냐.

 

어떤 기술을 깊게 파는 거 보다는 이게 왜 나왔고, 왜 쓰이고를 살표보자.

"역사를 잊은 기술에겐 미래란 없다"

 

JDBC - JDBC API

SQL Mapper - Mymatis

Sprnig - JDBC Spring JDBC

ORM - JPA Hibernate Spring Date JPA, Spring Data JDBC

 

1997년  JDBC 등장

왜?

Java Data Connectivity 90년대 인터넷 보금 DB 성장 DB커넥터가 필요하다 생각해 JDBC 등장

- Java 진영의 데이터베이스 연결 표준 인터페이스

어떤 제품이든 접근할 수 있게 만드는게 JDBC API

불편한점 

- 중복코드가 너무 많이 생긴다.

- 쿼리를 일일이 써야한다.

- 커넥션 관리를 계혹 해야한다.

 

Sping JDBC진영에서 이런 불편함을 해소하고자 기술을 제공합니다.

여기서 나온 개념이 RWOMAPPER

 

그래서 Spring JDBC를 사용하면 어플리케이션 개발자가 '어떤 연결을 할 것이다' 이런 부분을 넣어 줘야 되겠지만 연결을 알아서 오픈해주고 우리가 SQL 지정해주고, 파라미터, Statement등 이런걸 다 해준다.

Spring은 결국에 불편한 것들을 많이 추상화 시켜 놓았다.

그래서 SQLMapper에 속하게 되었다.

 

SQL Mapper - MyBatis

MyBatis는 JDBC에서 발생하는 그런 문제점들을 좀 다르게 해석을 했다.

'SQL을 분리하자', 자바코드에서 SQL 쓰는 것이 불편하다. String으로 직접 넣어줘야하고, 띄어쓰기 하나라도 잘못한다면 오류가 난다.

- 간단한설정! 관심사분리!

- 쿼리를 Java단에서 xml로 옮김

복잡한 JDBC코드, 커넥션, 스테이트먼트, ResultSet등을 하나도 안쓰고 최대한 간단하게 xml로 관리를 하겠다.

 

JDBC는 코드가 너무 많아서 불편하다. -> Spring JDBC

쿼리는 따라 관리하는게 좋을거 같다 -> MyBatic

SQL에 의존적이지 말고 객체 지향적으로 관리를 하자 -> ORM

"물리적으로 SQL과 JDBC API를 데이터 접근 계층에 숨기는 데 성공했을지는 몰라도 논리적으로는 엔티티와 아주 강한 의존 관계를 가지고 있다"

패러다임의 불일치

 

ORM (Object Relational Mapping) 등장

Java에서는 JPA라는 인터페이스가 나오고 Hibernate라는 대표적인 구현체.

JPA 표준 인터페이스 

핵심 모델은 무엇인가? 엔티티 매니저와 영속성 컨텍스트 입니다.

JPA 쪽에서는 컨텍슽트를 4개로 분리합니다.

- Remove, Managed, Transient, Detached

 

Spring Data 의 JPA

Sprnig Data 진영에서 만든 JPA이고 Spring Data 진영에서는 코어 컨샙으로 repository를 제안했습니다.

: 한 단계 더 추상화 하자

레파지토리 안을 뜯어보면 em(엔티티 메니가)이 있습니다.

단지 findById만 해줘도 em이 그 안에서 다 해주고 있다.

 

Spring Data JDBC

"심플", 엔티티 매니저 쓰지 않겠다.

"SPRING DATA JDBC A  SIMPLE. LIMITED. OPINIONATED ORM"

: 심플사고 한정되어 있고 Opinionated ORM 이다.

Hibernate 쓰지 않고 JDBC API를 스스로 구현한다.

 

 

영상의 총평

기술이 어떻다고가 아닌 왜 탄생했는지 그리고 이 많은 기술들을 안 헷갈렸으면 하는 바람으로 강의 해준거다.