GitHub์ .env๋ฅผ ์ฌ๋ ธ๋ค๋ฉด? API ํค ์ ์ถ ๋์๋ถํฐ ์ฌ๋ฐ ๋ฐฉ์ง๊น์ง
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 ํ ํฐ์ธ์ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๋ฐ๋ฒํธ์ธ์ง์ ๋ฐ๋ผ ๋ณ๊ฒฝ ์์น์ ์ํฅ์ ๋ฐ๋ ์๋น์ค๊ฐ ๋ฌ๋ผ์ง๋๋ค. ํ ํค๋ฅผ ์ฌ๋ฌ ์๋ฒ๊ฐ ๊ณต์ ํ๋ค๋ฉด ๊ต์ฒด ๋์๋ ํจ๊ป ๋ชฉ๋ก์ผ๋ก ์ ๋ฆฌํด์ผ ํฉ๋๋ค.
๋์ ๊ณผ์ ์์๋ ๋ค์ ํญ๋ชฉ์ ํ์ธํ์ธ์.
- ๋ ธ์ถ๋ ํค์ ์ข ๋ฅ, ๊ถํ, ์ฐ๊ฒฐ๋ ์๋น์ค ํ์ธ
- ์ ๊ณต์์ ๊ธฐ๋ฅ์ผ๋ก ๊ธฐ์กด ํค ํ๊ธฐ ๋๋ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
- ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์๋ ๋ฐฐํฌ ์ค์ ์ ๋ฐ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์ ๋๋ ์ฌ๋ฐฐํฌ ํ ์ ์ ์ฐ๊ฒฐ ํ์ธ
- ์ ๊ณต์์ ์ฌ์ฉ ๊ธฐ๋ก์์ ์์ ๋ฐ ํธ์ถ์ด๋ ์ ๊ทผ ํ์ธ
ํ์ฑ ์ํ์ธ ์ด์ ํค๊ฐ ๊ณต๊ฐ๋๋ค๋ฉด ์ ์ํ ํ๊ธฐ๊ฐ ์ฐ์ ์ ๋๋ค. ์๋น์ค ์ค๋จ ๋๋ฌธ์ ๊ต์ฒด ์์๊ฐ ํ์ํ๋ค๋ฉด ์ ํค๋ฅผ ๋ฐ๊ธํ๊ณ ์ ์ฉํ ๋ค ๊ธฐ์กด ํค๋ฅผ ํ๊ธฐํ ์ ์์ง๋ง, ๊ทธ๋์ ๊ธฐ์กด ํค๊ฐ ์ ํจํ๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. 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์ ๊ณผ๊ฑฐ ์ปค๋ฐ ๊ธฐ๋ก ์กด์ฌ | ํ์ฌ ํ์ผ ์ ๊ฑฐ์ ๊ธฐ๋ก ์ ๊ฑฐ๋ ๋ณ๊ฐ์ |

*์ด๋ฏธ์ง: ์ ์ค์ต์์ ํ์ธํ ๋ช ๋ น ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ธฐ ์ฝ๊ฒ ์ฌ๊ตฌ์ฑํ ๋ํ. ์ค์ ์ธ์ฆ ์ ๋ณด๋ ํฌํจํ์ง ์์์ต๋๋ค.*
์ด ์ค์ต์ด ๋ณด์ฌ ์ฃผ๋ ํต์ฌ์ .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 ๋์์ด๋ฉฐ, ๊ฐ ์ธ๋ถ ์๋น์ค์ ํค ๊ต์ฒด๋ ์ด์ ์๋ฒ ๋ฐฐํฌ๋ ๊ฒ์ฆ ๋ฒ์์ ํฌํจํ์ง ์์ต๋๋ค.
๐ฌ ๋๊ธ 0๊ฐ