create account

손쉽게 연동하는 Node.js + AWS RDS by dangen

View this thread on: hive.blogpeakd.comecency.com
· @dangen · (edited)
$0.68
손쉽게 연동하는 Node.js + AWS RDS
https://dangen-effy.github.io/assets/nodejs_with_awsrds.png

## 할 것 ##

#### 1. `AWS RDS` 프리티어 인스턴스를 생성합니다. ####

#### 2. 스키마와 테이블을 생성합니다. ####

#### 3. `Node.js` 와 `AWS RDS` 를 연동하고 실습합니다. ####
<br/>
> 프리티어는 AZ db.t2.micro 인스턴스 기준으로 750시간 까지 무료입니다. 요금 폭탄을 맞지 않도록 사용 후에 꼭 인스턴스를 중단시키거나 삭제하세요.

## 준비물 ##
<br/>
* [AWS](https://aws.amazon.com/) 계정

* [Node.js](https://nodejs.org/)

* [MySQL Workbench](https://dev.mysql.com/downloads/workbench/)


- - -


## AWS RDS 인스턴스 만들기 ##
<br/>
(https://aws.amazon.com/ko/rds/)에 접속하여 화면 중단에 있는 **[Amazon RDS 시작하기]** 를 누르거나 AWS Console 에서 RDS 로 접근합니다:


https://dangen-effy.github.io/assets/awsrds_page.png


RDS 콘솔에서 **[Get started now]** 를 누릅니다:


https://dangen-effy.github.io/assets/aws_get_started.png


데이터베이스 종류를 선택하기 전에 무료 버전을 사용해야 하므로 하단에 _Only enable options eligible for RDS Free Usage Tier_ 를 체크합니다:

https://dangen-effy.github.io/assets/aws_rds_free_check.png

이제 어떤 종류의 `RDBMS` 를 사용할지 선택합니다. `AWS Aurora` 는 프리티어에서 사용 불가하므로 `MySQL, MariaDB` 중 선택해주세요. 이외 다른 `PostgreSQL, Oracle, MSSQL` 도 사용 가능하지만 이번 포스팅에서 사용하지 않습니다.


https://dangen-effy.github.io/assets/aws_rds_select_db.png


하단에 **[Next]** 를 누르면 인스턴스 상세 설정 페이지가 나옵니다. 상단에 있는 **[Instance specifications]** 탭에 있는 설정들은 변경 할 필요가 없습니다. 프리티어를 사용하기 때문에 선택의 여지가 없습니다.

스크롤을 내리면 **[Settings]** 탭이 나옵니다:

https://dangen-effy.github.io/assets/aws_rds_configure.png

* `DB instance identifier`: 인스턴스 식별자를 의미합니다. 원하는 이름을 붙여주시면 됩니다. 저는 `nodejs-rds` 로 설정하겠습니다.

* `Master username`: 데이터베이스 마스터 계정의 유저 네임입니다. 로그인 할 때 사용합니다. 저는 `ironman` 으로 정했습니다.

* `Master password`: 마스터 계정의 비밀번호입니다. 저는 `11111111` 로 설정했습니다.

이제 **[Next]** 를 누르고 다음 페이지에서 **[Launch DB Instance]** 를 누릅니다.

다시 RDS Console 로 돌아와 Instance 를 살펴볼까요?


https://dangen-effy.github.io/assets/aws_rds_console.png


저희가 방금 생성한 인스턴스가 가동중이네요. 스크롤을 조금 내려 **Connect** 탭을 확인합니다. 이처럼 주소가 생성되었다면 준비 완료입니다. 만약 **Not yet available** 이 나온다면 약 1분 후 새로고침 해보세요. (엔드포인트가 생성되기 까지 시간이 조금 걸리기 때문입니다)


- - - -


## MySQL Workbench 로 인스턴스 접속하기기 ##
<br/>
만약 `MySQL Workbench` 가 설치되어 있지 않다면 [여기](https://dev.mysql.com/downloads/workbench/) 로 이동해주세요.

`Workbench` 에 저희가 만든 인스턴스 정보를 등록합시다:


https://dangen-effy.github.io/assets/mysql_workbench_setting.png


* `Connection Name`: 커넥션  이름으로 저장할 문자열입니다. 저는 `nodejs-rds` 로 하겠습니다.

* `Hostname`: 엔드포인트 주소입니다. (_실수로 http 혹은 / 등을 포함시키지 않도록 주의하세요_)

* `Username`: 위에서 설정한 `Master username` 을 입력해주세요.

* `Password`: 위에서 설정한 `Master password` 를 입력해주세요. ([Store in Keychain] 클릭 후 등록)

* `Default Schema`: 아직 스키마를 생성하지 않았으므로 빈칸으로 남겨주세요.

## 스키마와 테이블 생성 ##
<br/>
`테이블`을 생성하기 전에 `스키마`를 생성해야 합니다. `MySQL` 에서 스키마는 테이블의 집합입니다.

> 스키마는 데이터베이스라고 부르기도 합니다. 하지만 데이터베이스는 우리가 다루는 데이터베이스 그 자체와 용어 혼동이 생길 여지가 있으므로 스키마라고 부르도록 하겠습니다.

아래 쿼리를 MySQL Workbench SQL 창에 입력하고 실행합니다: (번개 모양 버튼을 눌러주세요.)


https://dangen-effy.github.io/assets/mysql_workbench_query.png


```
CREATE SCHEMA test;
```
<br/>
혹은

```
CREATE DATABASE test;
```
<br/>
정상적으로 스키마가 생성되었는지 확인합니다:

```
SHOW SCHEMAS;
```
<br/>
혹은

```
SHOW DATABASES;
```
<br/>
결과 화면입니다. Result Grid 에 `test` 스키마가 생성된게 보이시나요?:


https://dangen-effy.github.io/assets/mysql_workbench_schema.png


이제 `test` 스키마를 사용해봅시다.

```
USE test;
```
<br/>
스키마에 테이블을 생성할 차례입니다. 어떤 테이블을 만들지 생각해봅시다. 마트에서 판매하는 과일 정보 담고 있는 테이블을 설계 해볼까요?

|키|속성|이름|Null 허용|유형|
|-|-|-|-|-|
|고유키|과일 이름|`fruit_name`|`Not null`|`VARCHAR(64)`|

과일 이름은 한가지씩 존재하므로 **고유키** 로 사용하고, `Null` 은 허용하지 않습니다. 유형은 `VARCHAR(64)` 로 설정하겠습니다.

```
CREATE TABLE IF NOT EXISTS `fruit` (
`fruit_name` VARCHAR(64) NOT NULL,
UNIQUE KEY `fruit_name` (`fruit_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
<br/>
마지막으로 테이블에 미리 데이터를 몇 개 입력해놓겠습니다. `사과`, `바나나` 그리고 `키위`입니다:

```
INSERT INTO fruit (fruit_name) VALUES ("apple");
INSERT INTO fruit (fruit_name) VALUES ("banana");
INSERT INTO fruit (fruit_name) VALUES ("kiwi");
```
<br/>

- - -


## Node.js 로 테이블 조회하기 ##
<br/>
폴더를 하나 생성하고 이동합니다:

```console
> mkdir practice
> cd practice
```
<br/>
`npm` 사용 준비를 합니다. 패키지 설정은 모두 엔터키를 눌러 기본값으로 합니다:

```console
> npm init
```
<br/>
`mysql` 모듈을 설치합니다:

```console
> npm install --save mysql
```
<br/>
모듈 설치까지 완료했다면 이제 `main.js` 를 작성해봅시다:

```js
var mysql = require("mysql"); // mysql 모듈을 불러옵니다.

// 커넥션을 정의합니다.
// RDS Console 에서 본인이 설정한 값을 입력해주세요.
var connection = mysql.createConnection({
  host: "nodejs-rds.cir7ovuqdtc1.us-east-2.rds.amazonaws.com",
  user: "ironman",
  password: "11111111",
  database: "test"
});

// RDS에 접속합니다.
connection.connect(function(err) {
  if (err) {
    throw err; // 접속에 실패하면 에러를 throw 합니다.
  } else {
    // 접속시 쿼리를 보냅니다.
    connection.query("SELECT * FROM fruit", function(err, rows, fields) {
      console.log(rows); // 결과를 출력합니다!
    });
  }
});
```
<br/>
`main.js` 를 실행합니다.

```console
> node main.js
[ RowDataPacket { fruit_name: node main. 'apple' },
  RowDataPacket { fruit_name: 'banana' },
  RowDataPacket { fruit_name: 'kiwi' } ]
```
<br/>
저희가 테이블에 입력한 `사과`, `바나나` 그리고 `키위`가 정상적으로 출력되었습니다.

## 마무리 ##
<br/>
지금까지 `AWS RDS` +  `Node.js` 사용법을 알아봤습니다. 이 둘을 연동하는 것에 의의를 두었기 때문에 보안상 허술한 점도 많습니다. 이는 여러분들이 직접 고민해보고 해결해보세요. **마지막으로 인스턴스는 꼭 종료시켜주세요.**
👍  , , , , , ,
properties (23)
authordangen
permlinknode-js-aws-rds
categorynodejs
json_metadata{"tags":["nodejs","aws","jjangjjangman","javascript","kr"],"image":["https://dangen-effy.github.io/assets/nodejs_with_awsrds.png","https://dangen-effy.github.io/assets/awsrds_page.png","https://dangen-effy.github.io/assets/aws_get_started.png","https://dangen-effy.github.io/assets/aws_rds_free_check.png","https://dangen-effy.github.io/assets/aws_rds_select_db.png","https://dangen-effy.github.io/assets/aws_rds_configure.png","https://dangen-effy.github.io/assets/aws_rds_console.png","https://dangen-effy.github.io/assets/mysql_workbench_setting.png","https://dangen-effy.github.io/assets/mysql_workbench_query.png","https://dangen-effy.github.io/assets/mysql_workbench_schema.png"],"links":["https://aws.amazon.com/","https://nodejs.org/","https://dev.mysql.com/downloads/workbench/","https://aws.amazon.com/ko/rds/"],"app":"steemit/0.1","format":"markdown"}
created2018-05-10 02:04:15
last_update2018-05-15 10:51:24
depth0
children3
last_payout2018-05-17 02:04:15
cashout_time1969-12-31 23:59:59
total_payout_value0.539 HBD
curator_payout_value0.141 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length5,015
author_reputation14,971,045,596
root_title"손쉽게 연동하는 Node.js + AWS RDS"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id54,862,494
net_rshares140,449,360,204
author_curate_reward""
vote details (7)
@introduce.bot ·
✅  @dangen, congratulations on making your first post! **I gave you an upvote!**<br>Please take a moment to read [this post](https://steemit.com/spam/@pleasestop/introducing-pleasestop-here-to-reduce-comment-spam) regarding commenting and spam. (tl;dr - if you spam, you will be flagged!)
👍  
properties (23)
authorintroduce.bot
permlinkintroduce-bot-re-dangennode-js-aws-rds
categorynodejs
json_metadata""
created2018-05-10 02:04:30
last_update2018-05-10 02:04:30
depth1
children0
last_payout2018-05-17 02:04:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length288
author_reputation20,568,707,332,317
root_title"손쉽게 연동하는 Node.js + AWS RDS"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id54,862,529
net_rshares610,666,615
author_curate_reward""
vote details (1)
@osyvv ·
우앙~ 잘봤습니다 ㅎㅎ
태그에
kr kr-it kr-dev 넣으시는게 더 좋습니다. 해당 태그에 매우 적절한 글이네요.

jjangjjangman 태그 넣으시면 짱짱맨 아이디가 오셔서 업보팅도 해줘요 ㅎ
👍  
properties (23)
authorosyvv
permlinkre-dangen-node-js-aws-rds-20180515t090222162z
categorynodejs
json_metadata{"tags":["nodejs"],"app":"steemit/0.1"}
created2018-05-15 09:02:24
last_update2018-05-15 09:02:24
depth1
children1
last_payout2018-05-22 09:02:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length113
author_reputation18,175,199,129,574
root_title"손쉽게 연동하는 Node.js + AWS RDS"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id55,789,743
net_rshares610,666,615
author_curate_reward""
vote details (1)
@dangen ·
앗 감사합니다 스팀잇을 이제막 사용해서 잘 몰랐네요 ㅎㅎ
👍  
properties (23)
authordangen
permlinkre-osyvv-re-dangen-node-js-aws-rds-20180515t104425183z
categorynodejs
json_metadata{"tags":["nodejs"],"app":"steemit/0.1"}
created2018-05-15 10:44:24
last_update2018-05-15 10:44:24
depth2
children0
last_payout2018-05-22 10:44:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length31
author_reputation14,971,045,596
root_title"손쉽게 연동하는 Node.js + AWS RDS"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id55,802,539
net_rshares598,453,282
author_curate_reward""
vote details (1)