1.
Ubuntu 환경 구축
2.
: ubuntu 18.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ grep -r . /etc/*-release /etc/lsb-release:DISTRIB_ID=Ubuntu /etc/lsb-release:DISTRIB_RELEASE=16.04 /etc/lsb-release:DISTRIB_CODENAME=xenial /etc/lsb-release:DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS" /etc/os-release:NAME="Ubuntu" /etc/os-release:VERSION="16.04.4 LTS (Xenial Xerus)" /etc/os-release:ID=ubuntu /etc/os-release:ID_LIKE=debian /etc/os-release:PRETTY_NAME="Ubuntu 16.04.4 LTS" /etc/os-release:VERSION_ID="16.04" /etc/os-release:HOME_URL="http://www.ubuntu.com/" /etc/os-release:SUPPORT_URL="http://help.ubuntu.com/" /etc/os-release:BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" /etc/os-release:VERSION_CODENAME=xenial /etc/os-release:UBUNTU_CODENAME=xenial | cs |
* 해당 버전은 16.04이나 실습 진행에 있어서 별 다른 문제가 없으므로 다음과 같이 진행함.
* ubuntu 16.04 설치 필요 시 하기의 링크 클릭
3.
: curl이 설치되어 있지 않은 경우 다음과 같이 curl 설치
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | $ sudo apt-get -y install curl Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libcurl3-gnutls The following NEW packages will be installed: curl The following packages will be upgraded: libcurl3-gnutls 1 upgraded, 1 newly installed, 0 to remove and 169 not upgraded. Need to get 323 kB of archives. After this operation, 339 kB of additional disk space will be used. Get:1 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcurl3-gnutls amd64 7.47.0-1ubuntu2.9 [184 kB] Get:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 curl amd64 7.47.0-1ubuntu2.9 [138 kB] Fetched 323 kB in 0s (1,365 kB/s) (Reading database ... 198888 files and directories currently installed.) Preparing to unpack .../libcurl3-gnutls_7.47.0-1ubuntu2.9_amd64.deb ... Unpacking libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.9) over (7.47.0-1ubuntu2.8) ... Selecting previously unselected package curl. Preparing to unpack .../curl_7.47.0-1ubuntu2.9_amd64.deb ... Unpacking curl (7.47.0-1ubuntu2.9) ... Processing triggers for libc-bin (2.23-0ubuntu10) ... Processing triggers for man-db (2.7.5-1) ... Setting up libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.9) ... Setting up curl (7.47.0-1ubuntu2.9) ... Processing triggers for libc-bin (2.23-0ubuntu10) ... | cs |
4.
: nodejs 설치
4-1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | $ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - ## Installing the NodeSource Node.js 10.x repo... ## Populating apt-get cache... + apt-get update Hit:1 http://kr.archive.ubuntu.com/ubuntu xenial InRelease Hit:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease Get:4 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB] Fetched 107 kB in 1s (56.9 kB/s) Reading package lists... Done ## Confirming "xenial" is supported... + curl -sLf -o /dev/null 'https://deb.nodesource.com/node_10.x/dists/xenial/Release' ## Adding the NodeSource signing key to your keyring... + curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - OK ## Creating apt sources list file for the NodeSource Node.js 10.x repo... + echo 'deb https://deb.nodesource.com/node_10.x xenial main' > /etc/apt/sources.list.d/nodesource.list + echo 'deb-src https://deb.nodesource.com/node_10.x xenial main' >> /etc/apt/sources.list.d/nodesource.list ## Running `apt-get update` for you... + apt-get update Get:1 https://deb.nodesource.com/node_10.x xenial InRelease [4,611 B] Hit:2 http://kr.archive.ubuntu.com/ubuntu xenial InRelease Hit:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease Hit:4 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease Get:5 https://deb.nodesource.com/node_10.x xenial/main amd64 Packages [768 B] Get:6 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB] Fetched 112 kB in 1s (63.8 kB/s) Reading package lists... Done ## Run `sudo apt-get install -y nodejs` to install Node.js 10.x and npm ## You may also need development tools to build native addons: sudo apt-get install gcc g++ make ## To install the Yarn package manager, run: curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn | cs |
4-2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $ sudo apt-get install -y nodejs Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: libuv1 Use 'sudo apt autoremove' to remove it. The following packages will be upgraded: nodejs 1 upgraded, 0 newly installed, 0 to remove and 169 not upgraded. Need to get 15.0 MB of archives. After this operation, 58.4 MB of additional disk space will be used. Get:1 https://deb.nodesource.com/node_10.x xenial/main amd64 nodejs amd64 10.12.0-1nodesource1 [15.0 MB] Fetched 15.0 MB in 4s (3,091 kB/s) (Reading database ... 198957 files and directories currently installed.) Preparing to unpack .../nodejs_10.12.0-1nodesource1_amd64.deb ... Unpacking nodejs (10.12.0-1nodesource1) over (4.2.6~dfsg-1ubuntu4.2) ... Processing triggers for man-db (2.7.5-1) ... Processing triggers for doc-base (0.10.7) ... Processing 1 removed doc-base file... Setting up nodejs (10.12.0-1nodesource1) ... | cs |
5.
: node 설치 확인
1 2 3 | $ node -v v10.12.0 | cs |
6.
: node.js 관련 작업 디렉터리 생성
1 2 | $ mkdir nodejs | cs |
7.
1 2 | $ cd nodejs | cs |
8.
: 관련 패키지 설치를 진행하기 전에 다음과 같이 업데이트 먼저 진행하는 것을 추천
1 2 | $ sudo npm update | cs |
9.
: mysql 패키지 설치
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ sudo npm install -y mysql npm WARN saveError ENOENT: no such file or directory, open '/home/rabbit/nodejs/package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '/home/rabbit/nodejs/package.json' npm WARN nodejs No description npm WARN nodejs No repository field. npm WARN nodejs No README data npm WARN nodejs No license field. + mysql@2.16.0 added 11 packages from 15 contributors and audited 13 packages in 1.339s found 0 vulnerabilities | cs |
10.
: cors 패키지 설치
1 2 3 4 5 6 7 8 9 10 11 12 | $ sudo npm install -y cors npm WARN saveError ENOENT: no such file or directory, open '/home/rabbit/nodejs/package.json' npm WARN enoent ENOENT: no such file or directory, open '/home/rabbit/nodejs/package.json' npm WARN nodejs No description npm WARN nodejs No repository field. npm WARN nodejs No README data npm WARN nodejs No license field. + cors@2.8.4 added 3 packages from 3 contributors and audited 35 packages in 1.65s found 0 vulnerabilities | cs |
11.
: express 패키지 설치
1 2 3 4 5 6 7 8 9 10 11 12 | $ sudo npm install -y express npm WARN saveError ENOENT: no such file or directory, open '/home/rabbit/nodejs/package.json' npm WARN enoent ENOENT: no such file or directory, open '/home/rabbit/nodejs/package.json' npm WARN nodejs No description npm WARN nodejs No repository field. npm WARN nodejs No README data npm WARN nodejs No license field. + express@4.16.4 added 45 packages from 35 contributors and audited 158 packages in 2.795s found 0 vulnerabilities | cs |
12.
: forever 패키지 설치
1 2 3 4 5 6 7 8 | $ sudo npm install -y -g forever /usr/bin/forever -> /usr/lib/node_modules/forever/bin/forever npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/forever/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) + forever@0.15.3 added 242 packages from 153 contributors in 4.961s | cs |
* forever 패키지 같은 경우 설치 시 -g 옵션을 주어 전역 모드로 설치를 진행해야 함
Windows 환경 구축
13.
: Windows에서 node.js 설치 필요 시 하기의 링크 클릭
13.
: Windows에서 Ubuntu로 파일 전송을 위한 WinSCP 설치 필요 시 하기 링크를 클릭
14.
: node.js 관련 작업 폴더 생성
15.
: node.js 관련 작업 폴더 내의 빈 곳에서 Shift + 우클릭 후 "여기에 PowerShell 창 열기" 탭 클릭
16.
: cors 패키지 설치
1 2 3 4 5 6 7 8 9 10 11 12 13 | PS C:\Users\Admin\Downloads\nodejs> npm install -y cors npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\Admin\package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\Admin\package.json' npm WARN Admin No description npm WARN Admin No repository field. npm WARN Admin No README data npm WARN Admin No license field. + cors@2.8.4 added 3 packages from 3 contributors and audited 18 packages in 1.891s found 0 vulnerabilities | cs |
17.
: express 패키지 설치
1 2 3 4 5 6 7 8 9 10 11 12 | PS C:\Users\Admin\Downloads\nodejs> npm install -y express npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\Admin\package.json' npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\Admin\package.json' npm WARN Admin No description npm WARN Admin No repository field. npm WARN Admin No README data npm WARN Admin No license field. + express@4.16.4 added 47 packages from 36 contributors and audited 141 packages in 2.884s found 0 vulnerabilities | cs |
18.
: mysql 패키지 설치
1 2 3 4 5 6 7 8 9 10 11 12 | PS C:\Users\Admin\Downloads\nodejs> npm install -y mysql npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\Admin\package.json' npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\Admin\package.json' npm WARN Admin No description npm WARN Admin No repository field. npm WARN Admin No README data npm WARN Admin No license field. + mysql@2.16.0 added 9 packages from 14 contributors and audited 305 packages in 3.747s found 0 vulnerabilities | cs |
19.
: Visual Studio Code 혹은 node.js 개발이 가능한 IDE 툴을 실행
20.
: 확장 버튼 혹은 Ctrl + Shift + X 버튼을 눌러 node 검색 후 Node.js Extension Pack 설치
: 설치 후 Reload to Activate 버튼 클릭
21.
: 코드 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | const cors = require('cors'); const express = require('express'); const mysql = require('mysql'); var app = express(); app.listen('8080'); app.use(cors()); app.use(express.json()); var con = mysql.createConnection({ host: "____________________________________________________________", user: "_____", password: "___________", port: '____', database: "____" }); app.get('/todos', function (req, res) { console.log("GET: /todos"); con.query("SELECT * FROM todos", function (err, result) { if (err) res.send(err); res.json(result); res.end(); }); }); app.post('/todos', function (req, res) { console.log("POST: /todos"); console.log(req.body); var sql = `INSERT INTO todos(title, isDone) VALUES ('${req.body.title}', ${req.body.isDone})`; con.query(sql, function (err, result) { if (err) res.send(err); res.json(result.insertId); res.end(); }); }); app.put('/todos', function (req, res) { console.log("PUT: /todos"); console.log(req.body); var sql = `UPDATE todos SET isDone = ${req.body.isDone} WHERE id = ${req.body.id}`; con.query(sql, function (err, result) { if (err) res.send(err); res.json(result); res.end(); }); }); app.delete('/todos', function (req, res) { console.log("DELETE: /todos"); console.log(req.body); var sql = `DELETE FROM todos WHERE id = ${req.body.id}`; con.query(sql, function (err, result) { if (err) res.send(err); res.json(result); res.end(); }); }); | cs |
* host, user, password, port, database에 해당하는 5곳은 자신의 환경에 맞는 database 정보를 기입
* 코드의 실행 및 디버깅 과정 생략!
22.
: node.js 관련 작업 폴더 내에 app.js 파일로 저장
23.
: node.js 관련 작업 폴더 내의 빈 곳에서 Shift + 우클릭 후 "여기에 PowerShell 창 열기" 탭 클릭
24.
: node.js 기동 시 다음과 같이 명령어 실행
1 2 | PS C:\Users\Admin\Downloads\nodejs> node .\app.js | cs |
25.
: 서비스 요청 시 아직 DB가 설계되어 있지 않거나 연결 상태가 정상적이지 않다면 다음과 같이 해당 오류가 발생
: 정상적으로 연결이 되어 있는 상태에서 데이터가 있을 경우는 다음과 같음
* Windows 개발 환경에서 정상적인 동작을 확인하였다면 이후 Ubuntu 환경으로 app.js를 배포
Windows -> Ubuntu
26.
: Ubuntu의 IP Addr 확인
1 2 3 | $ ifconfig |grep "inet addr" inet addr:192.168.168.168 Bcast:192.168.168.168 Mask:255.255.0.0 inet addr:127.0.0.1 Mask:255.0.0.0 | cs |
27.
: WinSCP 실행 후 접속 서버의 정보 기입 후 로그인 버튼 클릭
28.
: 정상적으로 연결될 경우 다음과 같은 창이 출력되며 예 버튼 클릭
29.
: 좌측은 Windwos, 우측은 Ubuntu
* app.js 업로드 시 해당 파일에 database 접속 정보 확인 필요
30.
: 좌측의 해당 app.js 파일을 우클릭 하여 서버측으로 업로드 진행
31.
: 확인 버튼 클릭
32.
: putty 실행 후 해당 서버 접속 정보 기입 후 Open 버튼 클릭
33.
34.
: 해당 app.js 파일의 경로로 이동하여 목록 확인
1 2 3 4 5 6 7 8 | $ ll total 32 drwxrwxr-x 3 rabbit rabbit 4096 10월 13 22:22 ./ drwxr-xr-x 21 rabbit rabbit 4096 10월 13 21:50 ../ -rw-rw-r-- 1 rabbit rabbit 1612 10월 13 20:07 app.js drwxr-xr-x 62 root root 4096 10월 13 16:35 node_modules/ -rw-r--r-- 1 root root 16065 10월 13 16:35 package-lock.json | cs |
35.
: node 명령어로 app.js 실행
1 2 3 4 5 | $ sudo forever start -o output.log -e error.log app.js warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms info: Forever processing file: app.js | cs |
36.
: Ubuntu에 app.js의 서비스 주소로 요청 시 Windwos의 Databases에서 해당 데이터를 조회하여 응답함
* 위와 같이 DB 생성 및 데이터가 있음에도 불구하고 제대로 된 데이터를 출력하지 못한다면 아래와 같은 경우를 고려해야 함
: Windows 방화벽 인바운드 규칙
: MySQL 계정 외부 접속 허용 권한
: Ubuntu 내의 app.js 서비스 상태 및 포트
'Cloud > Amazon Web Services' 카테고리의 다른 글
클라우드, RDS를 사용한 데이터베이스 구성 (0) | 2018.10.14 |
---|---|
로컬, RDS를 사용한 데이터베이스 구성 (0) | 2018.10.13 |
로컬, S3를 사용한 정적 웹 페이지 구성 (0) | 2018.10.13 |
S3, EC2, RDS를 사용한 정적 및 동적 웹 페이지 구성 (0) | 2018.10.13 |
RDS MySQL Remove (0) | 2018.10.01 |