241005 TIL - 르탄이는 주말에도 멈추지 않아

LIHA·2024년 10월 5일
0

내일배움캠프

목록 보기
72/117
post-thumbnail

르탄아 404한테 고기 뻇겼어? 다음엔 좀더 분발해보자. (?)

게임서버 심화

  • TCP 연결을 하지 않고는 HTTP 통신을 할 수 없다. TCP는 전송계층의 프로토콜이고 HTTP는 어플리케이션 계층의 프로토콜이기 때문. 연결되고 전송이 되어야 뭐 HTTP를 하든 말든...

  • HTTP는 비연결성이지만 TCP는 연결지향성이다

그러면 HTTP는 항상 TCP 위에서만 데이터를 주고 받냐? 그건 아니다

그래서 TCP 통신은 어떻게 되는건가요?🤔

240926 TIL에 과거의 내가 써놓은 것이 있다. 여기를 보도록 하자.

그래서 웹소켓이 뭐에요? 왜 쓰는건가요? 🤔

'HTTP도 어차피 양방향인 TCP 연결 위에서 이루어 지는건데, HTTP로도 양방향 연결을 하면 안되나?🤔' 라는 니즈에서 나온 것. 다음과 같은 특징을 가진다.

  1. 실시간 통신
  2. 양방향 통신 (Full-duplex)
  3. 지속적 연결
  4. 낮은 오버헤드 - 데이터 패킷의 크기가 작다
  5. HTTP와의 호환성 - HTTP를 통해서 작동하므로 기존의 웹 인프라를 이용해서 확장이 가능하다는 것

그거 아는가? 웹소켓을 위한 3-way handshake가 또 따로 있다

우리가 알고있는 3-way handshake는 TCP에서 하는거였다. 그런데 웹소켓에서도 대충 이거랑 비슷한 과정이 있다.

이쯤에서 머리크기 대결 - 각 프로토콜의 헤더는?

HTTP 헤더는 왕창왕창 들어가는 반면 웹소켓의 헤더는 아주 작고 초라하다. 16진수 숫자 두개만 들어가 있는데, 그럼에도 들어갈 수 있는 내용은 다 들어있긴 하다. TCP의 헤더는 그 중간 쯤.

  • 그러면 헤더가 가장 작은 웹소켓이 가장 빠른거 아닌가요? 🤔
    -> 의외로 일반적으로 TCP가 빠릅니다. 왜냐면 HTTP 베이스로 연결을 맺는 웹소켓은 어플리케이션 레이어까지 올라가야 하는데, 더 낮은 계층인 전송 계층에서 연결을 맺는 TCP가 일반적으로 빠름!

fs.readFile('경로', '인코딩방식', (콜) => {백})

인코딩방식에 utf8이 들어갔는데, 많이 보긴 했지만 정확히 어떤 방식인걸까? 문득 궁금해졌다🤔
참고 블로그

UTF-8: 가장 많이 사용되는 가변길이 인코딩 방식
1바이트 ~ 4바이트의 인코딩 결과가 만들어지며, 몇 바이트가 될진 유니코드 문자에 부여된 값의 범위에 달려있다고.

throw new Error()로 에러를 던지면 - 얘를 호출하는 상위 메소드에게 에러가 간다!

그렇기 때문에 이 던져진 에러에 대한 처리는 상위함수에서 이루어져야 한다.

이미지 내의 주석에도 써있지만, 이 loadGameAssets 같은 경우 server.listen으로 서버가 뜰 때 호출된다. 서버 띄우면서 에셋 로딩을 같이 하는 셈.
-> 그렇기 때문에 server.listen의 콜백에 async를 걸고 const assets = await loadGameAssets() 라고 호출한다.

이렇게 써있는데, 저 loadGameAssets() 몸통부에 있는 throw new Error는 const assets로 호출될 때 문제가 있을 경우 펑 터진다. 그렇기 때문에 호출한 상위 구문에서도 서버가 뻗지 않도록 try-catch는 꼭 걸어주도록 하자.


트러블슈팅

노트북에서 yarn이 써지지 않는다

yarn : 'yarn' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.

어라? yarn이 안 깔려 있나? npm install yarn 시도!

npm : 'npm' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가
올바른지 검증한 다음 다시 시도하십시오.

...??? npm도 없다고? 이게 뭔 소리야? 왜이래? 내가 Node를 안 깔았었나? 🤯🤯🤯🤯
멘붕하는 머리를 붙잡으며 다음 과정을 시도해 보았다

  1. Node.js 재(?)설치 (설치했는지 기억 안남)
  2. corepack enable 입력
    참고 블로그 를 보니 CommandNotFoundException이면 corepack enable을 해줘야 한다고 써있었다.
  3. 환경 변수 설정
    시작바에서 시스템 환경 변수 편집 실행 -> 환경 변수 -> Path 더블클릭 -> 새로만들기 -> nodejs 설치된 폴더 경로 입력
  4. Power Shell에서 권한 설정 다시하기
    corepack enable을 하고 나니 ErrorId가 CommandNotFound에서 Unauthorized로 바뀌었다.
    참고 블로그를 보고 다음처럼 따라하니 잘 되었다.
    파워쉘 관리자권한 실행 - Get-ExecutionPolicy 입력해서 권한 확인
    -> Restricted로 되어있어서 Set-ExecutionPolicy RemoteSigned 입력
    -> 다시 Get-ExecutionPolicy 입력 - RemoteSigned로 변경됨

위 과정을 거치고 나니 잘 되었다.

profile
갑자기 왜 춤춰?

0개의 댓글