# 환경 변수

> .env 파일을 사용해 Daki Hosting에서 애플리케이션의 환경 변수를 설정하는 방법.

환경 변수를 사용하면 Discord 봇 토큰이나 API 키 같은 설정 값을 소스 코드에 직접 적지 않고 애플리케이션에 전달할 수 있어요. Daki Hosting에서는 Portal의 파일 관리자나 SFTP로 서버에 **`.env` 파일**을 직접 만드는 방법을 권장해요.

## 배울 내용

- 환경 변수가 무엇이고 왜 중요한지
- 서버에 `.env` 파일을 만드는 방법
- Node.js와 Python에서 `.env` 값을 불러오는 방법
- 시크릿을 안전하게 보관하는 모범 사례

---

## 환경 변수란 무엇인가요?

환경 변수는 실행 중인 애플리케이션이 실행 환경에서 읽을 수 있는 키-값 쌍이에요. 다음 용도로 쓰는 표준 방법이에요:

- 민감한 값(토큰, API 키, 비밀번호)을 코드와 분리해서 보관
- 소스 파일을 수정하거나 다시 배포하지 않고 설정 변경
- 시크릿이 버전 관리에 커밋되는 것을 방지

---

## `.env` 파일 만들기

Daki에서 환경 변수를 관리하는 가장 간단하고 안정적인 방법은 서버에 `.env` 파일을 만드는 거예요. 두 가지 방법이 있어요:

### 방법 1: 파일 관리자 사용하기 (간단한 편집)

1. Portal([portal.daki.cc](https://portal.daki.cc))에서 서버를 여세요.
2. **Files** 탭으로 이동하세요.
3. **New File**을 클릭하고 이름을 `.env`로 지정하세요.
4. 파일을 클릭해서 웹 편집기로 열고 변수를 추가하세요:
   ```
   BOT_TOKEN=your_discord_bot_token_here
   PORT=3000
   DATABASE_URL=your_db_connection_string
   ```
5. **Save**를 클릭하세요.
6. 서버를 재시작하세요.

### 방법 2: SFTP 사용하기 (초기 설정에 권장)

SFTP로 서버에 연결하고(자격 증명은 **Settings** 탭에 있어요) 로컬 컴퓨터의 `.env` 파일을 직접 업로드하세요. SFTP 설정 방법은 [파일 관리자](https://daki.cc/ko/wiki/guides/file-manager)를 참고하세요.

> **주의:** `.env` 파일을 공개 Git 저장소에 절대 커밋하지 마세요. 시크릿이 실수로 노출되지 않도록 `.gitignore` 파일에 `.env`를 추가하세요.

---

## 애플리케이션에서 `.env` 값 불러오기

애플리케이션은 `.env` 파일을 자동으로 읽지 않아요 — 파일을 환경으로 불러올 라이브러리가 필요해요.

**Node.js (dotenv)**

패키지를 설치하세요(`package.json`에 의존성으로 추가):
```json
{
  "dependencies": {
    "dotenv": "^16.0.0"
  }
}
```
진입 파일의 맨 위에서 불러오세요:
```js
require('dotenv').config();

const token = process.env.BOT_TOKEN;
const port  = process.env.PORT || 3000;
```

**Python (python-dotenv)**

`requirements.txt`에 `python-dotenv`를 추가하세요:
```
python-dotenv
```
진입 파일의 맨 위에서 불러오세요:
```python
from dotenv import load_dotenv
import os

load_dotenv()

token = os.environ.get("BOT_TOKEN")
port  = int(os.environ.get("PORT", 3000))
```

---

## `.env` 파일 형식

`.env` 파일의 각 줄은 `KEY=VALUE` 형식을 따라요:

```

# Comments start with a hash

BOT_TOKEN=your_token_here

API_KEY=some_api_key

DB_HOST=localhost

DB_PORT=5432

DEBUG=false

```
- 키는 보통 대문자와 밑줄을 사용해요.
- 값에는 따옴표가 필요하지 않지만, 따옴표도 지원돼요.
- `#`으로 시작하는 줄은 주석이며 무시돼요.

---

## 모범 사례

- **토큰이나 시크릿을 소스 코드에 하드코딩하지 마세요**, 특히 코드가 GitHub에 있다면 더더욱요.
- **`.env`를 `.gitignore`에 추가하세요.** 그래야 실수로 커밋되지 않아요.
- **`.env` 파일은 로컬이 아니라 서버에서 만드세요** — 또는 버전 관리에서 제외한 로컬 `.env`를 SFTP로 업로드하세요.
- `.env` 파일을 만들거나 수정한 뒤에는 **서버를 재시작하세요**.
- 설정이 스스로 설명되도록 **알아보기 쉬운 키 이름**을 사용하세요.

---

## 다음 단계

- [시작 설정](https://daki.cc/ko/wiki/guides/startup-settings) — 설치 명령, 시작 명령, Docker 이미지를 설정하세요.
- [Discord.js 봇 배포하기](https://daki.cc/ko/wiki/guides/deploy-discordjs) — 토큰 설정을 포함한 전체 배포 과정이에요.
- [Python 봇 배포하기](https://daki.cc/ko/wiki/guides/deploy-python) — 토큰 설정을 포함한 전체 배포 과정이에요.

---
Source: https://daki.cc/ko/wiki/guides/environment-variables
