Ruff! Ruff!
서버 시스템 구축 실습 - 데이터베이스 연결 본문
1.mysql 서버용 vm 인스턴스 생성
- 별도로 DB용 인스턴스를 생성하는 이유 ?
👉 같은 DB에 다른 사람들이 붙어서 작업 가능
👉 데이터의 일관성 유지 가능
- GCP 방화벽 설정
👉 GCP에 방화벽 규칙 새로 생성
-> 대상 : 네트워크의 모든 인스턴스
-> 소스 IP : 0.0.0.0./0
-> 프로토콜 및 포트 : TCP/ 3306
2. Node.js mysql 설정
1. mysql2 모듈 설치
npm install mysql2 -S
2. vs. mysql
connection pool 지원
👉 클라이언트가 TCP 연결에 소모하는 지연 시간을 줄일 수 있음
👉 TCP 연결을 종료하지 않고 유지
👉 connection pool 크기만큼의 TCP 연결을 유지
promise API와 async/await 를 지원
3. Node.js 동기 vs 비동기
- Sync가 suffix로 붙으면 동기 처리 방식
👉 fs.readFile(path[, options], callback)
👉 fs.readFileSync(path[, options])
- 동기처리방식은 명령을 작성한 순서대로 출력
(각 명령을 처리할 때까지 기다렸다가 마치면 다음 명령 실행)
- 비동기 처리 방식은 처리가 끝나면 callback함수를 자동으로 호출하여 함수 실행
(비동기 처리 방식은 명령의 처리가 끝나기 전에 다음 명령을 실행)
*콜백함수
- 다른 함수에 매개 변수로 넘겨준 함수
- 특정 이벤트가 발생했을 때 시스템에 의해 호출
*콜백함수의 활용
- slowfunc() : 처리 시간이 매우 오래 거리는 함수/ 함수의 실행이 끝나면 자동으로 어떤 함수를 호출하도록 요청
*콜백지옥 (callback hell)
- 함수의 매개 변수로 넘겨지는 콜백함수가 반복되어 코드 가독성이 떨어지고 수정이 어려워지는 문제
=> 해결책 : promise, async/ await
4. 비동기 프로그래밍
- promise
- pending, fulfilled, rejected
- resolve, reject
- then(), catch(), finally()
- async/ await
- 비동기를 유지하면서 동기적인 모습의 코드 스타일을 적용할 수 있음 (내부적으로는 비동기적 처리, 코드를 읽을 땐 위에서 아래로 쉽게)
- 함수 앞에 async를 붙이면 프로미스를 반환하도록 자동으로 구성
*await
- 프로미스가 처리될 때까지 함수 실행을 기다림
- async 함수 안에서만 동작
- 프로미스를 리턴하는 함수 앞에만 붙일 수 있음
5. ORM
- 객체 지향 패러다임을 이용하여 데이터베이스로부터 데이터를 쿼리하고 조작할 수 있도록 해주는 도구
- 객체와 데이터베이스를 맵핑해주는 역할
- SQL문을 사용하지 않고, 데이터베이스에 접근 가능
* sequelize
- 프로미스 기반의 node.js ORM
(PostgreSQL, Mysql, MariaDB, SQLite 등을 지원, 동일한 ORM 코드로 데이터베이스간 호환성 보장)
6. Sequelize에서 관계 다루기
<Associations>
- HasOne
- BelongsTo
- HasMany
- BelongsToMany
<Relationship>
- One-To-One
- One-To-Many
- Many-To-Many
- 관계는 일반적으로 pair로 구성
- One-To-One
• hasOne + belongsTo
- One-To-Many
• hasMany + belongsTo
- Many-To-Many
• belongsToMany + belongsToMany
* 외래키 관련 옵션 설정
▫ onDelete (CASCADE), onUpdate (CASCADE)
» RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
'CS' 카테고리의 다른 글
[오픈소스] - About DevOps (0) | 2024.09.13 |
---|---|
서버 시스템 구축 실습 - 사용자 계정 인증 (0) | 2024.05.08 |
서버 시스템 구축 실습 - Express.js 웹 개발 (0) | 2024.04.24 |
서버시스템 구축 실습 - node.js 기초 (0) | 2024.04.10 |
서버시스템 구축 실습 - 자바스크립트 기초 (1) | 2024.03.27 |