Online Serving을 위한 web programming

seung·2024년 12월 11일

Product Serving

목록 보기
3/8

웹 프로그래밍의 기본 원리와 중요한 개념을 배워보자

Oneline Serving

실시간으로 데이터를 처리하고 즉각적인 결과 반환
실시간성을 요구하는 경우에 유용
주로 Cloud나On-Premise 서버에서 모델 호스팅 후 요청 들어오면 모델이
예측반환하는구조

예시) 음식배달플랫폼
상품 품절 여부와 실시간 교통 상황에 따라 input 데이터가 다르기 때문에 실시간성이 요구됨

Oneline Serving 구현방법

  1. 직접 웹 서버 개발 : Flask,Fast API 등 활용해 서버 구축
    localhost / (예를 들면 www.naver.com/) 웹 서버 예시
  2. 클라우드 서비스 활용 : AWS의 SageMaker, GCP의 VertexAI 등
    MLOps의 다양한 부분을 이미 클라우드 회사에서 구축해 제공하기 때문에 활용만 하면 된다.
    단점:
    매니지드 서비스를 이용하는 것이기 때문에 직접 구축 대비 운영 비용이 더 나갈 수 있다.
    또한 내부 구현 방식을 정확히 확인 하지 못하는 경우도 있음
  3. 오픈 소스 활용 : TensorflowServing, TorchServe, MLFlow, BentoML 등
    추상화 된 패턴을 잘 제공하는 오픈 소스가 여러 개 존재한다.

멘토님의 추천은 특정 오픈 소스나 툴에 숙련도를 키우는 것보다 여러 선택지 중에서 적절한 옵션을 고르는 능력과 기반 지식을 먼저 기르는 것을 추천하시기 때문에 FAST API부터 추후에 배워보자!!

online serving시 고려사항

  1. Dependency
    Serving 할 때 Python 버전, 패키지 버전 등 Dependency가 굉장히 중요하다.
    이를 위해 Docker Image, Docker Compose에 익숙하면 좋음
  1. Latency
    실시간 예측을 하기 때문에 예측할 때 지연시간(Latency)를 최소화해야함
    Latency 최소화 방법
  • 데이터 전처리 서버분리(혹은Feature를미리가공-FeatureStore)
  • 모델 경량화
  • 병렬 처리
  • 예측 결과 캐싱

유동적으로 성능 확인해서 문제를 해결하는 역량이 필요하다.


Server architecture

실제 회사에서 어떻게 서버들이 배포되어 있을까?

  • 모놀리스 아키텍처
    서비스 개발 초기에는 단순하고 직관적이서 좋다.
    규모가 작고, 개발 조직이 하나인 회사인 경우에 사용된다.

  • 마이크로 서비스 아키텍처
    통신구조가 복잡하기 하지만 거대한 코드 베이스를 작게 나누어 담당시킬 수 있다.
    규모가 있고, 개발과 ML이 분리 되어 있는 회사의 경우에 사용된다.


API란?

"Application Programming Interface"의 약자로,쉽게 말해 특정 소프트웨어에서 다른 소프트웨어를 사용할 때의 인터페이스

기본적으로 사람을 위한 인터페이스(UI,UserInterface)가 아니라,소프트웨어를 위한 인터페이스이다.

API의 구현에는 웹API, 라이브러리, OS시스템 콜 등 다양한 종류가 존재

Web API

Web에서 사용되는 API
라이브러리 API나 시스템 콜등의 API는 Web에서 사용되지 않고,Web을 이용하지 않는다.
주로 HTTP를 통해 웹 기술을 기반으로 하는 인터페이스

HTTP란?
HyperTextTransferProtocol의 약자로 정보를 주고 받을 때 지켜야 하는 통신 프로토콜이다.

Web API의 종류

  • REST(Representational State Transfer)
  • GraphQL
  • RPC(Remote Procedure Call)

이중에서 가장 대중적인 REST API에 대해서 알아보자!


REST API

