이전에 작성했던, [일단 박죠] O2O Object Detection 서버 Message Queue 적용을 위한 분석 에서 O2O Object Detection 서버에 Message Queue를 적용하기 위한 분석을 진행했었다. 하지만 프로젝트를 진행하면서 발견한 몇 가지 문제점들로 인해 구조를 재고하게 되었다. 지난번 개선안에서 제시한 구조에 대해 다시 살펴보며 발견한 문제와 그 해결 방안을 이번 글에서 다루겠다.
지난번에 개선하였던 구조이다. 비동기 방식과 서버간의 결합도를 낮추기 위해서 kafka connect를 도입하였다. 그 당시에는 문제 없어 보이는 구조였지만, 해당 구조를 직접 그려보면서 점검해본 결과 문제점들을 발견하였다.
해당 문제점들을 해결하기 위해 여러가지 방안들을 생각해 보았다.
문제 해결을 위해 Spring Cloud Gateway의 도입을 결정했다. MSA를 고려했으나 프로젝트의 규모와 현재 상황을 고려할 때, 전체적인 오버헤드가 늘어나는 오버엔지니어링이 될 것이라는 결론에 도달했다. Spring Cloud Gateway를 사용하면 다음과 같은 이점을 얻을 수 있다.
결론적으로, Spring Cloud를 이용한 구조 변화는 비동기 방식과 서버 간 결합도를 낮추는 Message Queue의 장점을 유지하면서도, 서버의 본연의 역할에 집중할 수 있게 해준다.
이 구조에서는 Kafka 도입이 오버엔지니어링일 수 있다고 생각한다. 객체 검출 서버와 상점 관리 서버 간 HTTP 요청으로 검출 결과를 충분히 전송할 수 있기 떄문이다. 그럼에도 불구하고 Kafka를 선택한 것은, 시스템 간 결합도를 줄이는 관점에서 보았을 때의 이점 때문이다. 실무 경험이 부족하여 이 구조가 최적인지 확신할 수는 없으나, 계속해서 발전시켜 나갈 계획이다.
앞으로는 프로젝트 구현한 내용을 공유하도록 하겠다. 하지만 대부분의 주요 내용은 이미 스프링 공부 및 생각 정리 에서 다루었기 때문에 O2O 시리즈에서는 간단하게 소개하는 방식으로 진행하겠다.