ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1486 / 1500

큰 WebSocket message를 세 frame으로 나누는 동안 Ping이 끼어들 수 있나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

가능합니다. 첫 data frame이 text 또는 binary opcode와 FIN=0으로 message를 시작하고, continuation frame들이 그 message를 이어갑니다. RFC 6455는 fragmented message 중간에 control frame을 넣을 수 있게 하므로 Ping은 조립 중간에 처리할 수 있습니다. 다만 Ping은 text message의 세 번째 조각이 아닙니다. 예시는 text(FIN=0, opcode=1) → continuation(FIN=0, opcode=0) → Ping(FIN=1, opcode=9) → continuation(FIN=1, opcode=0) 순서이며, Ping은 별도의 control frame이고 마지막 continuation이 message를 완성합니다.

control frame은 fragmentation할 수 없고 payload가 125 bytes 이하여야 합니다. 수신자는 Ping을 처리하면서 text fragment 상태를 유지하고, 마지막 continuation의 payload를 앞선 data fragment 뒤에 이어 애플리케이션 message로 전달합니다. frame boundary와 message boundary를 같게 보면 첫 조각만으로 JSON·UTF-8을 처리하는 오류가 생깁니다. TCP read 경계도 frame 경계를 보장하지 않으므로 parser는 partial header·payload를 버퍼링해야 합니다.

extension이 협상되면 extension data가 각 fragment에 적용되는 방식과 interleaving 허용 범위를 확인해야 합니다. 그렇지 않은 base framing에서는 다른 message의 data fragment를 끼워 넣지 않고, control frame만 중간에 처리합니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 첫 data opcode, continuation opcode, FIN을 실제 frame 순서로 추적하고 Ping을 message 조각 수에 포함하지 않습니다.
  • control frame interleaving과 FIN=1, 125-byte 이하, unfragmented 제한을 연결합니다.
  • frame·message·TCP read의 경계가 다르므로 parser가 조립 상태를 유지해야 한다고 설명합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • Ping을 text payload에 이어 붙이거나 FIN=1, opcode=9를 text message의 세 번째 fragment라고 셉니다.
  • message가 반드시 한 frame이라고 하거나 continuation 없이 두 번째 text opcode를 보냅니다.
  • control frame을 큰 payload로 쪼개거나 TCP recv 한 번이 frame 하나라고 가정합니다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • fragmentation 중 Ping 처리가 지연되면 proxy idle timeout과 heartbeat 판단이 어떻게 달라지나요?
  • continuation 순서가 깨지거나 message-open 상태에서 새 data opcode가 오면 parser는 어떤 protocol error와 close 처리를 적용하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

← 전체 질문 보기