Java

SQL Mapper, ORM, JDBC, JPA 정리

산디딤 2023. 10. 10. 17:22

대충 개념만 알고있는 것들

블로그 글을 보면 오~ 싶은데 안보고 설명하라면 제대로 설명 못할 것들

 

1. SQL Mapper

SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다.

다른 블로그를 보면 다들 저렇게 써놨다. 저 `객체화` 라는 말이 이해가 어렵다

 

쉽게 말하자면, 쿼리를 매핑해서 DB에 쿼리를 날리고, 거기서 나온 결과를 우리가 만든 Application에서 사용할 수 있게 해준다는 것.

Application에서 DB를 직접 다루도록 도와주는 친구...라고 생각하면 될거같다

  • 말그대로 SQL로 RDBMS와 Application을 연결(Mapping)해주는 친구
  • 개발자가 직접 쿼리를 작성해서 해당 DB에서 결과를 가져옴 >>>> 직접 DB 데이터를 조작
  • SQL 따로, 비즈니스로직 따로 분리됨 >>>> 비즈니스가 복잡하거나 안정적이어야 한다면 SQL Mapper 추천됨
    • 물리적으로는 분리.
    • 논리적으로 강하게 결합 (DBMS에 종속적이기 때문에) >>>> DTO를 쓴다면 DB 변경시 DTO를 다 바꿔줘야함.
  • 디테일하게 쿼리를 작성 가능(Good)
  • 기본적인 쿼리도 직접 써야함(Bad)
  • DBMS마다 문법이 달라서 DBMS에 종속적(Bad) >>>> DBMS가 바뀌면 쿼리를 다 바꿔야해서 곤란해짐
  • ex) MyBatis, JDBCTemplates
    • 결국 JDBC는 SQL Mapper중 하나

 

2. ORM (Object-Relation Mapping)

SQL Mapper가 Application에서 직접 DBMS에 쿼리로 접근했다면, ORM은 Application과 DBMS 사이에 ORM을 끼고 DBMS에 접근한다.

  • Application의 객체를 DBMS의 스키마와 매핑 (Good)
  • 객체와 DBMS의 관계를 바탕으로 자동으로 SQL을 생성 및 실행
    • 자동으로 SQL을 생성해주기 때문에 DBMS 종속적이지 않음
  • DBMS 종속적이지 않기 때문에 객체 지향적 (Good)
  • 유지보수가 편리 (Good)
  • 복잡한 쿼리를 쓰기 어려움 (Bad)
  • 처음에 해당 ORM을 배워야함 >>>> 러닝커브 존재 (Bad)
  • 그놈의 JPA가 ORM의 표준 인터페이스
  • ex) Hibernate, EclipseLink, DataNucleus 

 

3. JDBC, Spring JDBC

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

DB에 접근할 수 있도록 Java에서 제공하는 API.

Java에서 사용하는 SQL Mapper라고 생각하자

여러 DBMS에 맞게 드라이버를 제공한다. >>>> 어떤 DBMS든 연결할 수 있게 도와줌

 

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

DB와 연결하기 전과 후, 위와 같은 과정을 거친다고 한다

 

https://freedman.tistory.com/99

연결하고 결과 객체를 받아오고 하는 과정이 복잡해서 나온게 Spring JDBC.

JDBC DriverManager가 하는 일을 JDBC Template에게 맡긴다고 한다.

 

Spring JDBC = JDBC 를 더 편하게 쓸 수 있게 해주는 친구

xml을 통해 DI를 해서 사용

 

4. JPA, Spring Data JPA

드디어 JPA

https://freedman.tistory.com/99

Java에서 제공하는 ORM 기술에 대한 표준 명세 인터페이스. Java 에서 쓰는 ORM이라 생각하자

특징은 ORM의 특징과 같다. 왜냐하면 그것이 ORM이기 때문 (끄덕)

 

인터페이스라서 구현은 없다.

그 유명한 Hibernate가 JPA의 구현체. 즉 JPA를 구현한 라이브러리

 

Spring Data JPA도 JPA를 쉽게 사용할 수 있도록 해주는 친구. 라이브러리/프레임워크 이다.

Repository를 사용해서 추가적인 기능을 제공한다.

 

다른 블로그에 의하면

Repository라는 인터페이스를 제공함으로써 이루어집니다
. 사용자가 Repository 인터페이스에 정해진 규칙대로 메서드를 입력하면, Spring이 알아서 해당 메서드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해 줍니다. 

라고 한다.

findAll(), findById() 뭐 이런것들을 써서 쉽게 사용할 수 있게 도와준다

 

 

결론

SQL Mapper

: Application에서 쿼리를 매핑해서 DB에 쏴주고 데이터를 가져오는 친구. SQL을 직접 쓴다

 

ORM

: 객체와 DBMS의 스키마를 중간에서 연결해준다. SQL을 직접 안써도 된다

 

JDBC

: Java에서 DB에 해당하는 드라이버를 통해 DB에 쉽게 연결할 수 있도록 도와주는 API.

: SQL Mapper의 일종

 

Spring JDBC

: JDBC Templates을 통해 JDBC를 더 쉽게 사용할 수 있도록 도와주는 친구(디펜던시)

 

JPA

: Java에서 제공하는 ORM 기술에 대한 표준 명세 인터페이스.

: Java 에서 쓰는 ORM

: Hibernate와 같은 구현체로 구현해야 함

 

Spring JPA

: JPA를 쉽게 사용할 수 있도록 해주는 라이브러리/프레임워크

: Repository를 사용해서 추가적인 기능을 제공한다.

 

 

정리하면서도 헷갈린다.

틀린 내용이 있다면 알려주심 수정하겠습니다

 

참고한 블로그 엄청많음

 

이 블로그가 전체적으로 JDBC, JPA에 대한 정리가 잘되어있음.

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

 

https://deveun.tistory.com/entry/SQL-Mapper%EC%99%80-ORM-%EC%B0%A8%EC%9D%B4

https://freedman.tistory.com/99

https://lealea.tistory.com/238