Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

서버 시스템 구축 실습 - 데이터베이스 연결 본문

CS

서버 시스템 구축 실습 - 데이터베이스 연결

maeng-kim 2024. 5. 1. 18:37

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