ORM (Object Relational Mapping)
- 객체 지향 언어에서 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법
- 보통 객체는 클래스를 의미하는데, 데이터베이스의 테이블과 클래스는 불일치가 존재할 수 있음
- ORM이 이 둘의 불일치와 제약사항을 해결함
- ORM을 이용하면 쿼리문 작성이 아닌 코드(메서드)로 데이터를 조작할 수 있음
ORM의 장점
ORM을 사용하면서 데이터베이스 쿼리를 객체지향적으로 조작할 수 있음
- 이는 쿼리문 작성의 양이 현저히 줄어 개발 비용 감소
- 객체지향적으로 데이터베이스에 접근하여 코드의 가독성을 높임
재사용 및 유지보수가 편리
- ORM을 통해 매핑된 객체는 모두 독립적으로 작성되어 있어 재사용이 용이
- 객체들은 각 클래스로 나뉘어 있어 유지보수가 수월
데이터베이스에 대한 종속성이 줄어듬
- ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 데이터베이스 테이블을 관리하기 때문에 데이터베이스에 종속적이지 않음
- 데이터베이스를 교체하는 상황에서도 비교적 적은 리스크를 부담
ORM의 단점
ORM의 한계
- 복잡한 서비스일 수록 직접 쿼리를 구현하지 않고 코드로 구현하는 것엔 한계가 있음
- 복잡한 쿼리를 정확한 설계 없이 ORM으로만 구성하게 되면, 속도 저하와 같은 성능 문제가 발생할 수 있음
객체 관점과 데이터베이스 관계 관점의 불일치
- 세분성(Granularity): ORM의 자동 설계 방법에 따라 데이터베이스에 있는 테이블 수와 애플리케이션의 엔티티 클래스 수의 불일치가 발생하여 클래스가 수가 더 많아질 수 있음
- 상속성(Inheritance): RDBMS에는 상속이라는 개념이 없음
- 식별성(Identity): RDBMS는 기본키(Primary key)로 동일성을 정의하지만, 자바의 경우 두 객체의 값이 같아도 다르다고 판단할 수 있음
- 연관성(Associations): 객체지향 언어는 객체를 참조함으로써 연관성을 나타내지만, RDBMS에서는 외래키(foreign key)를 삽입함으로써 연관성을 표현함.
- 방향성: 객체지향 언어에서 객체를 참조하면 방향성이 존재하는데, 데이터베이스에서는 양방향의 관계를 가지기 때문에 방향성이 없음
예를 들어, '사람' 객체가 '차' 객체를 참조할 수 있지만, 반대로 '차' 객체가 '사람' 객체를 자동으로 참조하지는 않는다.
반면에 관계형 데이터베이스에서는 '사람' 테이블과 '차' 테이블이 연결되어 있다면, '사람'에서 '차'로의 참조뿐만 아니라 '차'에서 '사람'으로의 참조도 가능 - 탐색(Navigation): 자바와 RDBMS는 어떤 값(객체)에 접근하는 방식이 다름
예를 들어, 어떤 멤버의 회사 주소를 구하기 위해 자바에서는 member.getOrganization().getAddress() 와 같이 접근하지만
RDBMS에서는 쿼리문으로 JOIN을 사용해 여러 테이블을 로드하여 값을 추출하는 접근 방식을 사용함
참고 자료
스프링 부트 핵심 가이드 "스프링 부트를 활용한 애플리케이션 개발 실무" , 장정우, 2022
'Development > Tip' 카테고리의 다른 글
유튜브 영상과 논문을 요약해주는 AI, Lilys AI (블로그 글도 써줌 ㄷㄷ;) (1) | 2024.02.04 |
---|---|
.gitignore 만들어주는 사이트 (0) | 2024.01.29 |
개발자 취업 팁 (2023년) (2) | 2023.12.05 |
JetBrains가 조사한 2023년 개발자 에코시스템 현황 (0) | 2023.11.23 |
[Tip] mac에서 마우스를 트랙패드 처럼 사용하기! Mac Mouse Fix (0) | 2023.09.24 |