우선 첫 글임에도 많은 호응해주셔서 정말 감사합니다.

지금은 주제가 밀린 게 좀 있다 보니 자주 올릴 것 같긴 합니다.
원래는 전이스킬을 더 연구하려고 일어났는데, 연장 점검이더군요. 괜찮습니다. 점검 끝나고 버그가 생기는 것 보단 훨 나으니깐요.(근데 보통 점검이 길어졌다는 건 건드리면 ㅈ되는 걸 건드렸다는 겁니다.)

두 번째 주제입니다. 2009년, 달팽이에게 픽파킷이 터지면 약 5억 메소가 드랍 되는 돈이 복사가 되는 픽파킷 사건을 다루려고 합니다. 
데 얘를 다룰까 많이 고민했습니다. 대놓고 컴퓨터 공학의 내용이 나오거든요. 최대한 자세히 설명 해볼테니 일단 앉아주십쇼.

먼저 최소한 이 두 가지는 알아야 앞으로의 내용이 이해가 잘 되므로 찍먹으로 컴공을 배워봅시다(정말로 읽기가 싫으시다면 노란색 줄로 넘어가시면 되시겠습니다.
먼저 컴퓨터는 어떤 숫자를 사용하려면 그에 맞는 크기의 그릇이 있어야 합니다. 여기서 경우의 수가 두 가지 생깁니다.
1.그릇이 엄청 커서 충분히 담을 경우
>>그냥 넣으면 됩니다. 고급 호텔의 코스 요리 마냥 그릇이 낭비된 느낌이지만, 그래도 담는데 문제는 없지요.

2.그릇이 내용물보다 작을 경우
>>이것이 제가 말하려는 경우입니다.
만약에 10까지 담을 수 있는 그릇이 있다고 할 때, 15의 값을 넣으려고 하면 어떻게 될까요? 
보통이라면 넘친다고 생각하겠죠? 그럼 자연스럽게 남는 숫자는 버려지겠구요.
하지만 컴퓨터는 그러지 않습니다.

자 시계를 바라봐 봅시다.


지금이 새벽 5시라고 합니다.
8시간이 흐르면 13시가 되겠죠? 근데 시침은 어디있나요?
1시에 있습니다. 이걸 오버 플로우라고 합니다. 초과한 값만큼 최솟값(0시)에서 다시 시작하는 것이지요.


자 이제 반대로 봅시다.
6시간 전은 전날 밤 11시입니다. 시침은 11시에 있죠. 이것을 언더 플로우라고 합니다. 최솟값(0시)보다 작아진 값만큼 최댓값(12시)에서 그만큼 차감하는 것이지요.


축하합니다. 여러분은 컴공이 1학년 때 배우는 전공 수업의 3주일치를 배우셨습니다.

자 이제 이 사건이 일어날 당시 메이플의 상황을 살펴봅시다.

그 당시에 메이플의 풀 메소는 약 21억이었다고 합니다. 아마 이 점에서 저는 풀메소가 assigned int(0~2147483647의 정수 값을 담을 수 있는 그릇입니다.)으로 선언 되었다고 생각했습니다.
그리고 우리는 언더 플로우, 오버 플로우에 대하여 배웠습니다.
일반적으로 갑자기 5억에 가까운 숫자가 나온 것은 둘 중에 어느 것 일까요?

1.그저 값이 수직 상승해서 5억이 되었다.
2.몬스터가 드랍하는 메소가 계속 줄어들다가 0보다 작아져서 언더 플로우가 일어나 최댓값(=2147483647)에 가까운 값을 가지게 된 것 이다.

2번이 좀 더 현실적 이겠죠? 21억에서 4를 나누면 되니깐요.

자, 그러면 이런 일을 일으키는 원인은 무엇일까요?
우리는 여기서 달팽이[만] 5억을 뱉는다는 것에 집중해야 합니다. 
달팽이가 다른 몬스터들과 다른 점은 무엇이 있을까요?
다양한 것이 있는데, 그 당시의 달팽이 스펙에 대해 아는 것이 눈알이 한 개라는 것과 1레벨이라는 것 뿐입니다.
여기서 1레벨이 중요하다고 보는 이유는, 메이플 월드 전체에서 레벨1짜리 몬스터는 달팽이가 유일합니다. 그다음은 파란달팽이가 2랩, 빨간 달팽이가 3랩이죠. 별 것 아닌 것처럼 보이지만, 이 1의 차이가 불러오는 나비효과는 굉장합니다. 

결론 = 2009 픽파킷 사건은 달팽이의 레벨이 1이라는 것에서 생긴 언더 플로우에 의한 대참사이다
Ps.이후에 메이플 스토리의 메소 페널티의 변화가 생겼습니다.
+-20까지는 직선을 그려가며 줄어들고,
+-27까지는 3차 곡선을 그리다가
+-30에서 아예 메소 페널티가 100%가 됩니다.
참고로 이전에는 메소 페널티가 100%까지 가지는 않았습니다.

원하시는 주제가 있으시다면 가능한 선에서 분석해보겠습니다.
다만 사건은 크게 세가지 분기점을 가지므로, 이를 참고해주세요
1.빅뱅
2.레드 패치
3.이번 모험가 리메이크

안녕하세요. 댓글을 보다 보니까 제가 너무 헛 짓거리를 했더 군요. 정말로 죄송합니다.

저 튄 거 아닙니다...

다만 다시 한 번 제대로 분석을 하기 위해 전공 책을꺼내 들어서 내용을 다시 한번 훑어 보고 있었고, 여러분들의 조언들을 다 모니터링 중이었습니다.

일단 생각보다 이 사건의 원인이 경우의 수가 너무 많습니다. 제가 한 게임의 문제에 대해 너무기만을 했네요. 다시 한 번 죄송합니다.

대략 지금까지 생각나는 고려사항은 다음과 같습니다.

-픽파킷이 메소를 출력하는 값이 정수 형인가? 실수 형인가?

           -그렇다면unsigned인가 signed인가?

-두가지의 차이는 양수, 음수를 결정하는 1bit가 있다는 점이다. 위의 문제가 원인이라면, 여기가 가장 가능성이 커 보인다.

           -실수형이라면IEEE에 따른 어느 부분에서 문제가 생겼는가?


-픽파킷에서 나온 돈이 주머니 형태인 걸로 보아 픽파킷의 메소 값을 출력하는 메소드에원인이 있을 가능성도 크지만, 다음의 경우도 있다.

-픽파킷이 결과로나온 값을 메소로 필드에 만드는 과정(어떤 메소의 형태로 출력하는가,값이 얼마나 되는가 등등)에서 문제가 생긴 가능성도 있어 보입니다.

-아직 언더(혹은 오버)플로우에 따른 값의 비 정상화가 가장 가능성이 크다고 개인적으로 생각해봅니다.

 

문제는 요즘 코딩 시스템들이 자동적으로 값의 오버 플로우, 언더 플로우와같은 변수형의 크기에 따른 오류가 생기면 아예 실행도 못하게 막아 버리는 지라, 최악의 경우에는 이론책을바탕으로 수작업으로 계산해야 할 수도 있습니다.(강제 연산을 시키는 법 아시는 분 계신가요? 혹시 있으시면 쪽지 주시면 감사하겠습니다.)

그리고 가장 최악은 메이플스토리가 자체 엔진이라 같은 [실수]라도 다른 자체엔진의 게임과는 다른 식으로 출력,저장이 될 수 있습니다.


, 정말 경우의 수가 너무 많습니다. 대략 계산해도 2,30가지 까지도 갈 것 같아요.

하겠습니다. 오래 걸리더라도, 처음부터저 자신을 위해 해본 분석이니, 기다려 주신다면 감사하겠습니다. 주기적으로과정을 덧붙이겠습니다. 쓸데 없는 글을 읽게 하여 정말로 죄송합니다. 감사합니다.