다음을 통해 공유


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

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

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

필수 조건

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

Important

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

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. TLS 인증서 가져오기: 클라이언트 애플리케이션과 암호화된 연결을 사용하려면 Azure Database for MySQL의 TLS(전송 계층 보안)의 지침을 따라야 합니다.

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

  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