I can do it(Feat. DEV)

[Spring]JDBC, SQL Mapper, ORM이란?(feat. JPA, Mybatis) 본문

개발자 모드/개념

[Spring]JDBC, SQL Mapper, ORM이란?(feat. JPA, Mybatis)

까짓거 해보자 개발자 2024. 5. 26. 19:29
728x90


(※주의/참고 필자가 공부한 내용을 바탕으로 포스팅을 하기 때문에 틀린 부분이 있을 수 있음!!!)

 

📝 목차
1. JDBC란 무엇인가?
2. SQL Mapper란 무엇인가?
3. ORM이란 무엇인가?
  - Hibernate, JPA는 무엇인가?

 

각 개념에 대해서 설명하기 앞서 JDBC, SQL Mapper, ORM과 같은 프레임워크나 API들이 나타난 배경은 무엇일까??

 

필자가 공부한 내용을 바탕으로 알아보겠음!!

 

예를 들어 스프링으로 웹 애플리케이션을 만들었을 때 관계형 데이터베이스가 없다면 어떻게 될까??

 

문제가 생겨 서버가 내려가거나 실수로 서버를 꺼버리면...

 

이때까지 저장한 데이터, 즉 객체의 상태가 사라지게 됨.😰

 

이러한 데이터를 생성한 프로그램이 종료되더라도 데이터를 사라지지 않게(영속성) 하기 위해서 DB에 데이터를 저장하고 영속성을 부여하여 상태를 유지할 수 있도록 함.

 

이처럼 데이터가 사라지지 않도록 DB와 연결되어 데이터를 주고 받을 수 있도록 하기 위해 Java에서 제공하는 API JDBC(Java Database Connectivity)가 등장함.


1. What is JDBC?

 

쉽게 설명하자면 JDBC는 자바 프로그램이 DB와 소통할 수 있게 해주는 일종의 "전화기" 📞 역할을 함.

 

자바 코드에서 SQL 쿼리를 작성하고, DB로 보내 데이터를 받을 수 있음.

 

JDBC는 자바 애플리케이션에서 DBMS의 종류에 상관 없이, 하나의 JDBC API를 통해 DB작업을 처리하고, 

 

JDBC 구조

 

위 사진처럼 DB에 따라 JDBC Driver만 바꾸면 어느 DB에서든 접근할 수 있음.


하지만 JDBC는 DB 연결, SQL 실행, 결과 처리 등의 작업을 매번 직접 작성해야 하므로, 반복적인 코드가 많아 코드가 길어지고 그만큼 시간도 더 소요됨.

 

또한 결과로 받은 데이터를 직접 객체를 만들어 넣어줘야한다는 점이 불편함.

📜JDBC의 장단점

1. 장점
 - JDBC드라이버로 거의 모든 DB에 접근하는 것이 가능함(범용성)
 - SQL 쿼리, DB 연결, 트랜잭션 관리 등을 직접 제어가 가능(세밀한 제어)

2. 단점
 - 매번 DB 연결과 자원 해제를 위한 코드를 작성해야함.(반복적인 코드)
 - 결과로 받은 데이터를 직접 객체에 일일이 넣어줘야함.(수동적인 매핑)
 - 비지니스 로직에 집중하기보단 SQL 의존적인 개발을 해야 함.
 - connection, resultset 등 공유 자원을 매번 반환(해제) 해야 함.

 

이러한 여러 단점들을 개선하여 더 쉽고 간단한 작업만으로 DB와 소통할 수 있는 시스템을 개발하였는데 그것이 바로 Persistence Framework임.

 

>> JDBC를 직접 이용하지 않고 데이터베이스와의 연동되는 시스템을 빠르게 개발, 안정적인 구동을 보장해 주는 프레임워크

 

종류는 DB와 매핑하는 방식에 따라 SQL MapperORM으로 나뉨.


2. What is SQL Mapper?

 

SQL Mapper란 SQL 문과 객체의 필드를 매핑하여 데이터를 객체화하는 기술로, 객체와 관계를 매핑하는 것이 아니라 작성한 SQL 문의 결과와 객체의 필드를 매핑하여 데이터를 객체화하는 것.

 

조금 더 쉽게 설명하자면 자바 코드와 SQL 쿼리를 연결해 주는 "통역사"🔗같은 역할이라고 보면 됨.

 

대표적인 프레임워크로 Mybatis가 있음.

 

🛠️Mybatis 
- 자바 애플리케이션에서 SQL 쿼리를 쉽게 작성하고 실행할 수 있도록 도와주는 Persistence Framework

1. 장점
 - 자바 코드로부터 SQL 쿼리문을 따로 XML파일로 관리(비즈니스 로직에 집중)
 - SQL 쿼리를 직접 작성하고 관리할 수 있고 복잡한 쿼리문 작성에 유리함(SQL 제어)
 - 간단한 설정으로 DB와 연동을 쉽게 설정할 수 있음(간편한 설정)

2. 단점
 - SQL 결과를 자바 객체로 수동으로 매핑해야 하므로 추후 DB 테이블 컬럼이 추가될 때 직접 쿼리문을 수정해야 함 (매핑 작업)
 - SQL 쿼리를 직접 작성해야 하므로 쿼리문법을 모른다면 어려움이 있음(러닝커브)

3. What is ORM?

 

ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑하는 것으로, 쉽게 말해 DB 테이블을 자바 객체로 만들어주는 "자동 번역기"🪄같은 역할임.

 

ORM을 사용하면 패러다임 불일치를 해결할 수 있으며, 개발자가 SQL 쿼리문을 직접 작성하지 않아도 됨.

 

그렇기 때문에 비지니스 로직에 더 집중할 수 있고, CRUD 쿼리문의 반복을 줄일 수 있음.

 

대표적인 프레임워크로는 JPA, Hibernate 등이 있음.

🛠️JPA
- 자바 표준 API로, 관계형 데이터베이스와 자바 객체 간의 매핑을 위한 표준 인터페이스를 제공
- JPA를 사용하면 개발자는 객체 지향적인 방식으로 데이터베이스와 상호작용을 할 수 있음
- 자바 표준 API이기 때문에 여러 구현체에서 사용할 수 있음
> 대표적인 구현체로 Hibernate가 있음

🛠️Hibernate
- Hibernate는 JPA 스펙을 구현한 ORM 프레임워크 중 하나로 객체-관계 매핑을 위한 다양한 기능을 제공하며 대부분의 JPA 기능을 포함하고 있음.
- 쉽게 말해 JPA에서 메소드로 요청된 정보들을 JDBC가 잘 알아들을 수 있도록 한번 더 표준화 작업을 해주고 JDBC로 넘겨줌.
- 캐싱, 지연 로딩 등의 기능을 제공하여 성능 최적화를 지원함.

 

이상으로 간단한 개념정리를 마치고 추후 필요한 부분이 있다면 추가하도록 하겠음! 🖐️

 

 

 

📢참조사이트

https://www.youtube.com/watch?v=VTqqZSuSdOk&t=568s

https://dev-coco.tistory.com/76

https://brightstarit.tistory.com/20

https://velog.io/@murphytklee/Spring-ORM-JPA-Hibernate-JDBC-%EC%B4%9D%EC%A0%95%EB%A6%AC

728x90