pile·
백엔드·카카오 스타일 (지그재그)카카오 스타일 (지그재그)·

TypeScript에서의 환경 설정 관리

TypeScript 프로젝트에서 환경 설정을 타입 안전하게 관리하는 방법을 정리한 글이다. `config` 모듈을 쓰다 오타 때문에 운영에서 잘못된 설정이 적용되는 사고가 반복되자, 외부 모듈 없이 설정 파일 자체를 TypeScript 로 두어 타입 정의로 삼는 방식을 만들었다.

핵심 포인트
  • 설정을 코드에서 분리하는 이유는 두 가지다. 암호·접근키를 코드에 두지 않기 위해서, 그리고 개발·운영·테스트마다 다른 값을 쓰기 위해서다.
  • 크로키닷컴은 첫 번째 이슈가 크지 않았다. 환경 변수 설정도 번거로워 AWS Instance Role 이나 Parameter Store 로 우회하고 있었다.
  • 문제는 `config` 모듈이 오타를 잡아 주지 않아 개발에서는 되는데 운영에서 잘못된 설정이 먹히는 실수가 종종 났다는 점이다.
  • 해결은 설정 파일을 JSON 이 아니라 TypeScript 로 두는 것이다. `config/default.ts` 가 곧 타입 정의가 되고 다른 코드는 그 타입으로 검사받는다.
  • 환경별 파일은 달라지는 부분만 정의하고 `config/index.ts` 에서 `NODE_ENV` 에 따라 병합해 내보낸다.
상세 정리
  • 기존 대안들의 위치를 먼저 정리한다. 환경 변수를 쓰려면 프로세스 구동마다 설정하는 게 번거로워 `dotenv` 같은 모듈을 쓰고, 환경별 값이 필요하면 `config` 모듈을 쓴다.
  • 타입 있는 설정 모듈(`ts-config` 계열)도 찾아봤지만 원하는 형태와 거리가 있었다.
  • 전환이 쉬웠던 배경: 애초에 설정 파일을 JSON 이 아니라 JavaScript 로 관리하고 있었기에 그대로 TypeScript 로 옮기면 그 자체가 타입 정의가 된다는 발상이었다.
  • 구조: `config/default.ts` 에 기본 구조를 정의하고, `config/test.ts` 처럼 환경별 파일에는 달라지는 값만 쓴다. `config/index.ts` 가 이를 묶어 다른 코드에 제공한다.
  • 남는 문제: 이대로면 `test.ts` 에서 `test_mode` 를 `testmode` 로 잘못 쓰거나 타입이 어긋나도 알려주지 않는다.
  • 보완: `default.ts` 에 타입 제약을 추가하고 `test.ts` 를 그에 맞게 고치면, port 를 string 과 number 로 다르게 쓴 경우 컴파일 오류가 난다.
  • 한계 ①: 병합에 lodash 의 merge 를 쓰기 때문에 default 에서 정의한 값을 `undefined` 로 덮어쓸 수 없다.
  • 한계 ②: default 설정의 타입이 기준이 되므로 환경마다 설정 형태가 크게 다르면 default 쪽에 타입을 명시적으로 써 줘야 할 수 있다.
왜 읽나설정 오타 때문에 운영에서 사고를 낸 적 있는 Node.js·TypeScript 개발자에게 외부 모듈 없이 타입 검사를 붙이는 최소 구조를 준다.
카카오 스타일 (지그재그)
카카오 스타일 (지그재그) 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2