퀵바

ki**** 님의 서재입니다.

사실 게임 프로그래머 리더십에 대한 이야기

웹소설 > 일반연재 > 현대판타지, 게임

kistch
작품등록일 :
2022.05.11 13:48
최근연재일 :
2022.07.17 19:55
연재수 :
50 회
조회수 :
17,260
추천수 :
1,103
글자수 :
233,327

작성
22.06.17 00:40
조회
292
추천
21
글자
12쪽

고주영과 최적화 2

DUMMY

우리는 우선 전투 튜토리얼에서 처음 사용하는 스킬인 베기 스킬을 최적화하기로 했다. 베기 스킬을 사용해도 fps가 15 이하로 떨어지지 않게 하는 것이 우리의 첫 목표다.

우리는 베기 스킬의 코드를 함께 보며, 어느 부분이 느릴만한지 예측해서 수정했다.


내가 말했다.

“여기 코드가 좀 느릴 것 같네요. 불필요한 반복문이 많아요.”

“이곳은 불필요한 메모리가 많이 할당되는 것 같아요. GC에 Alloc이 빈번하게 되지 않도록 메모리를 재활용하게 바꿔봐요.”

“String 타입의 변수는 특별하게 취급되기 때문에 + 같은 연산을 하게 되면 메모리에 쓰레기가 쌓이게 돼요.”

등등. 나는 그간 읽어온 책에서 얻은 지식을 총동원해서 코드 레벨의 최적화를 진행했다.


“와~ 진수 님은 이런 거 어떻게 다 아세요? 소프트웨어 전공도 안 하셨잖아요? 인터넷 검색해 보신 거예요?”


주영 님은 정말 솔직한 사람이라는 것을 또다시 느꼈다.

“제가··· 전문적으로 코딩을 배운 적은 없지만, 독학은 누구보다 많이 했어요···”


우리는 이틀 정도를 고생하며 베기 스킬에 대한 코드 레벨 최적화를 진행했다. 그리고 최적화 결과를 확인하기 위해 다시 빌드했다.

기대 반 걱정 반. 우리는 떨리는 손으로 “베기” 스킬을 사용했다. 이틀 동안 우리가 최적화 작업을 했던 것이 효과가 있었을까?

다행히 이전보다는 두 배나 나아졌다. 스킬 사용 중 fps가 2에서 4으로 올라갔다.


고주영 님이 내게 말했다.

“이거··· 수치가 2배나 좋아지긴 했는데··· 이게 2배 빨라졌다고 말 할 수 있을까요···? 간발의 차이로 fps는 2~4 수시로 변하는데···”

“그러게요··· 애매하네요. 그리고 fps 2이나 4나 어차피 게임 못할 정도로 느린 건 마찬가지네요.”

“흠··· 우리가 베기 스킬에서 찾아서 수정한 코드만 10여 군데인데··· 효과가 기대만큼 없네요.”

“그러게요··· 더 이상 코드에서 문제 될만한 부분은 없어 보이는데··· 이해할 수 없네요. 주영 님 우리 잠깐 고민 좀 해볼까요?”

“네 저는 인터넷 검색 좀 해볼게요.”


나는 최적화를 어떻게 진행해야 하는가에 대해 고민을 했다. 분명 느릴 만한 부분의 코드들을 전부 찾아서 수정했는데···

그때 오랜만에 아저씨한테 메시지가 왔다.


“진수 씨 아직 퇴근 안 했어요?”

“아저씨! 잘 지내시죠?”

“허허허. 저야 항상 잘 지내죠. 밥 먹었어요?”

“아니요 아직 안 먹었어요. 일이 잘 안 풀리네요.”

“그럼 삼겹살 사줄 테니까 나와요.”

“아직 퇴근 시간 30분 남았어요.”

“내가 진수 씨 회사 쪽으로 가서 기다릴게요. 칼퇴근하고 나오세요.”

“네.”


나는 더 고민해봐야 답도 없을 것 같아서, 아저씨를 만나러 가기로 했다.

어쩌면 이번에도 아저씨가 엉뚱한 방법으로 내게 해답을 줄지 모른다.


오랜만에 만난 아저씨는 굉장히 말끔한 정장 차림이었다.

“오~ 아저씨 웬일로 정장을 입으셨어요?”

