[TIL]201026 Sequelize

Chaegyeom·2020년 10월 27일
0

TIL

목록 보기
56/77
post-thumbnail

MVC Design Pattern

MVC, MVVM 와 같은 단어는 소프트웨어 설계와 관련된 디자인 패턴으로, 소프트웨어 공학에서의 "흔히 사용되는" 설계 패턴을 의미한다.
React에서 사용했던 단방향 데이터 흐름이나, Redux에서 사용한 Flux패턴 역시 일종의 디자인 패턴이다

MVC란?

Model View Controller의 약자로 일련의 소프트웨어가 돌아가는 방식에 대한 하나의 패턴이라고 보면 된다. 특정 라이브러리를 지칭하는것은 아니고 이런 패턴으로 만들어진 여러 라이브러리나 프레임워크가 있다. 어떤 서비스가 돌아가는 방식에대한 아이디어,디자인,패턴이라고 볼 수 있다.

특징은 어떤 서비스가 돌아가기 위해서 여러 과정과 처리들이 필요한데 그런 처리들을 각 기능별로 나눠서 model,controller,view로 나눈다는 특징을 가지고 있다

Model, Controller, View의 역할


model

  • 데이터의 정보를 가지고 있다.
    자신이 데이터를 가지고 있던지 아니면 데이터베이스와 연결되어서 데이터를 가져올 수 있다던지 하는 방식으로 데이터의 정보를 가지고 있다.

controller

  • model이 받아오거나 가지고 있는 값들을 가지고 controller와 교환한다
  • model이 view와 직접 소통하는 경우는 거의 없다
  • view에서 일어나는 액션과 이벤트에 대한 인풋값을 받고 model에 넘겨주기 전에 일련의 가공 과정을 거친다

view

  • 유저가 보는 화면을 보여주게 하는 역할이다
    웹브라우저의 경우 html이나 css로 이루어진 예시를 들 수 있을 것이다.
  • controller와만 소통하기때문에 model이나 database와 직접 접근하지 않는다. controller에 유저를 통해 일어난 액션등을 전달하기만 하고 뒤에서 어떤일에서 일어나는지 알지 못한다
  • view는 무언가 데이터를 받으면 그것을 가지고 그리는데 충실한 모델이다

이렇게 각 기능에 따라 나눔으로 인해서 프로그래밍을 할때 하나의 코드베이스에서 모든 것을 하는게 아니라 일종의 정돈된 특별히 의도된 코드를 특정 역할에서 할 수 있다 그리고 이것은 코드 가독성, 관리성, 퀄리티 등이 나아지는 효과를 가져다 준다.

Ruby on Rails(Ruby), Express(JS), Laravel(PHP), Backbone(JS), Codeigniter(PHP), Angular(JS), Django(Python), FLask(Python)의 유명한 프레임워크에서 이런 MVC패턴을 사용한다.

ORM


ORM(Object Relational Model)은 바로 Model을 기술하는 도구이다. 이를 통해 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄일 수 있다. 더 간단하게 얘기해 보자면 오늘 배워서 사용하게 된 Sequelize는 ORM의 일종으로 Sequelize를 사용하면 자바스크립트코드로 데이터베이스를 다룰 수 있다!

Sequelize

Sequelize는 Node.js에서 사용할 수 있는 ORM이다. 위에서도 언급했듯이 Sequelize를 사용하면 자바스크립트코드로 데이터베이스를 다룰 수 있다

Sequelize CLI

Sequelize CLI 명령어를 사용해 데이터베이스 작업을 할 수 있는 도구이다. 마이그레이션을 할 수 있도록 돕는 툴로, CLI에서 모델을 생성해주거나, 스키마 적용을 할 수 있도록 해준다.

터미널에서 npm install --save-dev sequelize-cli 명령어로 설치할 수 있고
npx sequelize-cli init명령어를 통해 부스트트래핑을 할 수 있다. init명령어를 작성하면 config, models, migrations, seeders파일이 생성된다.

모델을 만들기 위해서는
npx sequelize-cli model:generate --name 모델이름 --attributes 속성이름:타입명령어로 모델을 만들 수 있다.
주의해야할 점은 모델이름은 단수형으로 작성하면 복수형으로 생성이 된다. 그리고 attributes에서 속성을 여러개 주고자 한다면
--attributes name:string,phonenum:integer와 같이 컴마(,)뒤에 띄어쓰기를 하면 안된다!

이번 스프린트는 공식문서와의 싸움이었다..

profile
주니어 개발자가 되고싶은

0개의 댓글