빠른 시작: Node.js를 사용하여 Azure Database for MySQL - 유연한 서버에서 데이터 연결 및 쿼리

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 계획을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조 하세요.

적용 대상: Azure Database for MySQL - 유연한 서버

이 빠른 시작에서는 Node.js를 사용하여 Azure Database for MySQL 유연한 서버에 연결합니다. 그런 다음, SQL 문을 사용하여 Mac, Linux 및 Windows 플랫폼에서 데이터베이스의 데이터를 쿼리, 삽입, 업데이트 및 삭제합니다.

이 문서에서는 사용자가 Node.js를 사용하여 개발하는 데 익숙하지만 Azure Database for MySQL 유연한 서버를 처음 사용한다고 가정합니다.

필수 조건

이 빠른 시작에서는 다음과 같은 가이드 중 하나에서 만들어진 리소스를 시작 지점으로 사용합니다.

Important

연결하려는 IP 주소에 Azure Portal 또는 Azure CLI를 사용하여 서버의 방화벽 규칙이 추가되었는지 확인합니다.

Node.js 및 MySQL 커넥터 설치

사용하는 플랫폼에 따라 적절한 섹션의 지침을 수행하여 Node.js를 설치합니다. npm을 사용하여 프로젝트 폴더에 mysql2 패키지와 해당 종속성을 설치합니다.

  1. Node.js 다운로드 페이지를 방문하여 원하는 Windows 설치 관리자 옵션을 선택합니다.

  2. 로컬 프로젝트 폴더를 만듭니다(예: nodejsmysql).

  3. 명령 프롬프트를 연 다음, 디렉터리를 프로젝트 폴더로 변경합니다(예: cd c:\nodejsmysql\).

  4. NPM 도구를 실행하여 mysql2 라이브러리를 프로젝트 폴더에 설치합니다.

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  5. npm list 출력 텍스트를 확인하여 설치를 확인합니다. 버전 번호는 새 패치가 출시될 때마다 달라질 수 있습니다.

연결 정보 가져오기

Azure Database for MySQL 유연한 서버 인스턴스에 연결하는 데 필요한 연결 정보를 가져옵니다. 정규화된 서버 이름 및 로그인 자격 증명이 필요합니다.

  1. Azure Portal에 로그인합니다.
  2. Azure Portal의 왼쪽 메뉴에서 모든 리소스를 선택한 다음, 생성한 서버를 검색합니다(예: mydemoserver).
  3. 서버 이름을 선택합니다.
  4. 서버의 개요 패널에 있는 서버 이름서버 관리자 로그인 이름을 기록해 둡니다. 암호를 잊어버리면 이 패널에서 암호를 재설정할 수 있습니다.

코드 샘플 실행

  1. JavaScript 코드를 새 텍스트 파일에 붙여넣고 .js 파일 확장명이 포함된 프로젝트 폴더(C:\nodejsmysql\createtable.js 또는 /home/username/nodejsmysql/createtable.js)에 저장합니다.
  2. 코드의 host, user, passworddatabase 구성 옵션을 MySQL 유연한 서버 및 데이터베이스를 만들 때 지정한 값으로 바꿉니다.
  3. SSL 인증서 가져오기: 클라이언트 애플리케이션에서 암호화된 연결을 사용하려면 아래 스크린샷에 표시된 것처럼 Azure Portal 네트워킹 블레이드에서 사용할 수 있는 공용 SSL 인증서를 다운로드해야 합니다. Azure Portal에서 공용 SSL 인증서를 다운로드하는 방법을 보여 주는 스크린샷

인증서 파일을 원하는 위치에 저장합니다.

  1. ssl 구성 옵션에서 ca-cert 파일 이름을 이 로컬 파일의 경로로 바꿉니다. 이렇게 하면 애플리케이션에서 SSL을 통해 데이터베이스에 안전하게 연결할 수 있습니다.
  2. 명령 프롬프트 또는 Bash 셸을 연 다음, 디렉터리를 프로젝트 폴더로 변경합니다(예: cd nodejsmysql).
  3. 애플리케이션을 실행하려면 node 명령 다음에 파일 이름을 입력합니다(예: node createtable.js).
  4. Windows에서 노드 애플리케이션이 환경 변수 경로에 없는 경우 전체 경로를 사용하여 노드 애플리케이션을 시작해야 할 수도 있습니다(예: "C:\Program Files\nodejs\node.exe" createtable.js).