자원을 표현하고 상태를 전송하는것에 중점을 둔 API
REST라고 부르는 아키텍처 “스타일”로 HTTP 통신을 활용
대부분의 서버들이 이 방식을 채택한다!!

하는 일

각 요청이 어떤 동작이나 정보를 위한 것을 요청 모습 자체로 추론
기본적인 데이터 처리: 조회작업, 새로추가, 수정, 삭제

  • CRUD : Create, Read, Update, Delete

Resource, Method, Representation of Resource로구성
Resource : Unique한 ID를 가지는 리소스, URI
Method : 서버에 요청을 보내기 위한 방식 : GET, POST, PUT, PATCH, DELETE

사용 방식

GET http://localhost:8080/users?name=seungcheol

이 API는 users라는 리소스를 조회하는 API 호출

  • GET : HTTPMethod부분
    하고자 하는 것을 주 표현함
    HTTP Method 종류로 주로 사용되는것

    • GET : 리소스를 조회할때
    • POST : 리소스를 생성할때
    • PUT : 생성된 리소스 하나를 전체 업데이트할때
    • PATCH : 생성된 리소스 하나를 부분 업데이트할때
    • DELETE : 생성된 리소스 하나를 삭제할때
  • http:// : URL 내 Schema. 사용하는 프로토콜
    여기서는 HTTP를 사용하겠다는 것!

  • localhost : URL 내 Host 부분
    localhost는 127.0.0.1이라는 IP(PC의 주소)의 예약된 Domain Name
    127.0.0.1은 외부 네트워크에서 접근 불가능한 내 컴퓨터의 로컬 IP

  • 8080: URL 내 PORT부분
    Port는 PC에 접속할 수 있는 통로(채널)로 중복될 수 없다.
    각 프로세스(서버)는 하나의 Port를 사용하여 네트워크 통신

  • /users : URL내 Path 부분
    API 엔드 포인트(Endpoint)라고도 불림

여기서 URL이란?
URL : Uniform Resource Locator로 인터넷상 자원의 위치
URI : Uniform Resource Identifier로 인터넷상의 자원을 식별하기 위한 문자열의 구성
URI는 URL을 포함하게 되며, URI가 더 포괄적인 범위

REST API에서 필요한 추가 정보

URL parameters

URL내 Parameter의 구성하는 방식

  1. QueryParameter
    URL의 끝에 추가하며, 특정 리소스의 추가 정보를 제공 또는 데이터를 필터링할 때 사용
    예시) http://localhost:8080/users?name=seongyun
  2. PathParameter
    리소스의 정확한 위치나 특정 리소스를 찾을 때 사용
    예시) http://localhost:8080/users/seongyun

Resource를 식별해야 하는 경우(필수적인 정보) : PathParameter가 더 적합
정렬, 필터링을 해야 하는 경우(선택적인 정보) : QueryParameter가 더 적합

HTTPHeader, Payload

HTTPMethod와 URL뿐이 아니라, HTTP Header와 HTTP Payload를 사용하여 요청

ex) curl-XPOST-H"Content-Type:application/json"-d'{"name":"seungcheol"}'
http://localhost:8080/users

  • '-H"Content-Type:application/json"' : HTTP Header
    우리가 지금 보내는 데이터가 JSON타입임을 표현

  • '-d'{"name":"seongyun"}'' : HTTP Payload
    Payload로 JSON을 추가

StatusCode

클라이언트 요청에 따라 서버가 어떻게 반응하는지를 알려주는 Code

  • 1xx(정보) : 요청을 받았고, 프로세스를 계속 진행함
  • 2xx(성공) : 요청을 성공적으로 받았고, 실행함
  • 3xx(리다이렉션) : 요청 완료를 위한 추가 작업이 필요
  • 4xx(클라이언트오류) : 요청 문법이 잘못되었거나 요청을 처리할 수 없음
  • 5xx(서버오류) : 서버가 요청에 대해 실패함

0개의 댓글