기존 Ruby의 네트워크 연결 방식은 듀얼 스택 환경에서 순차적인 DNS 해상도와 연결 시도를 수행했습니다. IPv6 주소를 먼저 시도하고 실패 시 긴 타임아웃(30초 이상)이 발생한 후에야 IPv4 주소를 시도하여, 서버의 IPv6 설정 문제나 네트워크 경로 이상 시 사용자는 불필요하게 긴 시간(30초 이상)을 기다려야 했으며, 이는 애플리케이션의 응답성을 심각하게 저하시켰습니다.
Ruby 3.4의 Happy Eyeballs v2는 연결 시도를 경합시키는 방식을 채택합니다. 이 알고리즘은 IPv6와 IPv4 주소를 동시에 쿼리하고, 먼저 IPv6 연결을 시작한 후 250ms 내에 성공하지 못하면 병렬로 IPv4 연결을 시작합니다. 두 연결 중 먼저 성공하는 쪽을 사용하고 다른 시도는 취소합니다. 이 덕분에 IPv6 연결에 문제가 있더라도 사용자는 최대 250ms의 지연만 경험한 후 IPv4를 통해 즉시 연결됩니다. 이는 기존의 30초 이상 대기하던 상황과 비교할 때 극적인 성능 향상을 가져옵니다.
특히, Ruby on Rails 애플리케이션은 이 개선 사항의 가장 큰 수혜자입니다. Net::HTTP
라이브러리가 내부적으로 TCPSocket
을 사용하므로, Net::HTTP
를 사용하는 모든 Rails API 호출은 별도의 코드 변경 없이 자동으로 Happy Eyeballs v2의 이점을 누리게 됩니다. 이는 외부 서비스와의 연동 시 발생할 수 있는 타임아웃 문제를 효과적으로 줄여줍니다. Happy Eyeballs는 미미한 오버헤드를 발생시키지만, 대부분의 애플리케이션에서 타임아웃 방지라는 이점이 훨씬 큽니다.