테이블 연결, 생성 및 데이터 삽입

CREATE TABLEINSERT INTO SQL 문을 사용하여 데이터를 연결하고 로드하려면 다음 코드를 사용하세요.

mysql.createConnection() 메서드는 Azure Database for MySQL 유연한 서버 인스턴스와 상호 작용하는 데 사용됩니다. connect() 함수는 서버에 대한 연결을 설정하는 데 사용됩니다. query() 함수는 MySQL 데이터베이스에 대해 SQL 쿼리를 실행하는 데 사용됩니다.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
    if (err) {
        console.log("!!! Cannot connect !!! Error:");
        throw err;
    }
    else
    {
        console.log("Connection established.");
        queryDatabase();
    }
});

function queryDatabase()
{
    conn.query('DROP TABLE IF EXISTS inventory;',
        function (err, results, fields) {
            if (err) throw err;
            console.log('Dropped inventory table if existed.');
        }
    )
    conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);',
        function (err, results, fields) {
            if (err) throw err;
            console.log('Created inventory table.');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150],
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 250],
        function (err, results, fields) {
            if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100],
        function (err, results, fields) {
            if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.end(function (err) {
        if (err) throw err;
        else  console.log('Done.')
    });
};

데이터 읽기

SELECT SQL 문을 사용하여 데이터를 연결하고 읽으려면 다음 코드를 사용하세요.

mysql.createConnection() 메서드는 Azure Database for MySQL 유연한 서버 인스턴스와 상호 작용하는 데 사용됩니다. connect() 메서드는 서버에 대한 연결을 설정하는 데 사용됩니다. query() 메서드는 MySQL 데이터베이스에 대해 SQL 쿼리를 실행하는 데 사용됩니다. 결과 배열은 쿼리 결과를 저장하는 데 사용됩니다.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            readData();
        }
    });

function readData(){
    conn.query('SELECT * FROM inventory',
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Selected ' + results.length + ' row(s).');
            for (i = 0; i < results.length; i++) {
                console.log('Row: ' + JSON.stringify(results[i]));
            }
            console.log('Done.');
        })
    conn.end(
        function (err) {
            if (err) throw err;
            else  console.log('Closing connection.')
    });
};

데이터 업데이트

UPDATE SQL 문을 사용하여 데이터를 연결하고 업데이트하려면 다음 코드를 사용하세요.

mysql.createConnection() 메서드는 Azure Database for MySQL 유연한 서버 인스턴스와 상호 작용하는 데 사용됩니다. connect() 메서드는 서버에 대한 연결을 설정하는 데 사용됩니다. query() 메서드는 MySQL 데이터베이스에 대해 SQL 쿼리를 실행하는 데 사용됩니다.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            updateData();
        }
    });

function updateData(){
       conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [75, 'banana'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Updated ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

데이터 삭제

DELETE SQL 문을 사용하여 데이터를 연결하고 삭제하려면 다음 코드를 사용하세요.

mysql.createConnection() 메서드는 Azure Database for MySQL 유연한 서버 인스턴스와 상호 작용하는 데 사용됩니다. connect() 메서드는 서버에 대한 연결을 설정하는 데 사용됩니다. query() 메서드는 MySQL 데이터베이스에 대해 SQL 쿼리를 실행하는 데 사용됩니다.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            deleteData();
        }
    });

function deleteData(){
       conn.query('DELETE FROM inventory WHERE name = ?', ['orange'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Deleted ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

리소스 정리

이 빠른 시작에서 사용된 모든 리소스를 정리하려면 다음 명령을 사용하여 리소스 그룹을 삭제합니다.

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

다음 단계