“근처에 볼일이 있어서 왔는데, 영 재미없는 자리라서 저녁 약속이 있다고 거짓말하고 나왔어요.”

“에이··· 아저씨라면 저녁 메뉴가 마음에 안 드셨겠죠.”

“허허허 그것도 맞는 말이에요. 저는 삼겹살에 소주 먹는 게 제일 좋더라고요.”

“그럼 삼겹살 먹으러 갈까요? 제가 미믹게임즈 퇴사할 때 아저씨 조언 덕분에 일이 잘 풀렸어요. 감사의 의미로 오늘 고기는 제가 사겠습니다!”

“허허허 그래요? 진수 씨가 한턱 쏘는거면 맛있는 거 먹으러 가야겠네.”


우리는 일 인분에 만 오천 원이나 하는 고급 삼겹살집을 갔다. 그리고 삼겹살 3인분과 소주 1병을 시켰다.

아저씨를 만나니 오랜 고향 친구를 만난 듯 모든 긴장이 풀렸다.

나는 미주알고주알 그동안 있었던 일들을 아저씨에게 고자질하듯 말했다. 특히 이영식 파트장님 때문에 클라이언트 파트에서 쫓겨나 팀 직속으로 이동했던 사건에 대해서는 30분 넘게 말했다.


“아니··· 그런 사람이 어떻게 파트장이 됐을까요?”

“진수 씨는 어떤 사람이 직책을 맡게 된다고 생각해요?”

“실력이 좋은 사람이요. 아니면 지식이 많거나?”

“아니요. 직책은 그냥 상황이 만들어주는 거예요.”

“이해가 잘 안 돼요.”

“직책은 실력에 대한 보상으로 주어지는 게 아니에요. 그냥 그때그때 필요한 직책이 있으면, 그 상황에 맞는 사람이 직책을 맡게 되는 거예요. 직책은 있다가도 없고 없다가도 있는 거니까 직책에 큰 의미를 두지 마세요.”

“그런데 그 파트장님은 왜 저를 괴롭히지 못해서 안달일까요?”


“허허허 제가 전에 알려주지 않았나요? 모든 리더는 어떤 종류든 카리스마가 필요하다고. 그리고 그 카리스마를 유지하는데 진수 씨가 부담됐나 보죠. 진수 씨는 에둘러 표현할 줄 모르는 솔직한 사람이니까요.”


내가 우리 팀의 고주영 같은 역할이었던 걸까?

나도 고주영처럼 필터 없이 말하고 있었나??


“그나저나 진수 씨 요즘은 무슨 작업해요?”

“아··· 저 최적화해요.”

“허허허 이런··· 노가다 작업이군요.”

“아니에요 아저씨. 최적화는 코드랑 컴파일이랑 막 이런 거 잘 알아서 그냥 구현이 아니라 성능상 이롭게 구현하는 고난도 작업이에요.”

“최적화가 별거 있나요? 보고 깎고 보고 깎고 이거 반복이 전부지.”

“뭘 봐요?”

“프로파일요. 어디가 느린지 알아야 수정할 수 있잖아요?”

“프로파일요??”

“설마 프로파일도 안 해보고 최적화 작업을 하고 있었던 거예요?”

“네··· 해본 적이 없어요···”

“흐음··· 진수 씨도 이제 겨우 신입 티 벗었는데 모를 수도 있죠.”

“알려주세요···”

“최적화의 기본은 프로파일이에요. 프로파일을 해서 어디가 느린지 찾고, 그곳이 왜 느린지를 알아야 합니다. 왜 느린지만 알면 수정 방법은 얼마든지 있어요.”


아저씨가 고기를 집어먹는 틈에 나는 내 질문을 정리했다.

“아저씨. 그런데 저희도 코드 보면서 어디가 느릴지 이틀이나 찾아보고 수정했거든요. 꽤 여러 곳 수정했다고 생각하는데, 생각보다 효과가 작더라고요. 이건 왜 그럴까요?”

“효과가 작다? 얼마나 효과가 있었는데요?”

“fps가 2에서 4로 올라갔어요. 이 정도면 두 배는 좋아진 건대··· 아직도 멀었어요.”

“허허허··· 우선 세 가지만 말해줄게요. 첫 번째, fps 표기는 항상 프레임 당 소비된 milli second도 함께 표시하세요.”

“밀리세컨드요??”

