전체 글

성장 과정 일기, 누군가에게 정보를 제공하기 위해서가 아닌 스스로 배운 내용을 정리하기 위해 작성하는 블로그 입니다. 잘못된 정보가 있으면 댓글로 적어주세요.
SSMS 입문 ssms의 사용법을 알아보자. 중요한 것들만 알아보자. ctrl + n 은 New Query를 작성할 수 있다. 이렇게 쿼리를 작성해서 밑에 표에서 결과를 볼 수 있다. 테이블은 그냥 엑셀이랑 크게 다를게 없다. 테이블은 행과 열로 이루어져있으며 각종 데이터를 저장하고 있다. 테이블들이 모여 하나의 데이터베이스가 되는 것이다. 새로운 테이블을 만들어 보자. 성적을 저장할 수 있는 테이블을 작성한다. 딱히 변한 모습이 없을 때에는 refresh를 통해 확인할 수 있다. 데이터를 추가하기 위해서는 쿼리를 날려서 할 수도 있지만 아직 배우지 않았기 때문에 테이블에 직접 추가해주겠다. Select From Whehe SQL RDBMS를 조작하기 위한 명령어이다. SQL이 표준적으로 정해져 있긴 하..
데이터베이스 만약 우리가 무식하게 우리가 제작한 만들 파일 포맷으로 데이터를 관리한다고 해보자. 그러면 단점들이 존재할 수 밖에 없다. 실제로 2000년대 초반까지는 이렇게 관리하는 팀도 다수 존재한다고 한다. 속도가 느리다 파일 I/O 속도 멀티쓰레드 환경에서 동시 접근 불가 안전하지 않다. 정전이나 하드웨어 고장에 대응 불가 Atomic하게 데이터 관리 불가 분석이 힘들다. 모든 파일을 다 뒤져보면서 분석할 수 밖에 없다. 데이터가 늘어나면 관리가 힘들다. 우리가 사용하는 것은 RDBMS을 사용할 것이다. 첫번째 파트에서는 야구 데이터를 가지고 SQL 성능 분석을 해볼 것이고 그 다음에는 회사 데이터를 통해 SQL 성능 분석을 해볼 것이다. 환경 설정 게임회사에서는 MsSQL의 사용 빈도가 가장 높다..
지금까지 작업한 서버를 유니티와 연동해보겠다. 우리가 지금까지 만든 서버가 유니티와 100퍼 연동이 가능한것은 아니다. 유니티 자체적으로 정책이 정해져있으니 그것때문에 span 등등을 사용할수 없어 그 부분은 수정해야 할 것이다. 프로젝트 생성 후 클라이언트와 연동 프로젝트 명은 Client라고 해주고 위치는 Server가 있는 곳에 해주었다. 유니티에 dll을 바로 가져다 사용하게 되면 편할 수 있긴 하겠지만 그렇게 할 경우 디버깅이 매우 힘들어진다. 그렇기 때문에 이렇게 쌓은 서버코어 코드들을 유니티에 전부 복사한 다음 걸러내는 과정이 필요하다. 서버 코어에 있는 코드를 유니티로 복사 한 후 확인해보자. Network에서는 이정도만 사용할 것같다. 만약 필요한게 있다면 그때 추가하도록 하자. 문제는 ..
JobQueue 우리가 이전에 만든 채팅 테스트 코드는 만약 100명의 유저가 있다고 해보면 100 * 100 번의 패킷이 서버로 전송이 되어 과부화를 일으키게된다. 그것을 관리하기 위해 클라이언트는 일감을 던져주기만 하고 서버는 그것을 Queue의 형태로 순차적으로 처리해주는 방식을 JobQueue라고 한다. 물론 실제 명칭은 아니다. using System; using System.Collections.Generic; using System.Text; namespace ServerCore { public interface IJobQueue { void Push(Action job); } public class JobQueue : IJobQueue { Queue _jobQueue = new Queue(..
지금 우리가 작업한 코드가지고 뭔가를 시작하기엔 되게 막막하다. 사실상 컨텐츠단에서 사용할 준비를 전부 맞췄고 서버와 클라가 잘 통신하기에 사실 문제는 없지만 어떻게 구조를 짜야하는지 감이 안오니 테스트를 해보고 유니티에 연동해보자. 채팅 우리가 먼저 해볼거는 채팅이다. 채팅은 mmorpg건 아니건 다른 게임, 웹, 앱 등에서도 많이 등장한다. 그리고 어떤 서버든 채팅서버로 테스트를 많이 진행한다. 채팅을 구현할 수 있으면 다른것도 구현이 가능하기 때문이다. 이번 포스팅은 이 채팅을 간단히 구현해보고 문제점에대해 알아보자. 먼저 간단히 해보기 위해 패킷은 클라이언트 채팅 서버 채팅 두개로만 진행하기에 PDL 파일을 이렇게 수정한다. 그리고 PacketForamt을 통해 GenPackets 파일을 만들어준..
이번 포스팅은 지난 포스팅에서 다뤘던 직렬화를 자동화 해보겠다. Packet Generator 1 일단 우리가 생각해보면 Session에서 Packet 클래스를 정의한채 사용하고 있었다. 이를 하나로 묶고 패킷에 대한 정의를 하기 위해 새로운 프로젝트를 만들것이다. 그리고 패킷에 대한 정의를 하기 위해 Json 파일이나 Xml 파일을 사용한다. 필자는 Xml이 더 다루기가 쉽다고 생각해 Xml 파일을 사용한다. 우리가 이전에 새용했던 PlayerInfoReq 패킷은 플레이어id와 플레이어 이름 그리고 각종 스킬에 대해 정보를 담고 있었다. 이를 xml파일로 표현하면 다음과 같다. 이를 이제 새로만든 프로젝트 PacketGenerator에서 이를 파싱해주면된다. c++이라면 제공되는 라이브러리가 딱히 없어..
Serialization 1 이전 포스팅에서는 패킷을 직접 만들어서 그것을 바이트로 변환해 보내는 작업을 했다. 이번 포스팅에서는 그 과정을 다뤄볼 예정이다. 직렬화는 네트워크에서만 사용하는 내용은 아니고 포괄적인 내용을 다루기는 한다. 세이브 파일을 만들거나 그럴때도 사용하긴 한다. 직렬화는 메모리상에 존재하는 데이터를 납작하게 압축해서 바이트로 저장, 전송하는 것이라고 보면 된다. 직렬화를 바로 해보진 않고 여러 패킷들을 직접 만들어 본 후 압축하는 과정을 거쳐서 어떤 과정이 필요할지에 대해 고민해보자. 먼저 PlayerInfoPeq, PlayerInfoOk라는 패킷이 있다고 해보자. public class Packet { public ushort size; public ushort packetId;..
Connector Listener와 역할이 반대인 Connector를 만들어보자. 물론 공식적인 명칭은 아니다. 우리가 이전에 DummyClient에서 Connect하는 부분을 블로킹 함수로 구현하고 있었는데 게임서버에서는 블로킹 함수를 사용하는 것이 올바르지 않기 때문에 이를 바꿔보자. 그런데 Connector가 왜 필요할지 부터 생각해보자. 서버가 엄청 거대한 MMO 일 경우 NPC의 요청만, AI의 요청만, Player의 요청만 받는 각각의 부분서버가 있다. 그 서버끼리 통신을 하기 위해선 서버에서 다른 서버로 Connect 요청을 해야하기 때문에 단순히 Client만이 Connect를 요청하는 것이 아니다. 그러니 공용부분으로 같이 사용하면 좋기 때문에 만드는 것이다. using System; u..
Listener 우리가 이전에 만든 소켓 프로그래밍 코드에서 ServerCore 메인 함수에서 모든걸 다루니까 그것을 분리해보자. Listener 클래스를 만들어서 작성해보자. using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace ServerCore { internal class Listener { Socket _listenSokcet; public void Init(IPEndPoint endPoint) { Socket _listenSokcet = new S..
네트워크 기초 서버를 구축하면서 안정성에대해 많은 신경을 써야한다. 그렇기 위해서는 이론이 매우 중요하게될 것이다. 그래서 간단하게 알아보자. 네트워크 패킷을 보내는 것은 우리가 알고 있는 택배 시스템과 매우 비슷하다. 빨간집은 고객 초록집은 경비실 파란집은 택배센터라고 해보자. 관심사는 딱 하나이다. 택배를 보내는 과정이 중요하다. 우리가 1번 아파트 단지에서 2번 아파트 단지로 택배를 보낸다고 하면 이런 시스템을 생각해 볼 수 있다. 일단 1번 아파트 단지의 고객은 경비실에 택배를 보낸다. 그렇다면 경비실에서 같은 아파트 단지로 택배를 보낼경우 배송센터를 거칠 필요 없이 바로 배송해주면 된다. 하지만 이 경우는 2번 아파트 단지로 이동하는 것이기 때문에 배송센터로 보낸다. 그러면 배송센터에서는 2번 ..
Mintriever
어제보다 성장한 나