상세 컨텐츠

본문 제목

ORM, JPA에 대한 이해

Spring/JPA

by Chan.94 2023. 3. 29. 17:21

본문

반응형

ORM

Object Relational Mapping의 약자이며 DB의 특정 테이블이 JAVA의 객체로 맵핑되어 SQL문을 일일이 작성하지 않고 객체로 구현할 수 있도록 하는 프레임워크이다.

 

JAVA는 객체 지향이고, 관계형 데이터베이스는 데이터를 정규화해서 잘 보관하는 것을 목표로 한다. 객체를 데이터베이스에 넣기 위해서는 SQL문을 통해 변환해서 저장해야 하고, 데이터베이스에서 객체를 다시 꺼내오기 위해서는 복잡한 SQL문을 작성해야 한다. 

결국 객체를 단순히 데이터 전달 목적으로 사용할 뿐 객체지향적으로 프로그래밍을 할 수가 없다. 이는 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치하기 때문이다. 이를 해결하기 위해서 나온 기술이 ORM이다.

 

객체는 객체지향적으로, 데이터베이스는 데이터베이스 대로 설계를 한다. ORM은 중간에서 2개를 매핑하는 역할을 한다. 이를 통해 개발자는 소스를 조금 더 객체지향적으로 설계하고 비즈니스 로직에 집중할 수 있다.

 

JPA

Java Persistence API의 약자이며 JAVA ORM 기술에 대한 API 표준 명세를 의미한다. JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus같은 ORM 프레임워크를 사용해야 한다.

JPA 장점

  • 생산성이 향상된다. 
    SQL을 하나하나 작성할 필요가 없어 코드량이 줄어든다. 테이블을 생성하게 되면 기본 CRUD를 위한 물리적인 시간이 절약된다.
    테이블 컬럼이 하나 추가된다면 해당 테이블을 사용하는 모든 객체에 컬럼을 추가해야 하고 SQL도 수정해야 한다.
  • 가독성이 좋다
    findByAll과 같이 메소드명으로 어떤 데이터를 조회하는지 알 수 있다.

  • DBMS에 대한 코드 종속성이 줄어든다
    Oracle, MySQL 등 DB에 따라 조금씩 다른 SQL 문법 때문에 애플리케이션이 DB에 종속될 수밖에 없었는데, JPA는 직접 쿼리를 작성하는 것이 아니라서 DB 벤더에 독립적으로 개발이 가능하다.

JPA 단점

  • JPA 학습이 어렵고 학습 비용이 높다
    JPA의 이해도와 깊이가 사람마다 다를 것이다. 아는 만큼 사용할 수 있고 코드를 해석할 수 있다.
    단순히 SQL 문법만 알면 얼추 개발을 할 수 있는 MyBatis와는 달리, JPA는 SQL 자체에 대한 깊은 이해는 물론, JPA에 대해서도 공부해야 할 내용이 많다.

  • 복잡한 쿼리 사용 시 불리함
    복잡하고 미세하게 쿼리 작업이 필요하다면 Mybatis를 사용하는 것이 더 효율적일 수 있다. 
Spring에서 JPA와 Mybatis를 혼용해서 사용할 수 있기 때문에 필요에 따라 적절한 방식으로 선택해 가면서 사용하면 될 것 같다.

 

Hibernate

JPA를 사용하기 위해서 JPA를 구현한 ORM 프레임워크 중 하나이다. ORM 프레임워크 중 가장 많이 사용되며, JPA 인터페이스의 실제 구현부를 담당하며 내부적으로 JDBC를 사용한다.

 

JDBC(Java DataBase Connectivity)

데이터베이스에 연결 및 작업을 하기 위한 자바 표준 인터페이스이다.

 


 

JPA의 가장 중요한 키워드는 영속성이다. 영속성에 대한 내용은 아래 포스팅을 참조바란다.

JPA 영속성 컨텍스트 이해 (Persistence Context)

 

JpaRepository를 사용한 Example은 아래 포스팅을 참조바란다.

JPA Example

 

lombok에 대한 개념이 부족하다면 (lombok 어노테이션) 포스팅을 먼저 확인하길 추천한다.

반응형

관련글 더보기

댓글 영역

>