반응형
ORM (Object Relational Mapping) 객체 - 관계 매핑
객체 지향 프로그래밍 언어를 사용하여 가상의 객체 데이터베이스를 생성한 후, 이를 관계형 데이터베이스의 테이블에 매핑하는 프로그래밍 기법
- 객체지향에서 쓰이는 클래스와 관계형 데이터베이스에서 쓰이는 데이터를 테이블이 자동으로 매핑하는 것을 의미
- 개발자들은 SQL 쿼리를 작성하지 않고도 데이터베이스 조작을 수행할 수 있습니다
- 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생 => ORM을 통해 객체 간의 관계를 바탕으로 SQL 문을 자동으로 생성하여 불일치를 해결하는 데 사용
- 객체 지향 프로그래밍을 클래스를 사용하며 관계형 데이터베이스는 테이블을 사용
- ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다
장점
- 생산성
- ORM은 개발자가 SQL을 이용하여 직접 데이터베이스를 조작하는 대신에, 더 높은 수준의 추상화를 제공함으로써 개발 생산성을 높여주는 장점이 있다
- 이로 인해 개발자가 객체 모델만 이용하여 프로그래밍을 하는 데 집중할 수 있게 한다
- 유지보수성
- ORM은 기존 객체와 독립적으로 작성되어 있고, 객체로 작성되었기 때문에 재활용이 가능하다
- 객체 모델을 변경하면 ORM이 이를 데이터베이스에 자동으로 반영한다
- 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다
- 성능 최적화
- 캐싱, 지연 로딩, 배치 처리등 다양한 성능 최적화 기능을 제공한다
- 객체 간 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다.
- 벤더 독립성
- ORM은 데이터베이스 엔진간 이동을 용이하게 해주어 특정 데이터베이스 엔진에 대한 의존성을 줄일 수 있다
- 데이터베이스 시스템을 추상화하여 MySQL에서 PostgreSQL로 전환하거나 원하는 방식으로 쉽게 전환할 수 있다
단점
- 복잡성
- ORM은 상당한 학습 곡선이 있을 수 있습니다. 복잡한 쿼리를 작성하거나 성능을 최적화하는 것이 어려울 수 있으며, 프로젝트의 복잡성이 늘어날수록 이러한 난이도는 상승할 수 있다
- 성능 이슈
- ORM은 SQL 쿼리를 자동으로 생성하므로, 때때로 비효율적인 쿼리가 생성되어 성능에 영향을 미칠 수 있다
- 데이터베이스 기능 제한
- ORM을 사용하면 데이터베이스의 모든 기능을 지원하지 않을 수 있습니다. 이는 특정 데이터베이스 기능의 사용이 어려울 수 있다
- 모델링 제한
- ORM은 객체와 테이블 간의 매핑을 기본으로 하므로, 복잡한 관계나 데이터 구조를 표현하는데 어려움을 겪을 수 있다
- 프로젝트의 복잡성이 커질 경우 난이도가 올라갈 수 있다.
- 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 제대로 활용하기 어려울 수 있다.
- 객체-관계 간의 불일치는 다음과 같은 형태로 나타나게 된다
- 세분성: 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다
- 상속성: RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다
- 연관성: 객체지향 언어는 방향성이 있는 객체의 참조를 사용하여 연관성을 나타내지만, RDBMS는 방향성이 없는 외래키를 이용하여 연관성을 나타낸다
- 탐색: RDBMS에서 객체를 접근하는 방법과 ORM을 사용하여 객체에 접근하는 방법이 다르다
- 일치: RDBMS는 기본키를 사용하여 동일성을 정의하지만, 객체지향 언어는 하나 이상의 식별자를 통해 동일성을 정의할 수 있다
참고 자료
반응형
'Develop Log > 개발 관련 잡학다식' 카테고리의 다른 글
HTTP Method (0) | 2023.07.21 |
---|---|
OSI(Open Systems Interconnection) 7계층 (0) | 2023.07.18 |
Http 버전별 특징 (0) | 2023.07.16 |
Tomcat, Nginx (0) | 2023.07.16 |
첫번째 이야기 WAS, Web Server (0) | 2023.07.16 |