손쉽게 연동하는 Node.js + AWS RDS
할 것
1. AWS RDS
프리티어 인스턴스를 생성합니다.
2. 스키마와 테이블을 생성합니다.
3. Node.js
와 AWS RDS
를 연동하고 실습합니다.
프리티어는 AZ db.t2.micro 인스턴스 기준으로 750시간 까지 무료입니다. 요금 폭탄을 맞지 않도록 사용 후에 꼭 인스턴스를 중단시키거나 삭제하세요.
준비물
AWS RDS 인스턴스 만들기
(https://aws.amazon.com/ko/rds/)에 접속하여 화면 중단에 있는 [Amazon RDS 시작하기] 를 누르거나 AWS Console 에서 RDS 로 접근합니다:
RDS 콘솔에서 [Get started now] 를 누릅니다:
데이터베이스 종류를 선택하기 전에 무료 버전을 사용해야 하므로 하단에 Only enable options eligible for RDS Free Usage Tier 를 체크합니다:
이제 어떤 종류의 RDBMS
를 사용할지 선택합니다. AWS Aurora
는 프리티어에서 사용 불가하므로 MySQL, MariaDB
중 선택해주세요. 이외 다른 PostgreSQL, Oracle, MSSQL
도 사용 가능하지만 이번 포스팅에서 사용하지 않습니다.
하단에 [Next] 를 누르면 인스턴스 상세 설정 페이지가 나옵니다. 상단에 있는 [Instance specifications] 탭에 있는 설정들은 변경 할 필요가 없습니다. 프리티어를 사용하기 때문에 선택의 여지가 없습니다.
스크롤을 내리면 [Settings] 탭이 나옵니다:
DB instance identifier
: 인스턴스 식별자를 의미합니다. 원하는 이름을 붙여주시면 됩니다. 저는nodejs-rds
로 설정하겠습니다.Master username
: 데이터베이스 마스터 계정의 유저 네임입니다. 로그인 할 때 사용합니다. 저는ironman
으로 정했습니다.Master password
: 마스터 계정의 비밀번호입니다. 저는11111111
로 설정했습니다.
이제 [Next] 를 누르고 다음 페이지에서 [Launch DB Instance] 를 누릅니다.
다시 RDS Console 로 돌아와 Instance 를 살펴볼까요?
저희가 방금 생성한 인스턴스가 가동중이네요. 스크롤을 조금 내려 Connect 탭을 확인합니다. 이처럼 주소가 생성되었다면 준비 완료입니다. 만약 Not yet available 이 나온다면 약 1분 후 새로고침 해보세요. (엔드포인트가 생성되기 까지 시간이 조금 걸리기 때문입니다)
MySQL Workbench 로 인스턴스 접속하기기
만약 MySQL Workbench
가 설치되어 있지 않다면 여기 로 이동해주세요.
Workbench
에 저희가 만든 인스턴스 정보를 등록합시다:
Connection Name
: 커넥션 이름으로 저장할 문자열입니다. 저는nodejs-rds
로 하겠습니다.Hostname
: 엔드포인트 주소입니다. (실수로 http 혹은 / 등을 포함시키지 않도록 주의하세요)Username
: 위에서 설정한Master username
을 입력해주세요.Password
: 위에서 설정한Master password
를 입력해주세요. ([Store in Keychain] 클릭 후 등록)Default Schema
: 아직 스키마를 생성하지 않았으므로 빈칸으로 남겨주세요.
스키마와 테이블 생성
테이블
을 생성하기 전에 스키마
를 생성해야 합니다. MySQL
에서 스키마는 테이블의 집합입니다.
스키마는 데이터베이스라고 부르기도 합니다. 하지만 데이터베이스는 우리가 다루는 데이터베이스 그 자체와 용어 혼동이 생길 여지가 있으므로 스키마라고 부르도록 하겠습니다.
아래 쿼리를 MySQL Workbench SQL 창에 입력하고 실행합니다: (번개 모양 버튼을 눌러주세요.)
CREATE SCHEMA test;
혹은
CREATE DATABASE test;
정상적으로 스키마가 생성되었는지 확인합니다:
SHOW SCHEMAS;
혹은
SHOW DATABASES;
결과 화면입니다. Result Grid 에 test
스키마가 생성된게 보이시나요?:
이제 test
스키마를 사용해봅시다.
USE test;
스키마에 테이블을 생성할 차례입니다. 어떤 테이블을 만들지 생각해봅시다. 마트에서 판매하는 과일 정보 담고 있는 테이블을 설계 해볼까요?
키 | 속성 | 이름 | 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;
마지막으로 테이블에 미리 데이터를 몇 개 입력해놓겠습니다. 사과
, 바나나
그리고 키위
입니다:
INSERT INTO fruit (fruit_name) VALUES ("apple");
INSERT INTO fruit (fruit_name) VALUES ("banana");
INSERT INTO fruit (fruit_name) VALUES ("kiwi");
Node.js 로 테이블 조회하기
폴더를 하나 생성하고 이동합니다:
> mkdir practice
> cd practice
npm
사용 준비를 합니다. 패키지 설정은 모두 엔터키를 눌러 기본값으로 합니다:
> npm init
mysql
모듈을 설치합니다:
> npm install --save mysql
모듈 설치까지 완료했다면 이제 main.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); // 결과를 출력합니다!
});
}
});
main.js
를 실행합니다.
> node main.js
[ RowDataPacket { fruit_name: node main. 'apple' },
RowDataPacket { fruit_name: 'banana' },
RowDataPacket { fruit_name: 'kiwi' } ]
저희가 테이블에 입력한 사과
, 바나나
그리고 키위
가 정상적으로 출력되었습니다.
마무리
지금까지 AWS RDS
+ Node.js
사용법을 알아봤습니다. 이 둘을 연동하는 것에 의의를 두었기 때문에 보안상 허술한 점도 많습니다. 이는 여러분들이 직접 고민해보고 해결해보세요. 마지막으로 인스턴스는 꼭 종료시켜주세요.
✅ @dangen, congratulations on making your first post! I gave you an upvote!
Please take a moment to read this post regarding commenting and spam. (tl;dr - if you spam, you will be flagged!)
우앙~ 잘봤습니다 ㅎㅎ
태그에
kr kr-it kr-dev 넣으시는게 더 좋습니다. 해당 태그에 매우 적절한 글이네요.
jjangjjangman 태그 넣으시면 짱짱맨 아이디가 오셔서 업보팅도 해줘요 ㅎ
앗 감사합니다 스팀잇을 이제막 사용해서 잘 몰랐네요 ㅎㅎ