A-lock env manager
npm install env-manage---
์ฌ๋ด env ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด๋ณธ ํด์ ๋๋ค.
๊ฐ๋ฐ ์ env๋ฅผ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ด๊ธฐํํ์ง ์๊ณ ์ปค๋งจ๋๋ก ์ฌ์์ฑํ์ฌ ์ ๋ฐ์ดํธ ํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
> ๊ฐ๋ฐ ํ๊ธฐ์ ๊ด๋ จํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๊ฐ์ธ ๋ธ๋ก๊ทธ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
- CLI ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด ์ด๊ธฐ ์ค์
- CLI ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด env ์์ฑ ๋ฐ ์
๋ฐ์ดํธ
---
- ํด๋น ๋ฒ์ ์ REST ํต์ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค
- ๊ธฐ๋ณธ ์ํฌํ๋ก์ฐ๋ ์๋์ ๊ฐ์ต๋๋ค

> ํด๋น ๊ตฌ์กฐ์ ๋ฐ๋ผ, ๋ณด์์ ์ผ๋ก ํ์๋๋ ์๋ฒ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
0. access token์ JWT๋ก ์์ฑํ๊ธฐ ์ํด ํ์ํ secret ๊ฐ.
ํด๋น secret์ ๊ฐ๋ฐ์๋ค์ด ๋์ธ๋น๋ก ์๊ณ ์์ด์ผ ํ๋ฉฐ, ์๋ฒ ์ธก์ ์ด secret์ ์ ์ฅํ๊ณ ์ด๊ฒ๊ณผ jwt ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ access token์ ์์ฑ ๋ฐ ๊ฒ์ฆํ๋ ๋ก์ง์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.

1. access token ๋ฐ๊ธ์ ์ํ Init Endpoint(-sve) (POST/Body ๋ด์ secret ๊ฐ ๊ฒ์ฆ ํ ์ผ์นํ๋ฉด jwtํ ํฐ์ ์์ฑํ์ฌ ์ ๋ฌ)

2. database ์กฐํ ํ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ค Generate Endpoint (POST/Body ๋ด์ repo ๊ฐ์ผ๋ก ๋ฐ์ดํฐ ํํฐ๋ง)
- ํด๋น endpoint๋ init ๋ ๋ฐ๊ธ๋ฐ์ access token์ ๊ฒ์ฆํ๋ ๋ก์ง ํ์ (๋ฏธ๋ค์จ์ด ๊ตฌ์กฐ ์ถ์ฒ)

- ํ ํฐ ๊ฒ์ฆ ๋ฏธ๋ค์จ์ด๋ฅผ ์์ฑํ ๋, access token์ Authorization Header์ ํตํด ์ ๋ฌ๋๋ฏ๋ก, ๊ฒ์ฆ middleware์์ ํด๋น header์ access token์ ๊ฒ์ฆํ๋๋ก ๊ตฌํํด์ผ ํจ

- generate endpoint๋ body์์ ์ ๋ฌ๋ฐ๋ "repo" ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํํฐ๋งํ์ฌ Env ๊ฐ์ ์กฐํํ๋ ๊ฒ์ ๊ถ์ฅํจ

- generate endpoint์์ response๋ก ์ ๋ฌํด์ค์ผ ํ env ๋ฆฌ์คํธ๋ ๊ทธ ๊ฐ ์์ฒด๋ฅผ Json์ผ๋ก ๋ณด๋ด์ฃผ์ด์ผ ํจ

3. "repo" ๋ผ๋ ์ปฌ๋ผ๋ช
์ ์ง๋ env ๊ด๋ฆฌ ํ
์ด๋ธ. (repo ์ปฌ๋ผ์ ์๋ฅผ ๋ค์ด, ์น๊ฐ๋ฐ ํ๊ฒฝ์ธ์ง, ์ฑ๊ฐ๋ฐ ํ๊ฒฝ์ธ์ง, ์๋ฒ์ธ์ง ๋ฑ๋ฑ์ ๊ตฌ๋ถํ์ฌ env ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ์์ธ ์ฌํญ์ gen ์ปค๋งจ๋ ์ค๋ช
๋ด์ฉ ์ฐธ์กฐ.)

