본문 바로가기

개발일지(일간)

도커로 프로젝트 배포하기 - 워크플로우

 

프로젝트를 배포하고 관리하던중, 스케줄러 서비스는 분리를 하는게 좋겠다는 생각이 들었다.

이유는 

1. 추후 도커 컨테이너를 통해 로드밸런싱을 할 건데, 시간에 맞춰 크롤링을 하는 스케줄링 서비스가 기타 다른 api를 관리하는 서비스와 같은 컨테이너로 실행되면 중복 실행 등의 문제가 생길 수도 있다.

2.  api서버는 실시간 요청에 대응해야 하므로, 트래픽이 많아질 때 스케일링이 필요할 수 있지만, 스케줄링은 고정된 시간에만 작동하므로 그만큼의 리소스를 요구하지 않기 때문이다.

3. 스케줄링 서비스와 api서비스의 업데이트 주기가 다르기 때문이다. api서비스는 상대적으로 업데이트를 많이하지만 스케줄링 서비스는 한번 구축해놓으니 업데이트를 잘 하지 않게 되었다.

4. 크롤링 스케줄링 서비스는 외부 데이터를 크롤링해오다 보니 오류가 나는 경우가 있다. 서비스를 분리하면 이런 경우에도 api서비스는 문제가 생기지 않는다.

5. 지금 당장 필요없다고는 생각하지만, 스케줄링만 하는 서비스를 따로 분리함으로서 스케줄링 서비스는 보안성을 챙길 수 있다.

 

위와같은 이유로 서비스를 분리해야겠다고 생각했고, 도커를 통해 컨테이너로 분리하는게 좋다고 생각했다.

거기에 Github Actions를 통한 ci/cd를 적용해놓았으므로 기존에 s3  -> aws deploy를 통해 관리하던 cd파이프라인을 dockerhub -> docker컨테이너로 바꾸어 관리하기로 했다. 최종적으로 구상한 cd/ci 워크플로우는 다음과 같다.

도커를 통해 api서버와 스케줄링 서버를 분리해서 관리하고, api서버는 여러대의 컨테이너에 배포해, nginx로 로드밸런싱까지 하는것이 최종 목표이다.