[Back-end] 데이터베이스 디테일 - ORM

Geun·2022년 3월 18일
0

Back-end

목록 보기
28/74

영속성이란

영속성(Persistence)는 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.
영속성을 갖지 않는 데이터는 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 사라진다.

Object Persistence(영구적인 객체)

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

데이터를 데이터베이스에 저장하는 방법은 다음과 같다.

  • JDBC (Java에서 사용하는 것)
  • Spring JDBC (JdbcTemplate)
  • Persistence Framework (Hibernate, MyBatis 등)

Persistence Layer

Persistence Layer는 프로그램의 아키텍쳐에서 데이터에 영속성을 부여해주는 계층이다.
JDBC를 이용해 직접 구현 가능하지만 Persistence Framework를 이용한 개발이 많이 이루어진다.

Persistence Framework

Persistence Framework는 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있다. 안정적인 구동을 보장한다.
SQL Mapper와 ORM으로 나뉜다.


ORM

ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말한다.

  • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
  • 객체모델과 관계형 모델간에 불일치가 존재한다.
  • ORM을 통해 객체관의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결해준다.
    따라서 ORM을 이용하면 SQL문을 짤 필요 없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있다는 의미가 있다.

데이터베이스 데이터 <<- 매핑 ->> Object 필드
와 같은 방향으로 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.

Persistant API라고도 부른다. (JPA, Hibernate)

ORM 장점

  • 객체지향적인 코드
    - ORM을 사용하면 SQL쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있어 개발자가 객체지향 프로그래밍을 하는데 집중할 수 있도록 도와준다.
    - 선언문, 할당, 종료같은 부수적인 코드가 없거나 많이 줄어든다.
    - 각종 개체에 대한 코드르 별도로 작성하기 때문에 코드의 가독성이 올라간다.
    - SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가한다.

  • 재사용, 유지보수, 리팩토링 용이성
    - ORM은 기존 객체와 독립적으로 작성되고, 객체로 작성되었기 때문에 재활용할 수 있다. 또 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다.

  • DBMS 종속성 하락
    - 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하고 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다.
    - 객체에만 집중할 수 있기 때문에 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간도 줄어들게된다.
    - 예를 들어 자바에서 가공할 경우 equals, hashCode의 오버라이드같은 자바의 기능을 이용할 수 있고 간결하고 빠르게 가공 가능하다.


ORM 단점

  • 완벽한 ORM으로만 서비스를 구현하는 것은 어렵다.
    - 사용하기는 편하지만 설계는 매우 신중하여야 한다.
    - 프로젝트의 복잡성이 커질 경우에 난이도가 올라간다.
    - 잘못 구현된 경우 속도 저하, 심각한 경우엔 일관성이 무너지는 문제가 발생할 수 있다.
  • 프로시저(Procedure)가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기가 어렵다.
    - 이미 프로시저가 많은 시스템에서는 다시 객체로 바꾸어야 한다. 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.

참고자료

https://velog.io/@dnjscksdn98/Database-ORM%EC%9D%B4%EB%9E%80
https://geonlee.tistory.com/207

0개의 댓글