- 발행일
STOMP 채팅에서 두 번째 메시지부터 동기화가 깨지던 문제 — 범인은 key였다
첫 메시지는 잘 가는데 두 번째부터 화면이 안 갱신되고, 새로고침하면 다 보이는 이상한 증상이었습니다. 저장은 되는데 렌더만 안 되는 것 — React key로 쓰던 messageId가 서버 응답에 없어서 프런트가 난수로 채우고 있었어요. 원인을 좁힌 과정과, 당시 정리에서 스스로 놓쳤던 것까지 다시 봤습니다.
첫 메시지는 잘 가는데 두 번째부터 화면이 안 갱신되고, 새로고침하면 다 보이는 이상한 증상이었습니다. 저장은 되는데 렌더만 안 되는 것 — React key로 쓰던 messageId가 서버 응답에 없어서 프런트가 난수로 채우고 있었어요. 원인을 좁힌 과정과, 당시 정리에서 스스로 놓쳤던 것까지 다시 봤습니다.
자바스크립트에서 문자열(String)은 프로그래밍에서 가장 기본적이고 중요한 데이터 타입 중 하나입니다. 이번 글에서는 문자열이 무엇인지, 어떻게 사용하는지, 그리고 자바스크립트에서 문자열을 다루는 다양한 방법에 대해 알아보겠습니다.
wss 연결 실패를 디버깅하던 중 백엔드 로그에 "Invalid character found in method name [0x16, 0x03, 0x01…]"이 찍혔습니다. 악성 트래픽인가 싶었던 이 바이트들은 사실 TLS 핸드셰이크의 첫 패킷이었어요. HTTP만 받는 포트에 wss를 쏘면 왜 이런 로그가 남는지, 프로토콜 불일치를 로그만 보고 판별하는 법을 정리했습니다.
Vitest와 Testing Library로 단위 테스트부터 통합 테스트까지 다루는 강의를 들으며 정리한 내용을, 챕터 나열 대신 주제별 핵심으로 압축했습니다. 뒤이어 이 중 어떤 개념이 실제 프로젝트(Jest 테스트 복구, Playwright QA 스윕)에서 살아남았고 어떤 개념은 유지되지 못했는지 정직하게 결산했습니다. 강의 예제 자체에서 발견한 낡은 API와 깨지기 쉬운 코드도 함께 짚었습니다.
useInfiniteQuery, useQuery, useSWR로 무한 스크롤을 각각 구현해 비교했습니다. 그런데 실제 프로젝트에 넣어보니 예제 코드 세 개가 전부 문제를 갖고 있었어요. 종료 조건, stale closure, 등호 비교로 바닥을 판정하는 것까지 — 실무에서 걸린 지점을 뒤에 덧붙였습니다.