https://velog.io/@wea9677/Sequlize같은-ORM과-MySQL같은-데이터베이스의-차이가-무엇인가요
🤔ORM이란??
ORM(Object-relatinal mapping)이란 객체(클래스)와 관계(관계형 데이터 베이스)와의 설정을 의미 합니다. 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용합니다. 여기서 객체 모델과 관계형 모델간에 불일치가 존재 하는데 이 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결 하는 것이 ORM입니다.
Object <= 매핑 => DB데이터 에서 매핑의 역할을 하는 것이 ORM이라 할 수 있습니다.
😀ORM 장점
- 객체 지향적 코드로 인해 더 직관적이고 비즈니스 로직에 집중할 수 있도록 도와준다.
- CRUD을 위한 긴 SQL 문장을 작성할 필요가 없다. (여전히 쿼리작성은 필요하지만)
- 각 객체(Model)별로 코드를 작성하여 가독성을 높여 준다.
- SQL의 절차적 접근이 아닌 객체적인 접근으로 생산성을 높여 준다.
- 재사용 및 유지보수의 편리성이 증가한다.
- 매핑 정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있다.
- ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능 하다.
- DBMS에 대한 종속성이 줄어든다.(*종속성: 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미함.)
- 대부분의 ORM은 DB에 종속적이지 않다.
- 개발자는 Object에 집중함으로 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다.
- 종속적이지 않다는 것은 구현 방법 뿐만 아니라 많은 솔루션에서 자료형 타입까지 유효하다.
🤨ORM 단점
- 완벽한 ORM만으로는 구현하기가 어렵다.
- 사용하기에는 편하지만 설계에는 매우 신중해야 한다.
- 프로젝트의 복잡성이 높아질 경우 난이도 또한 올라갈 수 있다.
- 잘못 구현된 경우 속도 저하 및 심한 경우 일관성이 무너지는 문제점이 생길 수 있다.
- 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.
- 이미 프로시저가 많은 시스템에서는 다시 객체로 바꿔하 하며, 그 과정에서 생산성 저하 혹은 리스크가 발생할 수 있다.
(*프로시저: 특정작업을 위한 프로그램의 일부. 함수와 같은 의미)
📕Sequelize
Sequelize는 Node.js에서 가장많이 사용되고 있는 ORM이며 MySQL, PostgreSQL, MariaDB, SQLite, MSSQL을 지원합니다. 그 외에도 트랜잭션이나 relation, read replication등을 지원합니다. Sequelize의 가장 큰 특징은 Promise(비동기작업 제어방식)를 기본으로 지원 해준다는 점입니다.Promise의 장점은 다음과 같습니다.
1) 복잡한 비동기 코드를 깔끔하고 쉽게 만들 수 있도록 한다.
2) Chaining을 통해 값을 전달하거나 연속된 일련의 작업을 처리 할 수 있다.
3) Error handling에 대한 처리를 깔끔하게 할 수 있다.
다음과 같은 이유들로 Node.js를 사용하는 사람들은 Sequelize를 가장 많이 사용을 하며 실제 Sequelize 또한 Node.js에 가장 특화된 ORM이라고 할 수 있습니다.
SQL 데이터베이스SQL은 '구조화 된 쿼리 언어 (Structured Query Language)'를 말합니다. 따라서 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는 데 사용 하는 쿼리 언어입니다.SQL을 사용하면 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있습니다.이러한 관계형 데이터베이스에는 두 가지 주요 특징이 있습니다.데이터는엄격한 데이터 스키마(= structure)를 따라 데이터베이스 테이블에 저장됩니다.데이터는 관계를 통해서 연결된 여러 테이블에 분산됩니다.1.엄격한 스키마데이터는 테이블(table)에 레코드(record)로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)-테이블에 들어갈 수있는 데이터와 그렇지 않을 수있는 데이터를 정의하는 필드 집합-가 있습니다.구조는 필드의 이름과 데이터 유형으로 정의됩니다.여기서는 스키마를 준수하지 않는 레코드는 추가할 수 없습니다. 더 많은 필드를 얻고 싶다구요? 죄송합니다만 다른 테이블을 선택하셔야 합니다. 일부 필드가 누락 되었다구요? 그래도 이 테이블은 안됩니다!(예를 들어, 위 테이블에서 새로운 필드를 넣고 싶다면, 스키마를 뜯어고치지 않는한 필드를 추가 할 수 없다는 것을 말합니다.)2. 관계SQL 기반의 데이터 베이스의 또 다른 중요한 부분은 관계입니다.데이터의 중복을 피하기 위해, 데이터들을 여러 테이블로 나누어 저장합니다. 예를들어 Users(사용자), Products(상품), Orders(주문한 상품)의 여러테이블이 존재할 때, 각각의 테이블들은 서로 다른 테이블에 저장되지 않은 데이터 만을 가지고 있습니다.
SQL 데이터베이스
SQL은 '구조화 된 쿼리 언어 (Structured Query Language)'를 말합니다.
따라서 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는 데 사용 하는 쿼리 언어입니다.
SQL을 사용하면 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있습니다.
이러한 관계형 데이터베이스에는 두 가지 주요 특징이 있습니다.
- 데이터는엄격한 데이터 스키마(= structure)를 따라 데이터베이스 테이블에 저장됩니다.
- 데이터는 관계를 통해서 연결된 여러 테이블에 분산됩니다.
- 엄격한 스키마구조는 필드의 이름과 데이터 유형으로 정의됩니다.
- 데이터는 테이블(table)에 레코드(record)로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)-테이블에 들어갈 수있는 데이터와 그렇지 않을 수있는 데이터를 정의하는 필드 집합-가 있습니다.
여기서는 스키마를 준수하지 않는 레코드는 추가할 수 없습니다.
위 테이블에서 새로운 필드를 넣고 싶다면, 스키마를 뜯어고치지 않는한 필드를 추가 할 수 없다는 것을 말한다.
- 관계
SQL 기반의 데이터 베이스의 또 다른 중요한 부분은 관계입니다.
데이터의 중복을 피하기 위해, 데이터들을 여러 테이블로 나누어 저장합니다.
예를들어 Users(사용자), Products(상품), Orders(주문한 상품)의 여러테이블이 존재할 때, 각각의 테이블들은 서로 다른 테이블에 저장되지 않은 데이터 만을 가지고 있습니다.
따라서 이와 같은 구조에서 가장 큰 장점은 잘못된 데이터가 테이블 전체에 복제되는 문제는 발생하지 않는다는 큰 장점이 있다.
'TIL & WIL > 오늘의 공부.js' 카테고리의 다른 글
Strapi, Headless CMS, GraphQL (1) | 2023.10.03 |
---|---|
혼자 공부하는 자바 스크립트 9-1 확인문제 (0) | 2022.12.08 |
express.js의 라우터와 미들웨어 (0) | 2022.12.08 |
RDS란? (0) | 2022.12.05 |
.env가 연결이 되지 않은 이유 - 해결 완료 (0) | 2022.11.26 |