ORM

Gunjoo Ahn·2022년 8월 8일
0

Object Relational Mapping

객체-관계 매핑을 ORM이라 줄여 지칭한다. 객체와 관계형 데이터베이스의 한 row 데이터매핑하는 것이다. 객체 지향 프로그래밍에서의 클래스로 객체를 표현하고, 관계형 데이터베이스에서는 테이블 스키마로 데이터를 표현한다. 객체 지향 프로그래밍 클래스의 인스턴스 하나와 관계형 데이터베이스 테이블의 row data 하나는 매핑될 수 있다는 점에서 ORM은 출발한다.

클래스의 멤버 변수가 테이블의 컬럼들로 매핑된다. 외래키는 다른 객체 즉, 다른 row data를 멤버 변수로 참조하는 것으로 매핑된다. 이렇게 관계형 데이터베이스와 객체를 매핑하여 다룰 수 있게 되니, 객체의 수정을 row의 수정으로 전파시킬 수 있게 된 것이다. 객체의 수정을 데이터베이스로 전파하기 위하여 자동으로 SQL문을 생성하고 수행하는 것이 ORM의 역할이다.

👍장점

객체 지향적인 코드

SQL문이 아닌 객체 메소드로 CRUD를 조작하기에 개발자는 객체 지향적으로 데이터를 다룰 수 있다. 각 객체에 종속적인 코드를 별도로 작성하여 비즈니스 로직을 관리할 수 있어 코드의 가독성을 높이고 객체 지향적으로 데이터를 다룰 수 있게 도와준다.

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

ORM은 독립적으로 작성되고, 해당 객체들은 재활용할 수 있다. 객체와 테이블의 매핑 관계가 명확하고 SQL 쿼리를 별도로 작성하지 않기에 유지보수가 편리하다.

DBMS 종속성 하락

대상 객체의 매핑 대상인 테이블 스키마는 어떤 DBMS의 테이블 스키마인지 중요하지 않다. ORM이 매핑을 지원해주기만 한다면, 어떤 DBMS를 사용하든 같은 동작을 할 것이라고 보장받을 수 있다.

👎단점

ORM이 모든 것을 해결할 수 없다

잘못사용하면 큰 성능 저하와 일관성이 무너지는 결과를 가져올 수 있다. 또 ORM이 SQL문을 자동으로 작성하기에 여러 성능문제부터 의도치 않은 동작을 하게될 가능성이 있다. ORM으로만 해결을 하려고 하면, 간접적으로 자동 생성되는 SQL을 유도하여 해결을 하려고 하는 것이므로 SQL을 직접 작성하는 것이 차라리 효율적이며 올바른 방법일 수 있다.

이미 프로시저가 많은 시스템에서는 사용하기 어렵다

다시 객체로 표현하는 과정이 번거롭고 ORM을 통한 SQL문 자동 생성이 리스크가 있을 수 있다.

Reference

https://gmlwjd9405.github.io/2019/02/01/orm.html
https://geonlee.tistory.com/207
https://velog.io/@dnjscksdn98/Database-ORM%EC%9D%B4%EB%9E%80
https://tibetsandfox.tistory.com/17

profile
Backend Developer

0개의 댓글