inspeep

GitHub์— .env๋ฅผ ์˜ฌ๋ ธ๋‹ค๋ฉด? API ํ‚ค ์œ ์ถœ ๋Œ€์‘๋ถ€ํ„ฐ ์žฌ๋ฐœ ๋ฐฉ์ง€๊นŒ์ง€

์กฐํšŒ ์ˆ˜ 12
์ถ”์ฒœ ์ˆ˜ 0
๋Œ“๊ธ€ 0

FastAPI๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ GitHub Actions๋กœ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ API ํ‚ค๋ฅผ ์–ด๋””์— ์ €์žฅํ• ์ง€ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต์€ .env ํŒŒ์ผ์— ๋„ฃ์ง€๋งŒ, ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋น„๋ฐ€์ด ๋ณดํ˜ธ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Git์— ํ•จ๊ป˜ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๋กœ๊ทธ์— ์ถœ๋ ฅํ•˜๋ฉด ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ฒ˜์Œ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ์€ โ€œํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์˜ฌ๋ฆฌ๋ฉด ํ•ด๊ฒฐ๋˜๊ฒ ์ง€โ€๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ๊ฐ’์„ ์ง€์šฐ๋Š” ์ผ๊ณผ ๋…ธ์ถœ๋œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ์ผ์€ ์„œ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ทธ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ์ด๋ฏธ ์ถ”์  ์ค‘์ธ ํŒŒ์ผ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์„ค์ • ์˜ˆ์ œ๊นŒ์ง€ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

๋Œ€์ƒ ๋…์ž: Git๊ณผ GitHub๋กœ ๊ฐœ์ธ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž. ๋ช…๋ น์–ด๋Š” ์ €์žฅ์†Œ ์ตœ์ƒ์œ„ ํด๋”์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—๋Š” ์‹ค์ œ ์ธ์ฆ ์ •๋ณด ๋Œ€์‹  ๊ฐ€์ƒ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



1. .env์™€ .gitignore๋Š” ๊ฐ๊ฐ ๋ฌด์—‡์„ ํ• ๊นŒ?

.env๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. Python ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณ„๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์‹คํ–‰ ๋„๊ตฌ๊ฐ€ ์ด๋ฅผ ์ฝ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์„ .env๋กœ ์ •ํ–ˆ๋‹ค๊ณ  ์ž๋™์œผ๋กœ ์•”ํ˜ธํ™”๋˜๊ฑฐ๋‚˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์ฝ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒˆ์—ญ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ดํŠธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ค์ •์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TRANSLATION_API_KEY=DEMO_VALUE_NOT_A_REAL_KEY
DATABASE_URL=postgresql://demo_user:demo_password@localhost/demo_db

์œ„ ๊ฐ’์€ ์„ค๋ช…์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ์ธ์ฆ ์ •๋ณด ์ž์ฒด๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์— ์“ฐ์ง€ ์•Š๊ณ , ๋กœ์ปฌ ์„ค์ •์ด๋‚˜ ์„œ๋ฒ„์˜ ๋น„๋ฐ€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ•œํŽธ .gitignore๋Š” Git์ด ์•„์ง ์ถ”์ ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฌด์‹œํ•  ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ถ”์  ์ค‘์ธ ํŒŒ์ผ์—๋Š” ์†Œ๊ธ‰ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .env๋ฅผ ๋จผ์ € ์ปค๋ฐ‹ํ•œ ๋’ค .gitignore์— ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด, ์—ฌ์ „ํžˆ ์ถ”์  ์ค‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.[1]

์„ค์ • ๋˜๋Š” ์ž‘์—…ํ•˜๋Š” ์ผํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ์ผ
.env ์‚ฌ์šฉ์‹คํ–‰ ์„ค์ •์„ ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌํŒŒ์ผ ์ž์ฒด ์•”ํ˜ธํ™”, Git ์—…๋กœ๋“œ ์ฐจ๋‹จ
.gitignore ์ถ”๊ฐ€๋ฏธ์ถ”์  ํŒŒ์ผ์ด ์ผ๋ฐ˜์ ์ธ ์ถ”๊ฐ€ ๊ณผ์ •์—์„œ ํฌํ•จ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€์ด๋ฏธ ์ถ”์ ๋œ ํŒŒ์ผ ์ œ๊ฑฐ
git rm --cachedํŒŒ์ผ์„ Git ์ธ๋ฑ์Šค์—์„œ ์ œ๊ฑฐ๊ณผ๊ฑฐ ์ปค๋ฐ‹ ์‚ญ์ œ, ์ธ์ฆ ์ •๋ณด ํ๊ธฐ
ํ‚ค ํ๊ธฐยท์žฌ๋ฐœ๊ธ‰๋…ธ์ถœ๋œ ์ธ์ฆ ์ •๋ณด์˜ ์‚ฌ์šฉ์„ ์ฐจ๋‹จํ•˜๊ณ  ์ƒˆ ๊ฐ’์œผ๋กœ ๊ต์ฒด์ €์žฅ์†Œ ๊ธฐ๋ก ์ •๋ฆฌ


