Try   HackMD

ORM Framework가 무엇인지 설명해주세요.

정의

  • ORM이란 Object Relational Mapping의 줄임말
  • 객체 지향 프로그래밍과 관계형 데이터베이스간에 통신시 발생하는 패러다임 불일치 문제를 해결하고자 객체와 관계형 데이터베이스 간에 데이터를 자동으로 매핑해주는 기술을 의미

장점

  1. 별도의 SQL문을 사용하지 않아도 객체 지향 프로그래밍 언어로 구현이 가능하며 이는 곧 생산성 증가로 이어진다.
    • 대량의 SQL Query를 쓰지 않고도 객체간의 관계를 풀어낼 수 있기 때문에 개발자가 좀 더 직관적으로 객체간의 관계를 파악할 수 있다.
  2. 재사용 및 유지보수가 편리하다.
    • 매핑하게 되면 정보가 명확해지기 때문에 ERD를 보는 것에 대한 의존도를 낮출 수 있다.
    • ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능하다.
  3. DBMS에 대한 종속성이 줄어든다.
    • 대부분의 ORM 프레임워크들은 DB에 종속적이지 않다.
    • 그러므로 개발자들은 객체에 집중함으로써 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다. (여기서 종속적이라는 것은 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미한다.)
  4. DB의 마이그레이션을 쉽게 할 수 있다.

단점

  • 완벽한 ORM 으로만 서비스를 구현하기가 어렵다.
    • 모든 것을 ORM을 통해서만 구현하는 것은 힘들다. 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수도 있다.
  • DB에 직접 Query문을 보내는 것이 아니기 때문에 성능저하가 발생한다.
  • DB와 ORM 프레임워크, 내부코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.
  • DB와 바로 연결하는 것보다 초기설정이 더 많아지거나 복잡해 질 수있다.

참고

ORM, JPA, Hibernate, Spring Data JPA를 각각 비교해보세요.

  • ORM
    • 객체 지향 프로그램과 관계형 데이터베이스 간에 통신시 발생하는 패러다임 문제를 해결하기 위해 데이터를 자동으로 매핑해주는 기술을 의미
  • JPA
    • 자바 진영의 ORM을 위한 명세를 의미
  • Hibernate
    • Java 진영의 ORM 명세인 JPA를 구현한 여러 구현체 중 하나를 의미.
    • JPA 구현체로써 Hibernate 외에도 EclipseLink나 DataNucleus 등이 존재
  • Spring Data JPA
    • Spring 환경에서 JPA를 편리하게 사용할 수 있도록 Repository 기반으로 추상화 시킨 스프링 서브 프로젝트이다.
    • Spring Data JPA는 JPA 사용시 발생하는 수 많은 boilerplate를 없애주고 pagination이나 Query Method 등의 다양한 기능을 지원한다.
tags: ORM-JPA