231212 TIL ORM이 무엇인가

HR J·2023년 12월 12일
0

스프링 훈련

목록 보기
7/8

-- 이번에는 본격적으로 RAW JPA에 대해 공부하기 앞서 기본 배경지식인 ORM에 대해 살펴보고자 한다.

  • 왜 ORM 의 탄생 배경을 알아야 하나?
  1. 내가 입사할 회사에 JPA 가 적용안된 프로젝트가 있을 수 있다!
    • DB가 탄생한 후 수십년 후에야 ORM 이 나왔고 그뒤로 수년 후에야 JPA 그리고 SpringData JPA가 나왔다.
    • 따라서 모든 회사의 모든 프로젝트가 JPA 또는 SpringData JPA 가 적용되어 있는 것이 아님!
    • 프로젝트에 따라 QueryMapper를 쓰기도 한다.(대기업 및 금융)
  2. ORM 은 갑자기 나타난것이 아니라 점차 발전해온 DB 연동 기술이론이다.
    • JDBC > ( QueryMapper > ORM(JPA)) 는 포함/개선 관계.
    • 이전 기술의 문제점을 개선하기 위해서 탄생하였기 때문에 이전 기술의 기능을 포함한다.
    • 그렇기 때문에 ORM 이 어떤 문제를 해결하고자 했는지 알아야 기능을 제대로 사용할 수 있다.

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

JDBC

  • Java Database Connectivity

    • 문장 그대로 Java 앱과 DB 를 연결시켜주기 위해 만들어진 기술이다.
    • 그렇기 때문에 JPA 도 이 기술을 사용하여 구현되어 있다.
  • JDBC Driver 는 여러타입의 DB 와 연결할 수 있는 기능을 제공한다.

  • JDBC Driver Manager 는 런타임 시점에
    • Connection(연결) 을 생성하여 쿼리를 요청할 수 있는 상태를 만듦
    • Statement(상태) 를 생성하여 쿼리를 요청!
    • ResultSet(결과셋) 을 생성해 쿼리 결과를 받아올 수 있게 해줌.
      🚫 사용 후엔 각각 close()를 호출해 자원 해제를 시켜줘야 한다! 🚫

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

  • JDBC 로 직접 SQL을 작성했을때의 문제

    • SQL 쿼리 요청시 중복 코드 발생
    • DB별 예외에 대한 구분 없이 Checked Exception (SQL Exception) 처리
    • Connection, Statement 등.. 자원 관리를 따로 해줘야 함
      • 안 해주면 메모리 꽉 차서 서버가 죽음
  • 이 문제 해결을 위해 처음으로 Persistence Framework 등장!

    • 2가지의 Persistence Framework
      • SQL Mapper : JDBC Template, MyBatis 👈 이게 먼저 등장!
      • ORM : JPA, Hibernate
  • SQL Mapper (QueryMapper)

    • SQL ↔ Object
    • SQL 문과 객체(Object)의 필드를 매핑하여 데이터를 객체화

JDBC Template

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

MyBatis

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

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

  • ORM은 DB의 주도권을 뺏어왔다고 표현해도 과언이 아님.
  • ORM은 DAO 또는 Mapper를 통해서 조작하는것이 아니라, 테이블을 아예 하나의 객체(Object)와 대응시킨다!
  • 객체지향(Object)을 관계형 데이터베이스(Relation)에 매핑(Mapping)하는 것에는 정말 많은 난관이 있다.
profile
Newbie Engineer&Programmer

0개의 댓글