๐ง ์ํฉ
๊ฒฝํ์ฐจ ์บก์คํค ๋์์ธ์ ์ฌ์ฉํ ์๋ฒ๋ฅผ Node.js - Docker - AWS ElasticBeanstalk์ผ๋ก ๋ฐฐํฌํ๊ณ ์ ํ๋ค.
Dockerfile์ด๋ผ๋๊ฐ ๋ฐฐํฌ๋ฅผ ์ํ .yml ํ์ผ ๋ค ๋ง๊ฒ ํ ๊ฒ ๊ฐ์๋ฐ EB์๋ง ์ฌ๋ฆฌ๋ฉด ์คํ์ด ๋์ง ์์๋ค.
๐ป ๋ฌธ์
์ถ์ธก๋๋ ์์ธ์ ๋ค์๊ณผ ๊ฐ์๋ค.
1. Node.js ํ๋ก์ ํธ ์์ฒด๊ฐ ์๋ชป๋์๋ค.
2. Docker ์ด๋ฏธ์ง๊ฐ ์๋ชป ๋น๋๋์๋ค.
3. DockerHub์ ์๋ ์ด๋ฏธ์ง๋ฅผ EB์์ pull ํ์ง ๋ชปํ๋ค.
4. EB๊ฐ Docker ์ด๋ฏธ์ง ๋๋ Node.js ํ๋ก์ ํธ๋ฅผ ์คํํ์ง ๋ชปํ๋ค.
1. Node.js ํ๋ก์ ํธ ์์ฒด๊ฐ ์๋ชป๋์๋ค. โ
๋ก์ปฌ์์ npm start๋ก ํ๋ก์ ํธ๋ฅผ ์คํํ์ ๋ ๋ฌธ์ ์์ด ์คํ๋์๊ธฐ ๋๋ฌธ์ ์ ์ธ
2. Docker ์ด๋ฏธ์ง๊ฐ ์๋ชป ๋น๋๋์๋ค. โ


๋ก์ปฌ๋ก ๋น๋ ํ ์คํํ์ ๋ ๋ก์ปฌ 8080 ํฌํธ๋ก ์ ์ํ์ ๋ ์ ์คํ์ด ๋์๋ค.
3. DockerHub์ ์๋ ์ด๋ฏธ์ง๋ฅผ EB์์ pull ํ์ง ๋ชปํ๋ค. โ
์ด๊ฑธ ํ์ธํ๋ ค๋ฉด EB์์ ์์ฑํ EC2 ์ฝ์์ ์ ์ํ๋๊ฐ ํด์ผํ ๊ฒ ๊ฐ์๋ฐ ๊ท์ฐฎ์์(...) 4๋ฒ๋ถํฐ ํ์ธํ๊ณ ๋ค์ ์ค๊ธฐ๋ก ํ๋ค.
4. EB๊ฐ Docker ์ด๋ฏธ์ง ๋๋ Node.js ํ๋ก์ ํธ๋ฅผ ์คํํ์ง ๋ชปํ๋ค.
Docker ์ด๋ฏธ์ง๋ผ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ ์ถ์ด์ EB๋ฅผ Node.js์ฉ์ผ๋ก ๋ค์ ์์ฑํด์ ์๋์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ ๋ก๋ ํด๋ดค๋๋ฐ ์ฌ์ ํ ์คํ๋์ง ์์๋ค. Docker ์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์์ npm install์ ์คํํ๋ฏ๋ก ๋ชจ๋ ์ค์น์ ๋ฌธ์ ๋ ์๋ ๊ฑฐ ๊ฐ๊ณ .. npm install์ด ๋์ผ๋ฉด ๊ฐ์ Dockerfile์ ์๋ npm start ๋ช ๋ น์ด๋ ์คํ์ด ๋์ํ ๋ฐ ๋ฌด์จ ์ด์ ์์ ์ง npm start ๋ช ๋ น์ด ์ ๋๋ก ์คํ๋์ง ์๋ ๊ฒ ๊ฐ์๋ค.
{
"name": "ci_test",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon index.js"
},
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"express": "^4.19.2",
"http-status-codes": "^2.3.0"
},
"devDependencies": {
"nodemon": "^3.1.4"
},
"type": "module"
}
๋ค์์ CI ํ
์คํธ๋ฅผ ์ํด ๋ง๋ ํ๋ก์ ํธ์ package.json์ด๋ค. npm start๋ nodemon index.js๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
ํ๋ก์ ํธ๊ฐ ์คํ์ด ์ ๋๋ ๊ฒ์ด๋ผ๋ฉด nodemon index.js๋ผ๋ ๋ช
๋ น์ด๊ฐ ์ ๋๋ก ๋์ํ์ง ์์์์ ์๋ฏธํ๋ค.
๊ฐ์๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฒ๊ทธ๊ฐ ๋ ๋ฆฌ๋ ์์ผ๋ฏ๋ก Docker ์ด๋ฏธ์ง ์์์ nodemon ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๊ฐ ๋์ง ์์๋ค๊ณ ๋ด์ผํ๋ค.
nodemon์ devDependencies ์์ ์๋ค. ๋ก์ปฌ์์ ์ด๋ฏธ์ง๋ฅผ ์คํํ์ ๋ ์ ๋์ผ๋๊น ๋ค๋ฅธ ๋ชจ๋๋ค์ ์ ์ค์น๊ฐ ๋๋ค๊ณ ๋ณด๊ณ ๊ทธ๋ฅ dependencies ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์น๊ฐ ๋๊ณ devDependencies ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์น๊ฐ ๋์ง ์์ ๊ฒ์ด๋ผ ๊ฐ์ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ๋๋ ์๊ฐ์.. npm install์ devDependencies ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ์ง ์๋๊ฐ?
์ผ๋ฐ์ ์ผ๋ก npm install์ devDependencies ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํ๋ค. ๋ค๋ง NODE_ENV ํ๊ฒฝ๋ณ์๊ฐ production์ด๋ผ๋ฉด devDependencies๋ ๋ฌด์ํ๋ค. EB์ ํ๊ฒฝ์ ์์ฑํ ๋ ๋ด๊ฐ ๋ฐ๋ก ์ถ๊ฐํ ํ๊ฒฝ๋ณ์๋ ์์ผ๋ฏ๋ก AWS ElasticBeanstalk ์์ฒด์ ์ค์ ์ ์ดํด๋ดค๋ค.

