[Django] ORM

Bik_Kyun·2022년 4월 4일
0
post-thumbnail

1. 영속성

  • 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
    영속성을 가지지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 사라진다.
  • Object Persistence(영구적 객체)
    메모리 상의 데이터를 파일 시스템, RDB 혹은 객체 DB 등을 활용해 영구적으로 저장하여 영속성을 부여한다.

2. ORM(Object Relational Mapping)

  • 객체-관계 매핑
  • OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational Data Base)에서 쓰이는 데이터인 테이블을 자동으로 연결하는 것.
  • 클래스와 테이블은 서로 호환가능성을 두고 만들어진 개념이 아니기 때문에 필연적으로 불일치가 발생하는데 ORM은 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결해준다.

3. ORM의 장단점

장점

1. 객체지향적인 코드

  • 개발자가 SQL문이 아닌 클래스의 메소드를 통해 DB를 조작할 수 있어 객체모델로 구현하는데 집중할 수 있다.
  • 선언문, 할당, 종료 같은 부수적 코드가 없거나 급격히 줄어든다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적 접근으로 생산성이 증가한다.

2. 재사용, 유지보수, 리팩토링 용이

  • ORM은 독립적으로 작성되어있고 해당 객체들을 재활용할 수 있다.
  • Model에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태이므로 디자인 패턴을 견고히 할 수 있다.
  • 매핑 정보가 명확하며 ERD 보는 것에 대한 의존도를 낮출 수 있다.

3. DBMS 종속성 하락

  • 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하기에 RDBMS의 데이터 구조와 OOP의 객체 지향 모델 사이의 간격을 좁힐 수 있다.
  • 대부분 ORM 솔루션은 DB에 종속적이지 않다.(구현 방법 뿐만 아니라 자료형 타입까지 유효하다.
  • 개발자는 Object에 만 집중할 수 있으므로 거대한 작업에도 적은 리스크와 시간이 소요된다.

단점

1. ORM으로만 완벽한 서비스를 구현하기는 힘들다.

  • 프로젝트의 복잡성이 커질 수록 난이도가 올라간다.
  • 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨릴 수 있다.
  • 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하므로 결국 SQL문을 써야한다.

2. 프로시저가 많은 시스템에선 ORM의 객체 지향적 장점을 활용하기 어렵다.

  • 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.
profile
비진

0개의 댓글