Choosing a Setup Type 부분에서 Custom 선택한 후 Next 버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 281페이지
Select Products and Features에서 Available Products: 에서 X86과 X64 중 자신의 운영체제에 맞는 MySQL Server와 MySQL Workbench를 골라 Products/Features To Be Installed:로 옮긴 후 Next 버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 281페이지
Installation에서 Execute 버튼을 눌러 설치하기 (중간에 다른 파일들 설치할 것인지 물으면 모두 설치)
출처 : Node.js 교과서 개정 2판(조현영 저) 282페이지
설치 완료 후 Next 버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 282페이지
Account Roles에서 Root 비밀번호 설정하고 계속 Next 버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 283페이지
마지막 설정 화면인 Apply Configuration이 나오면 Execute 버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 284페이지
Finish 버튼 눌러 설정 완료하기
출처 : Node.js 교과서 개정 2판(조현영 저) 284페이지
Next 버튼 누르고 Finish 버튼 눌러서 설치 완료하기
출처 : Node.js 교과서 개정 2판(조현영 저) 286페이지
MySQL이 설치된 폴더로 이동한 후, 명령 프롬프트를 통해 MySQL에 접속
명령 프롬프트에서 mysql -h localhost -u root -p 입력하고 비밀번호 입력하기
콘솔에 mysql -h localhost -u root -p 명령어 입력하고 비밀번호 입력하기
프롬프트가 mysql>로 바뀌었다면 접속 완료
3. 워크벤치 설치하기
(1) 윈도
MySQL과 함께 워크벤치 설치했으므로 생략
(2) 맥
Homebrew를 통해 설치
$ brew cask install mysqlworkbench
Launchpad에 들어가면 워크벤치가 설치되어 있음
실행 후 경고창이 뜨면열기버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 291페이지
(3) 리눅스(우분투)
GUI를 사용하지 않으므로 워크벤치 설치하지 않음
(4) 커넥션 생성하기
워크벤치 실행하기
MySQL Connections옆의 + 버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 291페이지
커넥션 생성 화면에서Connection Name에localhost를 입력하고Password에서Store in Vault...버튼 누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 292페이지
MySQL 설치 시 설정했던 비밀번호 입력하고OK누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 292페이지
Setup New Connection화면에서도OK누르면 커넥션 생성됨
MySQL Connections에 새로 생성된localhost누르기
출처 : Node.js 교과서 개정 2판(조현영 저) 293페이지
커넥션 성공 화면
출처 : Node.js 교과서 개정 2판(조현영 저) 293페이지
4. 데이터베이스 및 테이블 생성하기
(1) 데이터베이스 생성하기
주요 명령어
CREATE SCHEMA [데이터베이스명] : 데이터베이스를 생성 +) DEFAULT CHARACTER SET utf8 : 한글 사용할 수 있게 만들고 싶을 때 use [데이터베이스명] : 앞으로 해당 데이터베이스를 사용하겠다는 것을 MySQL에 알림
예약어 : MySQL이 기본적으로 알고 있는 구문 ex) CREATE SCHEMA - 소문자로 써도 되지만, 대문자 권장
예시 코드 (콘솔)
(2) 테이블 생성하기
테이블이란?
테이블 : 데이터가 들어갈 수 있는 틀 -> 테이블에 맞는 데이터만 들어갈 수 있음
주요 명령어
CREATE TABLE [데이터베이스명.테이블명] (컬럼명 컬럼자료형 컬럼옵션, ...) : 테이블 생성 - use 데이터베이스명; 명령어를 실행하였다면 데이터베이스명은 생략 가능
컬럼 자료형 1) INT : 정수 / FLOAT, DOUBLE : 소수까지 저장 2) VARCHAR(자릿수) : 가변 길이 문자열 3) CHAR(자릿수) : 고정길이 문자열 4) TEXT : 긴 글을 저장 (VARCHAR 보다 길 때) 5) TINYINT : -128~127까지의 정수, 1 또는 0만 저장하면 Boolean과 같은 역할 6) DATETIME : 날짜와 시간 DATE : 날짜 정보, TIME : 시간 정보
컬럼 옵션 1) NULL/NOT NULL : 빈칸 허용 여부 2) AUTO_INCREMENT : 숫자 자동 부여 3) UNSIGNED : 음수가 나올 수 없음 4) ZEROFILL : 자릿수 중에 비어있는 자리에 모두 0을 넣음 5) DEFAULT : 데이터베이스에 저장 시 해당 컬럼에 값이 없다면 MySQL이 기본값을 대신 넣음 - CURRENT_TIMESTAMP / now() : 현재 시각을 넣음 6) PRIMARY KEY(컬럼명) : 해당 컬럼을 기본키(로우를 대표하는 고유한 값)로 설정함 7) UNIQUE INDEX 인덱스 이름 (컬럼명 조건): 해당 컬럼은 고유한 값이어야 함
테이블 자체 설정 1) COMMENT : 테이블에 대한 보충 설명 2) DEFAULT CHARACTER SET = utf8; : 한글이 입력될 수 있게 설정 3) ENGINE [MyISAM or InnoDB] : 엔진 지정
제약 조건 1) CONSTRAINT FOREIGN KEY(컬럼명) REFERENCES 참고할 테이블 명(참고할 컬럼 명) : 해당 컬럼에 다른 테이블의 기본키를 저장 -> 외래키 - ON UPDATE CASCADE : 정보가 수정되면 연결된 정보도 같이 수정됨 - ON DELETE CASCADE : 정보가 삭제되면 연결된 정보도 같이 삭제됨
DESC [테이블명] : 만들어진 테이블을 확인
DROP TABLE [테이블명] : 테이블 삭제
SHOW TABLES : 테이블 목록 확인
예시 코드(콘솔)
사용자 테이블 생성댓글 테이블 생성테이블 확인테이블 삭제테이블 목록 확인
5. CRUD 작업하기
CRUD란?
CRUD : Create, Read, Update, Delete의 첫 글자를 모은 두문자어 / 데이터베이스에서 많이 수행하는 네 가지 작업
출처 : Node.js 교과서 개정 2판(조현영 저) 306페이지
(1) Create(생성)
Create란?
Create(생성) : 데이터를 생성해서 데이터베이스에 넣는 작업
주요명령어
INSERT INTO 데이터베이스명.테이블명 (컬럼1, 컬럼2, ...) VALUES (컬럼1값, 컬럼2값, ...); : 해당 테이블에 데이터 삽입 - use 데이터베이스명; 명령어를 사용했다면 데이터베이스명 생략 가능
예시 코드(콘솔)
데이터 삽입
(2) Read(조회)
Read란?
Read(조회) : 데이터베이스에 있는 데이터를 조회하는 작업
주요 명령어
SELECT * FROM [테이블명] : 테이블의 모든 데이터를 조회 SELECT [특정컬럼] FROM [테이블명] WHERE [조건] ORDER BY [컬럼명] [ASC|DESC] : 테이블에서 조건에 해당하는 컬럼만 조회하는데 특정 컬럼의 오름차순 혹은 내림차순으로 정렬 - LIMIT [숫자] : 조회할 로우 개수 설정 - OFFSET [건너뛸 숫자] : 건너뛸 로우 개수 설정
예시 코드 (콘솔)
users, comments 테이블의 모든 데이터 조회특정 컬럼만 조회WHERE 절 사용ORDER BY 사용LIMIT 사용OFFSET 사용
(3) Update(수정)
Update란?
Update(수정) : 데이터베이스에 있는 데이터를 수정하는 작업
주요 명령어
UPDATE [테이블명] SET [컬럼명=바꿀 값] WHERE [조건] : 테이블에서 조건에 해당하는 로우의 컬럼 값만 원하는 값으로 수정
예시 코드 (콘솔)
UPDATE 사용
(4) Delete(삭제)
Delete란?
Delete(삭제) : 데이터베이스에 있는 데이터를 삭제하는 작업
주요 명령어
DELETE FROM [테이블명] WHERE [조건] : 테이블에서 조건에 해당하는 로우를 제거
예시 코드 (콘솔)
DELETE FROM 사용
6. 시퀄라이즈 사용하기
시퀄라이즈란?
시퀄라이즈 : 노드와 MySQL을 연동해주고 SQL문을 작성하는 것을 도와주는 라이브러리
시퀄라이즈 특징
- ORM(Object-relational Mapping)으로 분류 -> ORM : 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구 - 다른 데이터베이스도 같이 쓸 수 있어서, 프로젝트를 다른 SQL 데이터베이스로 전환할 때도 편리
시퀄라이즈 사용 이유
=> 자바스크립트 구문을 알아서 SQL로 바꿔주기 때문
시퀄라이즈 사용하기 위한 필수 단계
1) sequelize와 sequelize-cli, mysql2 패키지 설치 $ npm i express morgan nunjucks sequelize sequelize-cli mysql2 $ npm i -D nodemon
2) 설치 완료 후 sequelize init 명령어 호출 $ npx sequelize init
시퀄라이즈 모델의 메서드 1) static init 메서드 : 테이블에 대한 설정 - super.init 메서드 1. 첫 번째 인수 : 테이블 컬럼에 대한 설정 -> MySQL 테이블과 컬럼 내용이 일치해야 정확하게 대응됨 2. 두 번째 인수 : 테이블 자체에 대한 설정 2) static associate 메서드 : 다른 모델과의 관계 기재
시퀄라이즈에 테이블 간 관계를 알려주어서 JOIN 기능으로 여러 테이블 간의 관계를 파악하게 함
1. 1:N
예시 사용자 한 명은 댓글을 여러 개 작성할 수 있으나, 댓글 하나에 사용자(작성자)가 여러 명일 수는 없음. 이때, 사용자가 1이고, 댓글이 N
(in 시퀄라이즈 모델 각각의 static associate 메서드) => hasMany 메서드로 표현 : users 테이블의 로우 하나를 불러올 때 연결된 comments 테이블의 로우들 불러옴 => belongsTo 메서드 : comments 테이블의 로우를 불러올 때 연결된 users 테이블의 로우를 가져옴 (다른 모델의 정보가 들어가는 테이블에 사용) 출처 : Node.js 교과서 개정 2판(조현영 저) 325페이지
시퀄라이즈 연산자 종류 - Op 객체를 불러와 사용 1) Op.gt : 초과 2) Op.gte : 이상 3) Op.lt : 미만 4) Op.lte : 이하 5) Op.ne : 같지 않음 6) Op.or : 또는 7) Op.in : 배열 요소 중 하나 8) Op.notIn : 배열 요소와 모두 다름