Obejct Relational Mapping
: ORM을 통해 관계형 데이터베이스를 객체로 출력
사용하는 이유
: 인스턴스 = 엔티티를 통해 하나의 레코드를 만드는 것
: 객체의 속성 = 필드의 값으로 들어간다
JOIN 테이블 의 경우
OOP : id에 대한 번호가 여러 개면 배열로 표현
DB : join 테이블 (같은 person_id에 대해 다른 phone_id)
장점
oop처럼 db에 접근 가능
sql문 사용할 필요 없이 mysql에 접근 가능
ORM의 예시 : Sequelize
new Sequelize : 연결을 만든다
(db 이름, user 이름, pw)
db.define : schema를 만든다
ex. roomname : Sequelize.INTEGER
다양 RDBMS 사이 호환 위해 사용하는 방법
User.sync() : promise 사용
User.create, User.findAll : 찾고 조회하는 것들
create는 새로운 레코드를 만드는 것, {칼럼 : 내용}를 이용
findAll은 {where: {찾으려는 조건}}
자동으로 해주는 것도 많지만 괜히 시간이 더 걸릴 수 있으므로 필요에 따라 막기
더 공부해보면 좋은 주제
association : join
-HasOne, BelongsTo, HasMany, BelongstoMany
transaction : 거래 (ex. 은행 : 출금, 조회 등), 만약 잘 안되면 rollback
Sequelize API 문서 보기!
$ npm install --save sequelize
npm install --save-dev sequelize-cli
npx sequelize-cli --help
을 통해 명령의 종류를 파악할 수 있습니다.
sprint 참고 문서
https://sequelize.org/master/manual/migrations.html
파일 디렉토리
1) bootstraping
: 프로젝트 초기 단계를 자동으로 설정할 수 있도록 도와주는 일
cli를 통해 아래 설정 파일들을 만들어서 MySQL 접속 설정을 해야 합니다.
#명령어
npx sequelize-cli init
#파일명
config/config.json
models/
migrations/
seeders/
short.ly에서 사용할 데이터베이스는 직접 생성해야 합니다.
기본적으로 development, test, production 환경 중 development 환경을 사용하고 있다
development : 개발
test: 테스트
production : 실제
process.env로 환경변수에 접근한다
process.env.NODE_ENV || 'development';
NODE_ENV가 뭔지는 모르겠지만 여기는 없기 때문에 env = 'development'가 된다
require를 통해 config.json 파일을 불러온다
env = 'development'이므로 config.json 파일 내용 중에서 'development'키의 내용이 들어간다
use_env_variable가 없으므로(아마 env 파일에 저장했을 환경 변수 인거 같다)
sequelize = new Sequelize(config.database, config.username, config.password, config);
sequelize를 통해 새로운 모델 만들 때 이렇게 Sequelize 인스턴스의 인자로 db, username, pw를 넣는다
여기서는 config변수 안에 있는 database, username, password, config를 모두 가져온다
이후 models/url.js를 가져와서 require를 통해 url.js에서 export하고 있는 함수를 받아 sequelize, Sequelize.DataTypes를 인자로 넣어 url 클래스를 리턴받는다
cli를 통해 모델을 만든다
(이전 MVC sprint에서 data 요청을 처리하는 model역할과 비슷)
npx sequelize-cli model:generate --name 모델이름 --attributes 필드이름 :데이터타입,lastName:string,email:string
모델을 잘못 만든 경우, 생성된 파일(models폴더 안에)을 직접 수정하거나 삭제 가능
필드가 가지는 특별한 요구 사항(기본값 등)은 모델 파일을 직접 수정해서 정의해야 합니다.
cli로 model 생성할 때는 attributes 뒤에 필드명: 데이터타입 (string, integer..)
모델을 생성하면 migrations/번호-create-posts.js 파일이 생긴다
migration이 일어날 때마다 이 파일이 또 생긴다
undo를 하면 마지막으로 만들어진 파일로 돌아가고
to와 특정 파일명을 쓰면 해당 파일의 상태로 돌아간다
cf. 파일로 변경 사항을 저장하는 git 같은 느낌
npx sequelize-cli db:migrate
npx sequelize-cli db:migrate:undo
npx sequelize-cli db:migrate:undo:all --to XXXXXXXXXXXXXX-create-posts.js