Litestar란?

Litestar는 FastAPI와 마찬가지로 Python의 타입 힌트를 활용한 현대적인 웹 프레임워크입니다. FastAPI의 장점을 계승하면서도, 더 나은 구조화와 확장성을 제공하는 것이 특징입니다.

누구에게 추천하나요?

주로 이런 분들이 사용해보았으면 합니다.

  • FastAPI를 사용해본 개발자
  • 대규모 프로젝트에서 잘 구조화된 코드를 작성하고 싶은 개발자
  • 확장 가능하고 유지보수가 쉬운 아키텍처를 구현하고 싶은 개발자

FastAPI와 사용법이 굉장히 유사하지만 Layered 아키텍처와 플러그인 시스템으로 FastAPI보다 더 구조화된 코드를 작성하도록 프레임워크에서 유도하기 때문에 괜찮은 선택이 될 수 있습니다.

FastAPI와 비교했을 때 주요 차별점

1. 이름 기반 의존성 주입

  • FastAPI의 타입 기반 의존성 주입과 달리, 이름을 기준으로 의존성을 주입합니다.

    • FastAPI는 타입을 기준으로 dependency를 구분하기 때문에 dependency를 재사용하려면 Annotated로 묶어야 합니다. 같은 dependency라도 이름이 달라질 가능성이 있고, 이는 코드의 검색 가능성을 해칠 염려가 있습니다.
    • litestar는 이름을 기준으로 dependency를 구분하기 때문에 같은 dependency는 같은 이름을 가집니다. 이는 코드의 검색 가능성을 프레임워크에서 관리할 수 있습니다.
  • 더 명시적이고 예측 가능한 의존성 관리가 가능합니다.

2. 계층화된 아키텍처

  • 앱/라우터/컨트롤러/핸들러 등 다양한 레벨에서 의존성 선언이 가능합니다
  • FastAPI에 없는 Controller 개념이 있습니다.
  • 애플리케이션 인스턴스를 통해 전역으로 dependency를 주입하는 것도 가능합니다.
  • 대규모 애플리케이션에서 좀 더 나은 관리 편의성을 제공한다고 생각합니다.

3. 가드 시스템

  • Dependency와 독립적으로 동작하는 가드 시스템을 제공합니다.
    • 가드는 요청을 추상화한 ASGIConnection 객체와 요청을 처리하는 BaseRouteHandler 자체를 인자로 받습니다.
    • Handler에 선언한 opt를 사용해서 분기 처리가 가능합니다
  • 메트릭 수집, rate-limit 등 핵심 비즈니스과 관련성이 떨어지는 코드를 별도로 관리할 수 있습니다.

4. 강력한 플러그인 시스템

  • 플러그인 시스템을 적은 보일러플레이트로 기능을 쉽게 확장할 수 있습니다.
  • 다양한 공식 플러그인을 제공합니다.
    • 현재 attrs, flash, htmx, problem details, prometheus, pydantic, structlog, sqlalchemy이 있습니다.

실용적인 장점

1. 점진적 발전 가능성

  • 단순한 구조에서 시작해 필요에 따라 복잡도를 높일 수 있습니다.

  • DTO(Data Transfer Object) 개념이 존재합니다.

    • Database와 연관된 Entity를 그대로 DTO로 사용하다가, 복잡도가 높아지면 별도 DTO를 선언하는 방식으로 유연한 변경이 가능합니다
    • DTO를 통해서 응답 데이터를 데이터와 메타데이터로 래핑하는 방식을 적용할 수 있습니다.

2. 테스팅

  • 다양한 테스팅 헬퍼 함수를 지원합니다.
    • 앱 전체를 래핑하는 TestClient
    • 특정 핸들러만 테스트하는 create_test_client
    • 서브프로세스에서 Litestar 인스턴스를 실행하는 subprocess_async_client
    • Litestar Organization에서 관리하는 목 데이터 생성 라이브러리 polyfactory.

3. 활발한 커뮤니티

  • 이슈와 PR에 대한 적극적인 피드백
    • 제가 간단한 문서 수정 PR을 올렸는데 하루 만에 머지되었습니다.

결론

Litestar는 FastAPI의 장점을 계승하면서도, 더 체계적인 구조화와 확장성을 제공합니다. 특히 대규모 프로젝트에서 코드 구조화와 유지보수성이 중요한 경우 좋은 선택이 될 수 있습니다.