2. ์ด๋ฏธ ์—…๋กœ๋“œํ–ˆ๋‹ค๋ฉด ํŒŒ์ผ ์‚ญ์ œ๋ณด๋‹ค ํ‚ค ๋Œ€์‘์ด ์šฐ์„ ์ด๋‹ค

์‹ค์ œ ์ธ์ฆ ์ •๋ณด๊ฐ€ ๊ณต๊ฐœ ์ €์žฅ์†Œ์— ์˜ฌ๋ผ๊ฐ”๋‹ค๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋ณต์‚ฌํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GitHub๋„ ์œ ์ถœ๋œ ๋น„๋ฐ€ ์ •๋ณด๋Š” ์†์ƒ๋œ ๊ฒƒ์œผ๋กœ ๋ณด๊ณ  ์ ์ ˆํžˆ ๋Œ€์‘ํ•˜๋ผ๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์ปค๋ฐ‹์—์„œ ์ง€์šฐ๊ฑฐ๋‚˜ ์ €์žฅ์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ‚ค์˜ ์•…์šฉ์„ ๋ง‰์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.[2]

์šฐ์„  ์„œ๋น„์Šค ์ œ๊ณต์ž์˜ ๊ด€๋ฆฌ ํ™”๋ฉด์—์„œ ์–ด๋–ค ํ‚ค๊ฐ€ ๋…ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ API ํ† ํฐ์ธ์ง€, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ์ธ์ง€์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ์œ„์น˜์™€ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์„œ๋น„์Šค๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ•œ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๊ณต์œ ํ•œ๋‹ค๋ฉด ๊ต์ฒด ๋Œ€์ƒ๋„ ํ•จ๊ป˜ ๋ชฉ๋ก์œผ๋กœ ์ •๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‘ ๊ณผ์ •์—์„œ๋Š” ๋‹ค์Œ ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜์„ธ์š”.

  1. ๋…ธ์ถœ๋œ ํ‚ค์˜ ์ข…๋ฅ˜, ๊ถŒํ•œ, ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ํ™•์ธ
  2. ์ œ๊ณต์ž์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๊ธฐ์กด ํ‚ค ํ๊ธฐ ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
  3. ์ƒˆ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์™€ ์ž๋™ ๋ฐฐํฌ ์„ค์ •์— ๋ฐ˜์˜
  4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žฌ์‹œ์ž‘ ๋˜๋Š” ์žฌ๋ฐฐํฌ ํ›„ ์ •์ƒ ์—ฐ๊ฒฐ ํ™•์ธ
  5. ์ œ๊ณต์ž์˜ ์‚ฌ์šฉ ๊ธฐ๋ก์—์„œ ์˜ˆ์ƒ ๋ฐ– ํ˜ธ์ถœ์ด๋‚˜ ์ ‘๊ทผ ํ™•์ธ

ํ™œ์„ฑ ์ƒํƒœ์ธ ์šด์˜ ํ‚ค๊ฐ€ ๊ณต๊ฐœ๋๋‹ค๋ฉด ์‹ ์†ํ•œ ํ๊ธฐ๊ฐ€ ์šฐ์„ ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ค‘๋‹จ ๋•Œ๋ฌธ์— ๊ต์ฒด ์ˆœ์„œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ƒˆ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ ์šฉํ•œ ๋’ค ๊ธฐ์กด ํ‚ค๋ฅผ ํ๊ธฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋™์•ˆ ๊ธฐ์กด ํ‚ค๊ฐ€ ์œ ํšจํ•˜๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GitHub๋„ ์„œ๋น„์Šค ์˜์กด์„ฑ๊ณผ ์ค‘๋‹จ ์˜ํ–ฅ์„ ํ•จ๊ป˜ ํ‰๊ฐ€ํ•˜๋„๋ก ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.[2]

