AI를 활용한 동영상 분석 서비스 server docs

<aside> ⚙ 개발기간: 2024.04 ~ 2024.07 개발스택: python django / docker / Azure - VM, Blob storage, etc / AWS - S3, Lambda / redis / postgresql / nginx

개발자: 홍정범

</aside>


구조도

image.png

git branch & CD

azure에 두 가지 리소스 그룹 d11-kr, d11-ai를 만들고 kr은 demo server, ai는 production server로 운영하려는 계획이었음. video-scoover-api git repository에서 브랜치별로 github action과 azure container registry를 이용해서 자동 배포 파이프라이닝을 구현했음. demo branch와 kr, main branch와 ai server가 연동되어 있었음

CD pipeline

1. deploy 하려는 서버의 이미지를 생성합니다.
    
    `docker build -f Dockerfile.deploy -t video_scoover_api .`
    
2. image의 이름과 태그를 azure container registry에 push 할 수 있는 형태로 변경합니다.
    
    `docker tag video_scoover_api:latest [d11kr.azurecr.io/django_back-web:v1](<http://d11kr.azurecr.io/django_back-web:v1>)`
    
3. azure cli를 이용하여 사용자 인증을 합니다. acr에도 로그인합니다. (추가 과정 필요)
    
    `az acr login --name d11kr`
    
4. acr에 서버의 이미지를 push 합니다.
    
    `docker push [d11kr.azurecr.io/django_back-web:v1](<http://d11kr.azurecr.io/django_back-web:v1>)`
    
- azure VM 접속

1. acr에서 서버의 이미지를 내려받습니다.
    
    `sudo docker pull [d11kr.azurecr.io/django_back-web:v1](<http://d11kr.azurecr.io/django_back-web:v1>)`
    
2. 현재 실행중인 서버를 멈추고 내립니다 (서버 중단)
    
    `sudo docker stop d11-kr`
    
    `sudo docker rm d11-kr`
    
3. 새로운 이미지를 실행합니다

매번 다시 배포하기가 너무 귀찮아서 자동화 파이프라이닝을 했음. 무중단 배포를 설계하고 싶었으나 구조상의 어려움 그리고 일정상 우선순위에서 밀려나 중단 배포로 만족했음. 이미지 실행 명령어는 쉘 파일로 각 VM에 넣어놓고 환경변수도 그 안에서 설정하게 했음(blue green을 지향하고 있었음). 이는 안티 패턴이라고 생각해서 추후에 가장 우선적으로 수정해야하는 부분이라고 생각하고 우선 넘어갔음.

해당 파이프라인의 경우 github action으로 push시에 자동으로 실행할 수 있도록 설정해두었음. 레포지토리에서 자세한 정보를 확인 가능.

nginx

https 설정을 위해서 nginx를 VM안에 설치하고 lets encrypt를 이용해서 무료 SSL 인증서를 활용했음. GCP와 같이 자체 인증서를 지원해줄 것이라고 예측하고 구성한 구조였는데 지원해주지 않아서 차선책으로 설정한 방법.

https 설정 외에 추가적으로 설정한 부분은 django admin page에서 사용하는 static file의 위치를 위해서 static directory 설정한 부분과 http로 들어온 요청을 301이 아닌 308로 REST API 방식을 유지한 채로 redirect 하도록 설정한 부분임.


Auth

로그인 구조를 고민할 당시에 남겨둔 insight

image.png

로그인 architecture

image.png