ved_Rony
article thumbnail
게임 서버 프로그래밍 교과서 - 3장) 소켓 프로그래밍
Game Dev/Game Server 2023. 9. 16. 17:33

네트워크에서 데이터를 주고 받을 때 소켓을 사용한다. 게임 프로그래밍에서 데이터를 주고 받는 방식의 차이가 있다. TCP로 통신하는 경우 클라이언트 개수만큼 소켓이 있어야 하므로 게임 서버에서 다루어야 하는 소켓 개수가 많다. 파일 핸들을 하는 동안 스레드가 대기하는 일이 없어야 한다. 이러한 특징으로 네트워크 프로그래밍에서 소켓은 보통 비동기 입출력 상태로 다룬다. 비동기 입출력 방식에는 크게논 블로킹 소켓 방식과Overlapped I/O 방식이 있다. 그리고 이 방식을 진보시킨 epoll과 IOCP(I/O Completion Port) 방식이 많이 활용된다 블로킹 소켓 디바이스에 처리 요청을 걸어 놓고 응답을 대기하는 함수를 호출할 때 스레드에서 발생하는 대기 현상을 블로킹이라 한다. 소켓뿐만 아니라..

article thumbnail
게임 서버 프로그래밍 교과서 - 2장) 컴퓨터 네트워크
Game Dev/Game Server 2023. 9. 16. 17:31

네트워크 구성 기기 단말기와 네트워크 기기로 구분된다. 단말기는 쉽게 생각해서 pc와 핸드폰 같은 통신 기기(클라이언트 or 서버)인데, 이를 하나의 노드라고 생각해보자. 네트워크 기기는 네트워크 스위치라는 것으로 다른 단말기들 사이를 연결해주는 다리 역할이다. 주로 이런 그림(LAN)이 하나의 단위라고 생각하자. 이런 그림이 여러개가 연결되어 있는 것을 광역망(WAN)이라 하고, 현재 우리의 네트워크 망은 저위의 그림 단위 하나하나가 복잡한 그림으로 연결되어 있는 형태(인터넷)이다. 마치, 하나의 분자구조가 얽히고 섥혀 하나의 세포를 구성하는 것 처럼 말이다. OSI모델 컴퓨터 네트워크 통신에 대한 국제 표준. 이 표준만 잘 지키면 어떤 기기든, 어떤 형태의 통신 선로를 사용하든 컴퓨터 간 통신을 할 ..

article thumbnail
게임 서버 프로그래밍 교과서 - 1장) 멀티 쓰레딩
Game Dev/Game Server 2023. 8. 20. 22:22

멀티 플레이어 게임을 개발을 하고 있다보니, 단순 게임의 로직을 개발을 하는 것으로는 부족하다는 것을 알았다. 일전에, 화상채팅으로 커리어 상담을 받았을 때, 단순 게임로직 개발은 당연히 할 줄 알아야 하고, 더 나아가서 본인의 강점을 키워야 한다고 했던게 생각이 났다. 그래서 이왕 해야하는 김에 네트워크와 서버에 관해서 강점을 키우고자 마음을 먹게 되었다. 어려운 만큼 돌아오는 것이 크리라 생각이 된다. 프로그램과 프로세스 프로그램은 디스크 메모리에 저장되어 있는 명령어와 데이터 덩어리이다. 이자체로는 무엇도 하지 않고, 단순히 메모리에 눌러 앉아 있는 것이다. 더블클릭을 하는 순간, 이 명령어와 데이터 덩어리가, ram 메모리에 로딩이 되며, 하나의 프로세스를 생성하며 명령어들이 돌아가게 된다. (프..

article thumbnail
유니티 - 멀티플레이어 게임 Lock Step 동기화
Game Dev/Unity 2023. 8. 20. 21:16

Lockstep 동기화 기법은 멀티플레이어 게임에서 사용되는 동기화 방식 중 하나이다. 완전히 동일한 로직을 바탕으로 매 프레임마다 모든 플레이어의 입력값을 동기화하고 각자 동일한 시뮬레이션을 진행한다. 많은 캐릭터와 복잡한 로직을 간단하게 동기화할 수 있다. 입력 조작과 프레임 진행만 동기화하면 게임 로직이 동기화된 상태로 진행된다. 결정론적으로 로직을 작성하는 것이 매우 어렵다. 특히 부동소수점의 처리는 하드웨어마다 매우 다르고, 옵션을 통해서 일치시키면 성능이 대폭 떨어지는 경우가 많다. 10명이하의 플레이어 게임에 사용한다. 참가자 수가 늘어날 수록 입력 패킷 도달 지연이 발생할 가능성이 크게 높아지기 때문이다. 현재 내가 개발하고 있는 게임에서 플레이어의 인풋을 히스토리 (인풋값의 리스트)를 만..

article thumbnail
GitActions Unity CI/CD 개발기 - CI 개발
Game Dev/Unity 2023. 7. 3. 12:58

GameCI를 사용한 apk 빌드 자동화 1) 라이센스 activation unity pro license인 경우 먼저, 유니티의 serial key를 받아야 한다. → XX-XXXX-XXXX-XXXX-XXXX-XXXX 와 같은 형식 repository의 settings에 secrets로 들어간다. 다음 그림 처럼 secrets를 생성해준다. 이름은 UNITY_SERIAL/UNITY_EMAIL/UNITY_PASSWORD 로 지어준다. 각각의 secret에는 각 이름에 맞는 값을 넣어준다. UNITY_SERIAL → 아까받은 serial 값 UNITY_EMAIL → unity 이메일 UNITY_PASSWORD → unity 패스워드 2. unity personal license인 경우 pro와 케이스가 거..

