데이터(data)는 '자료'다.
그런데 왜 데이터의 집합을 '데이터베이스(data + base)'라고 부를까?
위키백과를 찾아보면 '데이터베이스'라는 용어는 1950년대 미국에서 군비의 집중적, 효율적 관리를 위해 컴퓨터를 활용한 도서관 개념을 개발하면서 이를 '데이터의 기지'라는 뜻으로 사용한 것이 시초라고 한다.
이처럼 데이터베이스를 '도서관'이라는 개념으로 본다면 단순히 데이터의 집합이라기 보다는 데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합하고 관리하는 데이터의 집합이라는 정의가 좀 더 와닿는다.
데이터베이스를 저장, 검색 및 편집할 수 있는 소프트웨어를 DBMS(Database Management System)이라고 부른다.
객체지향 프로그래밍 언어의 경우 데이터를 객체로 저장하게 된다.
반면 관계형 데이터베이스는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간에 불일치가 존재하게 된다.
따라서 코드 재사용성과 유지 보수를 위해 ORM(Object Relational Mapping), 즉 객체와 관계형 데이터베이스를 매핑해주는 기법을 사용하는 것이다.
ORM을 사용했을 때 장단점을 정리해보자.
(* 여담으로 최종 프로젝트를 진행할 때 SQL문을 직접 사용해보니 TypeORM과 달리 SQL문을 엔터나 띄어쓰기로 코드를 정리할 수 없었다. join문이 많아질수록 코드가 길어지고 가독성이 떨어지는 것을 체감할 수 있었다.)
선언문, 할당, 종료 같은 부수적인 코드도 필요하지 않다.
앞서 설명한 것처럼 코드 재사용과 유지 보수에 용이하다.
ORM을 사용하면 객체와 관계형 데이터베이스 사이에서 ORM 프레임 워크가 자동으로 매핑(연결)을 해주기 때문에 의존성을 낮출 수 있다.
코드의 쿼리와 DB 구조가 직접적으로 드러나지 않아 SQL문에 비해 보안성이 높다. (SQL 인젝션의 위험도 방지할 수 있음)
DB에 직접 명령을 내리지 않고 한 단계 더 거치기 때문에 SQL문에 비해 성능이 저하된다. (속도가 느리다.)
실제로 SQL문과 ORM의 실행 속도 차이가 궁금해서 찾아봤는데 ORM이 SQL문에 비해 크게는 8배 이상 느린 경우가 있었다.
조건이 많아지는 경우 완벽한 ORM만으로는 구현이 어려운 경우가 있다.
자동으로 생성되는 쿼리 때문에 직접 SQL을 사용하는 것보다 복잡할 수 있다.