241021 TIL - 주특기 플러스 3

LIHA·2024년 10월 21일
0

내일배움캠프

목록 보기
89/117
post-thumbnail

주특기 플러스 - 유니티

C# 코드를 열때 VS Code 말고 Rider로 열고 싶다면 - Edit으로 가자

유니티 메뉴에서 Edit > Preferences를 눌러 설정 진입
External Tools > External Script Editor 에서 Rider를 선택해주자

어라 이거 무슨 IP 입력하는 거지 - ipconfig에서 나오는 IP 입력하면 된다.

  • 의문: 강의에서 튜터님 IP를 그대로 썼더니 그건 액세스 거부 당했다. 어떡해야 하지?
    -> 내 컴퓨터에서 VS Code로 서버를 띄우고 내 컴퓨터의 IP를 입력하면 된다.

"yarn : 'yarn' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다." ...?

예? CommnadNotFoundException?
이전에도 본 적 있던 오류라 참고 블로그 를 참고하여, 일단 npm install -g yarn 을 실행했다. 그랬더니 오류 메시지가 바뀌었다.

이젠 UnauthorizedAccess? -> yarn이 설치가 되긴 했나보다.

아마 remote sign인가? 뭔가 설정하는 곳이 있었던 것으로 기억한다. 또다른 참고블로그를 보고 다음 작업을 수행.

  1. IDE 터미널에서 ExecutionPolicy 입력 후 엔터로 확인. (아마 Restricted로 나올 것.)
  2. Windows PowerShell을 관리자 권한으로 실행.
  3. Set-ExecutionPolicy RemoteSigned 입력
  4. 실행 규칙 변경~ 이라는 메시지가 나오면 [A]모두 예(A) 선택
  5. 파워쉘에서 다시 ExecutionPolicy 입력하여 변경 사항 출력을 확인

Assets에서 Canvas 가져오는건데 왜 Canvas(Clone) 으로 뜨지? -> 엔진을 멈춰라

튜터님은 드래그 앤 드롭 하셨을 때 저 Canvas 그대로 속이 찬 큐브 모양으로 'Canvas' 라는 오브젝트가 복사되었는데, 나는 자꾸 이미지처럼 빈 큐브에 (Clone) 이라고 떴었다.
-> 엔진을 실행중이어서 그렇다. 실행 중에 한 작업이라 멈추고 나면 저 (Clone)은 사라진다.
엔진을 끈 다음에 드래그 앤 드롭을 하니 정상적으로 튜터님과 똑같이 나왔다.

TCP 서버와 통신해보고, UI에다 적용도 시켜 보았다

이렇게 핸들러를 하나씩 만들면

  1. 유니티 상에서도 UI를 추가해 주고
  2. 해당하는 함수도 만들어 주고
  3. 버튼에 이벤트를 등록해주면 된다.

주특기 플러스 - 게임서버

그래서 어떤 게임을 만들 것인가 - 아무도 모른다

우리가 배운 것 & 배울 것

디렉토리 구조, 패킷 구조, 교환, 세션, DB, 게임 및 유저 인스턴스, 인스턴스 관리, 상태 동기화, 레이턴시 관리, 레이턴시 마스킹 ...

몽땅 가져다가 이것저것 만들어 보자. 하다보면 원하는게 나오지 않을까. 😋

직렬화와 역직렬화 - 정확히 몰라서 찾아보았다

검색결과 상단이 다 JAVA 얘기라서 좀 슬펐다
참고 블로그 에서 내용과 이미지를 가져왔다.

데이터 직렬화: 컴퓨터의 데이터 객체를 저장 매체에 저장할수 있는/ 네트워크를 통해 전송할수 있는 형태로 변환하는 것
데이터 역직렬화: 디스크에 저장된 데이터를 읽거나 네트워크 통신으로 받은 데이터를 다시 객체로 변환하는 것

그렇다면 이 직렬화는 왜 굳이 사용하는가? 객체 형태 그대로 주고 받으면 안되나?

안 된다. 직렬화-역직렬화를 안 하면 참조 형식 데이터를 사용할 수 없기 때문. 디스크에 저장하거나 통신을 할 때는 값 형식 데이터만 가능하다.
-> 참조 형식 데이터는 실제 데이터 값(리터럴)이 아니라 그 값이 들은 메모리의 주소만 가지고 있다.

메모리 주소만 가진게 어때서? 참조 형식 데이터는 웨않된데?

어떤 개발 언어를 선택하든 자료형은 크게 값 형식(원시형)과 참조 형식이 존재한다. 그리고 이 자료형에 따라 메모리 구조 또한 두 가지로 나뉜다.
-> 값 형식은 Stack 영역에 메모리가 쌓이고 직접 접근이 가능한데, 참조 형식 변수를 선언하면 Heap 영역에 메모리가 할당된다.
-> 그리고 Stack 영역에서는 이 Heap 메모리를 참조하는 구조로 되어 있다.

아니 Heap은 뭐고 Stack은 뭐에요? 그게 어쨌다구? 😵

  • Stack: 함수 호출 시 생성되는 지역변수, 매개변수가 저장되는 영역으로, 프로그램이 자동으로 사용하는 임시 메모리 영역.
  • Heap: Stack과 비슷하지만 사용자에 의해 관리되는 임시 메모리 영역.
    즉, 사용자가 필요에 의해 동적으로 메모리를 할당할 때 사용된다.

그래서 그게 역직렬화랑 무슨 관련이...? 🤔

