Redis pub/sub 없이 채팅 애플리케이션 개발하기
클라우드 환경에서 자주 사용되는 서버 구조 중 하나는 stateless 구조입니다. 하지만 때때로 stateful 기능이 필요한 경우가 있습니다. 예를 들어, 채팅 기능을 제공하려면 서로 다른 서버와 세션을 유지하고 있는 유저 간에도 데이터를 주고받을 수 있어야 합니다. 이를 위해서는 각 유저가 어떤 서버에 연결되어 있는지 등의 상태 정보를 공유할 수 있어야 하죠.
stateless 구조에서는 이런 상태 교환을 위해 보통 messaging middleware(예: Redis 등)를 활용하게 됩니다. 그러나 messaging middleware를 도입하면 운영 부담이 커진다는 단점이 있습니다.
이 문제를 해결할 수 있는 방법 중 하나가 클러스터링(clustering)입니다. 서버 간 상태를 공유할 수 있도록 구성하는 방식인데요, 대표적으로 Akka Cluster를 활용하는 방법이 있습니다. 다만 Akka는 라이선스 문제가 있어서, 저는 Akka의 fork 버전인 Pekko를 사용해보기로 했습니다.
그런데 Spring Boot 기반으로 개발하던 제 입장에서는, Pekko만 단독으로 사용하거나 Spring Boot와 통합해 사용하는 것이 꽤 어렵게 느껴졌습니다. (예: ActorSystem 초기화, Actor 생성, EntityRef 생성 등)
그래서 Spring Boot 사용자들이 더 쉽게 actor를 사용할 수 있는 방법은 없을까? 고민하다가, 결국 직접 라이브러리를 만들게 되었습니다.
🔗 https://github.com/seonWKim/spring-boot-starter-actor
이 라이브러리를 사용하면 채팅 기능 같은 stateful 기능을 별도의 messaging middleware 없이도 구현할 수 있습니다. 또한 기존 Spring Boot와 Pekko의 기능을 그대로 활용할 수 있도록 설계했기 때문에, 익숙한 환경에서 손쉽게 actor 기반 기능을 확장할 수 있습니다.