์ฐธ๊ณ ์๋ฃ
Application Programming Interface์ ์ฝ์๋ก, ์์ฉ ํ๋ก๊ทธ๋จ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค.
API๋ ํ๋ก๊ทธ๋จ ํน์ ์์คํ ๊ฐ์ ํต์ ํ๋ ์ฐฝ๊ตฌ, ์ฆ ํ๋ก๊ทธ๋จ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๊ฒ์ ๋์์ฃผ๋ ๋งค๊ฐ์ฒด๋ผ ํ ์ ์๋ค.
1. API๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ถ์
๊ตฌ ์ญํ ์ ํ๋ค.
: ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์์คํ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์์ด์๋ ์ ๋๋ค. API๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ๋๋ค์ด ๊ฐ์ง ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ถ์
๊ตฌ ์ญํ ์ ํ๋ฉฐ, ํ์ฉ๋ ์ฌ๋๋ค์๊ฒ๋ง ์ ๊ทผ์ฑ์ ๋ถ์ฌํด ์ค๋ค.
2. API๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ธฐ๊ธฐ๊ฐ ์ํํ๊ฒ ํต์ ํ ์ ์๋๋ก ํ๋ค.
: ์ฌ๊ธฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ ์ค๋งํธํฐ ์ฑ์ด๋ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค.
API๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ธฐ๊ธฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ํํ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋๋ ์ญํ ์ ํ๋ค.
3. API๋ ๋ชจ๋ ์ ์์ ํ์คํํ๋ค.
: API๋ ๋ชจ๋ ์ ์์ ํ์คํํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ณ/ ์ด์์ฒด์ ๋ฑ๊ณผ ์๊ด์์ด ๋๊ตฌ๋ ๋์ผํ ์ก์ธ์ค๋ฅผ ์ป์ ์ ์๋ค. ์ฝ๊ฒ ๋งํด, API๋ ๋ฒ์ฉ ํ๋ฌ๊ทธ์ฒ๋ผ ์๋ํ๋ค๊ณ ๋ณผ ์ ์๊ฒ ๋ค.
An endpoint is simply one end of a communication channel.
์๋น์ค๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํ๋ ์๋น์ค์์ ์ ๊ณตํ๋ ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋์ ํ์ชฝ ๋

Endpoint๋, API๊ฐ RESTful API๋ฅผ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ฒ์ ๋ฆฌ์์ค์ ์ก์ธ์ค ํ ์ ์๋๋ก ํด์ฃผ๋ URL์ ๋ปํ๋ค.
API๊ฐ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ํธ์์ฉ ํ ์ ์๊ฒ ํ๋ ํ๋กํ ์ฝ์ ์ด์งํฉ์ด๋ผ๋ฉด,
ENDPOINT๋ API๊ฐ ์๋ฒ์์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ๊ฐ๋ฅํ๊ฒ ํ๋ URL์ด๋ผ ํ ์ ์๊ฒ ๋ค.
https://api.example.com/v1/users?role=admin&status=active
\________________________/\____/ \______________________/
server(base) URL endpoint query parameters
path
์ด๋, Base URL์ ํ๊ฒฝ(dev, stg, prd ๋ฑ)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์, ํ๊ฒฝ์ ๋ง๊ฒ ๋์ ์ผ๋ก ์ค์ ๋๋๋ก ํด์ผ ํ๋ค.
Doppler๋ฅผ ์ฌ์ฉํ ํ๊ฒฝ๋ณ Base URL ์ค์ ์์:
- dev ํ๊ฒฝ: http://dev-api.myapp.com
- stg ํ๊ฒฝ: https://stg-api.myapp.com
- prd ํ๊ฒฝ: https://prd-api.myapp.com
const api = axios.create({
baseURL: import.meta.env.BASE_URL, // ๋ํ๋ฌ๋ก ์ฒ๋ฆฌํ ํ๊ฒฝ ๋ณ์
headers: {
Authorization: `Bearer ${ import.meta.env.SLACK_TOKEN }`,
'Content-Type': 'application/json',
},
})
baseURL: import.meta.env.BASE_URLVite์์ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ฐ์ ธ์จ Base URL๋ก, ์ด ํ๋ก์ ํธ์์๋ Doppler๋ฅผ ์ฌ์ฉํด ๊ด๋ฆฌ๋๋ค๋ ๊ฐ์ ํ์ ์์ฑ ๋์๋ค.
Doppler๋ ๊ฐ ํ๊ฒฝ(dev, stg, prd ๋ฑ)๋ง๋ค ๋ค๋ฅธ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ๋์ ์ผ๋ก Base URL์ด ๋ฌ๋ผ์ง๋๋ก ์ค์ ํ ์ ์๋ค.
์ฐธ๊ณ ) ํด๋น ํ๋ก์ ํธ๋ ํ๊ฒฝ๋ณ์๋ฅผ ๋ํ๋ฌ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ช
๋ น์ด์ doppler run์ด ์กด์ฌํจ
์๋ฒ๋ฆฌ์ค ๋์ฐ๊ธฐ ์ , ๋ก์ปฌ์์ ํ ์คํธํ ๋ ์ฌ์ฉํ ๋ฐฉ๋ฒ
๋ก์ปฌ ์ ์ ์
doppler run -- serverless offline
๋คํธ์ํฌ ์ ์ ์
doppler run -- serverless offline --host 0.0.0.0
์ฝ๋
const api = axios.create({
baseURL: 'https://slack.com/api',
headers: {
Authorization: `Bearer ${ process.env.SLACK_TOKEN }`,
'Content-Type': 'application/json',
},
})
const api = axios.create({
baseURL: 'http://localhost:3000', // ๋ก์ปฌ ์ ์ ์
headers: {
Authorization: `Bearer ${ import.meta.env.SLACK_TOKEN }`,
'Content-Type': 'application/json',
},
})
const api = axios.create({
baseURL: 'http://0.0.0.0:3000', // ๋คํธ์ํฌ ์ ์ ์
headers: {
Authorization: `Bearer ${ import.meta.env.SLACK_TOKEN }`,
'Content-Type': 'application/json',
},
})