클라우드 네이티브 환경에서의 BFF 마이크로서비스 개발
본 문서에서는 클라우드 네이티브 아키텍처를 기반으로 한 Node.js Express 마이크로서비스 템플릿을 소개하며, 이를 활용하여 GraphQL/REST API 레이어를 어떻게 설계하고 구현할 수 있는지 설명합니다.
설계 원칙
- 최고의 모듈들을 통합하여 안정적인 마이크로서비스 프레임워크 제공
- 12-Factor App 원칙 준수
- 모든 모듈은 교체 가능하며 코드는 재사용 가능한 구조로 구성
- 개발 및 운영을 위한 완벽한 DevOps 지원
주요 기능
- Node.js, Express, TypeScript 기반의 의존성 주입(DI) 지원
- GraphQL(Apollo Server 2.0), JWT 인증, 데이터 로더 및 REST 데이터 소스 예제 포함
- Docker 및 Kubernetes를 통한 컨테이너화된 배포 지원
- Prometheus와의 통합을 통한 성능 모니터링
- Helm Chart 기반의 배포 자동화
REST API 예제
다음은 REST API 호출의 예시입니다:
fetch('http://localhost:3000/api/v1/examples/1')
.then(response => response.json())
.then(data => console.log(data));
GraphQL 설정
GraphQL 플레이그라운드는 다음 주소에서 접근할 수 있습니다:
http://localhost:3000/playground
다음은 간단한 GraphQL 쿼리의 예입니다:
query {
person(id: 1) {
name
age
address {
city
country
}
}
}
환경 설정
프로젝트 실행 전에 필요한 환경 변수를 설정해야 합니다. 주요 환경 변수들은 다음과 같습니다:
| 변수명 | 설명 | 기본값 |
|---|---|---|
| PORT | 서버 포트 번호 | 3000 |
| LOG_LEVEL | 로그 레벨 (info, debug, error) | info |
실행 방법
개발 모드로 실행하기 위해 다음 명령어를 사용합니다:
npm run dev
생산 환경에서는 컴파일 후 시작합니다:
npm run compile
npm start
보안 설정
JWT 기반의 인증 시스템을 통해 보안을 강화할 수 있습니다. 예를 들어, 로그인 엔드포인트는 다음과 같이 작동합니다:
mutation {
login(email: "user@example.com", password: "password") {
token
user {
id
role
}
}
}
로드 테스트
애플리케이션의 성능을 평가하기 위해 loadtest 도구를 사용할 수 있습니다:
loadtest http://localhost:3000/api/v1/examples/1 -t 20 -c 20