Server 구성 Use case
앱/웹 서비스 서버
머신러닝 서비스 서버
서비스 서버에서 머신러닝 서버에 예측 요청하며 통신
Server 형태
모놀리식 아키텍처
마이크로서비스 아키텍처
정보를 주고 받을 때 널리 사용되는 형식
API 요청 시 활용하는 정해진 형식
요청 모습을 보고 어떤 일을 하는 지 알 수 있음
각 요청이 어떤 동작이나 정보를 위한 것을 요청 모습 자체로 추론 가능
CRUD (Create, Read, Updae, Delete)
Resource, Method, Representation of Resource로 구성
Resource: unique한 ID를 가지는 리소스 e.g., URI
Method: 서버에 요청을 보내기 위한 방식 (GET, POST, PUT, PATCH, DELETE)
URI & URL
URL: Uniform Resource Locator로 인터넷 상 자원의 위치
URI: Uniform Resource Identifier로 인터넷 상 자원 식별을 위한 문자열 구성
URI는 URL을 포함하며, 더 포괄적
정보를 주고 받을 때 지켜야 하는 통신 프로토콜(규약)
기본적으로 80번 포트를 사용하며, 서버에서 80번 포트를 열어주지 않으면 HTTP 통신 불가능
GET: 정보를 요청 (Read)
어떤 정보를 가져와 조회
URL에 변수(데이터)를 포함시켜 요청
데이터를 Header에 포함해 전송
캐싱 가능
POST: 정보 입력 (Create)
데이터를 서버로 제출해 추가 또는 수정
URL에 변수를 노출하지 않고 요청
데이터를 Body에 포함
캐싱할 수 없음
PUT: 정보 업데이트 (Update)
PATCH: 정보 업데이트 (Update)
DELETE: 정보 삭제 (Delete)
| 처리 방식 | GET | POST |
|---|---|---|
| URL 노출 여부 | O | X |
| URL 예시 | localhost:8080/login?id=chanu | localhost:8080/login |
| 데이터 위치 | Header | Body |
| 캐싱 가능 | O | X |
HTTP 통신은 Request하고 Response를 받을 때 정보를 패킷에 저장
패킷은 header와 body로 구성
Header: 보내는 주소, 받는 주소, 시간
Body: 실제 전달하려는 내용
클라이언트 요청에 따라 서버가 어떻게 반응하는지 알려주는 Code
Status Code
1xx (정보): 요청을 받았고, 프로세스를 계속 진행함
2xx (성공): 요청을 성공적으로 받았고, 실행함
3xx (리다이렉션): 요청 완료를 위한 추가 작업이 필요
4xx (클라이언트 오류): 요청 문법이 잘못되었거나 요청을 처리할 수 없음
5xx (서버 오류): 서버가 요청에 대해 실패함
동기 (Sync)
서버에서 요청을 보냈을 때, 응답이 돌아와야 다음 동작 수행
A 작업이 모두 완료될 때까지 B 작업 대기
비동기 (Async)
요청을 보낼 때 응답 상태와 상관없이 다음 동작 수행
A 작업과 B 작업 동시 실행
네트워크에 연결된 특정 PC 주소를 나타내는 체계
용도가 정해진 IP
127.0.0.1: 현재 사용중인 Local PC
0.0.0.0, 255.255.255.255 : 로컬 네트워크에 접속된 모든 장치와 소통하는 주소
IP 주소 뒤에 나오는 숫자
PC에 접속할 수 있는 통로
통신 규약에 의해 정해진 포트 (다른 용도로 사용 불가)
22: SSH
80: HTTP
443: HTTPS
특징
Node.js, go와 대등한 성능
Flask와 비슷한 구조, Microservice에 적합
Swagger 자동 생성
Pydantic을 이용한 Serialization
장점

비동기 지원
Built-in API Documentation (Swagger)
프로젝트 구조
프로젝트 코드가 들어갈 모듈 설정
main.py
간단하게 애플리케이션을 실행할 수 있는 Entrypoint
EntryPoint: 프로그래밍 언어에서 최상위 코드가 실행되는 시작점 또는 프로그램 진입점
main.py 또는 app.py
간단한 웹 서버 띄우기
from fastapi import FastAPI
import uvicorn
# FastAPI 객체 생성
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
터미널 혹은 CLI에서
python3 simple_webserver.py (메인 파일 이름) 입력 시 실행localhost:8000/docs 로 이동하면 Swagger 확인 가능
Swagger
만든 API를 클라이언트에서 호출할 때 편리
REST API 설계 및 문서화할 때 사용
dependency resolver로 복잡한 의존성 버전 충돌 방지
사용 흐름
프로젝트 설정하기
FastAPI 프로젝트 생성을 위해 fastapi, uvicorn 패키지 필요
poetry init 입력

대화 형식으로 패키지 설치 가능
development dependency 분리 가능
완성이 되면 pyproject.toml에 설정이 저장
poetry shell Poetry shell 활성화
shell 활성화 후 poetry install
poerty add 필요한 패키지 추가
poetry.lock
이 파일이 존재하면 작성하고 있는 프로젝트 의존성과 동일한 의존성을 가짐
레포지토리에 커밋할 것
※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※