๋˜ํ•œ API ํ‚ค๋ฅผ ๋ฐ”๊ฟจ๋‹ค๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๊นŒ์ง€ ๋ฐ”๋€Œ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. .env์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์—ˆ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ๊ต์ฒด ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



3. ๋‚ด .env๊ฐ€ Git์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

VS Code ํ„ฐ๋ฏธ๋„์—์„œ ์ €์žฅ์†Œ ์ตœ์ƒ์œ„ ํด๋”๋ฅผ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

git ls-files -- .env

์ถœ๋ ฅ์— .env๊ฐ€ ๋‚˜์˜ค๋ฉด ํ˜„์žฌ Git ์ธ๋ฑ์Šค์— ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ๋‚˜์˜ค์ง€ ์•Š๋”๋ผ๋„ โ€œ๊ณผ๊ฑฐ์— ํ•œ ๋ฒˆ๋„ ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜๋‹คโ€๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ˜„์žฌ ์ถ”์  ์ƒํƒœ์™€ ๊ณผ๊ฑฐ ๊ธฐ๋ก์€ ๋”ฐ๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋กœ์˜ ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ์‚ดํŽด๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git log --all --oneline -- .env

์ด ๋ช…๋ น์€ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์žˆ๋Š” ์ฐธ์กฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ๋ก์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณด๊ด€ํ•œ ๋ณต์‚ฌ๋ณธ์ด๋‚˜ ๋ชจ๋“  ์›๊ฒฉ ๊ธฐ๋ก์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ณด์•ˆ ์ ๊ฒ€ ๋„๊ตฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๊ฑฐ๋‚˜ ํ‚ค๊ฐ€ ๋‹ค๋ฅธ ํŒŒ์ผ์—๋„ ๋“ค์–ด๊ฐ”๋‹ค๋ฉด ๊ทธ ์œ„์น˜๋„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ ํ•จ๊ป˜ ํ™•์ธํ•˜์„ธ์š”.

git status --short

๋ฏผ๊ฐํ•œ ๊ฐ’์„ ์ฐพ์•„๋‚ธ ํ™”๋ฉด์„ ์ปค๋ฎค๋‹ˆํ‹ฐ ์งˆ๋ฌธ์ด๋‚˜ ๋ธ”๋กœ๊ทธ์— ์ฒจ๋ถ€ํ•  ๋•Œ๋Š” ์‹ค์ œ ๊ฐ’์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๊ณ  ์˜ฌ๋ฆฐ ์Šคํฌ๋ฆฐ์ƒท์ด ๋˜ ๋‹ค๋ฅธ ๋…ธ์ถœ ๊ฒฝ๋กœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



4. ๋กœ์ปฌ ํŒŒ์ผ์€ ๋‚จ๊ธฐ๊ณ  Git ์ถ”์ ๋งŒ ์ค‘๋‹จํ•˜๊ธฐ

๋จผ์ € .gitignore์— ์•„๋ž˜ ๊ทœ์น™์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.

.env
.env.*
!.env.example

.env.*๋Š” .env.local, .env.production ๊ฐ™์€ ์ด๋ฆ„์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์€ ์„ค์ • ํ•ญ๋ชฉ์„ ๊ณต์œ ํ•˜๋Š” .env.example์„ ์˜ˆ์™ธ๋กœ ๋‘ก๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ ํŒŒ์ผ์—๋„ ์‹ค์ œ ํ‚ค๋ฅผ ๋„ฃ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.[1]

์ด๋ฏธ ์ถ”์  ์ค‘์ธ .env๋ผ๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

git rm --cached -- .env

--cached๋Š” ํŒŒ์ผ์„ Git ์ธ๋ฑ์Šค์—์„œ๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ์ž‘์—… ํด๋”์˜ ํŒŒ์ผ์€ ๋‚จ๊ธฐ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ git rm .env์™€ ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ ์Šคํ…Œ์ด์ง•๋œ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ช…๋ น์ด ๊ฑฐ์ ˆ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ๋ณ€๊ฒฝ ์ƒํƒœ๋ฅผ ๋จผ์ € ํ™•์ธํ•˜์„ธ์š”.[3]

์ดํ›„ .gitignore ๋ณ€๊ฒฝ์„ ์Šคํ…Œ์ด์ง•ํ•˜๊ณ  ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

