Introduction
- 이번 스프린트는 SQL을 사용해 전에 완성한 채터박스의 채팅 데이터를 데이터베이스에 저장하도록 해주는 것이었다.
- 그 전 채터박스 스프린트에서는 fs를 적용해 파일에다가 데이터를 적용하는 방법을 했는데 클라이언트 코드만을 가져와 데이터 베이스에 저장하고 또 찾을 때는 불러오는 식으로 짜면 된다.
- 처음 데이터 베이스에 들어갈 항목들을 정해 기본적으로 만들어주고 그 후 Find혹은 Select를 사용해서 데이터를 가져오거나 아니면 Create로 만들어 주면 된다.
SQL vs NoSQL
- 데이터베이스를 사용할 때도 SQL을 사용할 지, 사용하지 않을지를 정해야한다.
- 초기 스키마 구성을 통해 대부분의 데이터를 처리하고 스키마 구조가 간단하지만 Update가 많고 Scale up을 해야하는 경우가 적을 때 SQL을 사용한다. 이 경우 서버의 성능도 향상되어야 한다.
- 이후에 어떤 데이터가 추가될 지 예상할 수 없고 데이터 update보다 읽고 쓰는것이 현저히 많을 때, Scale up을 해야하는 경우가 많다면 NoSQL을 사용한다. 서버의 수량을 더 추가해줘야 한다.
Schema & Relations
- SQL
- Schema: 처음에 스키마를 잘 설계해주어야 무슨 데이터를 어떻게 저장할 지 정할 수 있다. 나중에 데이터 양이 늘어나게 된다면 유연하게 바꾸는 것이 어려워 지는데 이를 보완하기 위해 ORM을 사용할 수 있다.
- Relations: 스키마 설계 시 일대 다수 혹은 다수 대 일대 인지 관계를 명확이 규정을 하고 스키마를 짜야 한다.
- NoSQL
- No Schema: JSON data와 같은 구조로 자바스크립트의 객체를 다루는 것처럼 데이터 조회가 가능하다.
- No Relations: JOIN의 개념이 사라지고 복사된 데이터가 각각의 Collection에 저장된다. 각 Collection에서 원하는 정보를 조회할 수 있다.
ORM
- ORM은 Object Relational Mapping 으로 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것이다.
Why use ORM?
- 객체지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용하는데 이 두 구조간의 불일치를 ORM을 활용하여 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해 이러한 불일치를 해결할 수 있다.
- 장점
- ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서 재사용 및 유지보수의 편리성이 증가한다.
- 단점
- 잘못 구현할 경우 성능이 저하.
- 복잡한 쿼리문의 경우 오히려 SQL 문으로 사용하는 것이 더 직관적, 효율적
Sequelize Sequelize CLI
- Node.js 기반의 ORM.
- 프로미스 기반의 ORM이어서 비동기 처리에 용이.
Sequelize CLI
- Sequelize command line interface 의 줄임말로 명령어를 사용해 데이터베이스 작업을 할 수 있는 툴
- 대표적인 기능으로 Migration, Seed, Model
- Model: 테이블 생성
- Migration: 코드에 적혀저 있는 데이터베이스 테이블을 기반으로 실제 데이터베이스에 테이블을 생성
- Seed: 생성된 테이블에 데이터를 추가
Sprint Review
- 이번 스프린트는 페어와 함께 데이터베이스를 구축하고 또 ORM을 이용해 리팩터링하는 것이었다.
Structure
Server (URL로 요청을 받음)
Router (요청을 URL에 따라 컨트롤러에 전달)
Controllers (요청에 해당하는 모델이 데이터 처리를 하도록 명령
Model (messages) & Model (users) (데이터 베이스)
View (Model에 의해 View가 업데이트)
Review
- 스프린트를 리뷰해본다면 처음 감을 잡는 것이 시간이 걸렸지만 조금씩 감을 잡으면서 생각보다 어렵진 않았던 것 같다.
- MySQL을 천천히 사용해보며 스키마를 짠 후 명령어를 사용해 실행시켜 보는 과정을 수월하게 진행했는데 서로 관계를 짜주는 부분이 생각보다 적용이 빠르지 않아서 어려웠다. Bare Minimum 을 완료한 후 ORM 리팩토링을 진행했다.
- Sequelize 와 Sequelize CLI를 사용할 때 처음엔 많이 혼란스러웠다. 하지만 몇가지 연습을 통해 스키마를 구축해보았는데 객체 식으로 만들 수 있어 매우 편리하다는 걸 느꼈고 또 CLI는 항상 MySQL을 켜서 데이터베이스를 만들어주지 않아도 되서 편한함을 느꼈다.
- 데이터베이스를 사용하는 것은 매우 중요하고 미래에도 백엔드를 구축할 때 중요하기 때문에 충분하게 학습하는 것이 중요하다.