
데이터를 변수에 저장하면 서버 종료 후 소멸
-> 데이터베이스 사용
저장 장소
보안 제약이 없는 것 -> 클라이언트
보안 체크 필요한 것 -> 서버(파일, DBMS 등)
MySQL 사이트에 가서 설치한다.
주의할점 : MySQL은 경로에 한글 들어가면 에러 -> 미리 영어로 변경
MySQL 설치된 폴더는 미리 환경변수로 설정
mysql -h localhost -u root -p
이 명령어에서 사용자 이름은 디폴드값이 localhost이므로 -h localhost는 생략해도 됨
mysql -h localhost -u root -p
Enter password : [비밀번호 입력]
mysql>
mysql> exit


명령어를 아래처럼 입력

컬럼의 옆에 작성한다.

mysql> DESC users;
mysql> DROP TABLE users;
mysql> show tables;
테이블 생성은 콘솔이 아닌 workbench로도 가능
CRUD : Create, Read, Update, Delete
=> INSERT 사용

=> SELECT 사용
=> WHERE 절 사용 : 특정 조건을 가진 데이터만 조회


=> ORDER BY [컬럼명][ASC|DESC] : 오름차순/내림차순으로 정렬

LIMIT [숫자] : 조회할 로우 개수

OFFSET [숫자] : 건너뛸 로우 개수 설정
(21~40 조회 -> 1~20을 OFFSET으로 설정)

=> UPDATE, SET 사용
WHERE 필수
-> WHERE 안붙이면 모든 값에 적용 !
시퀄라이즈(Sequelize) : 자바스크립트 구문을 자동으로 SQL로 바꿔줌
필요한 패키지 : sequelize, sequelize-cli, mysql2
$ npm i express morgan nunjucks sequelize sequelize-cli mysql2
$ npm i -D nodemon
$ npx sequelize init

여기에서 sequelize를 여러 개 호출해 줄 수 있다(node에 DB 여러 개 연결 가능)
app.js를 생성하고 익스프레스와 시퀄라이즈 연결
sync 메서드를 사용하지 않으면 연결 x
password에 사용할 MySQL 비밀번호를 입력하고, database에 node.js를 작성한다.
1. User.init() : 컬럼 정의
Comment 모델에 commenter이 없음 -> 관계 따로 정의

테이블 관계를 정의할 때 Sequelize에서는 hasMany, hasOne, belongsToMany 등의 메서드를 사용
user는 comment 여러 개 작성 가능 -> 1:n관계
1:n은 hasMany 메서드 사용해서 표현
user.js

- 1로 지정되는 user가 hasMany 사용
- user의 id를 sourceKey로 지정 -> 다른 테이블에서 갖고감
comment.js

- comment = user 의 부속 정보 => belongsTo 사용(comment가 누구 껀지 작성해야)
- foreign 키로 User의 id 컬럼 지정 => commenter 컬럼으로 지정
- commenter 컬럼은 Comment 모델에 작성됨

user의 정보를 담고있는 userInfo 테이블 -> 1 : 1 관계
1 : 1은 hasOne 메서드 사용해서 표현

hasOne과 belongsTo 자리 정하는법
=> foreign 키 위치에 따라
여기서는 userInfo에 userId라는 외래키 추가 -> userInfo에 belongsTo 사용
(이미 user모델에 id가 있으므로 키 추가가 필요없음
post와 해시태그 -> N : M 관계
N : M은 둘 다 belongsToMany를 사용한다.

N : M 관계 특성상 중간 테이블(새로운 모델) 생성됨

윗줄 : SQL
아래줄 : Sequelize
데이터 하나만 필요할 때에는 findOne()을 사용
Op.gt(초과)
Op.gte(이상)
Op.lt(미만)
Op.lte(이하)
Op.ne(같지 않음)
Op.or(또는)
Op.in(배열 요소 중 하나)
Op.notIn(배열 요소와 모두 다름)
order : 2차원 배열
=> 조건 여러개 설정(앞에 있을수록 우선순위 높음)

로우 개수 설정은 limit사용(1개일 경우에는 fineOne도 사용 가능)

offset 역시 구현 가능

---
=> UPDATE 사용
where에 조건 작성
destroy 사용
MySQL에서의 JOIN -> include 사용
방법1

user를 가져오면서 comment까지 가져올수 있다.
방법2
다른 방법으로 메서드를 사용할 수 있다.

getComments()로 user의 comment를 조회한다.
1번 방법보다는 2번 방법이 더 좋음
=> 1번 방법은 사용자와 댓글을 동시 조회해서 에러 확률 up
대소문자 구별 주의
(Comment와 comment 다름)
Comment 이름을 Answer로 바꾸면 이름이 바뀐다.
include와 where를 동시에 사용할 수 있음
이것도 where에서의 id은 댓글의 id이다
여러 개 추가 시에는 배열로 추가

수정/삭제 메서드
: set + 모델명 / remove + 모델명
시퀄라이즈 없이 직접 쿼리 작성도 가능
데이터베이스를 만들어 놓던가
sequelize로도 데이터베이스 만들 수 있다.
npx sequelize db:create
models 폴더 안에 user과 comment 모델 있음
index.js에서 sequelize를 sync해주면 테이블 생성됨
npm start로 서버 생성 후 localhost:3001에 접속하면 다음과 같은 창이 뜬다.
보이는 폼에 작성한 후 등록하면 DB에 저장된다.
routes/users.js 안에 작성한 폼을 등록하는 코드는 다음과 같다.
json 사용해서 user 정보 전송
문자열 전송 : send/binary
파일 전송 : sendFile
템플릿 엔진 렌더링 : render
API에서 json 전송 : json
routes/users.js 안에 comment를 불러오는 코드는 다음과 같다.
routes/comments.js안에 comment를 등록하는 코드는 다음과 같다.
user과 주인 없는 comment를 선언해준 뒤 둘을 연결해주는 방식으로 comment를 등록할 수도 있다.
수정(update), 삭제(delete)도 등록(post), 조회(get)와 같은 원리로 작동한다.