git add .gitignore
git diff --cached --stat
git commit -m "Stop tracking local environment file"

์ด๋ฏธ ๋‹ค๋ฅธ ์ž‘์—…์„ ์Šคํ…Œ์ด์ง•ํ–ˆ๋‹ค๋ฉด ์œ„ ์ปค๋ฐ‹์— ํ•จ๊ป˜ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ์ „์— ๋ชฉ๋ก์„ ํ™•์ธํ•˜์„ธ์š”. ์ƒ์„ธ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋Š” git diff --cached๋Š” ์‚ญ์ œ๋˜๋Š” ์‹ค์ œ ํ‚ค๊นŒ์ง€ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ™”๋ฉด ๊ณต์œ ๋‚˜ ๊ณต๊ฐœ ๋กœ๊ทธ์—์„œ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค.[4]

๋งˆ์ง€๋ง‰์œผ๋กœ ์ถ”์  ์—ฌ๋ถ€์™€ ๋ฌด์‹œ ๊ทœ์น™์„ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

git ls-files -- .env
git check-ignore -v .env

์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์€ ์ถœ๋ ฅ์ด ์—†์–ด์•ผ ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์€ ์ ์šฉ๋œ ๋ฌด์‹œ ๊ทœ์น™์˜ ํŒŒ์ผ๊ณผ ์ค„์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. git check-ignore๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”์  ์ค‘์ธ ํŒŒ์ผ์„ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธํ•˜๋ฏ€๋กœ ์ถ”์  ์ค‘๋‹จ ํ›„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.[5]

.env.production ๋“ฑ ๋‹ค๋ฅธ ํŒŒ์ผ๋„ ์ด๋ฏธ ์ถ”์  ์ค‘์ด์—ˆ๋‹ค๋ฉด ๊ฐ๊ฐ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .env ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ–ˆ๋‹ค๊ณ  ๋ชจ๋“  ์„ค์ • ํŒŒ์ผ์ด ์ œ์™ธ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.



5. ๊ฐ€์ƒ ํ‚ค๋กœ ํ™•์ธํ•œ ์‹ค์Šต ๊ฒฐ๊ณผ

์œ„ ํ•ต์‹ฌ ๋™์ž‘์€ Linux ํ™˜๊ฒฝ์˜ Git 2.51.1์—์„œ ์ƒˆ ์ž„์‹œ ์ €์žฅ์†Œ์™€ ๊ฐ€์ƒ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค์˜ ํ‚ค ์œ ์ถœ ์‚ฌ๊ณ ๋‚˜ ์šด์˜ ๋ณต๊ตฌ ์‚ฌ๋ก€๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์‹ค์Šต์—์„œ๋Š” .env๋ฅผ ๋จผ์ € ์ปค๋ฐ‹ํ•˜๊ณ , ์ดํ›„ .gitignore๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋‹ค์Œ ์ถ”์  ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  git rm --cached๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ™•์ธ ์‹œ์ ํ™•์ธ ๊ฒฐ๊ณผ์˜๋ฏธ
.gitignore ์ถ”๊ฐ€ ์งํ›„git ls-files์— .env ์ถœ๋ ฅ์ด๋ฏธ ์ถ”์ ๋œ ํŒŒ์ผ์€ ๊ณ„์† ํฌํ•จ๋จ
git rm --cached ์‹คํ–‰ ์งํ›„git ls-files ์ถœ๋ ฅ ์—†์Œํ˜„์žฌ ์ธ๋ฑ์Šค์—์„œ ์ œ๊ฑฐ๋จ
์ž‘์—… ํด๋” ํ™•์ธ.env ํŒŒ์ผ ์กด์žฌ๋กœ์ปฌ ์„ค์ • ํŒŒ์ผ์€ ์œ ์ง€๋จ
git check-ignore -v .env.gitignore 1๋ฒˆ ์ค„์˜ .env ๊ทœ์น™ ์ถœ๋ ฅ์ดํ›„ ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ ์ถ”๊ฐ€์—์„œ ๋ฌด์‹œ๋จ
์ถ”์  ์ค‘๋‹จ์„ ์ปค๋ฐ‹ํ•œ ๋’ค.env์˜ ๊ณผ๊ฑฐ ์ปค๋ฐ‹ ๊ธฐ๋ก ์กด์žฌํ˜„์žฌ ํŒŒ์ผ ์ œ๊ฑฐ์™€ ๊ธฐ๋ก ์ œ๊ฑฐ๋Š” ๋ณ„๊ฐœ์ž„
Git 2.51.1 ์ž„์‹œ ์ €์žฅ์†Œ์—์„œ ๊ฐ€์ƒ ํ‚ค๋กœ ํ™•์ธํ•œ ์ถ”์  ์ƒํƒœ ๋ณ€ํ™”

