ORM 의 탄생 배경 (JDBC, Query Mapper)

more·2023년 7월 26일

JPA 심화 1일차

목록 보기
1/3

DB >>> ORM >>> JPA > SpringData JPA 순으로 탄생하였기 때문에 기존 회사들에서 JPA가 적용되어 있지 않은 프로젝트들이 많이 존재한다고 한다.

1. DB 탄생 후 Java 앱과 연동을 위해 JDBC 이 탄생

JDBC

  • Java Database Connectivity
    • Java 앱과 DB 를 연결시켜주기 위해 만들어진 기술
    • JPA 도 이 기술을 사용하여 구현되어 있다.
      -> JDBC에 대해서는 내배캠에서 초반에만 살짝 다루었기 때문에 조금 더 공부할 필요성이 있음.
  • JDBC Driver 는 여러타입의 DB 와 연결할 수 있는 기능을 제공

  • JDBC Driver는 각각의 DB에 맞게끔 설정되어있고, 그것을 Java Application에서 사용할 수 있도록 하는 것이며, JDBC Driver manager는 그러한 Driver들을 관리하는 것으로 생각하면 될듯
  • JDBC Driver Manager 는 런타임 시점에
    - Connection(연결) 을 생성하여 쿼리를 요청할 수 있는 상태를 만들어주고
    - Statement(상태) 를 생성하여 쿼리를 요청하게 해주고
    - ResultSet(결과셋) 을 생성해 쿼리 결과를 받아올 수 있게 해줍니다.
    - 🚫 꼭 사용후에는 각각 close() 를 호출해서 자원 해제를 시켜줘야 합니다! 🚫
    -> 해당 과정에서 리소스가 많이 들기 때문에 자원해제를 해주지 않으면 자원 누수 현상이 일어나서 프로그램에 좋지 않고, 다른 기능이 실행되지 않을 수 있으니 주의하자.
  • 위의 과정을 따르는데
    • Driver Manager가 getConnection()을 사용해서 connection을 만들고
    • connection에서 createStatement()를 사용, 해당 상태 (state)를 만들어준다.
    • 해당 statement에서 executeQuery()를 사용, 쿼리가 날라가며 실행됨.
    • close해주는 것은 역순으로 resultset > statement > connection 순으로 하면 됨

2. JDBC 의 여러 문제로 QueryMapper 이 탄생

  • JDBC로 직접 SQL을 작성했을때의 문제
    • SQL 쿼리 요청시 중복 코드 발생
      -> 쿼리를 계속 작성해주거나, 혹은 집어넣어 주어야하는 문제가 발생한다.
    • DB별 예외에 대한 구분 없이 Checked Exception (SQL Exception) 처리
    • Connection, Statement 등.. 자원 관리를 따로 해줘야함
      • 안해주면 메모리 꽉차서 서버가 죽음
        -> 위에서 언급했었던 close 관련 문제

  • 이 문제 해결을 위해 처음으로 Persistence Framework 등장!
    - Persistence Framework 는 2가지가 있다.
    - SQL Mapper : JDBC Template, MyBatis 👈 요게 먼저나옴
    - ORM : JPA, Hibernate

  • SQL Mapper (QueryMapper)
    - SQL ↔ Object
    - SQL 문과 객체(Object)의 필드를 매핑하여 데이터를 객채화
    -> 자바 코드로 구성된 Entity랑 DB의 테이블이랑 매핑했다고 보면 될듯

JDBC Template

  • SQL Mapper 첫번째 주자로 JDBCTemplate 탄생
    - 쿼리 수행 결과와 객채 필드 매핑
    - RowMapper 로 응답필드 매핑코드 재사용
    - Connection, Statement, ResultSet 반복적 처리 대신 해줌
    - But, 결과값을 객체 인스턴스에 매핑하는데 여전히 많은 코드가 필요함

MyBatis

  • SQL Mapper 두번째 주자로 MyBatis 탄생
    - 반복적인 JDBC 프로그래밍을 단순화
    - SQL 쿼리들을 XML 파일에 작성하여 코드와 SQL 을 분리!
    - But, 결국 SQL을 직접 작성하는것은 피곤하다…(DB 기능에 종속적)
    - But, 테이블마다 비슷한 CRUD 반복, DB타입 및 테이블에 종속적이다.

-> 즉, 여기까지의 Framework들은 Java Application 중심이 아니라 DB 중심으로 이루어져있다.

3. QueryMapper 의 DB의존성 및 중복 쿼리 문제로 ORM 이 탄생

  • ORM 은 DB의 주도권을 뺏어왔다고 표현해도 과언이 아닙니다.
  • ORM 은 DAO 또는 Mapper 를 통해서 조작하는것이 아니라 테이블을 아예 하나의 객체(Object)와 대응시켜 버립니다.

0개의 댓글