JPA 심화 1-1

5w31892p·2023년 2월 1일
0

JPA 심화

목록 보기
1/19

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

  • 추후 입사할 회사가 어떤 회사일지 모르지만, 해당 회사가 JPA 적용이 되지 않은 프로젝트가 있을 수 있기 때문에 알아둬야 한다.

:: JDBC

  • 말 그대로 자바와 디비를 연결시켜주는 것이다.
  • jpa도 해당 기술을 사용해서 구현한다.
  • jdbc driver는 여러타입의 db와 연결할 수 있는 기능을 제공한다.

  • jdbc driver manager는 런타임 시점에
    • Connection(연결) 을 생성하여 쿼리를 요청할 수 있는 상태를 만들어주고
    • Statement(상태) 를 생성하여 쿼리를 요청하게 해주고
    • ResultSet(결과셋) 을 생성해 쿼리 결과를 받아올 수 있게 해줍니다.
    • 🚫 꼭 사용후에는 각각 close() 를 호출해서 자원 해제를 시켜줘야 합니다! 🚫

:: QueryMapper

  • JDBC 로 직접 SQL을 작성했을때의 문제
    • SQL 쿼리 요청시 중복 코드 발생
    • DB별 예외에 대한 구분 없이 Checked Exception (SQL Exception) 처리
    • Connection, Statement 등.. 자원 관리를 따로 해줘야함
      • 안해주면 메모리 꽉차서 서버가 죽음

위와 같은 문제 해결을 위해 Persistence Framework 등장!

  • Persistence Framework 는 2가지가 있다.
    • SQL Mapper (QueryMapper) : JDBC Template, MyBatis 👈 요게 먼저나옴
      • SQL ↔ Object
      • SQL 문과 객체(Object)의 필드를 매핑하여 데이터를 객체화
    • ORM : JPA, Hibernate

:: JDBC Template

  • JDBC Driver 를 추상화하여 동작 (dbcp = db connection pool)
  • SQL Mapper 첫번째 주자
    • 쿼리 수행 결과와 객채 필드 매핑
    • RowMapper 로 응답필드 매핑코드 재사용
    • Connection, Statement, ResultSet 반복적 처리 대신 해줌
    • 😵‍💫 But, 결과값을 객체 인스턴스에 매핑하는데 여전히 많은 코드가 필요함

:: MyBatis

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

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

  • db의 주도권 뺐어옴
  • DAO 또는 Mapper 를 통해서 조작하는것이 아니라 테이블을 아예 하나의 객체(Object)와 대응


GitHub 실습코드

0개의 댓글