- AWS
1-1. AWS EC2
1-2. AWS RDS
1-3. OurPlays WAS ๊ตฌ๋์ ์ํ ์ค๋น
AWS(Amazon Web Service)๋ ๊ฐ๋ฐํ Service์ ํ๊ฒฝ(application, Database...)์ WEB ์์ publish ํด์ฃผ๋ Service๋ก ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ด๊ฐ ๊ฐ๋ฐํ 1์ฐจ project ๊ฒฐ๊ณผ๋ฌผ(OurPlays WAS)์ WEB์์ ๋ฐฐํฌํ๊ธฐ ์ํด AWS์ EC2(Elastic Compute Cloud), RDS(Relational Database Service)๋ฅผ ์ฌ์ฉํ ๊ฒ ์ด๋ค.
EC2๋ ์ผ์ข ์ ๊ฐ์ ์ปดํจํฐ๋ก ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ์๋๋ฐ์ ์์ ์ application์ด๋ service๋ฅผ ์คํ ์ ์๋๋ก ์ง์ํ๋ Service์ด๋ค. ์ด ๊ฐ์์ปดํจํฐ์์ OurPlays WAS๊ฐ ์คํ๋ ๊ฒ์ด๋ค.
AWS์ ๊ณ์ ์ด ์๋ค๋ฉด AWS์์ EC2 Instance ์์ฑ๋ฒ์ ์์๋ณด์.
AWS์ ์ ์ํ์ฌ EC2 ์๋น์ค ํ๋ฉด์ ๋ค์ด๊ฐ๋ฉด ์์ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์๋ค. ํ๋ฉด ์ค์์ '์ธ์คํด์ค ์์' ๋ฒํผ์ ํตํด ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
์ฒ์์๋ project ํ๊ฒฝ์ ์ ํํด์ผ ํ๋ค. ๋๋ ubuntu ํ๊ฒฝ์์ ๊ฐ๋ฐํ์ผ๋ฏ๋ก ์์ฑํ instance๋ ubuntu๋ก ์ ํํ๋ค.
AMI ์ ํ์ ํ๋ฉด ์ ์ฒ๋ผ '์ ํ ์ ํ'ํ๋ฉด์ด ๋์ค๋๋ฐ ๊ฐ๋ฐ ํ ์คํธ์ฉ์ด๋ฏ๋ก ํ๋ฆฌํฐ์ด ์ต์ ์ธ ํญ๋ชฉ์ ์ ํ.
์ฌ๊ธฐ์ '์๋ธ๋ท' ๋ถ๋ถ์ open, ์ฒซ๋ฒ์งธ ํญ๋ชฉ์ ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ '์ฐ๋ฐ์ ์ธ ์ข ๋ฃ๋ก๋ถํฐ ๋ณดํธ'๋ฅผ check ํ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ์(์ถ๊ฐ์๊ธ ๋ฐ์๋๋ ์ต์ ์ ๋นํ์ฑํ)
์ ์ฅ๊ณต๊ฐ ์ค์ ๋จ๊ณ์ธ๋ฐ ํ ์คํธ์ฉ Instance ์ด๋ฏ๋ก default๋ก ํ๊ณ ๋์ด๊ฐ๋ค.
๋ค์ ๋จ๊ณ๋ Tag ์ค์ ์ธ๋ฐ ์ด๋ ๋น์ฉ ๊ด๋ฆฌ, AMI ์ ์ฑ ๊ถํ ์ง์ ๋ฑ์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ผ๋ก Instance ์ ์ํ๋ key์ value๊ฐ์ ์ ๋ ฅ ํ ๋์ด๊ฐ์.
'๋ณด์๊ทธ๋ฃน์ค์ ' ๋จ๊ณ์์ http/https ์ ์ ํ์ฉ์ ์ํด ๋ณด์ ๊ท์น์ ์ถ๊ฐํด์ผ ํ๋ค. ์ ์ด๋ฏธ์ง์ฒ๋ผ '์ฌ์ฉ์ ์ง์ TCP'๋ฅผ ์ถ๊ฐ, [ํฌํธ๋ฒ์]๋ 8000, [์์ค]๋ '์์น ๋ฌด๊ด'์ผ๋ก ํ๋ฉด ์ด๋๊ณณ์์๋ http/https ์ ์์ ํ์ฉํ๋ค.
๋ง์ง๋ง ๋จ๊ณ๋ก ์ง๊ธ๊น์ง ์ค์ ํ ๋ด์ฉ์ด ๋ง๋์ง ํ์ธ ํ ์์ฑ์ ์ฐจ๋ฅผ ๋์ ํ๋ค.
'์์ํ๊ธฐ'๋ฅผ ๋๋ฅด๋ฉด key-pair ๋ฅผ ๋ฐ๊ฒ ๋๋๋ฐ ์ด๋ EC2 ์ ์์ ์ฌ์ฉ๋๋ ํ์ผ์ด๋ฏ๋ก ์ ๊ด๋ฆฌํ์. ์ธ์คํด์ค๋ฅผ ์์ํ๋ฉด ์ด ํ AWS EC2 ํ๋ฉด์์ ์ด Instance์ ์ํ๋ฅผ ๋ณผ ์ ์๋ค.์ด์ Terminal์์ EC2 instance๋ก ์ ์ํด๋ณด์. ์ ์ ์ ๋จผ์ downloadํ pem ํ์ผ์ ๊ถํ์ ๋ฐ๊ฟ์ค์ผ ssh ์ ์์ด ๊ฐ๋ฅํ๋ฏ๋ก ํด๋น ํ์ผ ๊ถํ์ ์๋ ๋ช ๋ น์ผ๋ก ๋ฐ๊พธ์.
chmod 400 xxxx.pem
๊ทธ๋ฆฌ๊ณ ์๋์ฒ๋ผ ssh ๋ก ์ ์์ ์๋.
ssh -i {๋ฐ๊ธ๋ฐ์ pem ํ์ผ} ubuntu@{์ธ์คํด์ค public IP or DNS} # ubuntu ์์น๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ AMI ์ด๋ฆ์ด๋ค.
์ ์์ ์ผ๋ก ์ ์๋๋ฉด ์๋์ฒ๋ผ Terminal ์ ๋ ฅ๋ถ๋ถ ์ ๋ณด๊ฐ ๋ฐ๋๋ค.
RDS(Relational Database Service)๋ RDB ํ๊ฒฝ์ AWS์ ๊ตฌ์ถํ๊ณ ์ ๊ทผ ์ค์ ๋ฑ์ ํ ์ ์๋๋ก ์ง์ํ๋ Service์ด๋ค. OurPlays WAS๋ mysql์ ์ฌ์ฉํ๋ฏ๋ก RDS๋ก ๋ค์ด๊ฐ Database๋ฅผ ์์ฑ, ์ฑ์ฑ๋ Database์ EndPoint(์ ์์ฃผ์)๋ฅผ EC2์ OurPlays WAS ์ค์ ์ ๋ณด์ ๋ฃ์ด EC2์ RDS ์ฐ๋์ด ๋๋๋ก ํ๋ฉด ๋๋ค. ์ฐ์ AWS RDS ํ์ด์ง๋ก ๋ค์ด๊ฐ์.
์ ํ๋ฉด์์ ๋ด๊ฐ ์ด๋ฏธ ๋ง๋ค์ด ๋์ Database๊ฐ ์๋ค. ์ฐ์ธก ์๋จ์ '๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ'๋ฒํผ์ผ๋ก ์์ฑ์ ์์ํ๋ค.
๋๋ MySQL ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ์์ผ๋ฏ๋ก MySQL์ ์ ํํ๋ค.
Version๊ณผ ํ ํ๋ฆฟ, ์๋ณ์, ๋ก๊ทธ์ธํ ID/Password๋ฅผ ์ ๋ ฅํ์. ID๋ root์ผ๋ก ํ๊ณ Password๋ ๋ณด์์ ์ํด ๋ณต์กํ ํจํด์ ์ถ์ฒํ๋ค.
Database๊ฐ ์์ฑ๋์์ผ๋ฉด ์ ์ํด๋ณด์. Terminal์์ ์๋ ๋ช ๋ น์ ์คํํ๋ค.mysql -h {RDS endpoint} -u root -p
Password๋ฅผ ์ ์์ ์ผ๋ก ์ ๋ ฅํ๋ค๋ฉด RDS์ ์ ์ํ ์ ์๋ค.
์ฃผ์์ฌํญ
Database ์์ฑ์ 'ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน'์ ๋ํ ์ค์ ์ ์์ง ๋ง์.
characterset* ๊ฐ์ผ๋ก utf8mb4 ๋ก ์ค์ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์จ์ผ ํ๊ธ ๊นจ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด ํ๊ธ์ด ๊นจ์ง๋ค
EC2์ RDS ์ค๋น๊ฐ ๋๋ฌ์ผ๋ ๋จ์ ๊ฑด ๊ฐ๋ฐํ OurPlays WAS source๋ฅผ EC2์ Instance๋ก ๊ฐ์ ธ์ ์คํํ๋ฉด ๋๋ค. ์๋์ ๊ฐ์ ์์ ์ด ์งํ๋์๋ค.
- miniconda ์ค์น ๋ฐ ๊ฐ์ํ๊ฒฝ ๋ง๋ค๊ธฐ.
- 'git clone' ๋ช ๋ น์ผ๋ก source ๊ฐ์ ธ์ค๊ธฐ
- requirement.txt์ package ์ค์น
- OurPlays WAS ์คํ
์ ๊ณผ์ ์์ .gitignore ๋์์ธ ํ์ผ(my_settings.py, db_uploader.py) ๋ฐ ํด๋(data/)๋ ๋ด local pc์ ์๋ ๊ฒ์ EC2 Instance๋ก ๋ฃ์ด์ผ ํ๋ค.
์ด๋ฅผ ์ํด EC2 Instance๋ก ํ์ผ์ด๋ ํด๋๋ฅผ upload ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์ค ubuntu์์ ๊ธฐ๋ณธ ์ ๊ณตํ๋ 'scp' ๋ผ๋ ๊ธฐ๋ฅ์ ์๊ฒ ๋์๋ค. ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ๋ค.# scp ๋ช ๋ น์ด ๊ตฌ์กฐ scp -i {๋ฐ๊ธ๋ฐ์ pem ํ์ผ} -r {local path} ubuntu@{์ธ์คํด์ค public IP or DNS}:{remote path} # ๋ด ์์ ๊ธฐ์ค scp -i jinybear.pem -r ~/ourplays/14-folder/data/ ubuntu@xxx.xxx.xxx.xxx:~/14-folder/
์๋ ํด๋์ ๊ฒฝ์ฐ์ด๋ฉฐ ํ์ผ์ '-r' ์ต์ ์ ๋นผ๋ฉด ๋๋ค. ๋ง์ฝ EC2 Instance๋ก๋ถํฐ download๋ฅผ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ ์๋์ฒ๋ผ ์งํ.
scp -i {๋ฐ๊ธ๋ฐ์ pem ํ์ผ} -r ubuntu@{์ธ์คํด์ค public IP or DNS}:{remote path} {local path}
OurPlays WAS๋ฅผ ์คํํ ํ postman์ผ๋ก request test ๊ฒฐ๊ณผ ์ ์ ๋์ํจ์ ํ์ธํ์๋ค. ํ์ง๋ง ์์ง ํ ๊ฐ์ง๊ฐ ๋ ๋จ์๋ค. ๊ทธ๊ฒ์ shell์ close ํ๊ฑฐ๋ ํฐ๋ฏธ๋ ์ธ์ ์ ๋ซ์๋ WAS๊ฐ ๊ณ์ ์คํ๋์ด์ผ ํ๋ค๋ ์ ์ด๋ค.
(์ผ๋ฐ์ ์ผ๋ก ์คํํ๋ฉด shell ๋๋ Terminal์ ๋ซ์ ๋ ๊ฐ์ด ์ข ๋ฃํ๊ฒ ๋๋ค)background๋ก ์คํ๋๋๋ก ํด์ผ ํ๋ฏ๋ก ๊ด๋ จ ๊ธฐ๋ฅ์ ์ฐพ๋ ์ค 'nohup' ๋ช ๋ น์ ๋ฐ๊ฒฌ, ์๋์ ๊ฐ์ด ์คํํ์๋ค.
nohup python manage.py runserver 0:8000 & # nohup {WAS ์คํ ๋ช ๋ น} &
๋ง์นจ ๋์ ํ์ ํ๋ Frontend ๊ฐ๋ฐ์๋ก๋ถํฐ Frontend์ธก ๊ฐ์ ์์ ์ ์ํด OurPlays WAS์ ์ฐ๋ํ ์ ์๋์ง ์ฐ๋ฝ์ด ์๋ค. ๋๋ EC2 Instance์ 'public ip'๋ฅผ ์๋ ค์ฃผ์์ผ๋ฉฐ ์ฐ๋ฆฌ ๋์ ๋ง์กฑ์ค๋ฌ์ด ๋ํ๋ฅผ ๋๋ ์ ์๊ฒ ๋์๋ค. ^^