본문 바로가기
Project

[ 졸업프로젝트 캡스톤 디자인 ] Seear

by 리노 Linho 2023. 6. 4.

본 게시글은 졸업프로젝트 캡스톤 디자인에서 dt1917의 백엔드 팀원으로 참여하여 Seear 서비스를 개발한 과정과 소개를 담고 있습니다.

Introduce

본 서비스는 배리어프리를 바탕으로한 사회공헌 서비스입니다. 대상은 시각장애를 갖고 있는 사람이며 시각적으로 처리하기 어려운 부분을 AI를 통해 청각적 요소로 변환하여 서비스를 제공하는 것이 핵심 목적입니다. 예를들어 HTML에서 제공하는 ALT속성은 사진을 설명하는 용도로 제공되고 있으나 사진의 세부 내용이 적혀있는 기사는 한정적입니다. 본 서비스는 이미지 자체를 직접 캡셔닝하여 읽어주며 어떠한 이미지라도 쉽게 접근할 수 있도록 합니다. 최종 목표은 시각적으로 얻을 수 있는 정보에 취약한 시각 또는 인지 장애인이 음성을 통해 비장애인과 동일한 수준의 정보를 습득하도록 하는 것입니다.

Role

Backend Engineer & Devops Engineer

AI 모델 서빙과 인프라 구축에 주력하였습니다.

Architecture

AWS Service Amazon Elastic Container Service ( EC2 )
Amazon Elastic Container Registry
Amazon Elastic Load Balancer
Amazon Simple Storage Service
Amazon Route 53
Deployment Pipeline Github Actions
Web Framework Flask

Feature

  • AI Image Captioning 기술을 활용한 뉴스기사 이미지의 설명을 텍스트화
  • 퀄리티 높은 서비스 제공을 위한 효과적인 AI 모델 서빙 로직 구현
  • 다수의 언로사 및 기사 스크래핑 및 RSS 형식의 뉴스 기사 데이터 전처리

Experience for Flask

  • Flask, 데이터 사이언티스트와 최적의 호환을 보여주기 위한 프레임워크 선정
    • 파이썬 기반의 Flask는 데이터사이언티스트가 주로 사용하는 Python 언어의 공통적인 부분이 많아 AI 서빙을 보다 쉽게 구현
    • 정석적인 AI 서빙 방법이 아니었으나 AI 모델로 예측값을 Predict하는 로직을 경량화하여 서비스에 접목
    • 모델의 특성상 예측하기까지 약 3분의 시간이 소요되는 문제를 로직을 캐싱으로 해결

Experience for AWS

  • Amazon Simple Storage Service
    • AWS S3는 AWS에서 제공하는 Storage 서비스
    • AI 모델 파일을 관리하기 위해 사용하였으며 S3에서 파일의 버저닝까지 지원하여 모델 버전을 직관적으로 관리
    • Flask에서 S3에 직접 접근하여 모델 파일의 변경이 생겼는지 Metadata로 확인하고 변경이 발견되면 업그레이드 된 모델을 S3로부터 불러와 새로운 모델로 변경하는 로직을 구현
  • Amazon Elastic Container Service
    • AWS ECS는 AWS에서 제공하는 Container Orchestration 서비스
    • 총 2개의 Container를 띄워놓고 Load Balancer를 통해 부하 분산
    • AWS ECR의 Container Image를 불러와서 AWS ECS 상에 Container로 실행
  • Amazon Elastic Container Registry
    • AWS ECR은 AWS에서 제공하는 Container Registry 서비스
    • Github Actions을 통해 Docker로 Build된 이미지를 전달 받으며 Private Repository에 저장되도록 설정
  • Amazon Elastic Load Balancer
    • AWS ELB는 AWS에서 제공하는 Load Balancer
    • 고가용성을 지원하는 AWS ECS를 사용하기 위해서는 AWS ELB가 최소 1개이상 꼭 필요
    • Health Check용 API를 미리 구현해 놓고 Load Balancer가 해당 API에 주기적으로 요청
  • Amazon Route 53
    • AWS Route 53은 AWS에서 DNS 설정용 서비스
    • 명지대학교에서 제공한 DNS 서비스를 활용하기 위해 사용
    • Hosting.kr에서 도메인을 구매한 후 네임서버를 설정하고 AWS에 등록하여 사용하는 방식

Experience for Github Actions

  • Github Actions Workflow 파일
    • .github/workflow 에서 yml 파일로 Deploy Pipeline을 구축
    • Docker를 활용하여 Github Actions 내부에서 Build 하는 과정을 수행
    • AWS IAM에서 제공하는 Access Token과 Secret Access Key를 발급 받아 Credentials 진행
    • AWS에서 Github Actions에 공식적으로 제공하는 Deploy 방식을 사용
  • Github Actions Secret Key
    • Github Actions 내부에서 사용되는 보안 정보를 암호화 하기 위한 방법
    • Deploy Pipeline 툴 특성상 배포에 사용되는 민감한 정보들이 담길 수 밖에 없는데 이를 Github Actions Secret Key를 사용하여 처리
  • .env 파일 생성
    • Flask의 보안 정보는 .env에서 관리하여 수동으로 .env파일을 생성
    • Github Actions에서 리눅스 명령어를 제공하여 Github Actions Secret Key와 조합하여 .env파일을 생성

Improvement

  • AI Model Serving
    • 모델이 결과를 예측하고 API로 서빙하는 과정까지 최소 3분 최대 10분의 시간이 소요되어 서비스 퀄리티가 낮았습니다.
    • 위 문제를 해결하기 위해 주기적으로 이미지를 스크래핑한 후 캐시에 저장 하였습니다. 이 후 요청 발생시 사전에 예측한 데이터를 제공하는 방식의 로직을 구현하여 서비스 품질을 향상시켰습니다.
    • AI 프레임워크에서 제공하는 모델 서빙 툴을 사용하거나 모델 경량화를 함께 진행하여 서비스를 제공했다면, 실시간으로 퀄리티 좋은 서비스를 제공할 수 있었을 것 같습니다.

Main Poster

Github

https://github.com/dt1917/seear_server