TODO
- 만약 데이터가 없을 때 NULL을 넣는 방법
- 리블로그는 없을 경우 NULL로 삽입한다.
- models를 npx로 가져왔을 때 지금 생성된 테이블을 기준으로 models가 만들어질 수 없는가?
이번프로젝트의 코드최적화 방법
- Router를 메인에서 줄이기
- Router에서 동일한 url에 .get과 .post를 route를 사용해 메소드별로 분류하는 것
- 비밀번호를 .env에 저장하는 것
이번 프로젝트의 목표
- 무슨 기술을 할지, 어떤 방향성을 가지고 갈 지
DB에서 외래키를 설정할 때 동일한 기본키를 설정해도 가능하다.
트리거 : 누군가 지정한 TABLE에 데이터를 넣을 경우 실행하도록 설정 (기능 중 하나)
ex) 누군가 Favorites에 데이터를 추가할 경우 자동적으로 Alarm에 데이터를 추가하라
-- DB 생성
CREATE TABLE Users(
userId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
nickname varchar(255) NOT NULL UNIQUE,
password varchar(255) NOT NULL,
profileImg varchar(1000),
createdAt Date,
updatedAt Date
);
CREATE TABLE Posts(
postId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
userId int(11) NOT NULL,
title varchar(255),
content varchar(3000),
createdAt Date,
updatedAt Date,
FOREIGN KEY (userId) REFERENCES Users(userId) ON DELETE CASCADE
);
CREATE TABLE Images(
imageId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
postId int(11) NOT NULL,
img varchar(1000) NOT NULL,
createdAt Date,
updatedAt Date,
FOREIGN KEY (postId) REFERENCES Posts(postId) ON DELETE CASCADE
);
CREATE TABLE Tags(
tagId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
postId int(11) NOT NULL,
tag varchar(100) NOT NULL,
createdAt Date,
updatedAt Date,
FOREIGN KEY (postId) REFERENCES Posts(postId) ON DELETE CASCADE
);
CREATE TABLE Favorites(
favoriteId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
userId int(11) NOT NULL,
postId int(11) NOT NULL,
createdAt Date,
updatedAt Date,
FOREIGN KEY (userId) REFERENCES Users(userId) ON DELETE CASCADE,
FOREIGN KEY (postId) REFERENCES Posts(postId) ON DELETE CASCADE
);
CREATE TABLE Follows(
followId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
followUserId int(11) NOT NULL,
followerUserId int(11) NOT NULL,
createdAt Date,
updatedAt Date,
FOREIGN KEY (followUserId) REFERENCES Users(userId) ON DELETE CASCADE,
FOREIGN KEY (followerUserId) REFERENCES Users(userId) ON DELETE CASCADE
);
CREATE TABLE Alarms(
alarmId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
giverUserId int(11) NOT NULL,
receiverUserId int(11) NOT NULL,
type TINYINT UNSIGNED NOT NULL,
createdAt Date,
updatedAt Date,
FOREIGN KEY (giverUserId) REFERENCES Users(userId) ON DELETE CASCADE,
FOREIGN KEY (receiverUserId) REFERENCES Users(userId) ON DELETE CASCADE
);
-- npm 설정
$ npm init
$ npm install sequelize mysql2 sequelize-cli express mysql joi jsonwebtoken body-parser cors nunjucks dotenv chokidar
$ npx sequelize init
$ npx sequelize model:generate --name Users --attributes nickname:string,password:string,profileImg:string
$ npx sequelize model:generate --name Posts --attributes userId:integer,title:string,content:string
$ npx sequelize model:generate --name Images --attributes postId:integer,img:string
$ npx sequelize model:generate --name Tags --attributes postId:integer,tag:string
$ npx sequelize model:generate --name Alarms --attributes giverUserId:integer,receiverUserId:integer,type:tinyint
$ npx sequelize model:generate --name Favorites --attributes userId:integer,postId:integer
$ npx sequelize model:generate --name Follows --attributes followUserId:integer,followerUserId:integer
생성된 migrations와 models 폴더를 수정한 후 실행
$ npx sequelize db:create
$ npx sequelize db:migrate
Sequelize에서 associate를 사용해 외래키를 설정할 때 참조하는 부모 테이블의 기본키 이름을 지정하지 않아도
자동적으로 인식해 외래키를 설정해 준다.
-- 쿠키와 세션
쿠키
- 유효 기간이 있으며 name=zerocho와 같이 단순한 '키-값'의 쌍
- 서버로부터 쿠키가 오면 웹 브라우저는 쿠키를 저장해두었다가 다음에 요청할 때마다 쿠키를 동봉해서 보냄
- 서버는 요청에 들어 있는 쿠키를 읽어서 사용자가 누구인지 파악
- [브라우저는 쿠키가 있다면 자동으로 동봉해서 보내주므로 따로 처리할 필요가 없다.]
- 서버에서 브라우저로 쿠키를 보낼 때만 코드를 작성해 처리
- name=zerocho;year=1994 처럼 문자열 형식으로 존재한다.
req.headers.cookie : req 객체에 담겨 있는 쿠키의 위치
res.writeHead : 응답의 헤더에 쿠키를 기록할 때 사용
Set-Cookie : 브라우저한테 다음과 같은 값의 쿠키를 저장하라는 의미
- Set-Cookie의 값은 제한된 ASCII 코드만 들어가야 하므로 줄 바꿈을 넣으면 안 된다.
브라우저에서 파비콘을 인식할 수 없다면 서버에 파비콘 정보를 요청한다.
encodeURIComponent : 한글을 설정하기 위한 인코딩 기법
'항해99 > 필기노트' 카테고리의 다른 글
[필기노트] 2021-07-20 SQL, TRIGGER (0) | 2021.07.21 |
---|---|
[필기노트] 2021-07-19 SQL UNION, CONCAT_GROUP, CASE (0) | 2021.07.20 |
[필기노트] 2021-07-17 SQL, Cookie, Sequelize Migrate (0) | 2021.07.18 |
[필기노트] 2021-07-15 SQL, 면담, Socket, session (0) | 2021.07.16 |
[필기노트] 2021-07-14 SQL SubQuery, JOIN, Socket, ws (0) | 2021.07.15 |