๋ชฉ์ฐจ
- ์ฝ๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ฐ๋ฉด ์๊ธฐ๋ ์ผ
- ํ๊ฒฝ๋ณ์๋ ๋ฌด์์ธ๊ฐ?
- ๋ฆฌ๋ ์ค์์ ํ๊ฒฝ๋ณ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- .env ํ์ผ๋ก ํ๊ฒฝ๋ณ์ ๊ด๋ฆฌํ๊ธฐ
- ํ๊ฒฝ๋ณ์๋ฅผ ์ ๋ GitHub์ ์ฌ๋ฆฌ๋ฉด ์ ๋๋ ์ด์
- ์๋น์ค๋ณ ํ๊ฒฝ๋ณ์ ์ค์ ๋ฐฉ๋ฒ
- ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
1. ์ฝ๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ฐ๋ฉด ์๊ธฐ๋ ์ผ
๊ฐ๋ฐ์ ์ฒ์ ๋ฐฐ์ธ ๋ ์๋์ฒ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๋ฐ๋ฒํธ๋ฅผ ์ฝ๋์ ์ง์ ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
const db = mysql.connect({
host: 'localhost',
user: 'root',
password: 'mypassword123'
});
์ด ์ฝ๋๋ฅผ GitHub์ ์ฌ๋ฆฌ๋ฉด ๊ณต๊ฐ ์ ์ฅ์๋ผ๋ฉด ์ ์ธ๊ณ ๋๊ตฌ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋น๊ณต๊ฐ ์ ์ฅ์๋ผ๋ ์ค์๋ก ๊ณต๊ฐ๋ก ๋ฐ๊พธ๋ ์๊ฐ ๋ ธ์ถ๋ฉ๋๋ค. ์ค์ ๋ก GitHub์ ์ฌ๋ผ๊ฐ AWS ์ก์ธ์ค ํค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๋ฐ๋ฒํธ๊ฐ ์๋ถ ๋ด์ ์ ์ฉ๋๋ ์ฌ๋ก๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ํ๊ฒฝ๋ณ์์ ๋๋ค.
2. ํ๊ฒฝ๋ณ์๋ ๋ฌด์์ธ๊ฐ?
**ํ๊ฒฝ๋ณ์(Environment Variable)**๋ ์ด์์ฒด์ ์์ค์์ ์ ์ฅ๋๋ ํค-๊ฐ ์์ ๋ณ์์ ๋๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์ด ๋ณ์๋ฅผ ์ฝ์ด์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฝ๋์ ์ง์ ์ฐ์ง ์๊ณ ์ธ๋ถ์์ ์ฃผ์ ํ ์ ์์ต๋๋ค.
์ฌ์ด ๋น์ ๋ก ์ค๋ช ํ๋ฉด, ํ๊ฒฝ๋ณ์๋ ๋ฐฐ์ฐ๊ฐ ๋์ฌ๋ฅผ ๋งํ๊ธฐ ์ ์ ์คํํ์๊ฒ ์ ๋ฌ๋ฐ๋ ์ชฝ์ง์ ๊ฐ์ต๋๋ค. ๋๋ณธ(์ฝ๋)์๋ "๋น๋ฐ๋ฒํธ ์ ๋ ฅ" ์๋ฆฌ๋ง ํ์ํด๋๊ณ , ์ค์ ๋น๋ฐ๋ฒํธ๋ ๊ณต์ฐ ์ง์ ๋ณ๋๋ก ์ ๋ฌ๋ฐ๋ ๋ฐฉ์์ ๋๋ค.
3. ๋ฆฌ๋ ์ค์์ ํ๊ฒฝ๋ณ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
ํ์ฌ ์ค์ ๋ ๋ชจ๋ ํ๊ฒฝ๋ณ์๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
printenv
ํน์ ํ๊ฒฝ๋ณ์ ๊ฐ๋ง ํ์ธํ ๋๋ ๋ณ์๋ช ์์ $๋ฅผ ๋ถ์ ๋๋ค.
echo $HOME
ํ๊ฒฝ๋ณ์๋ฅผ ํ์ฌ ์ธ์ ์๋ง ์์๋ก ์ค์ ํ ๋๋ export๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํฐ๋ฏธ๋์ ๋ซ์ผ๋ฉด ์ฌ๋ผ์ง๋๋ค.
export DB_PASSWORD=mypassword123
์๊ตฌ์ ์ผ๋ก ์ค์ ํ๋ ค๋ฉด ~/.bashrc ํ์ผ์ ์ด์ด ๋งจ ์๋์ ์ถ๊ฐํฉ๋๋ค.
sudo nano ~/.bashrc
ํ์ผ ์์ ์๋์ ๊ฐ์ด ์์ฑํ๊ณ ์ ์ฅํฉ๋๋ค.
export DB_PASSWORD=mypassword123
export DB_HOST=localhost
์ ์ฅ ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ์ ์ฉํฉ๋๋ค.
source ~/.bashrc
4. .env ํ์ผ๋ก ํ๊ฒฝ๋ณ์ ๊ด๋ฆฌํ๊ธฐ
์ฌ๋ฌ ๊ฐ์ ํ๊ฒฝ๋ณ์๋ฅผ ๊ด๋ฆฌํ ๋๋ .env ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ .env ํ์ผ์ ๋ง๋ค๊ณ ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=mypassword123
DB_NAME=myapp
SECRET_KEY=mysecretkey
AWS_ACCESS_KEY=AKIAXXXXXXXX
Node.js์์๋ dotenv ํจํค์ง๋ฅผ ์ฌ์ฉํด .env ํ์ผ์ ์ฝ์ด์ต๋๋ค.
require('dotenv').config();
const dbPassword = process.env.DB_PASSWORD;
์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋ ์ด๋์๋ ์ค์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ค์ด๊ฐ์ง ์์ต๋๋ค.
5. ํ๊ฒฝ๋ณ์๋ฅผ ์ ๋ GitHub์ ์ฌ๋ฆฌ๋ฉด ์ ๋๋ ์ด์
.env ํ์ผ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ชจ์๋๋ค๋ฉด, ์ด ํ์ผ์ด GitHub์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ๋ฐ๋์ .gitignore ํ์ผ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. .gitignore ํ์ผ์ ์๋ ์ค์ ์ถ๊ฐํฉ๋๋ค.
.env
.env.local
.env.production
์ด๋ฏธ GitHub์ .env ํ์ผ์ ์ฌ๋ ธ๋ค๋ฉด ๋จ์ํ ํ์ผ์ ์ญ์ ํ๋ค๊ณ ํด๊ฒฐ๋์ง ์์ต๋๋ค. Git์ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๋ณด์กดํ๊ธฐ ๋๋ฌธ์, ์ด์ ์ปค๋ฐ์ ํตํด ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํด๋น ๋น๋ฐ๋ฒํธ์ ํค๋ฅผ ์ฆ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
6. ์๋น์ค๋ณ ํ๊ฒฝ๋ณ์ ์ค์ ๋ฐฉ๋ฒ
systemd๋ก ๊ด๋ฆฌํ๋ ์๋น์ค์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฃผ์ ํ ๋๋ ์๋น์ค ํ์ผ์ ํธ์งํฉ๋๋ค.
sudo systemctl edit ์๋น์ค๋ช
ํธ์ง๊ธฐ๊ฐ ์ด๋ฆฌ๋ฉด ์๋ ํํ๋ก ์ถ๊ฐํฉ๋๋ค.
[Service]
Environment="DB_PASSWORD=mypassword123"
Environment="SECRET_KEY=mysecretkey"
AWS๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Parameter Store๋ Secrets Manager๋ฅผ ํ์ฉํ๋ฉด ํ๊ฒฝ๋ณ์๋ฅผ ๋ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ํ ๋จ์ ํ๋ก์ ํธ๋ผ๋ฉด ์ด๋ฐ ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ ์์ ํฉ๋๋ค.
7. ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
์ค๋ ๋ฐฐ์ด ํต์ฌ์ ์ ๋ฆฌํฉ๋๋ค.
- ํ๊ฒฝ๋ณ์๋ ์ฝ๋ ์ธ๋ถ์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํ๋ก๊ทธ๋จ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๋ฐ๋ฒํธ, API ํค ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ ๋ ์ฝ๋์ ์ง์ ์จ์๋ ์ ๋ฉ๋๋ค.
- .env ํ์ผ์ ํ๊ฒฝ๋ณ์๋ฅผ ๋ชจ์ ๊ด๋ฆฌํ๊ณ , ๋ฐ๋์ .gitignore์ ์ถ๊ฐํด GitHub์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ํฉ๋๋ค.
- ์ด๋ฏธ GitHub์ ์ฌ๋ ธ๋ค๋ฉด ํด๋น ๋น๋ฐ๋ฒํธ์ ํค๋ฅผ ์ฆ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
๋ค์ ๊ธ์์๋ ๋ฆฌ๋ ์ค ํ๋ก์ธ์ค ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ๋ฐฉ๋ฒ – nohup๊ณผ & ์ฐจ์ด๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.