WebSocket 완전 정복 4편 — 브라우저 API: readyState, bufferedAmount, onclose가 알려주는 것
브라우저 WebSocket 객체의 생성·전송·종료를 예제로 훑고, readyState 네 상태와 bufferedAmount·protocol 속성의 쓰임, 그리고 임의 헤더를 붙일 수 없다는 제약과 onerror 대신 onclose의 코드로 판단해야 하는 이유를 다룹니다.
210 posts · 10 categories · 2026
브라우저 WebSocket 객체의 생성·전송·종료를 예제로 훑고, readyState 네 상태와 bufferedAmount·protocol 속성의 쓰임, 그리고 임의 헤더를 붙일 수 없다는 제약과 onerror 대신 onclose의 코드로 판단해야 하는 이유를 다룹니다.
클라이언트의 Upgrade 요청 헤더와 서버의 101 Switching Protocols 응답을 줄 단위로 읽고, Sec-WebSocket-Accept가 고정 GUID와 SHA-1으로 계산되는 과정을 코드로 확인한 뒤, 이 절차가 보안 장치가 아니라는 사실과 101 이후 이 연결이 더는 HTTP가 아니라는 사실을 다룹니다.
WebSocket이 RFC 6455로 표준화되기까지의 경로와 Sec-WebSocket-Version 13에 남은 흔적, ws와 wss의 기본 포트·URI 규칙, 평문 Upgrade가 중간 장비에서 망가지는 이유, 그리고 핸드셰이크에서 Close까지 연결의 생애주기를 다룹니다.
HTTP가 서버에서 먼저 말을 걸 수 없다는 제약에서 출발해 Short Polling·Long Polling·SSE·WebSocket 네 가지 선택지를 장단점으로 비교하고, 전이중·연결 유지·메시지 단위라는 WebSocket의 핵심 세 가지와 SSE로 충분한 경우의 선택 기준을 다룹니다.
하루 단위 워크플로 요약, 조회·변경·되돌리기·원격으로 나눈 명령어 요약표, 안전 원칙 5가지, 추천 글로벌 설정과 alias, 4주 학습 로드맵과 참고 자료를 한 편에 모았습니다.
main에 직접 커밋·push, reset --hard로 날린 커밋, 잘못된 브랜치 작업, 동료의 force push, .env 커밋, 감당 안 되는 충돌, detached HEAD, push 거부, 잘못된 작성자, 대용량 파일까지 실제로 터지는 12가지 상황의 복구 절차를 다룹니다.
GitHub Pages 배포 워크플로, 태그와 Semantic Versioning·릴리스 자동화, Dependabot·CodeQL·Secret scanning·Push protection, gh CLI 주요 명령, fork에서 PR까지의 오픈소스 기여 흐름과 저장소 문서·라이선스 선택을 다룹니다.
워크플로·잡·스텝의 기본 구조와 매트릭스 빌드·시크릿·잡 의존성, Next.js 배포 워크플로 예시와 액션 보안 주의사항, 그리고 Rulesets·필수 리뷰·필수 상태 체크·force push 차단·CODEOWNERS로 위험한 명령을 조직 차원에서 막는 방법을 다룹니다.
interactive rebase로 커밋을 정리하고 cherry-pick으로 골라 가져오고 bisect로 버그 커밋을 이진 탐색하는 법, worktree·submodule·subtree·얕은 클론·LFS 같은 저장소 운영 도구, 그리고 히스토리에서 민감 정보를 제거하는 절차와 Git Hooks를 다룹니다.
HEAD 참조 표기법과 상황별 되돌리기 맵, reset 세 모드가 무엇을 지우는지, push한 커밋에는 왜 revert가 유일한 정답인지, reflog로 날린 커밋을 되살리는 법과 그 한계, stash·clean·restore의 위험도를 다룹니다.
PR 표준 흐름과 좋은 PR의 조건·리뷰 문화, merge/squash/rebase 세 머지 버튼의 결과 차이, --force와 --force-with-lease의 차이, GitHub Flow·Git Flow·Trunk-Based 선택 기준, 그리고 Issues와 프로젝트 관리를 다룹니다.
브랜치가 커밋 하나를 가리키는 파일일 뿐이라는 사실에서 출발해 -d와 -D의 안전 설계, fast-forward·3-way·squash 세 가지 병합, rebase가 히스토리를 다시 쓰는 원리와 황금률, 충돌 마커 해결과 rerere까지 다룹니다.
HTTPS+PAT와 SSH 키 두 인증 방식, 계정별 ~/.ssh/config 분리, SSH 커밋 서명, remote 연결 관리, 그리고 pull을 바로 쓰지 말고 fetch → 검토 → merge로 가야 하는 이유와 명령별 위험도 분류표를 다룹니다.
git add -p로 커밋을 의미 단위로 쪼개는 법, Conventional Commits 형식과 작성 규칙, log·show·blame으로 히스토리를 캐는 법, 그리고 .gitignore가 이미 추적 중인 파일에는 듣지 않는 이유와 대처를 다룹니다.
Git(프로그램)과 GitHub(호스팅 서비스)의 차이, clone이 히스토리 전체를 복사하는 분산 구조, 작업 디렉토리·스테이징·로컬·원격 4단계 모델, 그리고 설치와 최초 설정·저장소 생성·status와 diff로 상태를 읽는 법까지 다룹니다.
systemd timer 유닛 구성과 OnCalendar 문법, 컨테이너에서 cron이 깨지는 이유와 Kubernetes CronJob 필드, 수평 확장 시 중복 실행을 막는 분산 락, cron 보안과 운영 체크리스트.
flock 중복 실행 방지, 타임아웃, 멱등성, 원자적 결과 생성, 엄격한 스크립트, 실행 모니터링, 지터, 로그 관리까지 여덟 가지 패턴과 완성형 래퍼 템플릿, 그리고 안티패턴 13가지.
PATH와 셸이 최소한인 cron 환경, 퍼센트 문자의 함정, 출력과 로그 수집, cron 환경 재현법. 그리고 UTC 서버에서 KST 스케줄이 9시간 어긋나는 사고와 서머타임.
cron 데몬이 매 분 무엇을 하는지, 5개 필드 표현식과 매크로, 일·요일이 OR로 결합되는 함정, crontab이 저장되는 위치와 run-parts·anacron·접근 제어까지.
마켓플레이스 출고 관리 시스템 하나를 요구사항 분석부터 개념·논리·물리 설계, 보안, 분석 모델, 진화 시나리오, 리뷰까지 관통한다. 25강 전체 요약과 설계자가 기억할 원칙, 참고 자료로 시리즈를 마친다.
blog92@web:~$ exit