“네 초당 몇 프레임이 나오냐는 나중에 성능이 꽤 나온 후부터 관찰해도 돼요. 그전에는 게임이 한 프레임을 돌리는 데 몇 초가 걸렸냐를 보세요. 그게 훨씬 더 직관적이고 자세한 수치로 볼 수 있습니다.”


한 프레임당 소비 시간은 fps의 반대 개념이다. fps는 1초에 몇 프레임이 재생됐느냐지만 프레임 당 소비 시간은 한 프레임을 재생시키는데 드는 총비용이다. 그러니까 fps가 10이면 프레임당 평균 소비 시간은 100ms가 되고, fps가 100이면 프레임당 평균 소비 시간은 10ms가 된다. 즉 1초(1,000ms)에 프레임당 소비 시간을 나누면 그게 fps가 된다.

쉽게 말하면 fps는 높을수록, 초당 소비 시간은 낮을수록 성능이 좋다는 뜻이다.


“일리가 있네요. 성능을 fps로 계산하면 아주 작은 성능 변화에도 fps가 1에서 2로 올라가거나 반대로 성능이 많이 좋아졌는데 겨우 fps가 1 올라갈 수도 있으니 얼마나 성능이 좋아졌는지 쉽게 알 수 없겠네요. 반면 초당 프레임 소비 시간으로 보면 실제로 얼마나 빨라졌는지 자세히 알 수 있겠어요.”


아저씨는 또 주섬주섬 고기를 집어먹었다. 아저씨는 고기술이라는 이름답게 고기와 술을 좋아하신다.


“이해한 것 같으니 두 번째 얘길 할게요. 진수 씨처럼 대부분 프로그래머는 프로파일의 중요성을 잘 몰라요. 왜 그런지 아세요?”

“어차피 공부를 많이 한 프로그래머는 코드만 봐도 대충 어디가 느릴지 알 수 있어서 아닐까요? 불필요한 반복문을 줄인다던가? new로 생성하는 것을 재활용한다던가?”

“허허허 진수 씨가 말한 것들은 전부 코드레벨의 최적화예요. 맞죠?”

“네”

“그럼 다시 질문하죠. 스마트폰이 진수 씨가 만든 게임을 구동하는데, 진수 씨가 작성한 코드만 있으면 될까요? OS나 게임 엔진의 런타임은 필요 없을까요?”

“아?!”

“다른 예로 들어 볼게요. 진수 씨가 코드로 a라는 파일을 읽으라고 컴퓨터에 명령했습니다. 진수 씨가 짠 코드는 아주 심플하죠. 그런데 이 코드는 실제로 매우 느려요. 왜 느릴까요?”

“아!! 저 뭔지 알 것 같아요. 제 코드 자체는 느리지 않지만 제가 짠 코드를 컴퓨터가 실제로 동작하게 만드는 환경! 그 환경을 유지하기 위한 자원도 필요한 거군요!”

“맞아요. 다시 설명해주면 진수 씨가 라면을 끓인다고 생각해봅시다. 진수 씨는 라면을 끓이기 위해 무엇이 필요하다고 생각하나요?”

“라면과 물이요? 계란도 있으면 좋고요.”

“네. 라면과 물이 필요하죠. 라면과 물이 게임 프로그래머가 코딩하는 영역입니다. 하지만 실제로 라면을 끓이는 데에 라면과 물만 있으면 될까요? 절대 아니죠”


아저씨는 가소로운 듯 미소를 지으며 고개를 절레절레 흔들었다. 그리고 다시 말했다.

“라면을 끓이기 위해서는 불도 필요하고, 불을 피우기 위해서는 가스레인지도 필요하죠. 그리고 그 가스레인지는 보통 싱크대라는 프레임 위에 올라가 있습니다. 싱크대는 다시 부엌 안에 있고··· 이렇게 라면을 끓이기 위해서는 라면과 물 외에도 환경이라는 것이 필요해요.”

“여기서 아저씨가 말하는 환경이 런타임이나 OS를 말하는 거죠?”

런타임이란, 프로그래머가 코딩한 코드가 실제로 동작하기 위해 기본적으로 있어야 하는 환경이다.


“네 맞아요. 거기다 CPU나 메모리 같은 하드웨어도 포함입니다.”

