[Team_ForV] 아키텍처 및 기술스택 소개

Update:     Updated:

카테고리:

태그:

아키텍처 소개

스크린샷 2022-08-03 오후 8 56 10

  • Front-End

  • Back-End

  • DevOps

  • AI (Tools, Env)

  • UI/UX, MockUp Design

  • Team Collaboration Tool

프로젝트의 흐름

이 프로젝트의 기본 흐름은 이러하다.

  1. react(클라이언트)로부터 사용자의 요청이 들어오면,
  2. nginx(proxy 서버)가 클라이언트와 서버 사이에서 대리로 통신을 수행해준다.
  3. djangoflask는 python으로 쓰여진 web application이기 때문에 gunicorn과 같은 wsgi 서버를 통해 forwarding해주게 되고,
  4. 사용자의 요청에 따라
    • 단순한 페이지 조회 요청이 들어오면 django api 서버로 연결되어 필요한 정보들을 mysql 데이터베이스에서 조회해 보여주고,
    • 음성 합성 요청이 들어오게 되면 flask model 서버가 필요한 모델 파일들로 음성 파일을 합성하여 google cloud storage로 올린다.
  5. 앞선 백엔드단의 작업이 완료되면, client는 원하는 멤버의 프로필 정보를 확인하거나, 원하는 문장을 원하는 멤버의 목소리로 들어볼 수 있게 된다.
  6. 마지막으로, 개발환경의 통합과 신속한 배포를 위해 docker로 컨테이너화하여 개발을 진행하였다.

이 일련의 과정들을 수행함에 있어서, 사용자의 요청이 많은 상황에 대비하여 몇몇 ‘장치’들을 추가했는데…

서버의 분리와 비동기처리

  • 서버의 분리

    image

아키텍처에서 볼 수 있듯이, 기능별로 서버를 분리했다.
이렇게 서버를 분리하여 운영할 시 model 서버가 다운되도 api 서버는 동작하듯이, 한 기능을 못 쓰게 되더라도 전체 서비스가 죽는 것은 방지할 수 있다.

django는 자체 ORM을 내장하여 다양한 데이터베이스에 유연하게 액세스할 수 있다.
따라서, 데이터베이스와 연결되는 모든 작업들은 django가 api server로써 동작하도록 만들었고,
flask는 비교적 가벼워서 음성 합성 작업만 전담하는 model sever로 선택했다.

  • Message Queue와 Worker를 이용한 비동기처리

    image

python 서버는 사용자의 요청이 수행되는 동안 또다른 요청이 들어올 시에 앞선 요청이 수행될 때까지 대기하고 있게 된다. 이는 다중 사용자가 서비스를 이용하기에 매우 안 좋은 환경이다.

따라서, rabbitMQcelery를 이용하여 비동기처리를 하도록 만들었다.
사용자의 요청을 task화하여 celery에게 전달하고,
celery worker가 그 작업을 비동기적으로 수행하게끔하여, 서버가 여러가지 일을 수행할 수 있도록하였다!

다음 글 소개

단순히 Frontend와 Backend를 넘어 Proxy Server, WSGI, Bucket, Docker, AWS … 등등 많은 기술들이 등장했다.
앞으로의 글에서는 앞서 언급한 기술들에 대해 하나씩 정리하고자 한다.

먼저, python 기반의 Backend framework에서의 work flow를 살펴보자!

Team_ForV 카테고리 내 다른 글 보러가기

댓글 남기기