실시간으로 데이터를 처리하고 즉각적인 결과반환
실시간성을 요구하는 경우에 유용
주로Cloud나 On-Premise서버에서 모델호스팅후,요청 들어오면 모델이 예측 반환하는 구조
ex) 음식배달플랫폼.
Flask,FastAPI등을 사용해 서버구축
장점
단점
tensorflow Serving,Torch Serve,MLFlow,BentoML등
ex) BentoML
어떤방법을쓰느냐는 주어진환경(일정,인력,예산,모델성능등)에따라 다르게 선택할수있음
클라우드 매니지드 서비스->직접 서버 개발->서빙 오픈소스 활용방식 권장
Serving할때 Python버전,패키지버전등 Dependency가 굉장히중요함
이를위해 DockerImage,DockerCompose에 익숙하면 좋음
실시간 예측을 하기 때문에 예측할 때 지연시간(Latency)를 최소화해야함
Latency최소화방법
하나의 큰 API서버를 운영하는 방식
Clinet 는 하나의 Server에게 요청하고, Server는 내부적으로 처리하고 요청을 반환.
장점
고민할점
project/
├─ app/
│ ├─ __init__.py
│ ├─ models.py # 데이터베이스 모델
│ ├─ views.py # 웹 요청 핸들러 (Controller)
│ ├─ services.py # 비즈니스 로직
│ ├─ forms.py # 폼 처리 (웹 사이트용)
│ ├─ templates/ # HTML 템플릿
│ └─ static/ # 정적 파일(CSS, JS)
├─ tests/
│ ├─ test_models.py
│ ├─ test_views.py
│ └─ ...
├─ requirements.txt
└─ manage.py (또는 run.py)
핵심
장점
고민할 점
project/
├─ user-service/
│ ├─ app/
│ │ ├─ main.py # FastAPI/Flask 진입점
│ │ ├─ models.py # User 모델
│ │ ├─ controllers.py # REST API 핸들러
│ │ ├─ services.py # User 관리 비즈니스 로직
│ │ └─ database.py # DB 연결
│ ├─ requirements.txt
│ └─ Dockerfile
├─ order-service/
│ ├─ app/
│ │ ├─ main.py
│ │ ├─ models.py # Order 모델
│ │ ├─ controllers.py
│ │ ├─ services.py # 주문 처리 비즈니스 로직
│ │ └─ database.py
│ ├─ requirements.txt
│ └─ Dockerfile
└─ payment-service/
├─ app/
│ ├─ main.py
│ ├─ models.py # Payment 기록 모델
│ ├─ controllers.py
│ ├─ services.py # 결제 처리 로직
│ └─ database.py
├─ requirements.txt
└─ Dockerfile
규모가 작고, 개발조직이 하나 -> 모놀리스
규모가 있고, 개발과 ML이 분리 -> 마이크로서비스 아키텍쳐
Application Programming Interface"
의 약자로,소프트웨어 응용프로그램들이 서로 상호 작용하기 위한 인터페이스를 총칭하는 말
Web에서 사용되는 API
주로 HTTP
를 통해 웹 기술을 기반으로 하는 인터페이스
RepresentationalStateTransfer
의약자로“ 자원을 표현하고 상태를 전송하는것”에 중점을둔API-> 요청의 모습을 보고 어떤 일을 하는지 알 수 있음.
Resource,Method,Representation of Resource로구성
URI와 URL
리소스(Resource)
리소스란 고유하게 식별될 수 있는 데이터를 의미한다. 예를 들어, User라는 리소스가 있고, 각 사용자는 고유한 ID를 가지고 있다고 하자.
특정 리소스를 식별하기 위해 URI(Uniform Resource Identifier)를 사용한다.
예시:
모든 사용자 목록: https://api.example.com/users
특정 사용자(예: ID가 123인 사용자): https://api.example.com/users/123
여기서 /users는 '사용자'라는 리소스 컬렉션을 의미하고, /users/123은 그 컬렉션 중 특정한 한 명의 사용자 리소스를 식별한다.
메서드(Method)
HTTP 메서드는 서버에게 요청자의 의도를 전달하는 역할을 한다. 주로 CRUD(Create, Read, Update, Delete) 동작과 매핑된다.
GET: 데이터 조회(읽기, Read)
POST: 새로운 데이터 추가(생성, Create)
PUT: 기존 데이터의 전체 업데이트(수정, Update)
PATCH: 기존 데이터의 일부 업데이트(부분 수정)
DELETE: 데이터 삭제(Delete)
표현(Representation of Resource)
리소스는 단순히 URI로만 존재하는 것이 아니라, 클라이언트와 서버 간에는 그 리소스의 상태나 정보를 "표현" 형태(주로 JSON이나 XML)로 주고받는다.
GET http://localhost:8080/users?name=seongyun
http://localhost:8080/users?name=seongyun
http://localhost:8080/users?name=seongyun
?name=seongyun
여기 정보 제공하는 거임http://localhost:8080/users/seongyun
curl -X POST -H "Content-Type:application/json" -d '{"name":"seongyun"}' http://localhost:8080/users
-H"Content-Type:application/json"
-d'{"name":"seongyun"}
클라이언트 요청에 따라 서버가 어떻게 반응하는지를 알려주는 Code
특정PC의 주소
를나타내는체계IPv4
라고함