르탄아 404한테 고기 뻇겼어? 다음엔 좀더 분발해보자. (?)
TCP 연결을 하지 않고는 HTTP 통신을 할 수 없다. TCP는 전송계층의 프로토콜이고 HTTP는 어플리케이션 계층의 프로토콜이기 때문. 연결되고 전송이 되어야 뭐 HTTP를 하든 말든...
HTTP는 비연결성이지만 TCP는 연결지향성이다
그러면 HTTP는 항상 TCP 위에서만 데이터를 주고 받냐? 그건 아니다
240926 TIL에 과거의 내가 써놓은 것이 있다. 여기를 보도록 하자.
'HTTP도 어차피 양방향인 TCP 연결 위에서 이루어 지는건데, HTTP로도 양방향 연결을 하면 안되나?🤔' 라는 니즈에서 나온 것. 다음과 같은 특징을 가진다.
- 실시간 통신
- 양방향 통신 (Full-duplex)
- 지속적 연결
- 낮은 오버헤드 - 데이터 패킷의 크기가 작다
- HTTP와의 호환성 - HTTP를 통해서 작동하므로 기존의 웹 인프라를 이용해서 확장이 가능하다는 것
우리가 알고있는 3-way handshake는 TCP에서 하는거였다. 그런데 웹소켓에서도 대충 이거랑 비슷한 과정이 있다.
HTTP 헤더는 왕창왕창 들어가는 반면 웹소켓의 헤더는 아주 작고 초라하다. 16진수 숫자 두개만 들어가 있는데, 그럼에도 들어갈 수 있는 내용은 다 들어있긴 하다. TCP의 헤더는 그 중간 쯤.
인코딩방식에 utf8이 들어갔는데, 많이 보긴 했지만 정확히 어떤 방식인걸까? 문득 궁금해졌다🤔
참고 블로그
UTF-8: 가장 많이 사용되는 가변길이 인코딩 방식
1바이트 ~ 4바이트의 인코딩 결과가 만들어지며, 몇 바이트가 될진 유니코드 문자에 부여된 값의 범위에 달려있다고.
그렇기 때문에 이 던져진 에러에 대한 처리는 상위함수에서 이루어져야 한다.
이미지 내의 주석에도 써있지만, 이 loadGameAssets 같은 경우 server.listen으로 서버가 뜰 때 호출된다. 서버 띄우면서 에셋 로딩을 같이 하는 셈.
-> 그렇기 때문에 server.listen의 콜백에 async를 걸고 const assets = await loadGameAssets()
라고 호출한다.
이렇게 써있는데, 저 loadGameAssets() 몸통부에 있는 throw new Error는 const assets로 호출될 때 문제가 있을 경우 펑 터진다. 그렇기 때문에 호출한 상위 구문에서도 서버가 뻗지 않도록 try-catch는 꼭 걸어주도록 하자.
yarn : 'yarn' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.
어라? yarn이 안 깔려 있나? npm install yarn 시도!
npm : 'npm' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가
올바른지 검증한 다음 다시 시도하십시오.
...??? npm도 없다고? 이게 뭔 소리야? 왜이래? 내가 Node를 안 깔았었나? 🤯🤯🤯🤯
멘붕하는 머리를 붙잡으며 다음 과정을 시도해 보았다
- Node.js 재(?)설치 (설치했는지 기억 안남)
- corepack enable 입력
참고 블로그 를 보니 CommandNotFoundException이면 corepack enable을 해줘야 한다고 써있었다.
- 환경 변수 설정
시작바에서 시스템 환경 변수 편집 실행 -> 환경 변수 -> Path 더블클릭 -> 새로만들기 -> nodejs 설치된 폴더 경로 입력
- Power Shell에서 권한 설정 다시하기
corepack enable을 하고 나니 ErrorId가 CommandNotFound에서 Unauthorized로 바뀌었다.
참고 블로그를 보고 다음처럼 따라하니 잘 되었다.
파워쉘 관리자권한 실행 - Get-ExecutionPolicy 입력해서 권한 확인
-> Restricted로 되어있어서 Set-ExecutionPolicy RemoteSigned 입력
-> 다시 Get-ExecutionPolicy 입력 - RemoteSigned로 변경됨
위 과정을 거치고 나니 잘 되었다.