[개발] Node & Steem(노드 앤 스팀) - 4편 DB 설정과 운영서버까지 설정 마무으리!
![](https://steemitimages.com/DQmVbApN2se6QrjgbygpVr3Q6AGkPWH2Cu5sfG458mDdAzL/image.png)
지난 시간에 DB 설치와 계정 설정, 권한 설정까지 완료되었습니다. 편하게 DB를 관리하기 위해서는 DB 접속 툴이 필요한데요. 용량도 작고 사용하기 편한 HeidiSQL을 추천드립니다. 다시 하나 하나 시작해봅시다. 고급기능 필요없이 간단한 관리와 sql을 다루기에는 충분히 좋은 툴이라 생각합니다.자 그럼 시작해봅시다.
1. 빠르고 간편한 툴! HeidiSQL로 설치 및 접속.
https://www.heidisql.com/download.php?download=installer를 접속하면 다운로드를 할 수 있습니다.
뻔한 과정의 설치한 뒤 접속 정보를 입력, 접속해봅니다.
2. 테스트 테이블 생성.
일단 아무렇게나 테이블을 생성해봅시다. 이는 node.js에서 등록, 조회, 수정, 삭제를 연습해보기 위함입니다.
화면에 보이는 것과 같이 steem_nhj에서 우클릭 후 새로 생성 → 테이블을 선택합니다.
다음과 같이 자유롭게 만들어봅니다. 원하는대로 간단하게! 그리고 하나의 데이터만 넣어봅시다.
데이터 탭으로 이동후에 '+' 버튼을 눌러 행을 추가하고 직접 그리드에 데이터를 입력하고 V 버튼으로 테이블에 데이터를 입력 할수 있습니다. 다시 입력했던 데이터를 쿼리로 확인해보면...실행은 F9!
잘 됐죠?
3. 이제 node.js에서 mysql 연동!
DB설치부터 연동까지 간단한 것 같으면서도 뭔가 손이 많이 가고 힘이 듭니다. 그래도 정말 한번 쭉 해놓고 작업을 시작하게 되면 일사천리로 쭉 갈수 있을 것 같으니 계속 달려봅시다.
(1) mysql 라이브러리 설치
npm install mysql --save
이거 이제 특별히 적지 않아도 프로젝트 경로 내에 package.json이 있는 경로에서 하시는 것 알쥬?
(2) node.js의 환경 모드 설정
구동하는 환경에 따라 다른 설정을 하고 동작을 하기 위해서 운영모드인지 개발 모드인지도 지금쯤 설정해주면 좋을 것 같습니다.
Win key + print Screen
→ 고급 시스템 설정 → 환경 변수 → 새로 만들기
변수 이름 : NODE_ENV
변수 값 : development
이렇게 설정해주고 ATOM을 재시작 한 뒤에 적절한 모드로 설정이 되었는지 확인해봅니다. 리눅스 서버는 운영서버이니까 당근 'production'로 설정해야합니다.
(2) mysql의 접속 정보 설정
나의 윈도우 pc와 리눅스 서버에서 같은 소스로 동작시키기 위해 두가지의 모드를 분리하여 입력해줍니다.
// init mysql!
var db_config = {
// 운영 모드.
prod: {
host: '127.0.0.1',
port: '3306',
user: 'steem_nhj',
password: 'steem_nhj',
database: 'steem_nhj'
},
// 개발 모드
dev: {
host: '127.0.0.1',
port: '3306',
user: 'steem_nhj',
password: 'steem_nhj',
database: 'steem_nhj'
}
};
// 설정된 환경으로 config 적용.
if( process.env.NODE_ENV == 'development' ){
db_config = db_config.dev;
}else{
db_config = db_config.prod;
}
var mysql = require('mysql'); // mysql lib load.
// mysql create connection!!
var conn = mysql.createConnection({
host: db_config.host,
port: db_config.port,
user: db_config.user,
password: db_config.password,
database: db_config.database
});
// steem init!
var steem = require("steem")
steem.api.setOptions({url: 'https://api.steemit.com'});
// steem init! end
try {
fiber(function() {
// 실제 DB에 연결.
var obj = await( conn.connect( defer() ));
logger.info("connected.");
logger.info(obj);
// select 조회 쿼리!
var queryResult = await(conn.query("select * from test", defer() ));
logger.info(queryResult);
// 테스트 데이터! 등록
queryResult = await(conn.query("insert into test values(1, 'nhj12311!!!');", defer() ));
logger.info(queryResult);
// 등록 후 다시 조회!!
queryResult = await(conn.query("select * from test", defer() ));
logger.info(queryResult);
logger.info( "steem init!!" );
// steem 데이터 조회!!
obj = await(steem.api.getAccounts(['nhj12311'], defer()));
logger.info(obj);
conn.end(); // db 연결 해제.
});
} catch(err) {
logger.error(err);
}
설정부는 위의 코드를 Ctrl + C
하여 Ctrl + V
해서 적당히 고쳐서 쓰시면 될것이고 실제 코딩 부를 살펴본다면 쿼리도 synchronized를 사용해서 async의 콜백 지옥에 빠지지 않고 안전하게 코딩 할수 있게 되었습니다. 캬~
출력
4. 운영환경 리눅스에도 동일하게 적용해보자.
이제 개발하는 pc에서 설정이 완료되었습니다. 이제 자유롭게 steem api를 써서 데이터를 핸드링하고 db에 저장, 조회, 수정, 삭제를 하면서 어플리케이션 구현에 집중할 수 있게 된 것 같습니다. 이제 리눅스 서버에도 동일하게 적용해보도록 하겠습니다.
(1) mysql 설치
당연히 개발 pc에 설치된 버전과 최대한 맞춰야 합니다. 일전에 mysql 5.7 버전을 설치했으므로 동일하게 설치해줍시다. apt search mysql 5.7
과 같이 아파트에 있는지 검색해보고 없으면 mysql 설치 파일을 제공하는 사이트의 걸 'wget'으로 받아서 설치하면 되지만... 아파트에 있군요! 바로 설치해줍시다.
apt-get install mysql-server-5.7
중간에 root 비밀번호를 입력해달라고 합니다. 친절하게 입력해줍시다.
(2) mysql 설정
보안 스크립트를 실행해줍시다.
mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: N
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : N
... skipping.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N
... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : N
... skipping.
All done!
이런식으로 root 패스워드를 입력하면 패스워드 정합성 플러그인을 설치할거냐고 물어보는데 위와 같이 적당히(?) 답변합니다.
(3) mysql 사용자 계정 생성 및 권한 주기!
개발환경에서와 동일하게 사용자 계정을 만들고 권한을 설정해봅시다.
mysql> create user 'steem_nhj'@'localhost' identified by 'steem_nhj';
Query OK, 0 rows affected (0.00 sec)
mysql> create database steem_nhj
-> ;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on steem_nhj.* to 'steem_nhj'@'localhost' ;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
root@ip-172-31-9-10:/etc/mysql/mysql.conf.d# mysql -u steem_nhj -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| steem_nhj |
+--------------------+
2 rows in set (0.00 sec)
이렇게 제가 만든 'steem_nhj' 계정으로 steem_nhj DB만이 엑세스 된다면 성공인 것입니다. 똑같이 개발환경의 테이블을 만들어봅시다. 편하게 하기 위해서는 개발환경에서 만들었던 테이블을 HeidiSQL에서 create code를 가져오는 것입니다.
그담에 이렇게 하면 됩니다.
mysql> use steem_nhj;
Database changed
mysql> CREATE TABLE `test` (
-> `a1` INT(11) NOT NULL,
-> `b1` VARCHAR(50) NULL DEFAULT NULL
-> )
-> COMMENT='테스트'
-> COLLATE='latin1_swedish_ci'
-> ENGINE=InnoDB
-> ;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from test;
Empty set (0.01 sec)
4. github에 소스 올리고 리눅스에서 소스 받아 실행!
이제 DB 구성이 완료되었으니 node.js에서 지금껏 했던 걸 운영 환경에서도 수행해봅시다. 하나 깜빡할 뻔한 것이 바로 NODE_ENV
값입니다. 운영 환경은 'production'로 설정하면 되겠죠?
리눅스는 이렇게 해주시면 됩니다.
export NODE_ENV=production
다시 오랜만에 Atom(아톰) 툴에서 지금까지 작업했던 소스들을 올려봅시다.
Ctrl + Shift + H
→ Add all and Commit and Push
→ Commit Msg 입력 후 → Ctrl + S
github 사이트를 확인해보면 이렇게 내가 올린 소스들이 업데이트가 되죠. 리눅스 서버에서 다시 동기화를 한다음 수행해봅시다.
git pull
node app.js
root@ip-172-31-9-10:/app/steem_nhj# node app.js
13:32:21 - info: connected.
13:32:21 - info: fieldCount=0, affectedRows=0, insertId=0, serverStatus=2, warningCount=0, message=, protocol41=true, changedRows=0
13:32:21 - info: a1=1, b1=nhj12311!!!, a1=1, b1=nhj12311!!!, a1=1, b1=nhj12311!!!
13:32:21 - info: fieldCount=0, affectedRows=1, insertId=0, serverStatus=2, warningCount=0, message=, protocol41=true, changedRows=0
13:32:21 - info: a1=1, b1=nhj12311!!!, a1=1, b1=nhj12311!!!, a1=1, b1=nhj12311!!!, a1=1, b1=nhj12311!!!
13:32:21 - info: steem init!!
13:32:22 - info: id=173212, name=nhj12311, weight_threshold=1, account_auths=[], key_auths=[0=STM6Az66fGmTFJ43j63zr5jSfVPs9SQBvwkvtZ43KRk28fnxGGCLD, 1=1], weight_threshold=1, account_auths=[], key_auths=[0=STM8mEKLN9LEQC8WToaJ2tYNG5f33mdNVjx9tQD41frDCPatPZqbo, 1=1], weight_threshold=1, account_auths=[0=busy.app, 1=1, 0=utopian.app, 1=1], key_auths=[0=STM7YuUEQ3Lt6e5tVuizFarbEjfkggVDhvYrnCxeJwgKmE49cg7kB, 1=1], memo_key=STM5KjbTVbjnFgoeSDo3UvHqPcLS3fuhWE29Uy99DSpKcTkejKnh7
헠...헠...헠.... 꽤 힘드네요. 중간 중간 삽질도 많이 하구요. 이제 윈도우 환경의 개발과 리눅스 운영 환경에서 Node.js 기반의 로깅, DB연동, 콜백 지옥을 벗어나 github 의 형상관리 아래에서 Node & Steem(노드 앤 스팀)의 개발 및 운영 서비스환경이 구축되었습니다. 이제 열심히 어플리케이션을 개발할 수 있는 단계가 된 듯 합니다.
이제 뭘 만들지 상상하는 행복한 고민을 하면 됩니다. 읽어주셔서 감사합니다.
node & steem - 지난 회차 살펴보기
1편 - nodejs 개발환경을 구성해보자. 윈도우 개발 + Github 저장소 + 리눅스 운영
2편 - 콜백 지옥을 탈출해보자. - synchronize.js 편
3편 - 로깅 처리와 DB(mysql)설치 및 설정
Cheer Up!
https://busy.org/@rahmatmaulana/photography-photography-water-fall-5062746ac68fe
굳굳입니다!
댓글 감사합니다~
좋은 글 잘 보았습니다.
참고하도록 하겠습니다.
안녕하세요보팅하구 갑니다
저한테도 많이 놀러 와주세요^^
팔로우 신청도 했써요.ㅎ
감사합니다.
정말 유용하게 쓰일것 같습니다~^^
유용하게 봐주시니 감사합니다~
제 글을 읽어주셔 감사해여ㅋㅋ
재밌어서요. ㅎㅎ 댓글 감사합니다.
스팀잇에서 개발 관련글을 보다니 반갑네요 ^^
팔로우하고 갑니다 ~
스팀잇에는 개발 관련글이 그래두 조금 되죵 ㅎㅎ
글에서 정성이 느껴지네요~ 1편부터 천천히 정주행 하도록 하겠습니다!
엌... 감사합니다^^
It is a nice news for us