[RoadMap] ORM(Object Relational Mapping)

Info Notice:
안녕하세요. HwanSeok입니다.
본 포스팅은 backend의 기초 개념을 다지는 포스팅입니다.

ORM(Object Relational Mapping)

Persistence 영속성

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

persistence는, 트랜잭션이 무결성을 가지기 위해서 지켜야하는, ACID에서 Duration과 개념상으로 조금 헷갈릴 수 있습니다. ACID의 D는 Duraion으로 성공된 트렌젝션의 결과는 시스템이 고장나도 영구적으로 보존된다는 특징입니다. 굳이 구분하자면 Persistence는 데이터에 대해서, Duration은 transaction에 대한 특성입니다.

다시 돌아와서 영속성을 가지지 않는 데이터는 프로그램이 종료되면 사라집니다. 메모리 상에 존재하는 데이터에 영속성을 부여하기 위해서는 데이터베이스에 저장을 해야합니다.

데이터를 저장하는 방법

스프링 기반 자바 프로그램에서는 persistence template인 Mybatis를 사용해서 데이터를 데이터베이스에 저장합니다. 여기에 대한 자세한 설명은 생략하겠습니다.

django가 데이터에 영속성을 부여하는 과정은 mybatis보다는 hibernate와 흡사합니다. django는 모델을 이용해서 데이터베이스에 접근합니다.(hibernate와 유사) 그래서 모델이 곧 db 구성과 동일하게 동작합니다. 여기에 따른 장점은 다음과 같습니다.

간단하게 정리해본 장단점은 아래와 같습니다.

  1. SQL을 직접 작성하지 않아도 된다
  2. DBMS마다 쿼리를 새로 작성하지 않아도 된다.(RDMS마다 데이터를 조회하는데 조금씩 달라지는 문법을 고려하지 않아도 된다)
  3. 데이터베이스 스키마 변경시 코드만 수정하면 된다(SQL을 직접 작성하지 않아서 SQL을 수정하지 않아도 됩니다.)
  4. 객체 지행적으로 코드가 가능해지면서 비즈니스 로직에 더 집중할 수 있다

단점은 아래와 같습니다.

  1. 프로그램의 복잡성이 커질 경우 난이도가 상승합니다.
  2. 잘못 구현되는 경우 속도가 저하됩니다.
  3. 일관성의 문제가 생길 수 있습니다.

ORM(Object Relational Mapping)

위에서 언급한 Hibernate도 ORM framework의 일종입니다. ORM은 객체와 RDBMS의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다. 객체 지향 프로그래밍의 Clas와 RDMBS의 table을 연결해줍니다. 이 과정을 ‘객체 모델과 관계형 모델 간의 불일치를 해결한다.’고 표현하기도 합니다.

Reference

  • https://gmlwjd9405.github.io/2019/02/01/orm.html
  • https://m.blog.naver.com/PostView.nhn?blogId=varkiry05&logNo=221188182244&proxyReferer=https:%2F%2Fwww.google.com%2F

Success Notice:
수고하셨습니다. :+1:

Leave a comment