[Team_ForV] 아키텍처 및 기술스택 소개
카테고리: Team_ForV
태그: Info
아키텍처 소개
-
Front-End
-
Back-End
-
DevOps
-
AI (Tools, Env)
-
UI/UX, MockUp Design
-
Team Collaboration Tool
프로젝트의 흐름
이 프로젝트의 기본 흐름은 이러하다.
react
(클라이언트)로부터 사용자의 요청이 들어오면,nginx
(proxy 서버)가 클라이언트와 서버 사이에서 대리로 통신을 수행해준다.django
나flask
는 python으로 쓰여진 web application이기 때문에gunicorn
과 같은 wsgi 서버를 통해 forwarding해주게 되고,- 사용자의 요청에 따라
- 단순한 페이지 조회 요청이 들어오면
django
api 서버로 연결되어 필요한 정보들을mysql
데이터베이스에서 조회해 보여주고, - 음성 합성 요청이 들어오게 되면
flask
model 서버가 필요한 모델 파일들로 음성 파일을 합성하여google cloud storage
로 올린다.
- 단순한 페이지 조회 요청이 들어오면
- 앞선 백엔드단의 작업이 완료되면, client는 원하는 멤버의 프로필 정보를 확인하거나, 원하는 문장을 원하는 멤버의 목소리로 들어볼 수 있게 된다.
- 마지막으로, 개발환경의 통합과 신속한 배포를 위해
docker
로 컨테이너화하여 개발을 진행하였다.
이 일련의 과정들을 수행함에 있어서, 사용자의 요청이 많은 상황에 대비하여 몇몇 ‘장치’들을 추가했는데…
서버의 분리와 비동기처리
-
서버의 분리
아키텍처에서 볼 수 있듯이, 기능별로 서버를 분리했다.
이렇게 서버를 분리하여 운영할 시 model 서버가 다운되도 api 서버는 동작하듯이, 한 기능을 못 쓰게 되더라도 전체 서비스가 죽는 것은 방지할 수 있다.
django
는 자체 ORM을 내장하여 다양한 데이터베이스에 유연하게 액세스할 수 있다.
따라서, 데이터베이스와 연결되는 모든 작업들은 django
가 api server로써 동작하도록 만들었고,
flask
는 비교적 가벼워서 음성 합성 작업만 전담하는 model sever로 선택했다.
-
Message Queue와 Worker를 이용한 비동기처리
python
서버는 사용자의 요청이 수행되는 동안 또다른 요청이 들어올 시에 앞선 요청이 수행될 때까지 대기하고 있게 된다. 이는 다중 사용자가 서비스를 이용하기에 매우 안 좋은 환경이다.
따라서, rabbitMQ
와 celery
를 이용하여 비동기처리를 하도록 만들었다.
사용자의 요청을 task화하여 celery
에게 전달하고,
celery
worker가 그 작업을 비동기적으로 수행하게끔하여, 서버가 여러가지 일을 수행할 수 있도록하였다!
다음 글 소개
단순히 Frontend와 Backend를 넘어 Proxy Server, WSGI, Bucket, Docker, AWS … 등등 많은 기술들이 등장했다.
앞으로의 글에서는 앞서 언급한 기술들에 대해 하나씩 정리하고자 한다.
먼저, python
기반의 Backend framework에서의 work flow를 살펴보자!
댓글 남기기