*์ด๋ฏธ์ง€: ์œ„ ์‹ค์Šต์—์„œ ํ™•์ธํ•œ ๋ช…๋ น ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ์žฌ๊ตฌ์„ฑํ•œ ๋„ํ‘œ. ์‹ค์ œ ์ธ์ฆ ์ •๋ณด๋Š” ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.*

์ด ์‹ค์Šต์ด ๋ณด์—ฌ ์ฃผ๋Š” ํ•ต์‹ฌ์€ .gitignore์˜ ์ ์šฉ ์‹œ์ ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ, ์ด๋ฏธ ์ปค๋ฐ‹ํ•œ ํŒŒ์ผ์— ๋‚˜์ค‘์— ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

6. ๊ณผ๊ฑฐ ์ปค๋ฐ‹์—์„œ๋„ ์ง€์›Œ์•ผ ํ• ๊นŒ?

์ถ”์ ์„ ์ค‘๋‹จํ•˜๊ณ  ์ƒˆ ์ปค๋ฐ‹์„ ๋งŒ๋“ค๋”๋ผ๋„ ์ด์ „ ์ปค๋ฐ‹์—๋Š” ํŒŒ์ผ์ด ๋‚จ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด git-filter-repo ๊ฐ™์€ ๋„๊ตฌ๋กœ ๊ธฐ๋ก์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ธฐ๋ก ์žฌ์ž‘์„ฑ์€ ์ปค๋ฐ‹ ์‹๋ณ„์ž๋ฅผ ๋ฐ”๊พธ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ธŒ๋žœ์น˜๋‚˜ ๋ณต์‚ฌ๋ณธ์—๋„ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.[6]

๊ทธ๋ž˜์„œ ํ˜‘์—… ์ €์žฅ์†Œ์— ์ผ๋ฐ˜์ ์ธ ๊ฐ•์ œ ํ‘ธ์‹œ ๋ช…๋ น์„ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋…ธ์ถœ๋œ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ฌดํšจํ™”ํ•˜๊ณ , ์–ด๋–ค ๋ธŒ๋žœ์น˜ยทํƒœ๊ทธยท๋ณต์‚ฌ๋ณธ์— ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ์ •๋ฆฌ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜์„ธ์š”.

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์„ ๋‚ด ์ชฝ์—์„œ ์ง€์šธ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํฌํฌ์— ๋‚จ์€ ๊ธฐ๋ก๋„ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก ์ •๋ฆฌ๋Š” ๋…ธ์ถœ๋œ ์ •๋ณด์˜ ์ž”์กด์„ ์ค„์ด๋Š” ์ž‘์—…์ด๋ฉฐ, ํ‚ค ํ๊ธฐ๋ฅผ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.[6]


7. .env.example๊ณผ ๋ฐฐํฌ์šฉ Secrets๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ

๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋‚˜ ๋ฏธ๋ž˜์˜ ์ž์‹ ์—๊ฒŒ ํ•„์š”ํ•œ ์„ค์ • ํ•ญ๋ชฉ์„ ์•Œ๋ ค์ฃผ๋ ค๋ฉด .env.example์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

TRANSLATION_API_KEY=
DATABASE_URL=
APP_ENV=development

์ด ํŒŒ์ผ์€ โ€œ๋ฌด์—‡์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€โ€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฐ’์€ ๊ฐ์ž์˜ ๋กœ์ปฌ .env๋‚˜ ์„œ๋ฒ„ ์„ค์ •์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ์—๋Š” ๊ฐ ํ•ญ๋ชฉ์˜ ์—ญํ• ๊ณผ ๋ฐœ๊ธ‰ ์œ„์น˜๋ฅผ ์ ์œผ๋ฉด ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

GitHub Actions์—์„œ ๋น„๋ฐ€ ๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์— ์ง์ ‘ ์ ๊ธฐ๋ณด๋‹ค Secrets๋กœ ๋“ฑ๋กํ•˜๊ณ  ํ•„์š”ํ•œ ๋‹จ๊ณ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์ „๋‹ฌ ๋ฐฉ์‹๋งŒ ๋ณด์—ฌ ์ฃผ๋Š” ๋ถ€๋ถ„ ์˜ˆ์ œ์ด๋ฉฐ ์™„์„ฑ๋œ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.[7]

