본문 바로가기

[Cloud]/[GCP]

[Side-Project] Ant Platform - High-scale chat server 구성하기 2

728x90

[ 캐치업 ]

  오랜만에 스프링 부트에서 다시 사이드 플젝으로 돌아왔다. 지난 포스팅에서 [ 1. Cloud MemoryStore에 Redis Instance를 생성 ],  [ 2. VPC Connector를 생성 ] 까지를 완성했다. 이후로 바로 cloud-run을 사용하려다가, 코드에서 고칠 부분도 있고 해서 VM에 환경을 구성하고 방화벽 등 서버간 통신이 문제가 없는 것을 확인하고 나서 Docker를 통해 배포를 해보기로 마음먹었다.  

 

[Side-Project] Ant Platform - High-scale chat server 구성하기 1

[ 캐치업 ] 지난 한주는 정말 불꽃같은 한주였다. 먼저 면접... 백엔드+ML+클라우드+빅데이터(파이프라인) 에 대한 다소 깊이있는(신입 수준에서) 내용을 정리하느라 정작 기본적인 내용을 리마인

buildabetterworld.tistory.com



[ 삽질의 삽질 ]

  사실 여기서부터 오랜기간 삽질의 기간이 있었다... redis instance를 gcp상에서 처음 사용해 보았고, fire-wall 설정과 vm-instance위에서 정상적으로 프로그램이 동작하는데 까지  좋은 경험이 되었다. '그냥 필요한거 설치하고 실행하면 끝이지' 라고 생각했었다가, 이거를 왜 app-engine이라는 놈을 굳이 만들어서 편하게 환경을 구축하도록 도와주는 것인지 '정말로' 체감하게 되었다. 

1. local에서 돌아가는 localhost redis-url을 gcp redis instance url로 변경해 주었다
2. gunicorn으로 가볍고, 빠르게 동작하는 서버로 바꿔주었다(uwsgi 대체)
3. GCP VPC에 적용될 inbound/outbound 규칙을 설정해주었다
4. APP Engine을 사용하지 않고 날것의 VM에서 정상적으로 동작하도록 환경을 구성해보았다.
5. Flask response 객체를 만들 때 mime-type을 text/event-stream을 사용하는데, 블럭단위로 전송할 때 "/n" 대신 "/n/n"을 사용한다는 것을 알게 되었다!

 

Server-Sent Events 사용하기 - Web API | MDN

Server-Sent Events를 사용하는 웹 애플리케이션 개발은 매우 간단하다. 웹 애플리케이션으로 스트림 이벤트를 보내는 약간의 코드가 서버 상에 필요하지만, 웹 애플리케이션 측은 웹 소켓에서 이벤

developer.mozilla.org

 

[ 테스트를 위해 VM에 올린 샘플 ] 

 

Seungyeup/Project-scalable-chat-platform

cloud-run, redis, flask. Contribute to Seungyeup/Project-scalable-chat-platform development by creating an account on GitHub.

github.com

    결론적으로 아직 High-scalable은 아니지만, 코드가 정상적으로 동작하도록 만들었다. GCP Redis Instance와 Redis의 pub/sub기능을 사용했고, VPC와 VM-instance를 사용했다. 

시크릿 창과 일반 창에서 같은 url에 접속해 채팅(세션은 다르게 유지해야 한다)
서버에서 redis로 수신되고 있는 데이터를 볼 수 있다.

728x90