서버 추가(?)를 하게 된 이유는 여기를 참조하자.
서버에서 다운로드 할 수 있는 기능은 크게 3종류 였다.
1. Excel
2. PPT
3. Zip
excel인 경우 POI library에서 임시 xml file로 일정row 수가 작성되면 임시로 disk에 저장하다가 최종적으로 생성이 끝나는 시점에 xlsx file로 저장을 해주는 streaming 방식으로 생성되고 있었기에 memory에 큰 부담은 아니였다.
PPT는 steraming 방식을 지원을 하지 않아서 최종적으로 생성되기 전까지 PPT의 모든 데이터가 memory위에 올라가 있는 상황이라 OOM이 발생하는 상황이었다.(PPT 최종 용량이 2기가가 넘는 파일이.....)
가장 좋은건 다운로드 로직을 분리해서 서버에 올리면 좋겠지만 주어진 시간이 분리하기에는 부족하여 같은 소스코드의 다운로드 서버를 하나 추가하기로 하였다.
기존에는 @Async로 thread pool을 관리해서 요청 받은 서버에서 바로 생성하고 다운로드 되는 로직이었지만 다운로드 서버가 추가 되면서 부터는 다운로드 서버에서만 다운로드가 실행되어야 하기때문에 Message Queue를 이용하였다.
기존 서버 구성
변경 후 서버 구성
구성은 정해졌으나 추가적인 고민이 남았다.
요청 할때의 parameter를 MQ로 전달을 어떻게 할 것인지, MQ에서 요청을 받고나서 어떤 class의 함수를 호출하여야 할지 등등...
남은 이야기는 2편에서.....