steps:
  - name: Check required configuration
    env:
      TRANSLATION_API_KEY: ${{ secrets.TRANSLATION_API_KEY }}
    run: python -c "import os; assert os.environ.get('TRANSLATION_API_KEY'), 'Required secret is missing'"

์ด ์˜ˆ์ œ๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. GitHub Actions ๋‹จ๊ณ„์— ์ „๋‹ฌํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์šด์˜ ์„œ๋ฒ„์— ์ž๋™์œผ๋กœ ์˜๊ตฌ ์ €์žฅ๋˜๋Š” ์„ค์ •์ด ์•„๋‹™๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์‹œ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐํฌ ํ™˜๊ฒฝ์—๋„ ๋ณ„๋„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ๋งˆ์Šคํ‚น๋งŒ ๋ฏฟ๊ณ  ํ‚ค๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ๋งˆ์„ธ์š”. GitHub๋Š” ๊ตฌ์กฐํ™”๋œ ๊ฐ’์ด๋‚˜ ๋ณ€ํ˜•๋œ ๊ฐ’ ๋“ฑ์—์„œ ๋น„๋ฐ€ ์ •๋ณด์˜ ๋งˆ์Šคํ‚น์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ์ถœ๋œ ์‹คํ–‰ ๋กœ๊ทธ๋„ ์‚ญ์ œํ•˜๊ณ  ํ‚ค๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.[8]


8. ์ปค๋ฐ‹ ์ „์— ํ™•์ธํ•  ์ตœ์†Œ ์Šต๊ด€

๋งค๋ฒˆ ๊ธด ๋ณด์•ˆ ์ ๊ฒ€์„ ํ•˜๋Š” ๋Œ€์‹ , ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๋Š” ์ˆœ๊ฐ„์— ํ™•์ธํ•  ํ•ญ๋ชฉ์„ ์ •ํ•ด ๋‘๋ฉด ์‹ค์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

  • ์‹ค์ œ ์„ค์ • ํŒŒ์ผ๊ณผ ์˜ˆ์ œ ์„ค์ • ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๊ตฌ๋ถ„ํ–ˆ๋Š”๊ฐ€?
  • ์ปค๋ฐ‹ ๋Œ€์ƒ์— .env, ๊ฐœ์ธ ํ‚ค, ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด ์žˆ๋Š”๊ฐ€?
  • ๋””๋ฒ„๊น… ์ฝ”๋“œ๊ฐ€ ์„ค์ •๊ฐ’ ์ „์ฒด๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๊ฐ€?
  • ๋ฌธ์„œ๋‚˜ ์Šคํฌ๋ฆฐ์ƒท์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š์€๊ฐ€?
  • ์šด์˜ ์„œ๋ฒ„์™€ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ฐ™์€ ํ‚ค๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๊ฐ€?

VS Code์˜ ์†Œ์Šค ์ œ์–ด ํ™”๋ฉด์—์„œ ์ปค๋ฐ‹ ๋Œ€์ƒ ํŒŒ์ผ์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. โ€œ์„ค์ • ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€โ€์™€ โ€œ์„ค์ •๊ฐ’์ด ์ฝ”๋“œ์— ์ง์ ‘ ๋“ค์–ด ์žˆ๋Š”์ง€โ€๋Š” ๋”ฐ๋กœ ํ™•์ธํ•˜์„ธ์š”. ํŒŒ์ผ ์ด๋ฆ„๋งŒ ์•ˆ์ „ํ•ด ๋ณด์—ฌ๋„ ๋‚ด์šฉ์— ์‹ค์ œ ํ‚ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q. .gitignore๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ .env๊ฐ€ ๊ณ„์† ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์ถ”์  ์ค‘์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. git ls-files -- .env๋กœ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹นํ•˜๋ฉด git rm --cached -- .env๋กœ ์ถ”์ ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ํ‚ค๊ฐ€ ๋…ธ์ถœ๋˜์—ˆ๋‹ค๋ฉด ํ‚ค ํ๊ธฐยท๊ต์ฒด๋„ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Q. private ์ €์žฅ์†Œ๋ผ๋ฉด ์‹ค์ œ ํ‚ค๋ฅผ ๋„ฃ์–ด๋„ ๊ดœ์ฐฎ์„๊นŒ์š”?

