본문 바로가기
Java | spring/JPA

JPA 사용 하는 이유는? (+ ORM 과 SQL mapper 비교)

by 워니 wony 2022. 10. 17.

일반적인 프로그램은 프로그램이 종료 되더라도

실행 중에 작성하거나 생성한 데이터가 이후에 재실행 후 접근 시 동일한 데이터를 바라봐야 한다.

 

예를 들어 하루 종일 게임을 해서 레벨을 올렸는데,
다음 날 재 접속 했더니 레벨이 다시 초기화 된다면!
생각만 해도 끔찍하다...

 

 

 

데이터를 생성한 프로그램의 실행이 종료되더라도 데이터가 사라지지 않고 저장되는 데이터의 속성.

이 개념을 영속성(Persistence)이라고 한다.

 

 

Persistence layer 구현하는 방식에 따라 구분이 된다.

  • JDBC 이용하여 영속성 계층 구현
  • Persistence Framework(영속성 프레임워크)를 이용하여 구현
    • SLQ mapper
    • ORM 

 

데이터를 저장하고 관리하는 기술의 흐름은 아래와 같이 변화되어 왔다.

기존 기술의 불편함을 개선하기 위해서 점차 기술이 발전되어 왔다고 보면 된다.

JDBC > SQL Mapper > ORM

 

간단하게 위 기술에 대해서 설명!

  • JDBC
    • Java Database Connectivity
    • 자바에서 DB에 접근할 수 있도록 하는 자바 API
    • DB 종류 상돤 없이 하나의 JDBC API를 이용해 DB 작업을 처리하는 것
    • DriverManager > connection > Statement > resultSet
    • 단점
      • 커넥션 관리를 계속하고, 중복 코드가 많음
      • 쿼리를 직접 써야함
  • SQL Mapper
    • JDBC의 단점을 해소하기 위해서 사용하기 시작한 기술
    • SQL을 직접 작성
    • SQL문과 객체의 필드를 매핑하여 데이터를 객체화
    • SQL을 자바에서 분리하는 것이 주 관심(XML로 쿼리 분리)
    • 메소드에 쿼리를 매핑하는 것
    • 대표적인 Mybatis
    • 단점
      • SQL을 개발자가 직접 작성
      • DBMS에 종속적
      • 비슷한 CRUD 코드가 매우 반복됨
      • 객체와 RDB 구조간 패러다임 불일치
  • ORM (Object Relational Mapping)
    • Object와 RDB 테이블을 매핑하여 데이터를 객체화
    • SQL이 아닌 메서드로 데이터 조작
    • SQL Mapper는 SQL에 의존적이고 객체 지향적으로 사용하기가 어려움
    • SQL에 의존적인 개발을 하는 것 때문에 ORM이 나오게 됨
    •  ORM의 대표적인 JPA

 

 

JPA를 왜 사용하게 된것인가?

JPA는 위의 설명에서 보듯이 ORM의 대표적인 기술이다.

기존에 영속성 레이어를 구현하는 방식이 점차 개발하기 좋게 변화 했고,

현재 사용하는 기술이 JPA라고 생각하면 좋을 것 같다.

 

JPA는 자바 진영의 ORM에 대한 표준 명세이다.

자바는 객체지향 언어로 RDB와 패러다임이 다른 부분이 있다.

각자 지향하는 목적이 달라서 사용방법이나 표현 방식에 차이가 있을 수 밖에 없다.

  • 객체 지향 : 추상화, 상속, 다형성 등
  • RDB : 데이터 중심 구조

 

JPA 장점

  • 객체 지향 언어가 가진 장점을 활용 수 있음
  • 반복되던 CRUD SQL 코드가 줄어들게 됨
  • DB 종류를 변경하는 것이 기존 SQL Mapper에 비해 손쉬움(DB별로 SQL이 다른 경우가 다수)
  • 유지보수가 좋아짐(테이블 필드 변경 시 CURD 쿼리를 수정하지 않고, 엔티티를 수정함)

 

위와 같은 이유로 JPA를 많은 서비스 회사에서 사용하고 있다.

 

처음에 배우기 쉽지 않은 기술이긴 하나(개념적인 부분, 성능 적인 이슈 등)

위와 같은 장점이 있고, 현재 백엔드 개발에서 대세인 기술이기에 깊이있게 공부해 놓으면 좋을 것이다!

반응형

댓글