article thumbnail
GitActions Unity CI/CD 개발기 - 무엇을 써야할까
Game Dev/Unity 2023. 7. 3. 12:34

개요 빌드, 배포등의 자동화 → 왜 자동화 해야하는 가? 빌드를 하는 과정은 시간도 오래 걸리고 자주, 반복적으로 해줘야 하기 때문에 수동으로 해주면 많은 시간을 잡아 먹게 된다. (빌드란, 실행 애플리케이션을 추출하는 과정이다.) 이렇게 반복되는 과정은 버튼 하나 or 단축키로 자동화 할 필요가 있다. DevOps에서 필수적인 업무중 하나인 CI/CD 파이프라인 구축은 현재 사용법이 매우 용이 해진 상황이다. 일반 개발자들도 충분히 구현 할수 있다. 어떻게 구현을 하는 가 먼저, 어떤 도구를 사용해야할지 정해야 한다. 후보군 : Jenkins, Unity Cloud Build, Github Actions 장단점 비교 jenkins : 무료, 전용 mac 또는 pc 필요, 사전 지식 필요하다, 확장성 높..

article thumbnail
커스텀 디버그 - Editor에서만 포함하기
Game Dev/Unity 2023. 7. 3. 12:25

개발을 하다 보면 Debugging을 자주 사용하게 된다. 하지만, Debugging 자체가 성능을 많이 잡아 먹는 다고 하니, 개발이 끝난 이후에는 일일이 삭제를 하는 편이다. 또한, 빌드를 했을 때도 Debugging은 그대로 작동을 하게 된다. Android 빌드를 하고 Logcat을 찍어보면 Debug 클래스가 그대로 작동하는 것을 확인 할수 있다. 빌드에 포함 시키지 않고, 에디터에서만 돌아가게 하는 방법은 [System.Diagnostics.Conditional("UNITY_DEDITOR")] 을 사용하면 된다. 에디터 일때만 Debug.logger.logEnabled = false 을 사용하는 방법은 클래스 호출은 그대로 이기 때문에 비효율적이다. 하지만, 먼제 제시한 방법은 빌드 했을 때,..

article thumbnail
게임 엔진의 역사와 동작 원리 - (24절기 발표 내용)
Game Dev/Unity 2023. 6. 25. 14:57

각 절기 마다 발표자를 선정해 공부한 내용을 발표하는 발표 모임이 있다. 이번 하지(6월 21일)에 발표 기회를 얻어 발표를 하게 되었는데, 발표 주제는 게임 엔진의 역사와 동작 원리이다. 현재 유니티 개발을 하면서, 게임 엔진에 대한 호기심이 생기기 시작했다. 또한, 이전 이직 준비를 하며서, 피드백을 들은 내용 중 게임 로직 개발을 당연히 해야 하는 것이다. 그렇기에, 자신의 강점을 가지고 가야 한다. 네트워크, 쉐이더, 서버 등 각분야 중 자신의 강점을 가지고 가야 경쟁력을 키울 수 있다 이런 피드백을 듣고 나니, 게임 분야에 어떤 분야들이 있고, 그에 대해 깊이 파보지 않았던 것 같다. 단순한 인디 게임 개발이라면, 현재 나와있는 통합 게임 개발 솔루션을 통해 간단한 게임은 개발 할수가 있다. 게..

검색 태그