IT๊ธฐ์ดˆ

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€ – ์„œ๋ฒ„์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฝ”๋“œ์— ๋„ฃ์œผ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ 

๐Ÿฅ„ํ…Œํฌ ํ•œ ์Šคํ‘ผ 2026. 5. 28. 15:43

๋ชฉ์ฐจ

  1. ์ฝ”๋“œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์“ฐ๋ฉด ์ƒ๊ธฐ๋Š” ์ผ
  2. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  3. ๋ฆฌ๋ˆ…์Šค์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  4. .env ํŒŒ์ผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌํ•˜๊ธฐ
  5. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ ˆ๋Œ€ GitHub์— ์˜ฌ๋ฆฌ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ 
  6. ์„œ๋น„์Šค๋ณ„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋ฐฉ๋ฒ•
  7. ์ •๋ฆฌ ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„

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๊ณผ & ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.