[신규 프로젝트: CC]의 게임 서버 개발에 함께할 동료를 모집합니다!
우리가 하는 일 🔙🔚
- Scala 를 이용하여 높은 반응성 및 확장성을 가진 게임 서버를 개발합니다.
- 구체적으로는 함수형 프로그래밍과 이벤트 소싱을 활용해 고성능의 Stateful 서버를 구현합니다.
- 단순 기능 구현을 넘어 좋은 디자인과 아키텍처를 통해 높은 생산성과 기술적 발전을 추구합니다.
- 대규모 트래픽을 안정적으로 처리할 수 있도록 지속적으로 아키텍처를 개선하고 성능을 최적화합니다.
- 종종 게임 개발 및 운영에 필요한 툴이나 스크립트들도 개발합니다.
좀 더 매력 어필을 해볼께요 🤟
- 우리는 모두 함수형 프로그래밍에 진심입니다.
- 우리는 ‘멋’ 을 위해 함수형 프로그래밍을 하는 것이 아닙니다. 우리는 실용성과 팀의 목표를 위해 함수형 프로그래밍을 사용하고, 이것이 미래라고 생각합니다.
- 도메인 로직, Dependency Injection, 동시성 프로그래밍, 외부 사이드 이펙트 (DB, Kafka, Redis 등) 을 포함하여 대부분의 코드를 순수 함수로 작성하고 있습니다.
- 몇 년의 기간동안 코드베이스를 뜯어고치며 끊임없이 함수형 프로그래밍을 발전시키고 불필요한 추상화 (Monad 등) 은 최소화하였습니다. 대규모 프로덕션 서비스에서 함수형 프로그래밍이 어떻게 활용되는지 배울 수 있는 최고의 팀이라고 생각합니다. 😉
- 문제를 해결하기 위해 새로운 기술과 아키텍처를 적극적으로 시도합니다.
- Scala 와 함수형 프로그래밍부터 이벤트 소싱, 액터 모델, 그리고 CockroachDB 까지 흔하게 사용되지 않는 기술들이 어떤 이유로 어떻게 사용되는지 경험하실 수 있는 좋은 기회가 될 거라고 믿습니다.
- 그 외에도 저희는 각종 문제들을 해결하기 위해 다양한 기술적인 챌린지들을 해왔습니다. 자세한 내용은 아래 챕터에서 일부 확인하실 수 있습니다.
- 업무상 사용하는 다양한 오픈소스들에 적극적으로 기여하고 있습니다.
독특한 기술적 챌린지들 ✨
- 간결하고 사이드 이펙트없는 도메인 로직 작성을 위한 자체적인 DSL 설계 (자세한 내용)
- 도메인 로직은 대부분 사이드 이펙트와 ‘완벽하게’ 분리되어 있습니다. 단순히 인터페이스 기반의 DIP 구현을 말하는 것이 아닙니다. 런타임 상에서도 도메인 로직 (고수준 레이어) 은 절대 저수준 레이어를 호출하지 않고, 오직 저수준 레이어가 도메인 로직을 호출해 반환값을 바탕으로 사이드 이펙트 (DB 저장, 외부 API 호출 등) 을 수행합니다.
- 이러한 도메인 로직을 간결하고 가독성있게 작성하기 위해 DSL 을 설계하였습니다. 덕분에 빠르게 변화하는 기획에 발빠르게 대응하며 신규 기능 개발 또한 빠르고 안전하게 개발할 수 있게 되었습니다.
- 또한 이러한 도메인 로직을 게임 서버뿐만 아니라 데이터 엔지니어링과 내부 툴의 프론트엔드에서도 그대로 재사용할 수 있도록 했습니다. (웹브라우저에서도 게임 서버 로직이 실행돼요! 😮)
- 코드 예시 (퀘스트 완료 로직)
- 분산 환경에서의 트랜잭션을 위한 2PC (2 Phase Commit) 구현 (자세한 내용)
- 일반적으로 분산 환경에서의 트랜잭션에서는 SAGA 패턴이 사용되지만, 저희는 게임의 특성과 생산성을 고려하여 2PC 를 사용하기로 하였습니다.
- 일반적인 액터 라이브러리 (Akka Persistence) 상에서는 2PC 구현이 불가능하기 때문에, 자체적으로 액터 모델과 이벤트 소싱을 구현하고 거기에 확장하여 2PC 프로토콜을 구현하였습니다. 또한 2PC 프로토콜을 사용하는 로직을 DSL 로 설계하여 코드의 간결성과 생산성을 더욱 높였습니다.
- 데드락 등을 면밀히 검토하여 설계하였고 부하테스트를 열심히 수행한 결과, 출시 이후 별다른 문제없이 안정적으로 동작하고 있습니다.
- 코드 예시 (친구 요청)
- Akka 라이브러리 의존성 제거 및 자체 구현 (자세한 내용)
- 저희는 분산 Stateful 서버 구현을 위해 Akka 를 사용하고 있었습니다. 하지만 롤링 업데이트 혹은 네트워크 순단 등의 상황에서 종종 문제가 발생했고, Akka 기반에서는 완전히 해결하기 쉽지 않다고 생각했습니다.
- 따라서 필요한 기능들을 자체 구현했고 이를 오픈 소스로 공개했습니다(Shardcake). 그 결과 더 안정적으로 서버를 운영할 수 있게 되었고 롤링 업데이트 시간도 단축 가능해졌습니다. 마지막으로 Akka가 유료로 전환됨에 따라 큰 비용절감 효과도 얻을 수 있었습니다.
이런 분을 찾습니다 👀