??? 이게 되나요? 뭐지 어떻게 되는거지? 😲😲😲🤯🤯🤯
그렇다고 한다. 객체의 속성을 제거할땐 그냥 delete를 쓸 수 있다고.
자꾸만 클라이언트 버전이 일치하지 않는다는 에러가 떠서 서버단의 문제인가 하고 .env 파일이나 여러가지를 계속 봤지만 이상이 없었는데,
불현듯 콘솔을 찍어봐야겠단 생각이 들어 콘솔을 찍어보니 세상에, 클라단에서 받아오는게 문제였다.
근데 유니티 클라쪽에 문제가 있진 않을텐데 왜 못받아오지? 라는 생각이 들어 패킷 자체를 찍어보니 아래와 같이 나왔다.
clientVersion이 아니라 그냥 version 이었구나.
원래 여기가 이렇게 packet.clientVersion 이라고 되어 있었다. 그래서 계속 undefined가 떴던 것.
고쳐주었더니 클라이언트 버전이 일치하지 않는다는 에러가 더이상 뜨지 않았다.
페이로드 타입이 찍히질 않아 무수한 콘솔요청(?)을 보내 확인해 보았다.
?? 여기서는 찍히는데 왜 페이로드타입은 undefined? (사실 여기서 눈치 챘어야 했다)
initial.proto 파일을 보면 당연하게도 message의 이름은 InitialPayload로 대문자로 시작한다.
그런데 내가 handlers의 index.js에 protoType을 "initial.initialPayload" 라고 메시지 부분 이름을 파스칼케이스가 아닌 카멜케이스로 첫머리를 소문자로 써버려서(...) 인식을 못 하고 있었다.
결론: 오탈자 때문
3계층에서 올라온 패킷에 TCP 헤더를 붙여 전송하는 전송 특화 계층. 프로토콜은 여러가지가 있으나 크게 TCP와 UDP 존재. TCP는 신뢰성, 연결지향성, 데이터의 정확한 전달을 위함. UDP는 비신뢰성 비연결성이고 실시간이라는 특성. 데이터의 빠른 전달을 위함. 전송단위는 TCP는 세그먼트, UDP는 데이터그램.
크게 세가지가 있는데 비연결성, 비신뢰성, 비식별성 이라고 표현하고 싶다. 비연결성은 패킷 받을 대상이 없거나 서비스 불능(컴퓨터가 꺼져있다던지) 이어도 패킷을 보내는 것. 비신뢰성은 패킷이 유실되거나 보낸 순서대로 오지 않는 것. 비식별성은 한 컴퓨터에서 여러 프로그램을 실행중인 경우 도착한 패킷이 어떤 프로그램의 패킷인지 IP만으로는 알 수 없는 것. 어떤 프로그램인지까지 알려면 포트번호가 필요하다.
이부분은 명확히 공부하진 못했으나 된다고 생각한다. 3계층에서 전송해도 도착할 수 있었다면 3계층이 전송계층이었을 것. 굳이 4층으로 올려 전송하는 데에는 이유가 있을 것.
-> 돌이켜보니 내가 앞선 질문에서 이미 대답했는데, 포트번호가 필요하다고 했고 이 포트번호를 4계층에서 부여한다.
오류제어는 패킷 유실 등 통신장애가 일어나지 않도록 오류를 검출하고 정정하는 것.
패킷을 보냈을때 받았다는 응답이 오지 않으면 오류로 처리하는 응답 대기와, 응답이 일정 시간 내에 오지 않으면 오류로 보는 시간초과 방법이 존재.
흐름제어는 송수신자 간의 데이터 처리 속도 차이의 극복을 위해, 처리하지 못할 만큼의 데이터를 전송받아 오버플로우가 나지 않도록 조절하는 방법.
다음 패킷을 보내기 전 이전 패킷을 받았다는 응답을 기다리는 stop and wait와, 사전에 확인 응답을 받지 않고 전송할 수 있는 크기를 약속하는 슬라이딩 윈도우 방식 존재. 그래서 패킷 보낼 때 윈도우 사이즈라는 값을 같이 보냄. 그 윈도우 사이즈만큼 보낼 데이터 풀에서 윈도우가 슬라이딩하며 이동하며 데이터를 전송.
제대로 공부하진 못했지만 기억하는대로 설명하자면, 패킷을 전달하면서 잘 가면 전달 패킷 개수를 점점 증가시키다가 오버플로우라던지 문제가 생기면 패킷 전송량을 1로 줄여버리는 방식이 있었던 것으로 기억한다.
대칭키는 암호화와 복호화 시 사용되는 키가 같은 것, 비대칭키는 암호화와 복호화 시 사용되는 키가 다른 것.
대칭키는 편리하지만 탈취에 약하고 비대칭키는 보안은 상대적으로 강화되었으나 느림.
하여 이 두가지를 섞어 대칭키를 비대칭키 방식으로 암호화 하여 사용하는 방법 존재. 이 방식으로 암호화 한게 HTTPS.
HTTPS는 HTTP의 보안 한계때문에 나온 프로토콜. 상기 언급한 대칭키와 비대칭키 혼합방식으로 암호화.
HTTPS는 인증서와 디지털 서명 개념이 적용되어, 서버와 통신 시 공개키와 그에 대한 인증서를 같이 내줌.
인증서에는 서명값이 들어있는데 이를 바탕으로 인증서 검증 가능.
이 서명은 인증서 내용에 대한 해시값을 인증기관의 개인키로 암호화한 것.
우리는 인증서 받을때 공개키를 받았으니 이 공개키로 복호화할 수 있음.
이때 복호화 해서 나온 값이 실제 인증서를 해싱한 값과 같으면 제대로 발급된 인증서임을 알 수 있음.
아님. HTTPS가 이 방식을 사용하는 궁극적인 이유는 '우리 좀 쉽고 안전하게 통신할 수 없을까?' 임.
때문에 이 비대칭키 암호화를 한 결과물은 대칭키임. '우리 이 대칭키로 좀 편하게 통신하자' 인 것. 이 대칭키가 활성화 된 동안 세션이 유지됨. 그래서 이 대칭키를 세션키 라고도 함. 이용자가 이용을 종료하면 세션이 종료됨과 함께 이 세션키는 같이 폐기됨.
L4와 L7에서 네트워크나 패킷의 혼잡이나 과부하를 방지하기 위해 부하를 분산하는 것.
라운드로빈 - 서버 A, B, C가 있으면 요청을 순차적으로 A-B-C-A-B-C 순으로 할당하는 것
최소 연결 - 연결이 가장 적은 서버를 타겟 삼아 할당하는 것
랜덤 - 이름 그대로 랜덤한 곳에 연결
해시 - 특정 클라이언트는 특정 서버에만 연결되게 하는 것
GSLB - Global Server Load Balancing. 타 지역의 서버에 연결시켜 버리는 것