교육생들의 프로젝트를 보면 대부분 웹 앱이며 서버-클라이언트 구조로 되어 있는 경우가 많다.

나의 라떼 이야기를 좀 하면 예전에는 서버가 모노리식 구조들이 대부분이었다. 하나의 서버에서 여러 URL Path(RESTAPI의 시초)를 지원하고 필요하면 cgi라는 c로 만든 프로그램이 계산을 하여 결과까지 printf로 뿌려주었었다.

얼마전에 Nginx unit를 검토하면서 확실히 MSA구조로 서버들이 역할을 분담하여 맡게 만들 수 있겠다는 생각을 하게 된다. 특히 계산량이 많아지는 유닛과 접속만을 처리하는 유닛 등등을 철저히 분리하므로서 이제 어떻게 보면 서버도 완벽한 P2P는 아니지만 P2P의 형태로 가지 않을까 한다. AWS 람다와 같은 서버리스의 형태와는 또다른 효율화를 취하는 것이다. (여기에 논란은 있을 것 같다. 유닛 자체를 서버리스로 만들어 버릴 수 있기 때문이다. 하지만 이는 공용 클라우드에 종속되므로 호불호가 있을 수 있겠다)

Nginx Unit + FASTAPI + AnalyzingBackend(내가 만든 테케 엔진) 로 MSA 하나 만들어 얼마나 버틸지 JMeter로 한계 부하를 측정하였다. 실행환경은 다음과 같다.

model name      : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
cpu cores       : 2

              total        
Mem:        4038192     

대략 docker 컨테이너가 270 tps부터 무응답이 오기 시작하였다. 계산량이 나름 있는 모듈이라 그래도 마이크로 서버로서는 어느정도 선방한게 아닐 까 한다.

AI등을 완벽하게 클라이언트에서 계산을 하면 어떨 까? 이를 위해 PyQT등을 활용해 클라이언트에서 돌아가는 프로그램을 만들고 (Pyinstaller등을 이용) 결과만 서버로 보내는 방식으로 할 수도 있겠다. 아니면 Tensorflow.js를 활용하여 브라우저에서 계산을 시킬 수도 있겠다. 지금 생각은 PC의 다양한 환경을 맞추어야 하는 PyQT보다는 Tensorflow.js를 활용한 브라우저 계산이 더 나아 보인다. 그러면 모델을 만들고 나서 어디에 저장할 곳은 있을까? 클라이언트 PC인데 로컬에 저장할 수 있을까? 여러가지 생각들이 꼬리를 문다.

그냥 갑자기 드는 생각을 주저리 주저리 적어 놓은게 되어 버렸군…