Table of Contents
python언어를 안다면 어떤 프레임워크를 이용하여 웹 사용자와 소통할 수 있을까?
Flask도 있지만 이름처럼 빠른 속도 덕분에 최근 들어 FastAPI가 인기가 높아지고 있다.
FastAPI를 활용하여 웹 사용자가 보내는 데이터를 받고, 나(서버)도 웹 사용자에게 데이터를 보낼 수 있다.
웹 사용자와 소통하여 받은 데이터를 CRUD(Create Read Update Delete) 할 수 있다.
일단 FastAPI 부터 알아보자.
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.8+ based on standard Python type hints.
파이썬 언어로 만들어진 웹프레임워크라고 한다.
장점은 빠르고 쉽다는 것이다.
FastAPI stands on the shoulders of giants:
- Starlette for the web parts. : Starlette is a lightweight ASGI(아스기) framework/toolkit, which is ideal for building async web services in Python.
- Pydantic for the data parts. : Pydantic is the most widely used data validation library for Python.
웹 부분은 스탈렛, 데이터 부분은 파이덴틱을 사용했다고 한다.
추가로 Pydantic은 다음과 같은 기능을 한다. 웹에 적합한 파이썬이라고 하면 이해하기 쉽겠다.
- 데이터 검증: 입력 데이터가 모델에 정의된 타입 및 제약 조건을 충족하는지 자동으로 검증합니다.
- 모델 정의: 타입 힌트를 사용하여 데이터 모델을 간단하게 정의할 수 있습니다.
- ORM 모델 지원: ORM 객체를 Pydantic 모델로 쉽게 변환할 수 있습니다.
- JSON 시리얼라이제이션: Pydantic 모델 객체를 JSON 문자열로 쉽게 변환할 수 있습니다.
그렇다면 Starlette 은 아스기 프레임워크라고 하는데
ASGI(아스기, WSGI위스기)는 무엇인가?
WSGI (Web Server Gateway Interface)
ASGI (Asynchronous Server Gateway Interface)
- 운영 아키텍쳐로 봤을 때는 크게 다르지 않음
- 그러나 WSGI와 다르게 ASGI는 기본적으로 요청을 비동기로 처리한다는 점이 큼
- 따라서 WSGI에서는 지원되지 않는 웹 소켓 프로토콜과 HTTP 2.0을 지원
- 이러한 대표적인 ASGI Web App에는 uvicorn이 있음
- uvicorn은 ASGI 기반의 웹 애플리케이션 서버로써 그 내장 모듈로 uvloop을 사용
- uvloop에서 uv는 libuv 즉, Javascript V8에서 사용되는 비동기 모듈을 사용한 것
- ASGI는 Cython 기반으로 C++ 언어로 작성되어 매우 빠른 속도를 제공한다는 것이 특징인데다다가 libuv를 사용하여 비동기 처리를 하니 Node.js와 같은 비동기 처리 속도를 어느 정도 누릴 수도 있다는 장점이 있음
결론: ASGI 가 WSGI 보다 최신 트렌드에 맞춰서 발전한 것으로 request(웹사용자의 데이터요청)를 비동기(웹사용자A, B,C가 동시에 메세지를 던져도 동시에 처리함)로 처리한다
ASGI Web App에는 uvicorn 이 있다는데
웹 어플리케이션? 웹서버와 와스는 정확히 뭘까?
Servlet: HTML in JAVA
JSP: JAVA in HTML
나의 멘토 chatGPT4에게 물어봤다.
웹 서버(Web Server)와 웹 어플리케이션 서버(Web Application Server, WAS)는 웹 기반 시스템을 구축할 때 중요한 구성 요소입니다. 각각은 다른 역할을 수행하며, 때로는 함께 사용되기도 합니다. 이 둘의 주요 차이점과 역할에 대해 설명하겠습니다.
### 웹 서버(Web Server)
웹 서버는 HTTP 프로토콜을 통해 클라이언트(주로 웹 브라우저)의 요청을 받아, 정적 컨텐츠(HTML 파일, CSS 파일, 이미지 등)를 제공하는 서버입니다. 웹 서버의 기본적인 기능은 파일 시스템에서 저장된 정적 리소스를 찾아 이를 클라이언트에 전송하는 것입니다. 웹 서버는 동적인 콘텐츠를 처리하기 위해 웹 어플리케이션 서버와 통신할 수도 있습니다. 대표적인 웹 서버 소프트웨어로는 Apache, Nginx, Microsoft IIS 등이 있습니다.
### 웹 어플리케이션 서버(Web Application Server, WAS)
웹 어플리케이션 서버는 클라이언트의 요청에 따라 동적인 컨텐츠(웹 어플리케이션 또는 서비스)를 생성하여 제공하는 서버입니다. WAS는 클라이언트의 요청에 따라 서버 측에서 프로그램을 실행하고, 그 결과를 클라이언트에게 돌려주는 역할을 합니다. 이 과정에서 데이터베이스 조회나 비즈니스 로직 처리 등 복잡한 처리를 수행할 수 있습니다. Java EE, .NET, Node.js 등 다양한 플랫폼에서 동작하는 웹 어플리케이션 서버가 있습니다.
### 웹 서버와 웹 어플리케이션 서버의 차이점
- **정적 컨텐츠 vs 동적 컨텐츠**: 웹 서버는 주로 정적 컨텐츠를 처리하는 반면, 웹 어플리케이션 서버는 동적 컨텐츠 생성 및 제공에 초점을 맞춥니다.
- **역할**: 웹 서버는 클라이언트의 요청을 받아 정적 파일을 반환하는 역할을, 웹 어플리케이션 서버는 동적인 콘텐츠를 생성하여 제공하는 역할을 합니다.
- **성능 및 최적화**: 정적 파일을 빠르게 제공해야 하는 경우 웹 서버가 최적화되어 있으며, 복잡한 어플리케이션 로직 처리가 필요한 경우 웹 어플리케이션 서버가 필요합니다.
### 함께 사용하는 이유
웹 서버와 웹 어플리케이션 서버를 함께 사용하는 이유는 각각의 서버가 최적화된 작업을 처리함으로써 전체 시스템의 성능과 관리 효율성을 높이기 위해서입니다. 예를 들어, 웹 서버는 정적 파일을 처리하고, 동적 컨텐츠가 필요한 요청은 웹 어플리케이션 서버로 전달하여 처리할 수 있습니다. 이러한 구조는 보안, 로드 밸런싱, 리소스 관리
측면에서도 여러 이점을 제공합니다.
결론: 웹서버는 사용자(클라이언트, 웹브라우저)의 요청(request)을 받아 정적컨텐츠 즉, CSS,HTML,이미지를 제공하고, 웹어플리케이션서버는 사용자(클라이언트, 웹브라우저)의 요청(request)을 받아 동적인컨텐츠 즉, DB에서 데이터 처리하는 복잡한 수행을 한 후 데이터를 제공한다.
그러면 uvicorn이랑 starlette이랑 둘 다 ASGI 방식의 웹서버 아니야??
Uvicorn과 Starlette은 모두 비동기 Python 웹 프로그래밍을 위한 도구이지만, 그 목적과 사용 방법에 있어 중요한 차이가 있습니다.
### Uvicorn
Uvicorn은 비동기 서버 게이트웨이 인터페이스(ASGI)를 구현한 Python의 가벼운 서버입니다. ASGI는 비동기 웹 애플리케이션과 서버 간의 표준 인터페이스를 제공합니다. Uvicorn은 비동기 Python 웹 프레임워크를 호스팅하기 위한 서버로 사용되며, 웹소켓과 HTTP/2를 지원합니다. 단독으로 사용되기보다는 FastAPI, Starlette과 같은 ASGI 호환 웹 프레임워크와 함께 사용되어, 비동기 웹 애플리케이션의 성능을 최적화합니다.
### Starlette
Starlette은 비동기 웹 프레임워크로, ASGI를 기반으로 구축되었습니다. Starlette은 라우팅, 요청 및 응답 객체, 템플릿, 정적 파일 제공, 웹소켓 지원 등 웹 애플리케이션을 구축하는 데 필요한 기본적인 도구를 제공합니다. FastAPI의 핵심 의존성 중 하나이기도 한 Starlette은 그 자체로 완전한 웹 애플리케이션 프레임워크로 사용될 수 있으며, 비동기 Python 애플리케이션의 개발을 용이하게 합니다.
### Uvicorn과 Starlette의 차이점
- **Uvicorn은 서버입니다**: 비동기 웹 애플리케이션을 실행하기 위한 ASGI 서버입니다. 웹 프레임워크가 아니므로, 라우팅이나 웹소켓 같은 기능을 직접 제공하지 않습니다.
- **Starlette은 웹 프레임워크입니다**: 비동기 웹 애플리케이션을 구축하기 위한 도구와 기능을 제공합니다. Uvicorn이나 다른 ASGI 서버를 사용하여 호스팅할 수 있는 애플리케이션을 만드는 데 사용됩니다.
간단히 말해, Starlette으로 웹 애플리케이션을 구축하고, Uvicorn을 사용하여 이 애플리케이션을 실행하고 호스팅합니다. 이 둘은 함께 사용되어 강력한 비동기 웹 애플리케이션을 효율적으로 개발하고 배포할 수 있게 해줍니다.
결론: Uvicorn은 웹서버 (웹어플리케이션서버의 역할도 함), Starlette은 웹 어플리케이션 프레임워크이다. Starlette이 WSGI방식을 구현했다는 것은 서버라는 의미가 아니라 WSGI방식의 서버가 동작할 수 있는 프레임워크를 구현했다는 뜻이다.
그러면 Starlette 쓰면 되지 왜 FastAPI가 생긴거야?
Starlette을 사용하여 웹 서버를 구현하는 것은 완전히 가능합니다. 실제로 Starlette은 비동기 웹 애플리케이션을 구축하기 위한 가벼운 도구를 제공하는 빠르고 가벼운 ASGI 프레임워크입니다. 그 자체로 웹소켓, GraphQL, in-process background tasks, startup and shutdown events, 테스트 클라이언트 등을 지원하며, 동시에 성능이 우수한 웹 애플리케이션을 만들 수 있는 기반을 제공합니다.
그렇다면 왜 FastAPI가 존재할까요? FastAPI는 Starlette을 기반으로 하면서, API 개발에 특화된 여러 추가 기능을 제공합니다. FastAPI의 등장 배경과 목적, Starlette과의 차이점을 이해하면 왜 FastAPI를 선택할 수 있는지 명확해집니다.
### FastAPI의 주요 특징과 장점:
- **API 개발에 특화**: FastAPI는 RESTful API 개발에 특화되어 있으며, OpenAPI(Swagger) 및 JSON Schema와 같은 표준을 기반으로 자동 문서화를 지원합니다. 이는 API를 구축하고 테스트하며 문서화하는 과정을 간소화합니다.
- **타입 힌트와 자동 데이터 검증**: FastAPI는 Python 3.6+의 타입 힌트를 사용하여 요청 및 응답 데이터의 구조를 정의합니다. 이를 통해 자동으로 데이터 검증을 수행하고, 에러를 쉽게 발견하며, 편리한 에디터 지원(오토컴플리트, 타입 체크 등)을 받을 수 있습니다.
- **성능**: FastAPI는 Starlette과 Uvicorn을 기반으로 하기 때문에 비동기 프로그래밍을 완벽히 지원하며, 고성능을 유지합니다.
- **간편한 의존성 주입**: FastAPI는 경량화된 의존성 주입 시스템을 제공하여, 다양한 의존성(데이터베이스 연결, 보안 및 인증, 배경 작업 등)을 쉽게 관리할 수 있게 해줍니다.
### 결론
Starlette으로도 충분히 웹 서버를 구현할 수 있지만, API 개발에 있어서는 FastAPI가 제공하는 추가적인 기능과 편의성 때문에 FastAPI를 선택하는 것이 더 유리할 수 있습니다. 특히, 자동 문서화, 데이터 검증, 타입 힌트를 활용한 개발 생산성 향상 등은 FastAPI를 사용하는 주된 이유 중 하나입니다. 따라서 당신의 프로젝트 요구 사항이 API 개발에 중점을 두고 있다면, FastAPI가 좋은 선택이 될 수 있습니다.
결론: FastAPI는 Starlette에 Pydantic을 얹어서 개발이 쉽고 편하도록 만들었다.
FastAPI로 웹서버를 만든다면
다음과 같이 간결한 웹 문서화 도구를 이용해 쉽게 테스트 할 수 있다.
왼쪽은 FastAPI를 import하여 구현한 간단한 웹 예제다.
main.py 파이썬 파일을 실행해주면 http://127.0.0.1:8000/docs url에서 Swagger UI를 바로 연결해준다.
개발 및 테스트에 용이하다.
또한 위 사진과 같이 http://127.0.0.1:8000/redoc url에서 ReDoc UI를 바로 연결해준다.
개발 화면을 대표에게 보여주거나 미팅하면서 프레젠테이션할 때 용이하다.
'Upstage AI 3기' 카테고리의 다른 글
[학습블로그]Git 협업 프로젝트 수행 (0) | 2024.04.23 |
---|---|
[학습블로그] Git branch 생성 (0) | 2024.04.22 |
[학습블로그] Git 을 Git Bash에서 작동시켜보자 (0) | 2024.04.19 |
[학습블로그] 프로젝트 수행을 위한 이론 1 : Python (1) | 2024.04.04 |
[학습블로그] 부트캠프 시작! 패스트캠퍼스 Upstage AI Lab 3기 OT진행/마인드셋 특강 (0) | 2022.10.14 |
- Total
- Today
- Yesterday
- 코딩테스트
- t5
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- 오블완
- Numpy
- 손실함수
- recursion #재귀 #자료구조 # 알고리즘
- 리스트
- Array
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- 파이썬
- clustering
- Github
- cnn
- LIST
- LLM
- 티스토리챌린지
- Hugging Face
- 해시
- RAG
- English
- Transformer
- Python
- nlp
- git
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- Lora
- classification
- speaking
- PEFT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |