본문 바로가기
개발/Spring

ORM의 이해: 데이터베이스와 객체 지향 프로그래밍의 효율적 연결

by 난중후니 2024. 1. 12.
728x90
반응형

영속성(Persistence)란?

데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.

영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 대문에 프로그램을 종료하면 모두 잃어버리게된다.

Object Persistence(영구적인 객체)

  • 메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 영구적으로 저장하여 영속성을 부여한다.

데이터를 데이터베이스에 저장하는 3가지 방법

1) JDBC사용

2) Spring JDBC 사용 ( EX: JdbcTemplate)

3) Persistence Framework (EX: Hibernate, Mybatis 등)

Persistence Layer

프로그램의 아키텍처에서 데이터에 영속성을 부여해주는 계층을 말한다.

Persitence Framework

JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있다.

Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다.

ex) JPA, Hibernate, Mybatis 등...

ORM이란?

ORM은 Object Relational Mapping(객체-관계-매핑)의 약자이며 객체와 데이터베이스의 관계를 매핑(연결)해주는 도구이다.

OOP(Object Oriented Programming)에서 쓰는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블을 매핑(연결)하는 것을 의미한다.

Entity라는 객체와 DB의 테이블을 매핑한다.

ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메소드)로서 데이터를 조작할 수 있다.

예를 들면, Member 테이블의 데이터를 출력하기 위해 DB에서는 SELECT * FROM MEMBER;라는 Query를 실행해야 하지만 ORM을 사용한다면 repository를 구현한 후 repository.findAll(); 이라는 메소드 호출로 데이터 조회가 가능하다.

ORM 장점

  1. 직관적인 코드(가독성) + 비즈니스 로직 집중 가능(생산성)
    ORM을 이용하면 SQL Query가 아닌 메서드로 데이터를 조작할 수 있다. 이로써 프로그래밍에 더 집중할 수 있게된다.
    각종 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성을 높여준다.
    SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가한다.
  2. 재사용 및 유지보수 편리성 증가
    ORM은 디자인 패턴을 견고하게 만드는데 유리하다.
    ORM은 독립적으로 작성되었고 해당 객체들을 재활용 할 수 있기 때문이다.
  3. DBMS에 대한 종속성 저하
    객체 간 관계를 바탕으로 SQL을 자동으로 생성하기 때문에 RDBMS의 데이터 구조와 프로그래밍 언어의 객체 모델 사이의 간격을 좁힌다.
    대부분의 ORM 솔루션은 DB에 종속적이지 않다. 즉, DB를 변경하게 될 시 리스크가 적다.

ORM 단점

사용하기는 편리하지만 설계가 어렵다.

프로젝트의 복잡성이 커질 경우 난이도가 올라간다.

잘못 구현된 경우 일관성이 무너질 수 있다.

같이 프로젝트를 하는 인원들이 ORM에 대한 이해가 부족하다면 속도 저하 및 내용이 꼬일 수 있다.

객체 - 관계 간의 불일치

클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다.
ORM을 이용하면 따로 SQL문을 작성할 필요 없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게된다.

ORM 사용 후기

확실히 일반적인 JDBC나 Mybatis 보다 작업 속도가 빠르고 반복적인 작업을 하지 않아도 되어 좋았지만 같이 프로젝트 하는 인원들이 ORM에 대한 이해가 부족하여 속도저하 현상과 Entity간의 설계가 망가지기 시작했었다. 아직까지 나도 설계가 어려운 부분들이 많고 배워야 할 점들도 많다.

복잡한 Query를 이용시 단순 ORM만으로는 한계가 있어보인다.

728x90
반응형

댓글