SSH 게임, 키 입력 1번에 100개 패킷? 성능 저하의 원인과 해결책
SSH를 통해 게임을 개발하던 중, 키 입력(Keystroke) 1회당 100개 패킷 전송 문제 발생
원인은 SSH의 키스트로크 타이밍 난독화(Keystroke Timing Obfuscation) 기능으로 밝혀짐
성능 개선을 위해 go-crypto 라이브러리 패치(Patch)를 통해 해당 기능 비활성화 시도
커뮤니티에서는 보안(Security)과 성능(Performance) 사이의 트레이드오프(Trade-off)에 대한 논의가 진행됨
SSH 키스트로크 난독화(Keystroke Obfuscation)의 문제점
게임을 SSH를 통해 전송하는 과정에서 키스트로크 타이밍 난독화(Keystroke Obfuscation) 기능이 성능 저하의 주범으로 지목되었다. 이 기능은 키 입력 간격을 무작위로 조정하여 키 입력 패턴을 숨기지만, 게임과 같이 낮은 지연 시간(Low Latency)이 중요한 환경에서는 불필요한 오버헤드를 발생시킨다. 특히, 20ms 간격으로 다량의 'chaff' 패킷을 전송하여 대역폭(Bandwidth) 소비를 증가시키는 것으로 나타났다.
성능 개선을 위한 go-crypto 라이브러리 패치
저자는 SSH 성능 개선을 위해 go-crypto 라이브러리에서 [email protected] 확장(Extension)을 비활성화하는 패치를 적용했다. 이 패치는 키스트로크 난독화 기능을 담당하는 SSH2_MSG_PING 메시지 전송을 막아 CPU 사용량(CPU Usage)을 50% 이상 감소시키는 효과를 보였다. 하지만, 라이브러리 포킹(Forking)에 따른 유지보수(Maintenance) 및 보안(Security) 문제에 대한 우려도 제기되었다.
커뮤니티의 다양한 해결책 제시
커뮤니티에서는 SSH 성능 문제를 해결하기 위한 다양한 대안이 제시되었다. TCP_CORK를 사용하여 패킷 수를 줄이거나, TCP_NODELAY를 비활성화하여 지연 시간을 줄이는 방법 등이 제안되었다. 또한, 보안이 중요하지 않은 환경에서는 텔넷(Telnet)과 같은 프로토콜을 사용하는 것도 고려해 볼 수 있다는 의견도 나왔다. 하지만, 이러한 방법들은 보안(Security)과 성능(Performance) 사이의 트레이드오프(Trade-off)를 고려해야 한다.
LLM을 활용한 디버깅 과정
저자는 문제 해결 과정에서 Claude Code와 같은 LLM을 활용하여 tcpdump 분석을 수행했다. LLM은 pcap 파일 분석을 통해 문제의 원인을 파악하는 데 도움을 주었지만, SSH의 일반적인 동작에 대한 오해로 인해 정확한 정보를 제공하지 못하는 경우도 있었다. LLM을 활용한 디버깅은 유용하지만, 결과에 대한 비판적 사고(Critical Thinking)와 전문 지식(Expert Knowledge)을 병행해야 함을 시사한다.