...
๊ทธ๋ ๋ค. ์ ์ด์ devDependencies๋ ์ค์น๊ฐ ๋์ง ์๋ ๊ฒ์ด์๋ค.

๋๋ ๊ทธ๋ผ ๋ฌด์ผ ์ํ ์ฝ์ง์ ํ ๊ฑด์ง... ์ฐธ๋
๐ ํด๊ฒฐ
devDependencies ํจํค์ง๋ฅผ ์ค์นํ์ง ์๋ ๊ฒ์ด ๋ฌธ์ ์ด๋ฏ๋ก ๋ ๊ฐ์ง ์ ํ์ง๊ฐ ์๋ค.
1. Dockerfile์ nodemon์ ์ค์นํ๋ ์ปค๋งจ๋๋ฅผ ์ถ๊ฐํ๋ค.
2. package.json์ npm start script๋ฅผ ์์ ํ๋ค.
๋ ์ค ์ด๋ค ๊ฒ์ ๊ณจ๋ผ๋ ์ด๋ ต์ง๋ ์์ง๋ง EB์ ์ฌ๋ฆฌ๋ ๊ฒ์ api ํ์ธ์ด ๋๋ ์๋ฒ์ด๋ฏ๋ก ๊ตณ์ด nodemon์ด ํ์ํ์ง ์๋ค๋ ์๊ฐ์ด ๋ค์ด 2๋ฒ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๊ธฐ๋ก ํ์๋ค.
{
"_comment": "์์ ์ ",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon index.js"
}
},
{
"_comment": "์์ ํ",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
}
}
nodemon์์ ๋จ ์ธ ๊ธ์๋ฅผ ๋บ๋ค..ใ
์ด์ nodemon์ ๋ฐ๋ก ์ค์นํ ํ์๊ฐ ์๋ค.
๋ค์ Github Action์ ํตํด EB์ ๋ฐฐํฌ๋ฅผ ํด๋ณด๋ฉด,

๋ค์๊ณผ ๊ฐ์ด ์ ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!
์ด๋ ๊ฒ ๊ฐ๋จํ ๊ฑธ๋ก ๋ฉฐ์น ์ ๊ณ ์ํ๊ฑด์ง..
๊ตฌ๊ธ๋ง๋ ๊ตฌ๊ธ๋ง์ด์ง๋ง ๊ฐ๋ฐ ๋ฌธ์๋ ์ ์ฝ์ด๋ด์ผ๊ฒ ๋ค.
npm-install | npm Docs
Install a package
docs.npmjs.com
์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ ํญ๋ชฉ ๊ตฌ์ฑ - AWS Elastic Beanstalk
AL2023์์ ์คํ๋๋ Node.js ํ๋ซํผ ๋ธ๋์น์์๋ ๋ฒ์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. AL2023 ๊ธฐ๋ฐ์ ํน์ Node.js ๋ธ๋์น ๋ด์์๋ ํ๋์ Node.js ๋ฒ์ ๋ง ์ง์ํฉ๋๋ค. package.json ํ์ผ์ด
docs.aws.amazon.com
'Tools > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์น์ 1. AWS ํด๋ผ์ฐ๋ ์๋น์ค ์ค์ต๊ณผ ๋ณด์ ์ดํด (0) | 2024.06.06 |
|---|---|
| ์น์ 0. ํด๋ผ์ฐ๋ ์๋น์ค ๊ฐ๋ ๊ณผ ๋ณด์ ์ดํด (0) | 2024.06.06 |
| ElastiCache Redis ๊ณผ๊ธ (0) | 2024.02.13 |