---
๐ init : ์ด๊ธฐ ํ๊ฒฝ ์ค์ ์ ์คํํฉ๋๋ค
init์ด ์งํ๋ฐฉํฅ์ ์๋์ ๊ฐ์ต๋๋ค.
a. command ์
๋ ฅ
b. origin ์
๋ ฅ(๊ฐ๋ฐ, ์ด์)
c. mode ์
๋ ฅ(access token ๋ฐ๊ธ๋ฐ์ ์๋ฒ ํ๊ฒฝ ์ ํ)
d. secret ์
๋ ฅ
_args_
1. -sve (ํ ํฐ ๋ฐ๊ธ์ฃผ์) : ์๋ฒ์ ์ด๋ค Endpoint๋ฅผ ํตํด secret ๊ฐ์ ๊ฒ์ฆํ๊ณ access token์ ๋ฐํ๋ฐ์ ์ง๋ฅผ ์์ฑํ์ฌ data.json์ ์ ์ฅํฉ๋๋ค.
2. -gee (env ๋ฐ๊ธ์ฃผ์) : ์๋ฒ์ ์ด๋ค Endpoint๋ฅผ ํตํด DB์ env ๊ฐ์ ์กฐํํ๊ณ , ์ฌ์ฉ์์๊ฒ ์ ๋ฌํด์ค ์ง๋ฅผ ์์ฑํ์ฌ data.json์ ์ ์ฅํฉ๋๋ค.
``init command ์์
npx env-manage init -sve v1/env-init -gee v1/env-generate
`
> init์ด ์๋ฃ๋๋ฉด, ์ด๊ธฐ์ค์ ์ ๋ํ ๊ฐ์ด data.json์ด๋ผ๋ ํ์ผ์ ์ ์ฅ๋์ด ํด๋น ๋ชจ๋์ ํด๋ ์๋์ ์ ์ฅ๋ฉ๋๋ค.

---
๐ gen : evn ํ์ผ์ ์์ฑํฉ๋๋ค
_args_
1. mode ("-d" or "-p") : ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค. ์ค์ ๋ ํ๊ฒฝ์ ์๋ฒ๋ก๋ถํฐ env ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
2. -repo (env ํํฐ๋ง ์ฟผ๋ฆฌ) : env๊ฐ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์์ ์๋ฅผ ๋ค์ด "afun-wallet-app"์ด๋ผ๋ ์ฅ์์ env๋ง ํ์ํ ๊ฒฝ์ฐ, ํด๋น ๋ฐ์ดํฐ๋ง ํํฐ๋งํ์ฌ ์กฐํํ ์ ์๋๋ก ์ ๋ฌ๋์ด์ผ ํ๋ ๊ฐ์๋๋ค.
3. -filename (env ์ด๋ฆ, _optional_) : env๋ฅผ ์์ฑํ ์, ์ด๋ค ์ด๋ฆ์ผ๋ก ์ค์ ํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ง์ฝ ์ ๋ ฅํ์ง ์๋๋ค๋ฉด ".env"๋ก ์๋ ์ค์ ๋ฉ๋๋ค.
`gen command ์์
npx env-manage gen -d -repo afun-wallet-app -filename .env.development
`
---
๐ refresh : init์์ ์ ์ฅ๋์ด ์๋ access token์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ, ํด๋น ํ ํฐ์ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. (generate๋ฅผ ์ํด์๋ ๋ง๋ฃ๊ฐ ์ง๋์ง ์์ access token์ด ํ์ํฉ๋๋ค.)
ํด๋น refresh ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ init ์ปค๋งจ๋๋ฅผ ์ด์ฉํ์ฌ ์ด๊ธฐ ์ค์ ์ ์ ์ฅํด ๋์ด์ผ ํฉ๋๋ค.
์ด๊ธฐ ์ค์ ์ด ์๋ฃ๋ ์ดํ์๋, ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก access token์ ์ ๋ฐ์ดํธํฉ๋๋ค.

`gen command ์์
npx env-manage refresh
``