네트워크 기초 서버를 구축하면서 안정성에대해 많은 신경을 써야한다. 그렇기 위해서는 이론이 매우 중요하게될 것이다. 그래서 간단하게 알아보자. 네트워크 패킷을 보내는 것은 우리가 알고 있는 택배 시스템과 매우 비슷하다. 빨간집은 고객 초록집은 경비실 파란집은 택배센터라고 해보자. 관심사는 딱 하나이다. 택배를 보내는 과정이 중요하다. 우리가 1번 아파트 단지에서 2번 아파트 단지로 택배를 보낸다고 하면 이런 시스템을 생각해 볼 수 있다. 일단 1번 아파트 단지의 고객은 경비실에 택배를 보낸다. 그렇다면 경비실에서 같은 아파트 단지로 택배를 보낼경우 배송센터를 거칠 필요 없이 바로 배송해주면 된다. 하지만 이 경우는 2번 아파트 단지로 이동하는 것이기 때문에 배송센터로 보낸다. 그러면 배송센터에서는 2번 ..
Unity/온라인 RPG
Context Switching 이전 포스팅에서 SpinLock을 직접 구현해봤다. SpinLock은 결국에 무한 대기를 하는 것인데 그렇게 되면 계속 lock을 체크하는 것이 엄청 부담될 것이다. 그러니 체크 후에 만약 lock을 획득하지 못했다면 조금 그 쓰레드를 멈추거나 쉬게하는 방법에 대해 살펴보자. 이전 포스팅에서 2번째로 기술된 내용이다. Thread.Sleep(1); Thread.Sleep(0); Thread.Yield(); 크게 3가지가 있다. 각각의 의미가 좀 다르다. Sleep(1) 같은 경우는 무조건 휴식을 의미한다. 주어진 시간동안 쓰레드를 멈추는 것이다. 주어진 시간 이라고 하면 운영체제에서 스케줄링을 통해 결정하게된다. 만약 사용자가 숫자를 넣어 작동할 경우 운영체제가 그 숫자를..
Lock? 이전에 포스팅한 Interlocked는 좋은 기능이지만 아쉬운점이 정수를 증가시키거나 감소시키는 것 이외의 기능은 힘들다. 우리가 원하는 건 특정한 코드블럭이 어떤 쓰레드에서 실행되는 동안 다른 쓰레드에서는 잠시 멈추는 기능을 원하는 것이다. 그것에 대해 알아보자. 물론 Interlock도 많이 사용한다. 모든 쓰레드가 데이터를 읽기만 한다면 그것은 크게 중요하지 않다. 어차피 데이터는 변하지 않았을 거고 그 값만 가져오는건 문제가 되지 않는다. 중요한건 다른 쓰레드에서 wirte를 하거나 그 후에 read하는 것은 문제가 될 수 있다. 이러한 코드를 critical 세션이라고 한다. 해결방안으로 다음과 같은 코드가 있다. using System; using System.Threading; n..
캐시 지난 포스팅에서 얘기했던 식당이야기를 기억할 것이다. 이제 레스토랑이 성공해서 손님들이 많아졌다고 해보자. 그러자 식당 입장에서는 일 처리를 어떻게 해야할지 고민이 들 것이다. 만약 어떤 직원1이 손님으로부터 주문을 받을 때, 주문을 받자마자 바로 주문현황 테이블에 올리는 것은 효율적일까? 주문현황테이블은 동선상 멀리떨어져 있다고 해보자. 그렇다면 당연히 아니다. 직원1이 가지고 있는 수첩에 주문을 모았다가 한번에 주문현황테이블에 올리는 것이 효율적이다. 또한 장점으로 만약 2번 테이블에서 콜라를 주문해서 직원1이 수첩에 적어놓은 상태였는데, 2번 테이블에서 다시 직원을 호출해 콜라 대신 사이다를 달라고 했다면, 직원 1은 자신의 수첩에서 콜라를 지우고 사이다로 채워 넣기만 하면 된다. 그런데 여기..
멀티쓰레드의 이해 멀티쓰레드를 이해하기 위해 예시를 한번 들어보겠다. 여기서 등장인물은 식당, 로봇 직원, 영혼이 있다. 만약 한식, 일식, 레스토랑이 개업을 했다고 해보자. 그리고 한식과 일식은 직원을 1명을 고용했고 레스토랑은 2명을 고용했다. 여기서 직원은 로봇이고 아무런 소프트웨어가 없다. 영혼을 넣어줘야 일을 한다고 해보자. 만약 영혼이라는 것이 세상에 딱 하나밖에 없다고 가정해보자. 그리고 그 영혼을 한식 직원에게 투입했다고 해보자. 그러면 한식 직원만 일을 할 수 있고 나머지 두 식당 직원은 아무것도 못하게 될것이다. 이 것을 해결할 방법을 찾다가 영혼이 모든 직원한테 0.00001초씩 머물고 이동하면 되지 않을까 라는 생각을 하게된다. 즉, 한식 직원한테 아주조금 머물고 일식 직원한테 이동..
나는 클라이언트 개발자를 꿈꾸지만 서버 프로그래밍를 아예 모를 수는 없기 때문에 게임 서버에 대해 공부한 후 멀티 플레이가 가능한 rpg 게임을 제작해 볼 것이다. 그러기 위해서 게임 서버는 어떻게 동작하고 서버에 대한 기초적인 지식들을 공부한 것을 포스팅 하려고한다. 목표는 3d 온라인 rpg이다. 게임 서버 데이터베이스 웹 서버(극 일부만 다룰 수 있음.) 실제 컨텐츠 제작(2D 제작 후 3D 제작 예정) 순서로 포스팅 할 예정이다. 1. 서버란? 다른 컴퓨터에서 연결이 가능하도록 대기 상태로 상시 실행중인 프로그램이다. 우리가 식당에 가면 손님이 언제나 올 수 있도록 식당을 열고 대기중일 것이다. 그리고 손님이 오면 그 식당 메뉴나 정책에 따라 서비스를 제공하는데 서버도 이와 같다고 볼 수 있다. ..