역직렬화 없이 파일에 저장한다고 가정하면, 주소값만 갖고 들어간다는 게 된다. 그런데 이 주소값은 프로그램이 종료되고 나면 할당 해제되어 GC에게 쓸려가버리기 때문에 무의미해진다. 다음번에 그 값을 찾아가봐야 다른 값이 있거나 비어있거나 하는 해프닝이 일어나게 된다.
-> 그래서 이런 일을 피하기 위해 직렬화는 참조형들이 가진 그 주소값에 있는 실제 값 리터럴들을 다 끌어모아 바이트배열로 붙여줘서 전송한다!
(참조형의 주소 값에서 실제 값들을 다 읽어 끌어모아 준다.)

이 직렬화의 방식은 크게 두가지가 있다.

텍스트 기반 데이터 직렬화

사람이 읽을 수 있는 형태로, 저장 공간의 효율 성이 떨어지고 파싱 시간이 오래 걸린다. 데이터 양이 적을 때 주로 사용하고, 최근엔 JSON 형태로 많이 직렬화를 한다.
XML, CSV, JSON,YAML 등

바이너리 기반 데이터 직렬화

얘는 사람이 읽을 수 없는 형태다. 파싱 속도가 빨라서 데이터 양이 많을 때 주로 사용한다.
ex) 프로토콜 버퍼, 이미지, 오디오, 영상 등...

그래서, 본격적인 게임 서버의 바이트 배열의 구조는?

TCP 에코서버와 크게 다르지 않은 것 같은데, 약간 달라진게 있다.
TCP 에코서버의 바이트 배열이 TOTAL_LENGTH_SIZE 4byte, handlerID 2byte였고 메시지가 가변이었다면, handlerID 대신 패킷타입이 들어간 정도다.

TCP 에코서버 때는 어떻게 생겼었더라?

이렇게 생겼었다.

이번 본격 게임서버의 바이트배열 구조는?

이렇게 생겼다.

프로토 버프 구조체는요?

일단 이게 common - 이 구조로 클라이언트가 요청을 할 것이고, payload 단에 각 핸들러에 맞는 데이터가 들어갈 것.

웹소켓 때도 봤겠지만, 대강 이런 식으로 생겼다. 이게 common frame이라서 '앞으로 이 구조로 주고 받겠다' 라는 얘기다.

req를 받았으면 res를 돌려줘야지 - response 프로토버프의 구조

common 구조의 sequence는 무엇?🤔 - 유저의 호출 수

이는 일종의 어뷰징 방지용으로 유저가 몇 번 호출을 했는지 체크하는 것.
예를 들어 유저가 2번 호출했는데 다음 호출이 4번째로 찍히면 중간에서 패킷이 유실 되었다는 얘기. 그러면 중간 패킷을 다시 보내줘야 한다.
또는 7번, 8번 이후에 갑자기 99번 100번이 오면 어뷰징이거나 뭔가 정말로 문제가 있다는 신호.

왜 PORT에 permission denied가 되지? - 나의 경우는 .env 파일 문제였다

??????

분명히 이렇게 짜고 export - import 시켰는데,

여기서 server.listen이 작동을 안했다. 포트번호를 몇 번으로 해도 계속 permission denied가 떴다.

수없이 헤매며 돌아본 끝에 .env에서 원인 발견. 포트번호에 세미콜론 하나 붙인 게 화근이었다. 지우니 잘 동작했다.


트러블슈팅

git : 'git' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가... 아니 뭐라는거야? 😩

상황: PowerShell에서 git 으로 시작하는 명령어가 먹히지 않음

하...... 분명 Git for Windows를 깔았는데 이건 또 대체 뭐야. 왜 적용이 안돼? 일단 다음을 시도해 보았다.

  1. Git for Windows 재설치
  2. VS Code 재실행
  3. 컴퓨터 재부팅

뭔진 모르겠는데 셋 다 하고 났더니 일단 해결되었다.
그러나 근본적인 트러블은 아직 해결되지 않았고, 크게 두 가지였다.

  1. VS Code에서 깃헙의 프로필로 로그인이 되지 않는다. (그동안 쓰던 세팅이나 백업된 것들을 불러오고 저장하고 해야 하는데)
  2. 1이 원인인지 커밋푸쉬도 되질 않는다.

커밋 푸쉬를 할라니까 이 메시지가 한글 버전으로 뜨질 않나, Learn More를 눌러봐도 달라지는 것도 없고...

참고 문서 여기를 읽어 보니까 .gitconfig 파일에 user에 관한 정보가 없어서 셋업을 해줘야 하는 것 같았다. 이 이후로는 참고 블로그 글도 참고하여 결론적으로 해결했고, 시도 단계는 다음과 같다.

  1. PowerShell 기반인 VS Code 터미널에 ~/.gitconfig 입력
  2. .gitconfig 파일 확인해서 [user] 관련 데이터 확인 (아무것도 없었음)
  3. 터미널에 git config --list --show-origin 입력하여 한번 더 확인
    (사실 이건 뭔지 잘 모르겠다)
  4. git config --global user.name "name" 입력하여 username 설정
  5. git config --global user.email "email@domain.com" 깃허브 계정 이메일 입력하여 useremail 설정

위 단계를 시도했더니 깃헙 관련하여 로그인이나 인증 메시지가 떴고, 문제들이 해결되었다.

VS Code의 깃헙 계정 로그인도 무사히 완료되었다.

profile
갑자기 왜 춤춰?

0개의 댓글