“아저씨가 왜 이 얘길 하시는지 알 것 같아요. 우리 게임 프로그래머가 만드는 코드는 환경에 비하면 작은 영역이다. 우리 코드를 아무리 최적화해봐야 그 한계는 명확하다··· 이 뜻인가요?”

“역시 진수 씨는 책을 많이 읽어서 그런지 이해를 바로 하시네요. 아무튼 맛있는 라면을 끓이기 위해서는 라면과 물뿐 아니라 센 불과 좋은 냄비, 그리고 냄새나지 않는 깨끗한 부엌··· 필요한 것들이 많습니다. 그래서 프로파일이 필요한 거죠. 내 라면이 왜 맛이 없을까? 불이 약한 걸까? 아니면 라면을 끓이기에 적합하지 않은 냄비를 사용했나? 다방면으로 살펴볼 필요가 있습니다.”


나는 아저씨에게 소주를 공손하게 따라주었다.

“아저씨는 정말 의외인 것 같아요. 어떻게 이런 것들을 쉽게 생각해내시는지···”

“허허허 진수 씨 말처럼 이게 다 인생의 짬바 아니겠습니까? 아무튼 진수 씨. 코딩이라는 것은 C++이든 Java든 프로그래밍 언어를 통해서 하게 되죠. 좋은 프로그래머가 되고 싶다면, 단순히 대화로써 컴퓨터에게 일만 시키는 것이 아니라, 프로그래머인 내가 이렇게 말하면 컴퓨터는 어떻게 내 말을 해석하고 행동할까? 하고 고민하는 프로그래머가 되세요.”

“조언 감사합니다.”


이제 아저씨의 세 번째 말을 들을 차례다.


이 작품은 어때요?

< >

Comment ' 1


댓글쓰기
0 / 3000
회원가입

사실 게임 프로그래머 리더십에 대한 이야기 연재란
제목날짜 조회 추천 글자수
공지 잠시 휴제하려고 합니다. 22.07.24 116 0 -
공지 연재 주기를 변경하려고 합니다. 22.07.10 52 0 -
공지 다음 주(6월 20일~) 연재는 이번주 주말에 몰아서 하겠습니다 22.06.17 262 0 -
50 리펙토링 2 +2 22.07.17 168 14 12쪽
49 리펙토링 1 22.07.10 169 9 11쪽
48 사실 진수 이야기는 여기서부터 22.07.08 157 10 11쪽
47 나만의 빽 만들기 3 22.07.07 158 9 11쪽
46 나만의 빽 만들기 2 22.07.06 177 12 12쪽
45 나만의 빽 만들기 1 22.07.05 167 9 11쪽
44 나만 몰랐던 고백 22.07.04 192 12 11쪽
43 고구마는 최대한 짧게 22.07.01 219 15 11쪽
42 피싱 vs 피싱 2 22.06.30 210 13 12쪽
41 피싱 vs 피싱 1 22.06.29 216 12 11쪽
40 임아린의 노하우 2 22.06.28 230 13 12쪽
39 임아린의 노하우 1 +1 22.06.26 260 14 11쪽
38 파트장 변화시키기 2 +1 22.06.19 273 14 12쪽
37 파트장 변화시키기 1 22.06.19 299 14 11쪽
36 민희 씨와 의지 +2 22.06.18 288 16 12쪽
35 고주영과 최적화 4 +2 22.06.18 302 16 11쪽
34 고주영과 최적화 3 +2 22.06.17 298 20 11쪽
» 고주영과 최적화 2 +1 22.06.17 293 21 12쪽
32 고주영과 최적화 1 +1 22.06.16 296 15 11쪽
31 적응 8 +2 22.06.15 298 16 11쪽
30 적응 7 +3 22.06.14 304 19 11쪽
29 적응 6 +9 22.06.13 360 17 11쪽
28 적응 5 +3 22.06.10 307 19 12쪽
27 적응 4 +1 22.06.09 296 20 12쪽
26 적응 3 +3 22.06.08 310 19 12쪽
25 적응 2 +2 22.06.07 316 19 12쪽
24 적응 1 +2 22.06.06 327 22 9쪽

구독자 통계

신고 사유를 선택하세요.
장난 또는 허위 신고시 불이익을 받을 수 있으며,
작품 신고의 경우 저작권자에게 익명으로 신고 내용이
전달될 수 있습니다.

신고
비밀번호 입력