데이터베이스와 ORM 을 알기 전 용어에 대해 공부해보았다.
데이터를 저장하고 관리하는 시스템
데이터베이스는 여러개의 테이블(Table)로 구성되어 있으며, 각 테이블은 레코드(Record) 라는 행(row)로 구성되어 있다.
데이터베이스를 이용할 때, 데이터를 검색, 수정, 삭제 등 다양한 작업을 할 수 있다.
이러한 작업은 SQL(Structured Query Language) 언어를 사용한다.
SQL 은 데이터베이스와 상호작용하기 위한 표준화된 언어로, 대부분의 관계형 데이터베이스 시스템에서 사용한다.
DBMS(Datebase Magagement System)의 약자이다.
데이터베이스를 관리하고 운영하는 소프트웨어이다. 다양한 데이터가 저장되어있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야한다. DBMS 는 다양한 종류가 있다.
DBMS 유형은 계층형, 망형, 관계형, 객체지향형, 객체관계형 등으로 분류된다. 현재 사용되는 DMBS 중 관계형 DBMS가 가장 많이 사용된다.
내가 자주 사용한 MySQL 또한 관계형 DBMS 이다.
열과 행으로 된 데이터베이스만 봐와서 그 이외에 데이터베이스를 생각하지 못했는데, 계속 사용해왔던 관계형 데이터베이스가 정말 편했다는걸 새삼 느꼈다.
관계형 DBMS(Relational DBMS) 는 줄여서 RDBMS 라고 부른다.
RDBMS 에서는 모든 데이터가 테이블에 저장된다. 테이블로 이루어져 있으며 , 테이블은 열과 행으로 구성되어 있다.
두 테이블을 관계를 설정해 중복된 데이터를 최소화하며 다양한 작업들을 할 수 있다.
출처
이것에 대해선 따로 정리 해야겠지만, ORM 을 설명하기 위해 간단히 적자.
데이터와 이를 처리하는 동작(메서드)를 하나의 단위인 객체(Object)로 묶어서 관리한다. 따라서 데이터의 구조와 동작을 하나의 객체로 정의하고, 객체 간의 관계를 이용하여 데이터를 저장한다.
Object Relational Mapping(객체-관계-맵핑) 의 약자로 객체와 데이터베이스의 관계를 매핑해주는 도구이다.
내가 썼던 ORM 은 sequelize , typeORM 이였다.
이 ORM 이 있었기 때문에, 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑 해줄 수 있었다.
즉, 객체와 관계형 데이터베이스 사이의 중계자 역할을 한다.
객체지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메서드를 하나의 객체로 묶어서 처리한다. 데이터와 메서드를 캡슐화하여 객체 단위로 관리하므로 객체를 사용하여 복잡한 문제를 해결하기 용이하다. 또한 객체 간의 관계를 이용하여 데이터를 표현하며, 이러한 관계는 객체의 상속 및 합성을 통해 구성된다.
관계형 데이터베이스는 테이블과 열로 구성된 데이터 구조를 사용하여 데이터를 저장한다. 각각의 테이블은 유일한 기본키(Primary Key)를 가지며, 이를 이용하여 다른 테이블과 관계를 맺는다. 이러한 관계는 일대일(One-to-One), 일대다(One-to-Many), 다대다(Many-to-Many) 등 다양한 유형이 있다.
객체는 클래스의 인스턴스이므로 상속, 다형성 등의 개념을 사용하고
관계형 데이터베이스에서는 테이블 간의 관계를 이용하여 데이터를 저장한다.
위에서 보았듯 객체 지향 프로그래밍과 관계형 데이터베이스는 데이터를 다루는 방식에 차이가 있다.
이러한 차이를 해결하기 위해 ORM은 객체와 테이블 간의 매핑(mapping)을 제공한다. 개발자는 객체를 정의할 때 해당 객체와 매핑될 테이블과의 관계를 정의할 수 있다. ORM 프레임워크가 이러한 매핑 정보를 바탕으로 SQL 쿼리문을 자동으로 생성하여 데이터베이스에 접근하므로 개발자는 SQL 쿼리문 작성에 대한 부담을 덜 수 있다는 장점도 있다.
ORM을 사용하면 개발자는 객체지향 프로그래밍에서 사용하는 객체를 그대로 사용하면서, 이를 관계형 데이터베이스와 연결하여 데이터를 저장하고 조회할 수 있습니다. 따라서, ORM은 객체지향 프로그래밍과 관계형 데이터베이스 간의 상호 운용성을 높이는데 큰 도움이 된다.