private ์ €์žฅ์†Œ๋Š” ์ ‘๊ทผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜์ง€๋งŒ ๋น„๋ฐ€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜‘์—…์ž์˜ ๋ณต์‚ฌ๋ณธ์ด๋‚˜ ์ž๋™ํ™” ๊ณผ์ •์—๋„ ๊ฐ’์ด ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ํ‚ค๋ฅผ ์†Œ์Šค์— ๋„ฃ์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.

Q. ์ƒˆ ์ปค๋ฐ‹์—์„œ ํ‚ค๋ฅผ ์ง€์› ์œผ๋‹ˆ ๊ธฐ์กด ํ‚ค๋ฅผ ๊ณ„์† ์จ๋„ ๋ ๊นŒ์š”?

์ด๋ฏธ ๋…ธ์ถœ๋˜์—ˆ๋‹ค๋ฉด ๊ณ„์† ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ํŒŒ์ผ์—์„œ ๊ฐ’์„ ์ง€์›Œ๋„ ๋ˆ„๊ตฐ๊ฐ€ ํ™•๋ณดํ•œ ๊ฐ’๊นŒ์ง€ ๋ฌดํšจํ™”๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ œ๊ณต์ž์˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์œผ๋กœ ๊ธฐ์กด ๊ฐ’์„ ํ๊ธฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Q. .env.example์€ GitHub์— ์˜ฌ๋ ค๋„ ๋˜๋‚˜์š”?

๋นˆ ๊ฐ’์ด๋‚˜ ์ธ์ฆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์˜ˆ์‹œ ๊ฐ’๋งŒ ๋“ค์–ด ์žˆ๋‹ค๋ฉด ์„ค์ • ์•ˆ๋‚ด์šฉ์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ํ† ํฐ์ด๋‚˜ ์šด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

Q. git rm --cached ๋ช…๋ น์—์„œ ํŒŒ์ผ์ด ์—†๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค.

์ถ”์  ์ค‘์ธ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ ์‹คํ–‰ ์œ„์น˜ยทํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ ์ตœ์ƒ์œ„ ํด๋”์—์„œ git ls-files -- .env๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ์ถ”์ ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ์— ํ•ด๋‹น ๋ช…๋ น์„ ๋ฐ˜๋ณตํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

API ํ‚ค ๊ด€๋ฆฌ์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์€ ํŒŒ์ผ ์ด๋ฆ„ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘์—… ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์„ค์ • ํŒŒ์ผ์„ ์ถ”์  ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ณ , ๋ฐฐํฌ ํ™˜๊ฒฝ์—๋Š” ํ•„์š”ํ•œ ๋น„๋ฐ€ ๊ฐ’๋งŒ ์ „๋‹ฌํ•˜๋ฉฐ, ๋…ธ์ถœ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ธฐ์กด ์ธ์ฆ ์ •๋ณด์˜ ์‚ฌ์šฉ๋ถ€ํ„ฐ ์ฐจ๋‹จํ•˜์„ธ์š”.

์ฐธ๊ณ  ์ž๋ฃŒ

๊ธฐ์ˆ  ์„ค๋ช…์€ ๋‹ค์Œ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ ํ™•์ธ์ผ: 2026๋…„ 10์›” 1์ผ. ๋ช…๋ น ๊ฒ€์ฆ ๋ฒ”์œ„๋Š” ์œ„์— ๋ช…์‹œํ•œ ์ž„์‹œ ์ €์žฅ์†Œ์˜ Git ๋™์ž‘์ด๋ฉฐ, ๊ฐ ์™ธ๋ถ€ ์„œ๋น„์Šค์˜ ํ‚ค ๊ต์ฒด๋‚˜ ์šด์˜ ์„œ๋ฒ„ ๋ฐฐํฌ๋Š” ๊ฒ€์ฆ ๋ฒ”์œ„์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  1. Git โ€” gitignore
  2. GitHub โ€” Remediating a leaked secret in your repository
  3. Git โ€” git rm
  4. Git โ€” git diff
  5. Git โ€” git check-ignore
  6. GitHub โ€” Removing sensitive data from a repository
  7. GitHub โ€” Using secrets in GitHub Actions
  8. GitHub โ€” Secure use reference

