폴더 구조와 파일 내용은 다음과 같다.
server/ <-- 루트 폴더
│
├── .env <-- 환경변수 파일
├── database/ <-- database 폴더
│ └── updateRankingData.ts
└── apis/ <-- apis 폴더
└── supabaseClient.ts
SUPABASE_ANON_KEY=eyJhbGciOiJ ...
KOPIS_SERVICE_KEY=060f38 ...
import { createClient } from '@supabase/supabase-js'
import 'dotenv/config';
const supabaseUrl = "https://razltwjkvwqiyksaydcw.supabase.co";
if (!process.env.SUPABASE_ANON_KEY) {
console.log(process.env.SUPABASE_ANON_KEY);
throw new Error("환경변수 SUPABASE_ANON_KEY가 설정되어 있지 않습니다!");
}
const supabaseAnonKey = process.env.SUPABASE_ANON_KEY;
export const supabase = createClient(supabaseUrl, supabaseAnonKey);
export default supabase;
import supabase from "@/apis/supabaseClient";
import { apiURL, classic, serviceKey } from "@/apis/kopisClient";
import dayjs from "dayjs";
import convert from "xml-js";
import { ElementCompact } from "xml-js";
import { RankingItem, RankingPeriod, pfIdObject } from "@/types/ranking";
import {
StyUrl,
Ticketlink,
PerformanceDetail,
} from "@/types/performanceDetail";
// 랭킹 데이터 업데이트
const getRankingAPI = (period: RankingPeriod) => {
let stDate = "";
나는 updateRankingData.ts
의 파일을 실행하고자 database
폴더로 이동한 후 해당 파일을 실행하였다. 하지만 다음과 같은 에러가 발생했다.
❯ npx ts-node -r tsconfig-paths/register updateRankingData.ts
undefined
/Users/MJKIM/Desktop/dev/project/classichub/classic-hub/server/apis/supabaseClient.ts:8
throw new Error("환경변수 SUPABASE_ANON_KEY가 설정되어 있지 않습니다!");
^
Error: 환경변수 SUPABASE_ANON_KEY가 설정되어 있지 않습니다!
at Object.<anonymous> (/Users/MJKIM/Desktop/dev/project/classichub/classic-hub/server/apis/supabaseClient.ts:8:9)
at Module._compile (node:internal/modules/cjs/loader:1529:14)
at Module.m._compile (/Users/MJKIM/Desktop/dev/project/classichub/classic-hub/server/node_modules/ts-node/src/index.ts:1618:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
at Object.require.extensions.<computed> [as .ts] (/Users/MJKIM/Desktop/dev/project/classichub/classic-hub/server/node_modules/ts-node/src/index.ts:1621:12)
at Module.load (node:internal/modules/cjs/loader:1275:32)
at Function.Module._load (node:internal/modules/cjs/loader:1096:12)
at Module.require (node:internal/modules/cjs/loader:1298:19)
at require (node:internal/modules/helpers:182:18)
at Object.<anonymous> (/Users/MJKIM/Desktop/dev/project/classichub/classic-hub/server/database/updateRankingData.ts:1:1)
supabaseClient.ts
파일에서 .env
파일을 제대로 읽어오지 못하고 있었다.
환경변수 등록을 위해 구성한 .env
파일의 내용을 읽기 위해 설치한 dotenv
모듈은 기본적으로 명령어를 실행한 현재 작업 디렉터리(working directory) 에서 .env
파일을 찾는다.
하지만 내가 명령어를 실행한 경로는 server/database 였기 때문에 dotenv
가 .env
의 내용을 읽지 못한 것이었다.
.env
파일이 존재하는 디렉토리에서 명령어를 실행한다.
.env
파일에 저장해놓은 환경 변수들을 dotenv
라이브러리를 이용해서 process.env
에 설정할 수 있다.
이 때 import dotenv/config
를 하면 dotenv.config()
가 자동으로 실행되어 process.env
를 참조할 수 있게 되는 것이다.
이 때 .env
파일 안에 있는 데이터들은 dotenv
에 의해 프로그램이 실행될 때 process.env
에 추가된 것이므로, 프로그램이 종료되면 해당 데이터도 사라지게 된다.
process
는 Node.js에 기본적으로 내장된 전역 객체여서 별도로 불러올(import) 필요없이 프로그램의 어디에서든지 사용할 수 있다.
유의점은 process
객체는 Node.js
에서만 사용이 가능하며, 브라우저와 같은 다른 자바스크립트 실행 환경에서는 존재하지 않는 전역 객체이다.
프로그램 실행 종료 후 process.env
를 확인해보면 .env
파일 안에 있는 key 정보가 보이지 않는다.