오늘 배운 내용은 Online Serving과 웹 기본 지식!
데이터를 실시간으로 처리해 즉각적인 결과 반환
어떤 방식을 쓰는지는 환경(일정, 예산, 인력, 모델)에 따라 다르다.
실시간 예측이기 때문에 latency를 최소화해야 한다.
모델 경량화, Feature Store(피쳐 미리 가공), 병렬 처리, 결과 캐싱 등
직접 웹서버 개발
Flask나 FastAPI 등을 이용해서 서버를 직접 구축
클라우드 사용
aws의 SageMaker, GCP의 Vertex AI 등
오픈소스 활용
Torch Serve, MLFlow, BentoML 등
이미지 출처 : @dmchoi224
모든 로직이 하나의 코드베이스에 저장되어 하나의 큰 서버로 개발
모든 로직이 하나에 다 있어서 단순하지만 협업이 힘들고, 코드간 의존성과 결합도가 높아 서비스 초기 단계에서 많이 사용한다.
여러개의 작은 서버로 개발해 필요에 따라 서버를 분리
의존성과 환경을 서버별로 다르게 둔다.
전체적인 구조와 통신이 복잡해진다.
서비스가 고도화되고 개발 조직이 커지면 주로 서버를 MSA로 나눈다.
Application Programming Interface. SW 프로그램들이 서로 상호작용하기 위한 인터페이스
HTTP 프로토콜을 기반으로 하는 웹 API
자원(Resource)을 이름으로 구분하여 해당 자원의 상태를 주고받는 방식
request(요청)의 형태만 봐도 어떤걸 요구하는 지 알 수 있음
CRUD : Create, Read, Update, Delete
URL : 인터넷 상 자원의 위치
URI : 인터넷 상 자원을 식별하기 위한 문자열 구성. HTTP URI로 자원을 고유하게 식별한다.
Method
(행위) : 동사로 표현
GET: 리소스 조회
POST : 리소스 생성
PUT : 생성된 리소스 하나를 전체 업데이트
PATCH : 생성된 리소스 하나를 부분 업데이트
DELETE : 생성된 리소스 삭제
ML에서는 주로 /predict나 /train 같은 엔드포인트 사용
이미지 출처 : hanamon
HTTP Header : -H
요청과 응답에서 추가정보를 주고받기위한 메타 데이터
ex) Content-Type: 리소스의 미디어 타입을 정의 (application/json)
Payload : -d
HTTP 메시지에서 실제 전송되는 데이터. body부분에서 실제 데이터가 전송됨.
HTTP Status Code
이미지 출처 : infidigit
port
네트워크 통신에서 데이터가 전송되는 논리적 진입점. 0~65535까지 숫자로 구성
SSH - 22 / HTTP - 80 / HTTPS - 443 / HTTP대체 - 8080
Jupyter Notebook - 8888 / MySQL - 3306