kotlin으로 netty socketio 라이브러리를 구현 및 개선해보는 프로젝트입니다.
- netty 라이브러리를 직접 사용해봄으로써 낮은 추상화 수준의 자바 네트워킹 경험해보기
-
kotlin coroutine을 활용하여 최적화하기- Coroutine을 사용했을 때 Continuation으로 인해 메모리를 더 많이 사용하기에 대용량 트래픽 처리시 Netty의 순수한 NIO보다 성능이 떨어지는 것으로 판단되어 진행하지 않았습니다. (artillery로 부하 생성 및 intellij Profiling tools로 JVM, 스레드 모니터링)
- 클래스간 복잡한 의존성을 가지고 있는 기존 아키텍처 개선하기 -> object 기반 싱글톤 구조로 변경
netty로 구성되어있는 코드의 전체 구조를 이해하고, 비동기 처리를 위한 스레드 동작을 파악하기 위해 netty framework에 대해 공부하였습니다.
다양한 타입의 제네릭을 가질 수 있는 DataListener<T>
를 List<DataListener<*>>
로 저장한 후 꺼내왔을 때, kotlin에선 class를 알 수 없어 Nothing
으로 표기되는 문제가 발생했습니다. 이를 통해 <*>
과 <?>
의 차이점과 Mixed-Site Variance 등 다양한 공변성 방식이 있음을 알게 되었습니다.