로딩 속도와 메모리에 대해 쓴글
일단 많은 우수한 서적에서 일부러 언급을 자제한 내용에 대해 기술하게 된 스스로의 부족함에 대해서 질책을 하고 싶다. 누구를 가르치는 것에 있어서 나의 지난 몇년 간의 실패를 인정한다. 내가 이전에 쓴 몇몇 강좌들의 대부분이 그렇듯이 처음 프로그래밍을 공부하는 학생들이 중급자로 가기 위해서 반듯이 고려해야 하는 부분이 메모리에 대한 것이다. 대부분의 국내 프로그래밍 입문서들이 깊게 다루지 않는 부분이며 일부 실업계 고등학교나 요점만 공부하는 식의 페이퍼들이 대부분 메모리에 대해서 논하지 않는다. 하지만 이는 중요한 부분 중의 하나이며 계속 프로그래밍을 하다보면 스스로 알게 되는 부분이나, 지난 날을 비추어 볼때 이를 깨닫는 사람의 비율이 해가 지날 수록 점점 줄어 들고 있고 나에게는 간접적으로 가르칠 수 있는 실력이 전혀 없었다. 로딩 속도와 메모리 많은 사람들이 게임 중의 끈김 현상에 대해서 이야기 한다. 내가 앞으로 설명할 이야기는 그중에 마을에서의 로딩에 관련된 것이다. 말하고 하는 바는 간단하다 왜 사람이 많은 마을에 가면 갑자기 화면이 끈길까. 본론부터 말하자면 마을 밖에서 마을 안으로 가면 캐릭터의 시야에 들어오는 물체들을 화면에 그려야 하는데 그 보이는 순간에 다른 유저를 '생성'하기 때문이다. 몇몇 게임은 미리 맵 전체를 한번에 로딩('생성')하고 다른 종류는 부분적으로 로딩하기 때문에 맵에 대해서는 많은 문제가 없다. 하지만 다른유저의 케릭터에 대해서 몇몇 게임은 보이는 순간에 생성을 하는데 이 생성이라는 것이 메모리에 그 캐릭터에 대한 정보를 담을 공간을 할당 하는 것이다.

컴퓨터라는 녀석은 용량이 큰 파일을 하나 복사할때 보다 용량이 작은 파일을 여러개 복사 할 때 더 느리다.(왜 그럴까 모른다면 생각해보자)

메모리 할당 역시 마찬가지다 각 캐릭터의 정보자체는 별로 용량이 되지 않고 심지어 마을에 있는 캐릭터 전부의 메모리 사용량이 별로 되지 않을 때도 있다. 하지만 결론적으로 느리다. 미리 로딩 되어 있는가 그렇지 않는가가 사용자에게 짜증을 불러 일으킨다. 물론 너무 미리 로딩하는 것도 문제가 된다. 이 시점과 처리 방법은 매번 다른 상황에서 구현 되는게 일반적이므로 여기서 말하는 것은 무의미 하겠다. 힌트를 준다면 CPU가 놀고 있을때 적절히 로딩하면 좋지 않을까 한다.

 

변수 할당 시간 같은 , 아니 거의 대부분의 것들이 무시할정도로 미미한 시간동안 수행된다고 해도 그 양이 많아지면, 내가 데이터 한두개로 테스트 할때는 잘되지만 백개 천개 백만개 천만개에서 동작할때에는 그런 녀석들 조차 최적화가 필요해진다.

 

얼마전에 몇몇 알고리즘의 속도에 대한 비교를 해야 했었다. 종료 시간에서 시작 시간을 빼면 그동안의 작업 시간이 산출 되고 그것들을 수백번 수행해서 평균을 낸다. 만약 그 속에 알고리즘이 사용할 데이터를 로딩하는 일을 한다면 속도 비교에 대한 데이터는 신용 할 수 없는 데이터 가 되는 것이다.

 

또한 그 평가를 하는 프로그램이 수행된뒤 바로 계산되는 값은 쓸모가 없다. 윈도우가 처음 부팅 될때를 생각해보면 이유를 알것이다. 난 보통 앞 데이터 몇개를 버리던가 nop이라는 아무것도 하지말라는 명령어 등을 수행해서 좀 텀을 준다음 계산과 시간 체크를 시작한다.

 

대부분의 처음 시작하는 프로그래머들이 변수는 그냥 생성하면 될꺼라 생각하지만 엄연히 변수 생성(메모리 할당) 역시 시간이 걸리고 어떤경우 그 작업이 실패 하기도 한다.

개발은 점점 프로그래머에게 점점 꼼꼼함을 요구하고 있다. 잘 돌아가는 프로그램이 좋은 프로그램이 아니다. 이제 몇몇 분야를 빼고는 최적화된 코드 보다 유지보수 하기 쉽고 튼튼한 코드가 잘 짜여긴 코드가 좋은 코드로 여겨 지고 있다.

별 내용은 아니었지만 프로그래밍을 시작하는 사람들에게 도움이 되었으면 한다.

 

2007년 2월 26일 월요일 오전 3시 9분