Amazon Web Service์ ๋ํด์ ์ฒ์ ์ ํด๋ณด๋ ์ฌ๋๋ ๋ฐ๋ผ์ ์น์๋ฒ๋ฅผ ์ฌ๋ฆด ์ ์๋๋ก ํ๋ ๊ฐ์ด๋์ ๋๋ค.
- ํด๋ผ์ฐ๋๋?
- Amazon Web Service ์๊ฐ
- EC2 ์๊ฐ
- EC2๋ก Ubuntu ์์ํ๊ธฐ
- Ubuntu์ Node.js ์๋ฒ ์ฌ๋ ค๋ณด๊ธฐ
- Load Balancer ์๊ฐ
- ALB ๊ตฌ์ฑํ๊ธฐ
- S3๋?
- EC2์ ์ด๋ฏธ์ง ์ ๋ก๋ ์๋ฒ ๋ง๋ค๊ธฐ
- RDS๋?
- Aurora MySQL๊ณผ Node.js ์๋ฒ ์ฐ๋ํ๊ธฐ
- ๋ถ๋ก: Route53 ์ผ๋ก ๋๋ฉ์ธ ๊ด๋ฆฌํ๊ธฐ
โ ๏ธ ๊ณผ์ ์ ์งํํ๋ฉฐ ์์ฑํ ๋ฆฌ์์ค๋ ๋ชจ๋ ์ญ์ ํ๊ธธ ๋ฐ๋๋๋ค. ๋น์ฉ์ด ์ฒญ๊ตฌ๋ ์ ์์ต๋๋ค.โ ๏ธ
์ด๋ฒ์ ์์ฑํ ๋ฆฌ์์ค๋ค์ EC2 ์ฝ์์ด๋ ELB ์ฝ์, ๊ทธ๋ฆฌ๊ณ RDS ์ฝ์์์ ํ์ธํ ์ ์์ต๋๋ค.
ํน์๋ผ๋ ์์ฑ๋ฒํผ์ ๋๋ฅธ ๊ธฐ์ต์ด ์๋๋ฐ ์ฌ๊ธฐ ์ฝ์ ๋ฆฌ์คํธ์ ์๋ค๋ฉด ์ฐ์ธก ์๋จ์ ๋ฆฌ์ ์ ๋ฐ๊พธ์ด๊ฐ๋ฉฐ ํ์ธ ๋ฐ๋๋๋ค. ์ด์ธ์ ๋ฆฌ์์ค(s3, target group, security group)๋ ๊ณผ๊ธ์ด ๋์ง ์์ ์์ ์ด๋ ๊ฑฑ์ ํ์ง ์์ผ์ ๋ ๊ด์ฐฎ์ต๋๋ค.
EC2 ์ฝ์์ ์ ์ํฉ๋๋ค.
์ธ์คํด์ค ํญ๋ชฉ์ ํด๋ฆญํฉ๋๋ค.
์ธ์คํด์ค ์์์ ํด๋ฆญํฉ๋๋ค.
Ubuntu 18.04๋ฅผ ์ ํํฉ๋๋ค.
T2.micro๋ฅผ ์ ํํฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ์ ๊ทธ๋๋ก ๋๊ณ ๋ค์๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
ํฌ๊ธฐ๋ฅผ 16 GiB๋ก ์์ ํ๊ณ ๋ค์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
ํ๊ทธ๋ ์ง์ ํ๋ ์ต๊ด์ ๊ฐ์ ธ์ผํฉ๋๋ค.
๋์ค์ ์๋น์ค๊ฐ ๋ค์ํด์ง ๊ฒฝ์ฐ ํ๊ทธ๋ก ์๋น์ค๋ค์ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ํ๊ทธ๋ช : Name
- ๊ฐ: YjdWorkshop
๋ณด์ ๊ทธ๋ฃน(Security Group) ์ค์ ์ ํ์์ ์ ๋๋ค.
AWS ์์ VPC ๋คํธ์ํฌ์ ์์ฑ๋๋ ๋ฆฌ์์ค๋ ๋ณด์ ๊ทธ๋ฃน ์ค์ ์ด ํ์ํฉ๋๋ค.
๋ฐ๋์ ํ์ํ ํฌํธ(Port)์ ์์ดํผ๋ง ํธ๋ํฝ์ ํ์ฉํฉ๋๋ค.
์ฌ์ฉํ์ง ์๋ ํฌํธ๋ ์ ๋ ์ค์ ํ์ง ์์ต๋๋ค.
์ค์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ณด์ ๊ทธ๋ฃน ์ด๋ฆ: YjdEC2SG
- ์ค๋ช : YJD Codelab EC2 Security Group
- ํฌํธ ์ค์
- TCP 22(ssh): ๋ด IP
- TCP 8080: ์์น ๋ฌด๊ด
์์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๊ณ "ํคํ์ด ๋ค์ด๋ก๋" ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
AWS์ EC2๋ ์ผ๋ฐ์ ์ผ๋ก ์์ด๋/ํจ์ค์๋ ํํ๋ก ๋ก๊ทธ์ธํ์ง ์์ต๋๋ค. EC2๋ Public Key๋ฅผ ๊ฐ์ง๊ณ ์๊ณ Private Key๋ฅผ ๊ฐ์ง ์ฌ๋๋ง์ด ๋ก๊ทธ์ธํ ์ ์์ต๋๋ค. ํคํ์ด๋ AWS์์ ๊ด๋ฆฌํ๋ ํค์์ ๋๋ค. ์์ฑํ๊ณ ๋ค์ด๋ก๋ํ์ฌ ๋ถ์คํ์ง ์๋๋ก ์ฃผ์ํฉ๋๋ค. ๋ถ์คํ๋ ์๊ฐ ์ด์ํ๋ ์๋น์ค๋ ์ํํด์ง ๊ฒ์ ๋๋ค.
"์ธ์คํด์ค ์์" ๋ฒํผ์ ๋๋ฌ ์์ฑ์ ์๋ฃํฉ๋๋ค.
๋จผ์ EC2์ PUBLIC DNS ๋๋ IP ์ฃผ์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ฐ์ ๋ณต์ฌํด๋ก๋๋ค.
Ubuntu์ SSH๋ก ์ ์ํ๊ธฐ ์ํด์ SSH-Client๊ฐ ํ์ํฉ๋๋ค.
์ ์ํ๋ ๋ฐฉ๋ฒ์ Linux๊ณ์ด๊ณผ Windows ๊ณ์ด์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์ ์ํ๊ธฐ ์ ์ ๋ค์ด๋ก๋ํ ํคํ์ผ์ ๊ถํ์ ์์ ํด์ผํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก ์์ ํฉ๋๋ค. 'KEY_FILE_DIR/KEY_FILE.pem'์ ํด๋น ํ์ผ์ ๋๋๊ทธํ์ฌ ํฐ๋ฏธ๋์ ๋๋กญ์ํค๋ฉด ๋ฐ๋ก ์ ๋ ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
$ chmod 600 KEY_FILE_DIR/KEY_FILE.pemTerminal์ ์ด์ด ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.
$ ssh -i KEY_FILE_DIR/KEY_FILE.pem ubuntu@EC2_PUBLIC_DNS_URL๋จผ์ Git bash๋ฅผ ์ค์นํฉ๋๋ค. Git์ ์ค์นํ ๋ ์ต์ ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค.
Git bash terminal์ ์ด์ด ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค. 'KEY_FILE_DIR/KEY_FILE.pem'์ ํด๋น ํ์ผ์ ๋๋๊ทธํ์ฌ ํฐ๋ฏธ๋์ ๋๋กญ์ํค๋ฉด ๋ฐ๋ก ์ ๋ ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
$ ssh -i KEY_FILE_DIR/KEY_FILE.pem ubuntu@EC2_PUBLIC_DNS_URLUbuntu ์๋ฒ์ ์ ์ํ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด Node.js๋ฅผ ์ค์นํฉ๋๋ค.
$ sudo apt update
$ sudo apt install nodejs
$ sudo apt install npm๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์์ค์ฝ๋๋ฅผ ๋ฐ์์ค๊ณ Node.js ์๋ฒ๋ฅผ ์คํ์์ผ์ค์๋ค.
$ git clone https://github.com/novemberde/aws-start-guide-for-beginner.git
$ cd aws-start-guide-for-beginner/sample-server
$ npm install
$ node app.js์๋ฒ๊ฐ ์คํํ๋ ๊ฒ์ ํ์ธํ ํ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ด ํด๋น ํ์ด์ง์ ์ ๊ทผํฉ๋๋ค.
EC2_PUBLIC_DNS_URL:8080 ์ผ๋ก ์ ์ํ์๋ฉด ๋ฉ๋๋ค.
$ cd ~/aws-start-guide-for-beginner/upload-server
$ npm install
$ export BUCKET_NAME=BUCKET_NAME_ON_S3
$ node app.js- AWS IAM Role: AWS๋ด์์ Resource ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํจ
- AWS IAM User: ์ธ๋ถ์์ AWS์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํจ
RDS ์ฝ์๋ก ์ด๋ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ ๋ฒํผ์ ๋๋ฆ ๋๋ค.
MySQL์ ์ ํํ๊ณ MySQL 8.x.x ๋ฒ์ ์ ์ ํํฉ๋๋ค.
ํ ํ๋ฆฟ์ผ๋ก ํ๋ฆฌํฐ์ด๋ฅผ ์ ํํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
- DB ์ธ์คํด์ค ์๋ณ์: YjdInstance
- ๋ง์คํฐ ์ฌ์ฉ์ ์ด๋ฆ: yjd_master
- ๋ง์คํฐ ์ํธ: pwd12341234
๋ค์๊ณผ ๊ฐ์ด ํผํ๋ฆญ ์์ธ์ค๋ฅผ ํ์ฉํ๊ณ VPC ๋ณด์ ๊ทธ๋ฃน์ ์๋ก ์์ฑํฉ๋๋ค.
- ํผํ๋ฆญ ์์ธ์ค ๊ฐ๋ฅ: ์
- VPC ๋ณด์ ๊ทธ๋ฃน: ์๋ก ์์ฑ
- ์ VPC ๋ณด์ ๊ทธ๋ฃน ์ด๋ฆ: YjdRdsSG
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌํธ: 3306
์ถ๊ฐ ๊ตฌ์ฑ์ ๋๋ถ๋ถ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๊ณ ํ ๊ฐ์ง ์ค์ ๋ง ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ: db
์ด์ ์ ์์ฑํ EC2๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํฉ๋๋ค.
์์ฑํ ํ ์๋์ ๊ฐ์ ํ๋ฉด์์ ์ค์ ๋ ๋ณด์๊ทธ๋ฃน์ ํด๋ฆญํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ์ธํ์ 'YjdEC2SG'๋ฅผ ์ ๋ ฅํ๋ฉด EC2๋ฅผ ์์ฑํ ๋ ๋ง๋ Security Group์ด ๋ํ๋๋๋ฐ, ์ด๋ฅผ ์ ํํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- TCP 3306
- ์ฌ์ฉ์ ์ง์ : YjdEC2SG
๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์์ ์๋ํฌ์ธํธ ๋ถ๋ถ์ ๋ณต์ฌํฉ๋๋ค.
EC2๋ก ๋ค์ ์ ์ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๊ณ DB์์ ์ ์์ด ์ผ์ด๋๋์ง ํ์ธํฉ๋๋ค. AURORA_WRITE_ENDPOINT๋ก ๋ฐฉ๊ธ ๋ณต์ฌํ ์๋ํฌ์ธํธ ๊ฐ์ ๋ฃ์ด์ค๋๋ค.
$ export MYSQL_HOST=MYSQL_ENDPOINT
$ cd ~/aws-start-guide-for-beginner/aurora-server
$ npm install
$ node app.js
Server is running at 8080
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER auto_increment , `username` VARCHAR(255), `birthday` DATETIME, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `users`์ค๋ ์์ฑํ ๋ฆฌ์์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ง์ ์ฝ์๋ก ๋ค์ด๊ฐ์ ์ญ์ ํ์ฌ ์ฃผ์ธ์.















