본문 바로가기

FastAPI

FastAPI 백엔드 개발 순서(Google AI Mode)

I. fastapi의 백엔드 개발하는 순서는 어떻게 하는 것이 효율적인가?

FastAPI
 백엔드 개발을 효율적으로 진행하기 위한 순서는 다음과 같은 체계적인 단계로 구성하는 것이 좋습니다. 이 순서는 프로젝트의 확장성, 유지보수성 및 협업 효율성을 높이는 데 중점을 둡니다. 
1. 프로젝트 계획 및 설계 (착수 및 계획 단계)
  • 요구사항 정의: 어떤 기능을 구현할지 명확하게 정의합니다.
  • 데이터베이스 설계: 사용할 데이터베이스(RDBMS 또는 NoSQL)를 결정하고, 테이블/컬렉션 구조 및 관계를 설계합니다.
  • API 엔드포인트 설계: 어떤 URL로 어떤 요청(GET, POST 등)을 처리할지, 요청 및 응답 데이터 형식(Pydantic 스키마 활용)은 어떻게 할지 계획합니다.
  • 아키텍처 구상: 초기 단계부터 계층형 아키텍처(예: 라우터, 서비스, DB 모델 분리)를 고려하여 코드의 결합도를 낮춥니다. 
2. 개발 환경 설정 (실행 단계)
  • Python 및 가상 환경 설정: pyenv 등을 사용해 적절한 Python 버전(3.7 이상 권장, 최신 버전 선호)을 설치하고, venv 또는 Poetry를 이용해 독립된 가상 환경을 구축합니다.
  • 의존성 관리 도구 설치: Poetry 등을 사용하여 프로젝트에 필요한 패키지(FastAPI, Uvicorn, DB 드라이버 등)를 체계적으로 관리합니다.
  • 기본 프로젝트 구조 설정: 소스 코드를 src 또는 앱 이름의 디렉토리 하위에 구성하고, 그 안에 models, schemas, services, api (또는 routers) 등의 디렉토리로 역할을 분리합니다.
  • 환경 변수 관리: python-dotenv 등을 활용하여 데이터베이스 비밀번호, API 키 등 민감한 정보를 관리합니다. 
3. 핵심 기능 구현 (실행 단계)
  • 데이터베이스 연동: 설계한 DB 모델을 바탕으로 ORM(SQLAlchemy 등)을 설정하고 연결합니다.
  • Pydantic 스키마 정의: 데이터 유효성 검사 및 직렬화를 위해 Pydantic 모델을 정의합니다.
  • API 라우터 및 비즈니스 로직 작성: APIRouter를 사용하여 기능별로 라우트를 분리하고, 각 라우트에서 services 계층의 비즈니스 로직을 호출하도록 구현합니다.
  • 인증 및 보안 구현: JWT, OAuth2 등을 활용하여 안전한 인증 시스템을 구축합니다. 
4. 테스트 및 디버깅 (성과 단계)
  • 테스트 코드 작성: pytest 등을 사용하여 단위 테스트 및 통합 테스트 코드를 작성하여 API의 안정성을 확보합니다.
  • 자동 문서화 활용: FastAPI가 자동으로 생성하는 Swagger UI(/docs)나 ReDoc(/redoc)을 활용하여 API를 시각적으로 테스트하고 디버깅합니다. 
5. 배포 및 모니터링 (종료 및 운영 단계) 
  • 컨테이너화: Docker를 사용하여 애플리케이션과 환경을 컨테이너로 묶어 배포 일관성을 보장합니다.
  • 배포: AWS, GCP 등 클라우드 플랫폼에 프로젝트를 배포합니다.
  • 모니터링 및 유지보수: 배포된 서비스의 로그를 모니터링하고, 지속적으로 코드를 리팩토링하며 유지보수합니다. 
이러한 단계별 접근 방식을 따르면 효율적인 FastAPI 백엔드 개발이 가능하며, 프로젝트의 규모가 커져도 안정적으로 관리할 수 있습니다. 
 
 

II. 예를 들어, 질문과 답변을 주고 받는 웹어플리케이션이라고 할 때, 회원가입(액세스토큰과 리프레시토큰), 로그인 및 로그아웃을 할 수 있는 경우에서, 큰 분류로 보면 질문 CRUD, 답변 CRUD, 회원 CRUD로 나눌 수 있는데, 개발 순서를 어떻게 하는 것이 가장 효과적인가?

