[python] FastAPI에서 마이크로서비스 아키텍처 구현하기

마이크로서비스 아키텍처는 대규모 애플리케이션을 작은 독립적인 서비스로 나누어 개발하는 방식입니다. 이 아키텍처는 개발과 유지보수의 용이성, 확장성 및 재사용성을 높이는 장점을 가지고 있습니다. 이번 블로그에서는 FastAPI를 사용하여 마이크로서비스 아키텍처를 구현하는 방법에 대해 알아보겠습니다.

1. FastAPI 소개

FastAPI는 Python에서 빠르고 (Starlette를 기반으로한) 현대적이며 (pydantic을 사용한) 쉬운 웹 프레임워크입니다. 이 프레임워크는 비동기 및 병렬 처리를 지원하며, 자동으로 API 문서를 생성해주는 기능도 제공합니다. 이를 통해 개발자는 높은 생산성과 품질을 유지할 수 있습니다.

2. 마이크로서비스 아키텍처 구성 요소

마이크로서비스 아키텍처는 여러 개별 서비스로 구성되며, 각 서비스는 독립적으로 실행될 수 있습니다. 이러한 서비스들은 API를 통해 소통하며, 각 서비스는 특정 기능이나 비즈니스 로직을 처리하기 위해 설계됩니다.

FastAPI를 사용하여 마이크로서비스 아키텍처를 구현하기 위해서는 다음과 같은 구성 요소가 필요합니다.

3. FastAPI로 마이크로서비스 아키텍처 구현하기

FastAPI 프레임워크를 사용하여 마이크로서비스 아키텍처를 구현하는 방법은 다음과 같습니다.

3.1. API Gateway 구현

API Gateway는 클라이언트의 요청을 분석하여 적절한 서비스로 라우팅하는 역할을 합니다. FastAPI는 이러한 기능을 제공하지는 않지만, Starlette 프레임워크를 통해 구현할 수 있습니다. Starlette는 경로(Route) 및 미들웨어(Middleware)를 사용하여 API Gateway를 쉽게 구현할 수 있습니다.

from fastapi import FastAPI
from starlette.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
from starlette.responses import Response

# API Gateway 앱 생성
app = FastAPI()

# API Gateway에서 라우팅되는 경로
@app.route('/api/service1')
async def service1(request: Request):
    # Service 1로 전달하기 위한 로직 구현
    ...

@app.route('/api/service2')
async def service2(request: Request):
    # Service 2로 전달하기 위한 로직 구현
    ...

# 미들웨어를 사용하여 API Gateway에서 필요한 추가 로직 구현
class CustomMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        # API Gateway의 추가 동작 구현
        response = await call_next(request)
        # 추가적인 후처리 로직을 구현할 수도 있습니다.
        return response

middleware = [
    Middleware(CustomMiddleware)
]

app.middleware(Middleware)

if __name__ == "__main__":
    uvicorn.run(app, host='0.0.0.0', port=8000)

3.2. 인증 서비스 구현

인증 서비스는 사용자 인증 및 권한 부여를 처리하는 역할을 합니다. FastAPI는 OAuth2 및 JWT 등의 인증 기능을 지원하므로, 해당 기능들을 이용하여 인증 서비스를 구현할 수 있습니다.

from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm

# 인증 서비스 앱 생성
app = FastAPI()

# OAuth2 기능 초기화
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/token")

# 사용자 로그인 API 엔드포인트
@app.post("/api/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
    # 사용자 인증 처리 및 토큰 반환 로직 구현
    ...

# 보호된 API 엔드포인트
@app.get("/api/protected")
async def protected_route(token: str = Depends(oauth2_scheme)):
    # 인증된 사용자만 접근 가능한 로직 구현
    ...

if __name__ == "__main__":
    uvicorn.run(app, host='0.0.0.0', port=8001)

3.3. 메인 서비스 구현

메인 서비스는 주요 비즈니스 로직을 처리하는 역할을 합니다. FastAPI를 사용하여 각 서비스의 API 엔드포인트를 구현하면 됩니다.

from fastapi import FastAPI

# 메인 서비스 앱 생성
app = FastAPI()

# API 엔드포인트 구현
@app.get("/api/service1")
async def service1():
    # Service 1 비즈니스 로직 구현
    ...

@app.get("/api/service2")
async def service2():
    # Service 2 비즈니스 로직 구현
    ...

if __name__ == "__main__":
    uvicorn.run(app, host='0.0.0.0', port=8002)

4. 결론

FastAPI를 사용하여 마이크로서비스 아키텍처를 구현하는 방법에 대해 알아보았습니다. FastAPI의 강력한 기능을 활용하여 API Gateway, 인증 서비스 및 메인 서비스를 구축할 수 있습니다. 이러한 구성 요소를 통해 애플리케이션의 모듈화, 유지 보수 용이성 및 확장성을 향상시킬 수 있습니다.

참고 자료: