22.04 / 무의미한 무중단 배포 해결
이슈
새 코드 배포 시 유저의 서비스 이용에 끊김이 생기는 지점이 있음
원인
크롬 드라이버로 이미지를 제작해주는 코드가 존재하는데, 유저가 특정한 좌표와 지도의 종류 등의 정보로 위성 지도를 생성, 렌더링이 완료되면 유저에게 전달해 주는 코드였다. 이미지 제작에는 대략 10~20초 정도의 시간이 걸리는데, 만약 유저가 이미지 제작 중에 코드를 배포하면 제작이 중단되어 버렸다. 무중단 배포를 구현했는데, 사실상 무중단이 아닌 셈이었던 것이다.
무중단 배포의 의미는 사용자 서비스 이용의 연속성에 있다고 생각한다. 그런데 지금 내 서비스는, 배포 시 연속성이 끊기는 지점이 발생한 것이고, 이러면 무중단 배포의 의미가 없다고 생각했다.
해결
실천한 방법은 다음과 같다.
역할을 기준으로 패키지 분리
- 위성 이미지 제작 패키지
- 일반적인 페이지 생성 패키지현재 서비스 상태는 반중단배포(?) 상태이다. 그냥 동적 페이지 생성 담당인 jar는 무중단 배포로 돌아가고 있지만, 이미지 제작 담당 jar는 중단 후 배포 상태이다.
이러면 무슨 의미가 있나 싶을 텐데, 지금까지의 경험상 일반적인 페이지 생성 담당 패키지의 코드 수정이 훨씬 잦았던 점과, 현재 서버 여유 메모리나 cpu 사용량의 한계 때문에 이미지 제작 api 서버는 동시에 2개 이상 인스턴스를 만들기에는 어려운 점 등등을 고려해 보면 현재의 방식이 지금으로서는 최선이라고 생각한다.
배운점
분할해 보니 좋은 점
담당하는 역할이 정해져 있으니, 코드의 목적이 분명해진다
인스턴스 하나가 죽어도, 다른 서비스 이용이 가능하다
이미지 API를 거치지 않아도 지도 생성이 가능한 타입들이 있다
API 서버가 죽어도 대안이 있다는 것은 큰 장점
분할해 보니 힘들었던 점
테스트가 어렵다
시스템이 복잡해진다 (Ex: 데이터 전송 포맷)
유저에게 추가로 전송해줄 데이터가 생김
기존에는 커밋 한번이면 수정 완료인데, 패키지가 나뉘어 있다 보니 이놈 저놈 다 바꿔야함
새로운 기능 추가는 모르겠지만, 기존 기능이 초기 설계에서 변형이 일어나면 대응이 쉽지 않을 것 같다
Last updated