Page History
...
| Info |
|---|
Reactive 모드의 웹소켓을 활용해 PubSub의 PubSub 기능을 액터모델을 통해 구현하는것을 간략하게 알아보고 웹소켓은 브라우저와 양방향 통신이 가능한 특징이 있으며 , 웹소켓 핸들러를 이용해 액터모델에 연결할수 있으며, 액터모델이 가진 특징을 이용해 분산처리로 확장을 할수 있습니다. 연결 하는것을 간략하게 알아보고 CRUD 테스트인경우 블락킹 기법의 일반적 유닛테스트를 이용하면 되지만, 실시간 이벤트가 작동하는 모듈을 중단시키지 않고 블락없이 최종 수신 검증을 하는 방법을 알아보겠습니다. |
...
이벤트 스토밍으로 풀어본 PUBSUB 과정
와이어 프레임만 그려 빈약한 기획문서에 기획문서 작성에 대부분 시간을 대부분 사용하는 과정을 가속화하는 방법으로 DDD에 이벤트 스토밍으로 소개되고 있습니다.DDD에이벤트 스토밍편에서 소개되는 내용으로
데이터중심이 아닌, 이벤트 중심 설계 특히 액터모델에 도메인을 녹이고자할때 도입되는 기법으로 , 개인해석에 의한 간소화 버전으로 이용해 보았습니다.
...
| draw.io Board Diagram | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
이 방식의 디테일을 연구하고 싶으면 다음 링크 추가참고
구현된 코드의 작동에 대한 설명은 이러하고 리액티브 웹소켓+액터모델을 통해 PUBSUB 구현된 코드를 이벤트 처리기 인터페이를
간략하게 먼저 살펴보고 유닛테스트를 RealTime으로 작동중인 로직코드의 유닛테스트 수행해보겠습니다.
UserSessionManager Actor
...
EventTextMessage가 올바르게 JSON으로 변환되어 WebSocket으로 전송되었는지 검증.실질적인 출력값을 비교함으로써 테스트의 신뢰도 향상.
🌟 장점 요약
| 항목 | 장점 |
| Mock 기반 테스트 | 실제 네트워크 없이 WebSocket 동작을 검증할 수 있어 빠르고 안정적 |
| 비동기 메시지 처리 검증 | testProbe + Ping/Pong 패턴으로 액터의 처리 완료 타이밍을 명확하게 파악 |
| 직렬화 검증 포함 | 객체가 예상한 JSON 형식으로 변환되어 메시지 전송되는지까지 검증 |
| 액터 기반 테스트 구조 | 메시지 기반 설계가 잘 반영되어 있고, 액터의 상태 관리가 유연하게 테스트 가능 |
| 단일 책임 테스트 | 세션 등록 → 메시지 전송 → 검증까지 각 흐름이 분리되어 명확 |
💡 개선 포인트 (보너스)
verify(session).send(...)도 함께 확인하면 실제 메시지 전송까지 테스트 가능예외 상황 (예: 존재하지 않는 세션에 메시지 보낼 때)도 추가하면 완전한 커버리지 확보
...
액터모델로 구현이 분리된경우 그대로 이용해 API화를 할수 있으며 실시간 통신중인 1:1 연결수립된후~ API를 이용해 중간관리 계층이 개입할수도 있습니다.
관련 코드 :
- API : https://github.com/psmon/kopring-reactive-labs/blob/main/KotlinBootReactiveLabs/src/main/kotlin/org/example/kotlinbootreactivelabs/controller/PubSubController.kt
- Front : https://github.com/psmon/kopring-reactive-labs/blob/main/KotlinBootReactiveLabs/src/main/resources/static/ws-rx-test.html
해당기능을 이용할수 있는 API도 작성되어 이용할수 있습니다.
