Python

fastAPI에서 데이터 접근 방식과 java 에서 사용하는 JPA에 관해서

크레비즈 2025. 4. 30. 11:09

fastAPI를 사용하고 있는 중인데, ORM 맵핑의 JPA와 비슷하다는 생각이 들어서 Gemini 에게 물어봤습니다.

알려준 설명을 남겨봅니다.

 


 

FastAPI에서 데이터베이스에 있는 데이터를 CRUD (Create, Read, Update, Delete) 할 때 사용하는 방식이 Spring Data JPA와 완전히 동일하다고 보기는 어렵지만, 몇 가지 유사한 개념과 목표를 공유하는 부분이 있습니다.

 

 

유사한 점:

  • ORM 활용: FastAPI는 주로 SQLAlchemy라는 ORM (Object-Relational Mapper)과 함께 사용됩니다. JPA 역시 ORM 표준입니다. ORM의 핵심 목표는 데이터베이스 테이블을 객체로 매핑하여 개발자가 SQL 쿼리를 직접 작성하는 대신 객체 지향적인 방식으로 데이터베이스와 상호작용할 수 있도록 하는 것입니다. 이 점에서 SQLAlchemy와 JPA는 동일한 목표를 가지고 있습니다.
  • Repository 패턴 (선택적): FastAPI에서도 Spring Data JPA의 Repository 인터페이스와 유사하게 데이터 접근 로직을 별도의 클래스로 분리하는 Repository 패턴을 구현하여 사용할 수 있습니다. 이는 데이터 접근 계층과 비즈니스 로직을 분리하여 코드의 유지보수성과 테스트 용이성을 높이는 데 도움이 됩니다.
  • 선언적인 데이터 모델: SQLAlchemy 모델 클래스를 정의할 때 테이블 구조, 컬럼 타입, 제약 조건 등을 선언적으로 정의합니다. JPA의 Entity 클래스 정의 방식과 유사하게 데이터베이스 스키마와 Python 객체를 매핑하는 역할을 합니다.
  • CRUD 추상화: ORM을 사용하면 기본적인 CRUD 작업을 수행하기 위해 직접 SQL 쿼리를 작성하는 빈도가 줄어듭니다. SQLAlchemy 역시 세션 객체를 통해 add(), query(), delete() 등의 메서드를 제공하여 CRUD 작업을 추상화합니다.

 

차이점:

  • 표준 vs. 라이브러리: JPA는 Java 진영의 ORM 표준 명세인 반면, SQLAlchemy는 Python의 강력한 ORM 라이브러리입니다. JPA는 다양한 구현체 (Hibernate, EclipseLink 등)를 가질 수 있지만, SQLAlchemy는 그 자체로 ORM 라이브러리입니다.
  • Repository 자동 생성: Spring Data JPA의 가장 큰 특징 중 하나는 인터페이스만 정의하면 기본적인 CRUD 메서드를 자동으로 생성해주는 기능입니다. FastAPI와 SQLAlchemy 조합에서는 이러한 자동 생성 기능을 기본적으로 제공하지 않습니다. 개발자가 직접 Repository 클래스와 필요한 메서드를 구현해야 합니다 (물론, Helper 라이브러리나 유틸리티 함수를 만들어 유사한 패턴을 구현할 수는 있습니다).
  • Query DSL: Spring Data JPA는 강력한 Query DSL (Domain-Specific Language)을 제공하여 복잡한 쿼리를 코드로 쉽게 작성할 수 있도록 지원합니다. SQLAlchemy 역시 다양한 쿼리 생성 방법을 제공하지만, Spring Data JPA의 DSL과는 다소 다른 스타일을 가집니다.
  • 생태계: Java와 Python 생태계의 차이로 인해 JPA와 SQLAlchemy 주변의 관련 기술 및 도구들이 다릅니다.

 

결론:

FastAPI와 SQLAlchemy를 사용하여 데이터베이스 CRUD 작업을 수행하는 방식은 ORM을 활용하여 객체 지향적으로 데이터베이스와 상호작용한다는 점에서 Spring Data JPA와 유사한 목표와 개념을 공유합니다. 선언적인 데이터 모델 정의, CRUD 추상화 등의 특징도 유사합니다.

하지만 Spring Data JPA의 Repository 자동 생성, 강력한 Query DSL 등의 편리한 기능은 FastAPI + SQLAlchemy 조합에서는 기본적으로 제공되지 않습니다. 따라서 완전히 동일한 방식이라고 보기는 어렵고, 개발자가 직접 Repository 패턴을 구현하거나 SQLAlchemy의 쿼리 API를 활용하여 데이터 접근 로직을 작성해야 한다는 차이점이 있습니다.

그럼에도 불구하고, SQLAlchemy는 매우 강력하고 유연한 ORM이며, FastAPI와 함께 사용될 때 효율적이고 생산적인 데이터 관리 환경을 제공합니다. 개발자는 SQLAlchemy의 기능을 충분히 활용하여 JPA와 유사한 수준의 추상화와 편리성을 확보할 수 있습니다.

 


 

실제로 내가 JPA를 제대로 사용해본적도 없고, 그렇다고 fastAPI 를 잘 아는것도 아니지만,

언어의 차이(JAVA vs Python)이지 사용방법을 보면 유사하다는 생각이 많이 듭니다.