- 파일 vs DBMS
1) 파일 중 특정 키워드가 포함된 글만 목록으로 보여주는 기능을 추가하려면?
2) 제목, 내용 이외에 저자 이름, 작성 시간, 공개 상태 등 여러가지 정보를 담으려면?
3) 정렬된 정보를 원한다면?
- MySQL을 연동하기 위한 준비.
1. MySQL 서버용 vm 인스턴스 생성
컴퓨터 엔진 -> vm 인스턴스 -> 인스턴스 만들기
mysql, 서울
부팅 디스트 - 우분투 설정, 크기를 더 크게 잡을 필요가 있다(DB이기 때문에). 데이터를 담을 수 있을 만큼.
모든 Cloud API에 대한 전체 엑세스 허용,
방화벽 모두 허용.
추가.
- 별도의 인스턴스를 생성하는 이유는?
기존의 인스턴스를 사용하지 않고 별도의 인스턴스를 생성하는 이유.
웹 클라이언트, 웹 서버, WAS, DB가 떨어져 있는 구조.
DB의 역할을 하는 것 = vm 인스턴스.
이렇게 분리해놓으면: 작업자 A, B, C가 동일한 DB에 붙어서 작업할 수 있게 된다.
DB = 원격에 있는 서버 하나. A, B, C가 보는 데이터 일관성도 유지.
팀 프로젝트를 할때 DB를 원격으로 구축하고, 세명이 동일한 DB를 사용해 개발환경을 구축.
한명이 DB를 로컬에 구축하고 작업한다면, A, B, C의 데이터 일관성이 유지되지 않는다.
=> 피하기 위해 vm 인스턴스를 제작해서 사용.
- MySQL 설치
외부 IP 복사,
ssh (계정명)@IP주소
: 새롭게 생성된 인스턴스에 붙은 형태.
sudo apt update
- mySQL 관련 업데이트
sudo apt install mysql-server
-> mySQL 서버만을 실행시키기 위한 DB 서버.
sudo systemctl start mysql : mysql 서비스 시작
sudo systemctl enable mysql : 자동으로 시작되도록 설정
sudo mysql : 클라이언트로 mysql 서버에 접근해서 루트 유저의 패스워드를 변경해줄 것.
-> 루트로 들어왔다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mypassword';
루트로 로그인이 가능해짐.
mysql -uroot -p
패스워드를 입력해야 접근이 가능하다.
sudo mysql_secure_installation
-> 패스워드 입력
n
n
n
y : 루트로 원격에서 로그인하는 것을 막는다
y
y
기본적인 세팅 완료.
루트 말고도 앱에서 사용할 계정을 하나 만들어준다.
mysql -u root -p : 접근
SET GLOBAL validate_password.policy=LOW;
-> 없다고 나온다 (신경쓰지 않는다)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER 'cc'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
계정 생성, cc에 %권한 부여
GRANT ALL ON *.* TO 'cc'@'%' WITH GRANT OPTION;
새로 만든 계정에 권한 부여, 모든 데이터베이스/모든 테이블에 접근이 가능하도록 세팅
허가받은 계정이 다른 계정에게 허가를 줄 수 있다.
exit : 밖으로 나온다.
기본적인 세팅 종료.
환경설정에서 원격에서도 접근이 가능하도록 수정.
sudo vi /etc/mysql/mysql.conf.d/mysql.cnf
bind-adress = 127.0.0.1 : 같은 로컬 호스트에서밖에 접근 가능
0.0.0.0으로 변경
system systemctl restart mysql : 재시작해 변경사항 반영
- 방화벽 설정
GCP는 기본적으로 방화벽이 전부 막혀있음, 새로 뚫어줘야 한다.
네트워크 세부정보 보기 -> 방화벽 -> allow-mysql
IP범위 0.0.0/0으로 작성 : 모든 IP주소에 대해서 해당 포트로 접근 가능
지정된 프로토콜 및 포트 -> tcp -> 3306
대상: 네트워크의 모든 인스턴스
외부에서 해당 포트로 접근 가능.
다른 인스턴스에서 접근 가능!
다른 인스턴스에서도 mysql 클라이언트는 설치되어 있는 상태여야 한다.
mysql -h(호스트 이름 설정, 이 경우 IP주소) -u cc -p
다른 인스턴스에 원격에서 접근 성공.
CREATE DATEBASE recipe_db;
use recipe_db;
CREATE TABLE subscriber (name varchar(40), email varchar(40), zipCode integer); : 테이블 생성 가능
INSERT INTO subscriber (name, email) VALUES ("Jon Wexler", "jon@jonweler.com"); : 인서트
SELECT * FROM subscriber : 데이터 선택
mysql -u cc -p
show databases;
use recipe_db;
show tables;
테이블이 만들어져 있는 것을 볼 수 있다.
select * from subscriber;
=> mysql 준비는 종료.
- Node.js 설정
node.js에서 mysql을 사용할 준비.
mysql2 모듈 설치 -> Node에서 MySQL에 접근하게 하는 모듈.
recipe_app 디렉토리 생성 > 진입
npm install mysql2 -S
- 1과 2의 차이
1) connection pool 지원: 커넥션들이 담겨있는 풀.
TCP 프로토콜 사용(1:1 통신만 가능). 클라이언트와 서버가 1:1로만 통신이 가능하다.
-> 커넥션 풀을 사용하면, 커넥션을 종료시키지 않고 풀에다가 모아놓는다.
똑같은 클라이언트가 여러번의 SQL 커리를 서버로 보낸다고 했을 때, 매번 TCP 커넥션이 필요할 것이다.
tree-hand connection을 사용하기 때문에 3번을 왔다갔다 해야 커넥션이 연결된다 -> 지연시간이 무시할 수 없는 수준.
그것을 없애기 위해 연결을 종료하지 않고 유지한다.
무한히 증가시킬 순 없기 때문에, 풀에 최대크기를 정해놓는다.
2) promise API, async/await를 지원
=> 비동기 프로그래밍을 쉽게 해준다.
- 동기와 비동기
21:35
'강의 정리 > 서버시스템 구축 실습' 카테고리의 다른 글
서버시스템구축실습 (8) Express.js를 통한 웹 개발 (1) (1) | 2024.05.04 |
---|---|
서버시스템구축실습 (6) Node.js 기초 (2) (1) | 2024.05.03 |
서버시스템구축실습 (6) Node.js 기초 (1) (0) | 2024.04.25 |
서버시스템구축실습 (4) 자바스크립트 기초 (0) | 2024.04.02 |
서버시스템구축실습 (2) 웹서버와 데이터베이스 개요 (0) | 2024.03.19 |