전체보기

    [바미] TDD에 대해 알아 봅시다!

    TDD? TDD란 Test Driven Development의 약자인데 테스트 주도 개발법이라는 뜻이며 개발 방법인데 테스트가 주도하는 개발 방법이라는 의미 입니다. 기존의 개발법은 설계 - 코딩 - 테스트 였어서 이 순서대로 진행하다 테스트에서 문제가 발생하면 다시 코딩하고, 테스트하여 코딩과 테스트가 반복되는 방식이였었는데 TDD는 테스트 - 코딩 - 개선을 반복하는 방식입니다. 간단하게 TDD를 실습해보자면 Calculator("+", 3, 2)를 만들어서 실행시켰을 때 5라는 결과가 나오는 함수를 만들어 봅시다. TDD니까 처음부터 테스트를 시켜줍니다. hello.go package main func main() { Test() } 이렇게 작성 후에 코드를 실행 시켜 보면 undefined: Te..

    [바미] MMORPG 서버 구조에 대해 알아보자.(完)

    지난번에 싱글프로세스 vs 멀티프로세스를 했었는데 이번에는 싱글 쓰레드 vs 멀티 쓰레드 를 다뤄보겠습니다. 싱글 쓰레드는 하나의 프로세스에 Work Thread가 하나인 경우를 말하고, 멀티 쓰레드는 하나의 프로세스에 Work Thread가 여러개인 경우를 말합니다. 싱글 프로세스이면서 멀티 쓰레드를 쓸 수 있고, 멀티 프로세스이면서 싱글 쓰레드를 쓸 수 있고, 멀티 프로세스이면서 멀티 쓰레드를 쓸 수 있습니다. 싱글 프로세스이면서 싱글 쓰레드를 쓸 수 있지만 현재 시점에선 공짜점심이 끝난 상황에서 싱글 프로세스로 가려면 서버 머신이 좋아야 하는데 이미 서버 클럭수는 한계에 부딫혔기 떄문에 클럭 수가 더 늘어나기에는 기대하기 힘들고, 코어 수만 늘어나고 있고, 16개 코어까지도 가능한데 이 코어들의 성..

    [바미] MMORPG 서버 구조에 대해 알아보자.(2)(싱글프로세스 vs 멀티프로세스)

    저번에 이어서 싱글프로세스 구조와 멀티 프로세스 구조의 차이에 대해 좀 더 알아보도록 하겠습니다. 싱글 프로세스 구조를 알아봅시다. 싱글프로세스 구조는 프로세스가 하나 즉 프로그램 하나가 돌아가는 걸 의미하는데 이게 개념적으로 이렇다는 얘기지 꼭 싱글 프로세스 구조라고 해서 프로그램이 무조건 하나다. 라고 볼 수는 없습니다. 단순히 봐서 싱글 프로세스 구조면 게임서버 하나다. 라고 보면 됩니다. 하나의 게임 서버로 어떤 서비스가 게임이 서비스 된다라고 봤을 때 이걸 싱글 프로세스라고 보면 됩니다. 예를 들어 봅시다. WOW라는 게임이 있는데 WOW의 월드가 여러가지가 있는데 각 월드가 하나의 프로세서로 돌아간다면 싱글 프로세스로 볼 수 있고, 여러 게임 프로세스들이 하나의 월드를 구성한다면 멀티 프로세스..

    [바미] MMORPG 서버 구조에 대해 알아보자! (1)

    MMORPG서버 구조에 대해 알아보기 전에 MMOPRG에서는 어떤 요구사항이 있기 때문에 이런 서버 구조가 필요한지 부터 알아보도록 하겠습니다. MMORPG의 서버쪽에서 가장 큰 문제점은 유저가 많다는 점입니다. 이 말은 동시 접속자 수가 많다는 이야기고, 서버가 감당해야 될 작업량이 많다는 것이죠. 그래서 작업량의 기준을 보면 게임에서는 Actor라고 보면 되는데요. 예를 들면 Player, NPC(몬스터 포함) 그리고 컨트롤 존(Control Zone)이라고 해서 조종되는 영역을 의미하는건데 예를 들면 이런 것이죠. 필드에 독이 깔려있을 때 Player나 NPC가 그 영역에 들어가면 도트 데미지를 받는 것인데 도트 데미지를 어떻게 주는지, 독 우물이라는 Actor가 있고, 그 독 우물이 매번 다른 A..

    [바미] Socket Programming에 대해 알아보자!

    흔히 소켓이라고 하면 콘센트에 꼽는 것을 소켓이라고 합니다. 어떤 것을 연결해서 꽂아서 하는 것을 데이터를 주고 받는 것을 의미합니다. 그래서 소켓프로그래밍이라는 것도 비슷한데요. 실제로 네트워킹이라는건 NIC에서 일어납니다. 쉽게 말해서 랜카드인데요. 이것을 통해서 데이터가 들어갔다 나갔다 하게 됩니다. 네트워크 인터페이스 컨트롤러 - 위키백과, 우리 모두의 백과사전 네트워크 인터페이스 컨트롤러(network interface controller, NIC)는 컴퓨터를 네트워크에 연결하여 통신하기 위해 사용하는 하드웨어 장치이다.[1] 네트워크 카드(network card), 랜 카드(문화어: 망카드, 망 ko.wikipedia.org 컴퓨터에선 하드웨어와 OS가 있는데 OS가 하는 주된 일이 이 하드웨..

    [바미] Server Authority에 대해 알아보자!

    Server Authority는 말그대로 서버가 권한을 가지고 있는 형태 입니다. 서버가 모든것을 판단해서 중재자이고, 심판이면서, 플레이어이면서 모든걸 다 한다고 보면 됩니다. 이 방식은 상당히 고전적이면서 단순한데요. 흔히 CS방식(Client & Server)이라고 하는데 클라이언트가 있고, 서버가 있을 때 클라이언트가 서버에게 질의를 하고, 서버가 클라이언트에게 응답을 하는 방식이 됩니다. 이 방식을 가장 흔하게 볼 수 있는 방식이 웹 서버인데요. 게임 서버도 이와 비슷하다 보면 됩니다. 그런데 문제가 있는데 이 방식에서는 항상 클라이언트가 묻고, 서버가 응답하는 구조인데 클라이언트가 묻지 않으면 서버는 응답을 하지 않는다는 점인데요. 예전에 웹서버는 다이나믹한 변경을 주고 싶어서 1초마다 갱신되..

    [바미] Deterministic 과 해킹에 대해 알아보자!

    왜 Deterministic은 해킹에 취약한지에 대해 알아보도록 하죠. 어떻게 보면 당연한데 Deterministic방식 자체가 Input Set에 기반하고 있습니다. 그러니까 Input을 똑같이 공유하는 형태로 해서 게임 상태를 맞추는 방식이기 때문에 상대방이 보낸 Input에 의존할 수 밖에 없죠. 그래서 상대방이 보낸 Input을 인정하게 되면 상대방이 Input을 조작하더라도 발견하기 힘듭니다. 그래서 해킹에 취약할 수 밖에 없는데 이것을 방지하기 위해서는 이 Input이 정당한지 검사해야 합니다. 이 방식은 크게 2가지로 볼 수 있는데 서버를 이용하는 방식이 있고, 서로가 서로를 검사하는 방식, 방장이 검사하는 방식이 있는데 패킷을 서로 상대방에게 보낼 때 상대방이 이 패킷이 정당한 것인지, 지..

    [바미] 홀펀칭에 대해 알아보자!

    P2P, Relay 서버 방식에 대해 설명했을 때 IPv4가 갯수가 한정적이기 떄문에 모든 컴퓨터에 고정IP를 둘 수 없어 맨 앞에 있는 컴퓨터만 Pubic IP만 가지고 있으면 얘 한테 오는 패킷을 분배를 할 수 있었습니다. 그래서 이 맨앞에 있는 컴퓨터 이하에 있는 컴퓨터들은 가짜IP를 가지고 있어도 통신을 할 수 있었고, 이를 통해 자원고갈 문제를 해결할 수 있었습니다. 이 부분을 좀 더 자세히 보죠. 패킷이 안에서 바깥으로 나갈 때는 가능하지만 바깥에서 안으로 들어가는 것은 불가능 합니다. 안에서 바깥으로 나갈 때를 자세히 살펴보죠. 안에서 바깥으로 나갈 때의 목적지를 Naver라고 쳐보죠. Naver가 고정IP이기 때문에 Naver의 서브IP는 변하지 않습니다. 내 컴퓨터의 IP가 10.2.4...

    [바미] P2P, Relay 서버 방식에 대해 알아보자!

    P2P는 Peer To Peer방식이라 해서 클라이언트 끼리 직접적으로 연결하는 방식입니다. 보통 1:1에서는 클라이언트와 클라이언트가 연결하는 형태입니다. 5명이 연결하는 다대다 형태일 때 2가지로 나뉘는데 방장을 정해서 방장에게 커넥트하는 방식. 방장이 모든 커넥션을 가지고 있는 방식이 있고, 다른 하나는 풀리 커넥션(Fully Connection)이라 해서 모두가 모두에게 커넥션 하는 방식이 있습니다. 각각 장단점이 있는데 방장을 정해서 방장에게 커넥트하는 방식은 장점이라고 보면 커넥션이 하나밖에 없으니까 하나만 관리하면 되고, 방장이 있기 때문에 4개의 커넥션을 관리하지만 각자의 입장에서는 하나만 관리하는 측면에서 봤을 때 각 클라이언트가 걸려야되는 커넥션 수가 적다는 장점이 있고, 방장이 어떤 ..