전체 글

전체 글

    [바미] Go - 포인터에 대해 알아보자!

    C#, Java는 포인터가 없지만 명시적으로 없을 뿐이지 묵시적으로 내부에선 포인터를 사용하고 있습니다. Golang은 포인터가 있습니다. 대부분 현대 언어는 포인터가 없죠. 이해하기 어려운 부분도 있고, 포인터 연산자체가 메모리를 직접 접근하기 때문에 위험하기 때문에 다른 언어들은 포인터를 감추어 내부에서만 사용하고 있습니다. 포인터를 감추다보니 다른 언어에서는 또 다른 문제들이 생겨나게 되었는데요. 내부 기능을 이해하기 어려운 부분도 있고, 이 타입이 Pointer타입인지, Value타입인지를 명시적으로 나와 있지 않다 보니까 프로그래머가 알고 있어야 되는데 그것을 잘 모르고 사용하면 문제가 되는 케이스가 발생하게 됩니다. 그 반면에 C, C++은 포인터를 가지고 있습니다. 그런데 포인터의 연산이나 ..

    [바미] Go - 구조체에 대해 알아보자!

    구조체? 영어로는 Struct라고 쓰이는데 말 그대로 어떤 구조를 가진 것이라고 보면 됩니다. 예를 들면 이런 것이죠. type Person struct { name string age int } 이런식으로 여러가지 변수들을 하나로 묶어서 하나의 이름으로 말하는게 구조체라고 보면 됩니다. 이것이 나온 이유는 프로그래밍이 발전된 과정을 보면 응집성(Cohesive)이 올라가고, 종속성(Dependency)이 낮아지는 방향으로 프로그래밍이 발전해 왔다고 보면 됩니다. 이렇게 만들어야 좋은 프로그래밍을 할 수 있기 때문에 이런 방향으로 계속 발전해 왔습니다. 그래서 이 Struct는 응집성을 높이는 방법입니다. 어떤 결합된 개념들이 있는데 예를 들면 성적 처리 프로그램을 만든다 했을 때 중요한 객체는 학생이 ..

    [바미] TDD의 장단점에 대해 알아보자!

    들어가기 앞서서 한 가지 소개할 것이 있는데 소프트웨어 공학쪽에 유명한 책이 있습니다. 맨먼스 미신이라는 책인데요. 여기서 나오는 유명한 말이 있습니다. There is no silver bullet. 은총알은 없다. 은총알은 늑대인간을 죽일 때 사용되는 총알 입니다. 여기서의 은총알은 모든 문제를 한방에 해결하는 솔루션을 의미하는데 한 방에 모든 문제를 해결하는 솔루션은 존재하지 않는다. 라는 의미 입니다. 즉, 어떤 기술을 가져오더라도 그것이 한 방에 해결하는 솔루션이 아니며, 항상 장 단점이 생기기 때문에 무조건 다 좋은 것이거나 장점만 가지고 있는 것은 없다는 것이죠. 그렇기 때문에 TDD도 마찬가지 입니다. 우선 장점부터 살펴보죠! 첫 번째 장점으로 Test Case가 많아집니다. Test를 먼..

    [바미] 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초마다 갱신되..