질문과 답변 웹 애플리케이션의 개발에서 회원가입/로그인 기능을 포함하는 경우, 가장 효율적인 개발 순서는 핵심 기능에 대한 의존성을 고려하여 아래와 같이 진행하는 것이 좋습니다.
핵심은 회원 인증 기능을 먼저 구현하여 다른 모든 기능의 기반을 마련하고, 그 위에 주요 콘텐츠인 질문 및 답변 CRUD를 구현하는 것입니다.

가장 효율적인 개발 순서 (6단계)
1단계: 기반 환경 설정 및 회원 CRUD (인증 기능 제외)
애플리케이션의 뼈대를 먼저 구축합니다.
  • 프로젝트 초기 설정: 가상 환경, 의존성 설치, 기본 폴더 구조 설정.
  • 데이터베이스 연결: ORM 설정 및 User 모델/테이블 정의.
  • 회원 CRUD (기본): create_user (회원가입 기능의 일부), get_user, update_user 등 기본적인 회원 정보 관리 기능 구현.
    • 아직 인증/인가 로직은 포함하지 않습니다.
2단계: 회원 인증 시스템 구축 (핵심)
다른 모든 기능이 이 인증 시스템에 의존하므로, 가장 먼저 완료해야 합니다.
  • 비밀번호 해싱: 사용자 비밀번호를 안전하게 저장하는 로직 구현.
  • 로그인 및 토큰 발급:
    • 사용자 검증 후, 액세스 토큰 리프레시 토큰을 생성하고 발급하는 엔드포인트 구현.
  • 토큰 유효성 검사 및 인가 미들웨어:
    • 보호된 라우트에 접근 시 토큰의 유효성을 검사하고 사용자 정보를 추출하는 로직 구현.
  • 로그아웃: 서버 또는 클라이언트 측에서 토큰을 무효화하거나 제거하는 로직 구현.
3단계: 질문 CRUD 구현 (주요 기능)
인증 시스템을 기반으로 첫 번째 핵심 콘텐츠인 질문 기능을 구현합니다.
  • Question 모델/테이블 정의: User 모델과의 관계(외래 키) 설정.
  • Pydantic 스키마 정의: 질문 생성, 조회 등을 위한 스키마 정의.
  • 라우터 및 서비스 구현:
    • 질문 목록 조회: (인증 없이 접근 가능)
    • 질문 상세 조회: (인증 없이 접근 가능)
    • 질문 생성: (로그인된 사용자만 가능하도록 인가 적용)
    • 질문 수정/삭제: (로그인된 사용자 중 본인만 가능하도록 인가 적용)
4단계: 답변 CRUD 구현 (주요 기능)
질문 기능에 종속되는 답변 기능을 구현합니다.
  • Answer 모델/테이블 정의: User 및 Question 모델과의 관계(외래 키) 설정.
  • Pydantic 스키마 정의: 답변 생성, 조회 등을 위한 스키마 정의.
  • 라우터 및 서비스 구현:
    • 답변 목록 조회 (특정 질문에 대한): (인증 없이 접근 가능)
    • 답변 생성: (로그인된 사용자만 가능하도록 인가 적용)
    • 답변 수정/삭제: (로그인된 사용자 중 본인만 가능하도록 인가 적용)
5단계: 테스트 및 리팩토링
  • 단위 테스트 및 통합 테스트: 각 엔드포인트(특히 인증 및 인가 로직)에 대한 테스트 코드를 작성하여 안정성을 확보합니다.
  • 코드 리팩토링: 중복되는 코드를 제거하고, 계층별(라우터, 서비스, 모델) 역할 분리를 명확히 합니다.
6단계: 배포 및 운영
  • Docker 이미지 빌드, 클라우드 환경(AWS, GCP 등)에 배포, 모니터링 시스템 구축.

왜 이 순서가 효율적인가요?
  • 의존성 해결: 질문이나 답변은 사용자에 의해 작성되므로, 사용자(회원)와 인증 기능이 먼저 완성되어야 이들 기능에 '작성자' 정보를 연결하고 '권한'을 부여할 수 있습니다.
  • 핵심 기능 우선: 인증 시스템은 애플리케이션의 보안과 기본 작동을 보장하는 핵심 기반 기능입니다. 이것이 불안정하면 다른 모든 기능 개발 시 계속 문제가 발생할 수 있습니다.
  • 지속적인 테스트 가능: 회원가입/로그인이 되면, 이후 개발하는 질문/답변 기능에 대해 실제 로그인 상태에서 테스트가 가능해져 개발 효율이 높아집니다.