장점 :
단점 :
하나의 Model이 다수의 view를 가질 수 있고 반대로 controller를 통해서 view 에 연결되는 model도 여러개가 될 수 있다. 복잡한 상황 발생 가능(의존성 때문)
pseudo code
http://yourapp.com/users/profile/1
/routes
users/profile/:id = Users.getProfile(id)
/controllers
class Users {
function getProfile(id) {
profile = this.UserModel.getProfile(id)
renderView('users/profile', profile)
}
/models
Class UserModel {
function getProfile(id) {
data = this.db.get('SELECT * FROM users WHERE id = id')
return data;
}
/views
/users
/profile
<h1>{{profile.name}}</h1>
<ul>
<li>Email: {{profile.email}}</li>
<li>Phone: {{profile.phoone}}</li>
</ul>
Relational database management system, RDBMS
관계형 데이터베이스는 서로 상호 관련성을 가진 형태로 표현한 데이터를 칭한다.
(oracle, microsoft SQL, MySQL 등) 테이블과 SQL로 이루어진다.
RDBMS의 특징으로는 ACID 성질, Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성) 을 가지고 있다. 이는 transaction 기능을 보장하기 위함이다.
*transaction : 일련의 작업들을 하나로 묶어서 취급, 하나의 작업이라도 실패 시 모두 실패
ORM, Object - Relational Mapping
객체와 관계형 데이터베이스를 자동으로 mapping 해주는 기능
ORM을 이용해 SQL문이 아닌 객체의 형태로 데이터베이스에 삽입, 수정 가능
효율적으로 테스트에 용이한 데이터베이스 작업이 가능해진다
객체 지향 프로그램은 클래스를 사용하고, 관계형 DB는 테이블을 사용한다. 이 때 서로의 구조 간의 불일치가 발생. ORM을 활용하여 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 이러한 불일치를 해결
프로미스 기반의 node.js ORM
기본적으로 development, test, production 중 development 환경을 사용하고 있다. 환경 변경을 전환하려면 dotenv
또는 export NODE_ENV
를 통해 환경을 전환해 준다. 이는 각각의 환경에서 목적에 맞는 테스트를 돌리기 위함.
MySQL의 varchar 나 int 타입은 Sequlize에서 .STRING, .INTEGER 으로 정의 한다.
Migration : 파일 내부에는 데이터 베이스에 테이블을 만들기 위한 마이그레이션 코드가 단계별로 작성되어 있다.
모든 스키마의 변경 사항을 관리하기 위해서 migration을 사용. 데이터베이스 스키마에 변경이 필요할때마다 마이그레이션 코드를 만들어서 진행하는것이다.
예시코드