๐Ÿ’ฌ ๋Œ“๊ธ€ 0๊ฐœ

IT ๊ฒŒ์‹œํŒ

๊ณต์ง€
Notice
๊ณต์ง€ inspeep ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด์šฉ ๋ฐ ๊ฒŒ์‹œ๋ฌผ ๊ด€๋ฆฌ ๊ทœ์ • ์•ˆ๋‚ด
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.04.15 ๐Ÿ‘€ ์กฐํšŒ 57 ๐Ÿ‘ ์ถ”์ฒœ 0
BEST
์ธ๋„ค์ผ
BEST 2. ์ฝ”๋”ฉ ๋ฌธ์™ธํ•œ์˜ ์›Œ๋“œํ”„๋ ˆ์Šค ์ •๋ณต๊ธฐ: VS Code์™€ FTP์˜ ์Šต๊ฒฉ
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.03.05 ๐Ÿ‘€ ์กฐํšŒ 135 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
๋ง๋„ ์•ˆ ๋˜๋Š” ๊ตญ์‚ฐ 1์ธ๊ฐœ๋ฐœ ์œ ์‚ฌ ๋ฐœ๋ผํŠธ๋กœ
๐Ÿ‘ค Cyan ๐Ÿ“… 2026.05.22 ๐Ÿ‘€ ์กฐํšŒ 20 ๐Ÿ‘ ์ถ”์ฒœ 0
์ผ๋ฐ˜
์ธ๋„ค์ผ
์‹ ๋ฐ•ํ•œ ai๋ณ„ ์—‰๋ฉ์ด ๋•Œ๋ฆฌ๋ฉด ๋ฐ˜์‘
๐Ÿ‘ค Cyan ๐Ÿ“… 2026.05.14 ๐Ÿ‘€ ์กฐํšŒ 6 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์ƒ์ƒ์ดˆ์›” EU ๋ฐฐํ„ฐ๋ฆฌ ๊ต์ฒด ์Šค๋งˆํŠธํฐ ์˜๋ฌดํ™”๋ž˜
๐Ÿ‘ค ๋ฃธ๋””๋ฅด ๐Ÿ“… 2026.05.09 ๐Ÿ‘€ ์กฐํšŒ 17 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
๋ˆˆ๋ฌผ ์™ ๋นผ๋Š” ์ค‘์„œ์šด ์ด์•ผ๊ธฐ) ์ •์ฒด๋ถˆ๋ช…์˜ ์œˆ๋„์šฐ ์ฐฝ
๐Ÿ‘ค ๋ฆฌํ† ํƒ€ ๐Ÿ“… 2026.05.06 ๐Ÿ‘€ ์กฐํšŒ 21 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์˜ˆ์‚ฌ๋กญ์ง€ ์•Š์€ ์˜ค๋ฒ„ ํด๋Ÿญํ•˜๋‹ค๊ฐ€ ์ปดํ“จํ„ฐ ํ„ฐ์ง„ ์ฐ ํ‘ผ๋‹ค...txt
๐Ÿ‘ค ํ‹ฐ์ง€๋…ธ์•„ ๐Ÿ“… 2026.05.04 ๐Ÿ‘€ ์กฐํšŒ 28 ๐Ÿ‘ ์ถ”์ฒœ 0
์žก๋‹ด
์ธ๋„ค์ผ
ํ™˜์žฅํ•˜๋Š” S26 ์šธํŠธ๋ผ ๋””์Šคํ”Œ๋ ˆ์ด ์ •๋ณด ๋ฐ ์•ฝ๊ฐ„์˜ ํ›„๊ธฐ
๐Ÿ‘ค ํฌํ‹ฐ๋ฆฌ์ฆˆ ๐Ÿ“… 2026.05.03 ๐Ÿ‘€ ์กฐํšŒ 22 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ๊ธฐ
No Image
๊ฐœ๋ฐœ๊ธฐ
No Image
16. ์™„๋ฒฝ์ฃผ์˜์˜ ํ•จ์ •๊ณผ AI ๊ธฐํš
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.03.20 ๐Ÿ‘€ ์กฐํšŒ 76 ๐Ÿ‘ ์ถ”์ฒœ 0
« ์ฒ˜์Œ ‹ ์ด์ „ 1 2 3 4 5 6 7 ๋‹ค์Œ › ๋ »
โœ๏ธ ๊ธ€์“ฐ๊ธฐ