본문 바로가기

웹 프레임워크/FastAPI

(23)
FastAPI - Session 세션(Session) 이란? 웹 애플리케이션에서는 사용자가 웹사이트를 방문할 때마다 새로운 요청을 보냅니다. 하지만 HTTP는 이전 요청과의 연관성을 기억하지 못합니다. 예를 들어 사용자가 장바구니에 상품을 담고 다른 페이지로 이동하면(새로운 요청), 이전에 담은 상품 정보를 기억하지 못합니다. 세션은 사용자별(실제로는 조금 다름)로 공간을 마련하여 이 공간에 사용자의 정보나 상태를 저장합니다. 예를 들어, 로그인 상태나 장바구니 내역 등을 세션에 저장할 수 있습니다. 세션은 서버 측에서 생성되며, 클라이언트(브라우저)에는 세션 ID라는 작은 키 값만 전달됩니다. 브라우저는 이 세션 ID를 쿠키나 URL 매개변수로 저장합니다. 그리고 다음 요청 시 서버에 세션 ID를 함께 보내면, 서버는 이 ID를 통해..
FastAPI - 22 (Nginx) 앞서 uvicorn과 Gunicorn을 설치한 상태로 가정하겠습니다. FastAPI - 21 (Gunicorn) Gunicorn을 설치 할 때와 비슷한 질문이 떠오르네요. Nginx가 뭔가요? 왜 설치 해야 하나요? FastAPI는 Gunicorn으로 실행하는데 Nginx와 같이 실행 할 수 있나요? Gunicorn때와 동일하게 제가 설치한 내용을 간단히 정리 했습니다. 공식 사이트 https://www.nginx.com/ Nginx 공식 문서 Nginx? Nginx는 강력한 웹 서버이자 리버스 프록시 서버로, 고성능과 효율적인 정적 콘텐츠 제공, 요청의 로드 밸런싱, SSL/TLS 암호화 등을 처리합니다. 왜 Gunicorn와 함께 사용하나요? 비동기적 처리를 하는 uviconr을 설치했고 안정성과 관..
FastAPI - 21 (Gunicorn) Gunicorn이 뭔가요? 왜 설치 해야 하나요? FastAPI는 uvicorn으로 실행하는데 Gunicorn과 같이 실행 할 수 있나요? Gunicorn을 설치 하면서 위와 같은 의문이 많이 들었습니다. 제가 설치한 내용을 간단히 정리 했습니다. 공식 사이트 Gunicorn: https://gunicorn.org/ uvicorn: https://www.uvicorn.org/ Gunicorn? uvicorn? Uvicorn과 Gunicorn은 둘 다 Python 웹 애플리케이션을 위한 서버입니다. 다만 지원하는 인터페이스와 내부 작동 방식에 차이가 있습니다. Gunicorn 인터페이스: Gunicorn은 WSGI(Web Server Gateway Interface) 애플리케이션 서버입니다. WSGI는 P..
FastAPI - 20 (APIRouter) APIRouter FastAPI 애플리케이션의 경로 작업(route operations)을 구조화하고 모듈화 합니다. 예제 코드를 작성합니다. 디레토리 및 파일 구조 . main.py └── service ├── notice ├──── notice_route.py ├── qna └──── qna_route.py notice_route.py /service/notice 경로에 대한 경로 작업을 정의합니다. # 웹 서비스의 경로(엔드포인트)를 생성 from fastapi import APIRouter # APIRouter의 인스턴스를 생성. # URL 접두어로 /service/notice를 사용 # 이 라우터에 정의된 모든 경로가 이 URL 접두어로 시작됨을 의미합니다 router = APIRouter(pr..
FastAPI - 19 (DB - PostgresSQL) 출처: https://fastapi.tiangolo.com/ko/tutorial/sql-databases// 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. SQLAlchemy와 ORM FastAPI와 PostgresSQL을 연동하겠습니다. PostgresSQL 설치는 PostgreSQL - 01 (설치 - Windows)나 PostgreSQL - 03 (설치 - ubuntu)에서 참고 하시기 바랍니다. FastAPI에서는 SQLAlchemy를 사용하여 DB를 연동 할 수 있습니다. SQLAlchemy는 ORM(Object Relational Mapper)로 DB를 객체로 다룰 수 있게 해줍니다. SQLAlchemy는 다양한 DB를 지원합니다. ORM(object-..
FastAPI - 18 (보안4 - QAuth2, Bearer, JWT - 클라이언트 구성 ) 인증서버와 인증을 요청하는 클라이언트를 각각 구성하겠습니다. 환경 구성 인증 서버 설정 인증 서버 코드 작성(main.py): 사용자 인증과 JWT 토큰 발급을 처리하는 FastAPI 애플리케이션을 작성합니다. 이 서버는 로그인 엔드포인트(/token)를 제공하고 유효한 자격 증명을 가진 사용자에게 JWT 토큰을 발급합니다. 인증 서버 실행: 인증 서버를 8000 포트에서 실행합니다. uvicorn uvicorn main:app --reload --port 8000 클라이언트 서버 설정 클라이언트 서버 코드 작성(main_client.py): 인증 서버와 다른 FastAPI 애플리케이션을 작성하여 클라이언트 서버로 사용합니다. 이 서버는 인증이 필요한 엔드포인트를 제공하며, 요청의 Authorizatio..
FastAPI - 17 (보안3 - JWT) 출처: https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. JWT란 먼저 OAuth 2.0에서 발급되는 Bearer 토큰의 형태 중 하나가 JWT입니다. JWT 정의: JWT (JSON Web Tokens)는 JSON 객체를 긴 문자열로 인코딩하는 표준입니다. 이 문자열은 공백 없이 밀집되어 있습니다. 예시 형태: JWT는 다음과 같은 형태를 가집니다: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJ..
FastAPI - 16 (보안2 - QAuth2, Bearer) 출처: https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. 로그인(인증)하여 토큰 받기 이전의 코드(FastAPI - 15 (보안1 - QAuth2, Bearer))를 이용하여 추가 합니다. OAuth2PasswordRequestForm를 이용 하여 username과 password 가져옵니다. 전달 된 사용자 정보로 인증을 진행 합니다. 인증이 완료되면 토큰을 생성하여 반환 하고 그렇지 않으면 HTTPException을 발생 시킵니다. 코드 from typing import Union from fastapi import Depends, FastAPI, HTT..