마이크로서비스 아키텍처에서는 여러 개의 서비스가 상호작용하므로 API 게이트웨이는 중요한 역할을 합니다. 이 게이트웨이는 클라이언트와 서버 간의 통신을 관리하고 보안, 로깅, 인증, 부하 분산 등의 기능도 제공합니다. 이번 포스트에서는 타입스크립트로 간단한 API 게이트웨이를 구현하는 방법에 대해 살펴보겠습니다.
시작하기 전에
이 튜토리얼을 따라하려면 Node.js를 설치해야 합니다. 또한, 타입스크립트 컴파일러인 tsc
도 설치해야 합니다. 아직 설치되어 있지 않은 경우 아래의 명령어를 사용하여 설치할 수 있습니다.
npm install -g typescript
프로젝트 설정
먼저, 새로운 디렉토리를 만들고 그 안에서 다음 명령어를 사용하여 package.json
파일을 생성합니다.
npm init -y
그런 다음, 프로젝트에 필요한 의존성 패키지를 설치합니다.
npm install express axios
npm install @types/express @types/axios typescript ts-node nodemon -D
코드 작성
API 게이트웨이 서버 구현
다음으로, API 게이트웨이 서버를 만들기 위해 index.ts
파일을 생성하고 다음과 같이 작성합니다.
import express from 'express';
import axios from 'axios';
const app = express();
const PORT = 3000;
app.use(express.json());
app.all('/api/*', async (req, res) => {
try {
const response = await axios({
method: req.method as any,
url: `http://microservice1/${req.params[0]}`,
data: req.body,
headers: req.headers,
});
res.status(response.status).json(response.data);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(PORT, () => {
console.log(`API Gateway is running at http://localhost:${PORT}`);
});
위의 코드는 Express를 사용하여 API 게이트웨이 서버를 구현한 것입니다. 클라이언트에서의 모든 API 요청('/api/*'
)은 해당하는 마이크로서비스로 포워딩됩니다.
마이크로서비스 구현
간단한 마이크로서비스 예시로, microservice1/index.ts
파일을 생성하고 다음과 같이 작성합니다.
import express from 'express';
const app = express();
const PORT = 4000;
app.use(express.json());
app.put('/resource', (req, res) => {
// 마이크로서비스의 비즈니스 로직
res.status(200).json({ message: 'Resource created successfully' });
});
app.listen(PORT, () => {
console.log(`Microservice 1 is running at http://localhost:${PORT}`);
});
타입스크립트 코드 컴패일 및 실행
각 서버의 코드를 작성한 후에는 다음 명령어를 사용하여 타입스크립트 코드를 컴패일하고 실행할 수 있습니다.
npx tsc --init
npx tsc --watch
npx nodemon index.js
이제 API 게이트웨이를 통해 클라이언트는 마이크로서비스에 액세스할 수 있습니다.
결론
이를 통해 타입스크립트와 Express를 사용하여 간단한 API 게이트웨이 및 마이크로서비스를 구현하는 방법에 대해 알아보았습니다. API 게이트웨이와 마이크로서비스의 복잡성이 증가함에 따라 보다 강력하고 안전한 아키텍처를 구현하기 위한 추가 기능을 고려해볼 수 있습니다.
참고문헌: