메피카타츠의 블로그
2025년 한 해를 되돌아보며 본문
벌써 2025년이 다 지나가고 2026년이 된 지 1달이 지났다. 이번에 회고 글이 늦어진 이유는 퇴사라는 이벤트와 겹쳐져서 그렇다. 먼저 지난 한 해동안 했던 의미 깊었던 업무들을 되짚어보고, 직장 생활을 하며 느꼈던 점들에 대해 회고해보는 시간을 가져볼까 한다.
의미 깊었던 업무들
0. 코드 리뷰 문화 도입
2024년 12월부터 도입을 했었는데, 아직 도입 초기라 작년 회고 글에 작성하지 않았던 것 같다. 계기는 신입 프로그래머가 작업한 내용에 대한 코드 리뷰를 맡다가, 신입 프로그래머뿐만 아니라 팀 전체에 필요할 것 같다고 생각하여 도입하게 되었다. 결론부터 말하자면, 매우 좋은 문화였던 것 같다. 혼자서 작업을 하다보면 놓치는 부분도 있는데, 다른 사람의 시선이 더해지면서 기능도 더 안전해지고, 코드 퀄리티도 전반적으로 좋아졌던 것 같다. 그리고 다른 사람들과 내용을 공유하면서 해당 작업에 대한 컨텍스트를 1명만 갖지 않을 수 있게 된다는 점도 큰 이점인 것 같다. 단점으로는, 리뷰라는 과정을 거쳐야 해서 기존에 비해 작업이 지체된다고 느낄 수 있다는 점이다. 다만, 코드 리뷰가 없었을 때의 버그 발생 빈도와 재수정 비용, 유지보수 비용, 그리고 코드 리뷰 과정에서 방지한 문제들을 생각해보면 "어차피 나중에 쓸 비용을 미리 들여 완성도를 높인다"는 느낌인 것 같다. 중요한 점은, '사람에 따라 코드 리딩 역량이 다르다'는 점이고, 때문에 작업의 중요도에 따라 리뷰어를 적절히 잘 선별해야 한다.
1. 서버 성능 + 패킷 메모리 개선 (2025/01/13 ~ 2025/01/17)
이전에도 클라이언트 성능이나 메모리 개선은 많이 했었는데, 서버 성능 및 메모리 개선은 처음으로 해봤던 것 같다. 기존에 성능 측정을 위한 기반이 준비되어 있어서, 측정한 내용을 바탕으로 성능을 많이 잡아먹는 부분들을 파악하고 분석하여 최적화하는 식으로 진행했다. 성능 최적화에 있어서 가장 중요한 것은 성능을 측정할 수 있는 기반인 것 같다. 그리고 성능 최적화를 통해 이틀 만에 전체 성능을 약 20% 향상하여 서버 수용 인원이 증가하는 효과를 볼 수 있었다. 어떻게 보면, 측정도 중요하지만 정기적으로 점검하고 개선하는 작업도 필요할 것 같다는 생각이 들기도 하였다.
+ 패킷을 보낼 때 풀링이 되지 않고 있던 부분도 개선하여 GC 주기가 125초에서 170초로 늘어났는데, 이 부분에서는 dotMemory의 도움이 컸다.
2. 에셋 번들 다운로드 용량 최적화 (번들 그룹 나누기) (2025/02/05 ~ 2025/02/07)
이전에 에셋 번들 시스템을 업그레이드하고, 중복을 제거하여 메모리 용량을 최적화한 경험이 있었다. 이번에는 번들의 그룹을 나누는 작업을 했었는데, 특정 번들의 크기가 300MB 이상이라, 번들 내 파일 구성이 조금만 바뀌어도 300MB가 넘는 파일 전체를 다시 받게 되는 문제가 있었다. 이는 특정 폴더의 하위 파일들을 전부 하나의 번들로 묶어서 그런 것이었는데, 지정한 번들에 대해서는 특정 규칙에 맞춰 번들 묶음을 30MB 내외로 작게 나눠서 묶도록 수정하였다. 그 결과, 이전과 같이 작은 변경이 있는 경우, 30MB 내외의 추가 다운로드 용량만 발생하게 되었다. 또, 이 과정에서 이런 류의 문제가 유저의 불편함을 유발하는 것뿐만 아니라 불필요한 비용도 지출하게 되는 문제라는 사실을 알게 되었다.
3. 이동 핵 방지 (2025/05/02 ~ 2025/05/14)
이전에 스피드핵을 방지했었는데, 시간을 가속하는 것을 감지하고, 남들보다 빠른 속도로 공격을 하는 것을 차단하는 선까지 작업을 하였다. 그 이유는, 당시에는 이동 핵을 통해 게임 내에서 실질적으로 이득을 볼 수 있는 부분이 많지 않았고, 이동 핵 방지 작업에 들어가는 비용이 커서 작업이 후순위로 밀리게 되었다. 다만 신규 프로젝트에서는 이동 핵을 통해 볼 수 있는 이득이 커졌기 때문에 작업에 착수하였다. 이전에 스피드핵 방지를 개발해본 경험이 있어서 생각보다 짧은 기간 내에 작업을 끝마칠 수 있었다. 역시나 이번에도 가장 어려웠던 점은, '공정성을 보장하면서도 유저에게 매끄러운 처리를 보장해주는 것'이었다. 서버 중심으로 돌아가는 경우 공정성을 보장하기는 쉽지만, 매끄러운 처리를 보장해주기는 어렵다. 어떤 것이든 장점이 있으면 그에 따른 단점이 있는 것 같다.
4. 트랜잭션 구조 개선 (2025/08/28 ~ 2025/09/04)
기존에는 트랜잭션 처리를 수작업으로 넣어줘야 했는데, 이게 누락되어 크리티컬한 문제가 발생한 적이 있었다. 이에 대해 누락된 트랜잭션을 추가한 리뷰가 올라왔었는데, 이런 실수가 발생할 수 있는 구조에 문제가 있다고 생각하여 '누락될 수 없는 구조'를 만들었다. 반복되는 문제 혹은 중요도가 높은 문제에 대해서는 구조적으로 방지하는 것이 중요하다고 느꼈다.
5. 밸런스 테스트 툴 개발 (2025/10/30 ~ 2025/11/20)
이 작업은 내가 필요하다고 제시하면서 만든 것이다. 밑에서 얘기하겠지만, 신규 프로젝트를 출시했는데 여러 이슈가 있었다. 그 중 내가 가장 크게 느낀 것이 밸런스 측면에서의 문제였다. 기존에도 다소 문제가 있다고 느껴 여러 사람들이 여러 차례 의견을 제시했으나, 어떻게 보면 개개인의 감에 의존한 의견이기 때문에 의견이 온전히 반영되기 어려웠고, 의견이 반영된 부분도 기준이 없었기 때문에 올바르게 수정되기 어려웠던 것 같다. 내가 만든 것은 게임이 자동으로 플레이되면서 밸런스 측면에서의 데이터를 기록하고 분석해주는 툴이었다. 이를 통해 눈에 보이는 명확한 수치를 만들어낼 수 있었고, 각종 밸런스는 물론 향후 게임 재화의 변화를 예측할 수 있게 되었다. 설계 상의 구조나, 코드의 안정성, 사용의 편리성을 넘어서 운영 측면에서도 중요한 것이 있다는 것을 비로소 느낄 수 있었다.
직장 생활을 하며 느꼈던 점
좋은 점도 많았지만 아쉬운 점도 있었고, 어떤 계기도 있어서 어제를 마지막으로 몸담던 회사를 떠나게 됐다. 지금 돌아보면, 내가 성장하기에 아주 좋았던 회사였던 것 같다. 입사 당시로 다시 돌아가더라도, 다시 이 회사에 입사하는 것이 좋을 것 같다는 생각이 들 정도이다. 사람들도 좋았고, 업무 부담도 적당했고, 항상 새로운 시도가 가능했고, 믿을 수 있고 나를 믿어주는 동료가 있었다. 이곳에서의 약 2년 8개월 동안 느낀 점들에 대해 적어볼까 한다.
1. 가장 중요한 것은 목표와 계획이다.
시간이 지날수록 점점 크게 와닿는 점이다. 작업자 개개인은 프로젝트의 큰 그림을 그리기가 어렵다. 작업의 우선순위를 판단하기도 어렵다. 그렇기 때문에 누군가 프로젝트의 큰 그림을 그리며 목표를 세우고, 일정을 계획해 작업자들에게 작업 일정을 공유해줘야 한다. 그렇지 않으면 작업이 뒤로 밀리고, 시간이 촉박해지면서 야근을 하게 되고, 일정은 밀리고, 완성도는 떨어지는 것이다.
이런 문제를 방지하기 위해서, 만들어낼 결과물에 대한 명확한 목표를 정하고, 그에 대해 세부적인 계획을 세우는 것이 가장 중요하다고 생각한다. '계획을 세워봤자 계획대로 되는 경우가 없더라'는 얘기도 있지만, 계획을 세워서 계획대로 되지 않는 경우는 보통 '계획보다 미뤄지는' 경우일 것이다. 그 경우 계획을 잘못 세운 것이고, 이에 따라 계획을 지속적으로 재조정해야 한다. 재조정한 계획이 일정에 맞지 않는다면, 계획을 축소하든가, 일정을 늘리든가, 인원을 추가로 투입하는 식으로 미리 대비를 하는 것이 목표한 바를 이루기 위해 가장 중요한 부분이라고 생각한다.
2. 프로젝트의 방향성이 명확해야 한다.
올바른 목표를 세우기 위해서는 프로젝트의 방향성이 명확해야 한다.
항상 만들고 싶은 것은 많지만, 시간과 비용은 한정되어 있다.
예를 들어 리니지라이크 게임은, 과금을 많이 한 사람이 이기는 게임이다. 자신의 돈을 대가로 캐릭터를 강하게 만들고, 자신보다 약한 캐릭터들을 상대로 이기면서 재미를 느낄 수 있다. 그런데 이런 리니지라이크 게임에서, “모든 사람들의 스펙을 동일하게 만들고, 컨트롤로 승부할 수 있는 대전 컨텐츠” 를 만든다면 어떨까? 적어도 내가 생각하기에 유저들에게 전혀 환영받지 못할 것이다. 단발성 유희용으로는 즐길 수 있겠지만, 보상이 들어간다면, 그리고 돈을 엄청 많이 쓴 유저가 돈을 하나도 쓰지 않은 유저에게 패배한다면, 아마 불만은 걷잡을 수 없이 커질 것이다. 반대로, 리그 오브 레전드에 ‘과금을 하면 초반에 더 많은 골드를 가지고 시작할 수 있는 기능’이 추가된다면, 거의 게임이 망할 지경으로 갈 가능성이 높다.
기능 추가에 대한 기획안을 내는 기획자는 물론이고, 해당 기획을 구현하는 작업자들에게도 이런 방향성은 중요하다. 기획 내용에 대한 세부적인 기능을 구현함에 있어서 작업자들 개개인의 성향이나 생각이 반영되기 마련이다. 또, 작업을 하면서는 물론이고 플레이를 하면서, 테스트를 하면서 구현된 내용이 ‘우리가 의도한 방향이 맞는지’ 확인하고 의견을 내기 위해서는 프로젝트의 방향성이 명확해야 한다는 것이다.
3. 사람은 쉽게 바뀌지 않지만 성장한다.
여태까지 살아오면서 느낀 것은, 정말 사람은 쉽게 바뀌지 않는다는 것이다. 어떤 사람을 시간이 꽤 흘러 다시 만나게 되면, ‘이 사람, 의외로 변했네?’ 싶다가도, 어느 순간에 ‘아, 근본적인 모습은 그대로구나’ 라고 느끼게 되는 순간들이 많다.
업무를 하면서도 같은 생각을 느꼈던 것 같다. 정말 사람은 쉽게 바뀌지 않는다. 다만, 근본적인 성향이나 태도같은 것들은 바뀌지 않더라도 업무를 반복하면서 퍼포먼스가 올라가는 부분은 확실히 있는 것 같다. 어떻게 보자면 수집형 RPG와 비슷한 것 같다. 어떤 캐릭터를 성장시킨다고 해서, 해당 캐릭터의 스킬이나 용도가 바뀌지는 않는다. 다만 전반적인 능력치가 올라가는 것이다. 그 사람 그대로인 채로.
4. 처음 할 때 잘 해놔야 한다.
이건 업무적으로도, 관계적으로도 중요한 것 같다.
업무적으로는, 처음에 대충 만들어놓으면 그 뒤에 대충 얹게 된다. 이게 반복되면, 소위 말하는 스파게티 코드가 되기 일쑤이다. 이에 비해 처음에 잘 해놓으면, 그 위에 얹을 때도 안정적으로 얹게 된다. 다만 변경될 가능성이 적은 기능에 이런 시간을 투자하는 것은 오히려 낭비이다. 변경될 가능성이 높거나 중요한 곳에 적절한 비용을 투자하는 것이 좋겠다.
관계적으로는, 초반 인상이 이후의 많은 부분을 결정하게 되는 것 같다. 사실 나도 어떤 사람에 대해서 초반 인상이 별로 좋지는 못했다. 그 중에는 업무적인 역량에 대한 인상도 있었다. 하지만 코드 리뷰 도입을 통해 이 사람의 작업물을 지속적으로 리뷰하게 되었고, 어느 순간 ‘이 사람이 이 정도로 잘 했었나?’ 싶은 생각이 들기도 했다. 하지만 나의 경우는 리뷰를 지속적으로 맡았기 때문에 이렇게 변화한 모습을 볼 기회가 있었던 것이고, 다른 사람들의 경우는 그렇지 않았을 가능성이 높다. 같은 일을 하더라도, 같은 역량과 태도를 보여주더라도 받아들이기 나름이라 처음에 관계를 잘 만들어 놓는 것이 중요한 것 같다.
5. 진짜 문제가 무엇인지 잘 파악해야 한다.
반복되는 문제는 근본적인 원인을 해결해야 한다. 말로만 들으면 너무나 당연한 얘기지만, 실제 상황에서 이것을 인지하기는 어렵다.
위에서 언급했던, ‘트랜잭션 처리가 누락되어 발생한 문제’를 마주치게 되면, ‘누락된 트랜잭션을 추가한다’가 당연한 수순이다. 그러나 그 너머에 ‘트랜잭션 처리 누락이 발생할 수 있는 문제’가 존재하고 있었다.
마찬가지로, ‘메인 브랜치에 버그가 많은 기능이 올라오는 문제’를 ‘작업자의 부주의’로 여길 수도 있겠지만, ‘검증되지 않은 코드를 누구나 메인 브랜치에 올릴 수 있는 문제’로 해석하고 코드 리뷰를 통해 문제를 줄였다고 볼 수 있겠다.
우리는 종종 문제라고 인지조차 하기 어려운 문제들과 마주치게 되는 것 같다. 어쩌면 내가 ‘진짜 문제’라고 생각했던 것들이 틀렸을 수도 있다. 하지만 항상 ‘지금보다 더 나아질 수는 없을까?’ 라는 질문을 던지며 여러 문제들을 해결하기 위해 앞으로도 노력해야겠다.
6. 내가 만드는 프로그램은 유저뿐만 아니라, 팀원들에게도 영향을 준다.
거의 1년도 넘게 지난 일인 것 같다. 특정 맵에 있는 몬스터들이 전부 같은 방향을 바라보고 있는 것을 발견하고, 담당자분께 문의를 드렸다. 수정해주시겠다고 했는데, 혹시나 하는 마음에… ‘혹시… 방향을 하나하나 손수 세팅하시나요?’ 라고 물어봤다. 그에 대해 맞다는 답변이 돌아와서 툴을 만들어드리게 됐다. 방향 회전 뿐만 아니라 배치도 수동으로 한다고 하셔서, 배치도 랜덤하게 적당한 분포로 세팅할 수 있는 기능을 만들었다.
담당자분께서는 이 툴을 써보시고 아주 만족하신 것처럼 보였다. 하루 종일 걸리는 작업을 오전에 끝냈다고, ‘제 손목을 살려주셨다’며 근처 다른 분들께도 자랑하셨는데, 다소 쑥쓰럽기도 했지만 솔직히 기뻤었다. 덕분에 내가 만드는 프로그램이 유저뿐만 아니라, 팀원들에게도 영향을 준다는 걸 깊이 체감할 수 있었던 것 같다. 그 이후로는, 작업자의 입장에서 최대한 편의를 보장해주고자 하는 생각을 가지게 된 것 같다.
7. 각자 영역을 나누고, 자기 역할에 숙련도를 쌓아가는 게 좋은 것 같다.
지난 2년 반 동안 다양한 분야의 업무를 맡았다. 여러 분야를 경험하면서 새롭게 알게 된 것들도 많고, 성장에도 도움이 되었던 것 같다. 그런 와중에 느낀 점은, 작업하는 분야가 바뀔 때마다 낭비되는 비용이 존재하는 것 같다는 점이었다. 특히 일부 UI 작업은 작업 빈도가 높지 않은 데에 비해 난이도가 높았는데, 비슷한 업무를 맡을 때마다 기존 작업 방식을 파악하는 비용이 다소 아깝게 느껴졌다. 툴을 만든다거나, 문서화를 통해 비용을 어느 정도 절감할 수는 있었지만, 아무래도 늘 하던 작업의 숙련도에 비할 바는 못 되었던 것 같다.
그런데 특정 분야를 전담해서 작업을 하시는 분도 계셨다. 빌드나 플랫폼, 운영 쪽을 전반적으로 담당해주셨는데, 덕분에 다른 작업자들이 각자 맡은 분야에 집중할 수 있었고, 팀에 더 안정감이 생겼던 것 같다.
어떻게 보면 컴퓨터랑도 비슷한 것 같다. 컴퓨터도 캐시 메모리에 저장해놓고 비슷한 처리를 할 때 빠르게 처리할 수 있는 것처럼, 사람도 자기 역할에 숙련도를 쌓아가면서 일하면 더 효율적으로 처리할 수 있지 않을까 하는 생각이 들었다.
8. 모든 것에는 장단이 있고, 이유가 있다.
앞서 많은 얘기를 했지만… 결국 모든 것에는 장단이 있고, 이유가 있다.
각자 영역을 확실하게 나눠 숙련도를 쌓는다면, ‘내 업무에 여유가 있지만, 이건 저 사람의 업무니까’ 가 발생할 수도 있다. 그걸 막으려고 돕다보면 결국 경계는 무너지게 될 것이다.
툴을 만들어 편의성을 보장해준다면 작업자에게 좋겠지만, 한 번 뿐인 30분짜리 작업을 위해 8시간을 들여 툴을 만드는 것은 낭비라고 할 수 있다.
목표와 계획을 세우고 실행한다면, 누군가는 지시를 해야 하고, 누군가를 지시를 받으며 스트레스를 받거나 갈등을 겪게 될 수도 있다.
사람도 마찬가지다. 누군가 꼼꼼하다면 상대적으로 속도가 느려질 수 있고, 누군가 속도가 빠르다면 상대적으로 꼼꼼함이 떨어질 수밖에 없다.
‘왜 업무 흐름이 이렇게 흘러갈까?’ 라거나, ‘왜 저 사람은 저렇게 행동을 할까?’ 싶은 순간들도 많이 있었다. 모든 순간에 대한 이유를 알 수는 없었지만, 적어도 이유를 알 수 있었던 순간들에 대해서는 다 나름대로의 이유가 있었다.
아는 만큼 보인다. 어떤 것의 단점에 무지해 장점만 부각되어 섣불리 그걸 고를 수도 있고, 대안의 존재를 인지하지 못해 더 좋은 선택을 하지 못하게 되는 경우도 있다. 일에 대해서, 사람들에 대해서 결국은 나 자신의 기준을 토대로 판단하게 되는 것이 그 이유인 것 같다.
더 많은 경험을 통해 더 넓은 시야를 가지고, 더 좋은 선택, 더 좋은 대안을 생각할 수 있는 사람이 되면 좋을 것 같다. 다른 사람들과 서로의 맹점과 약점을 보완해가면서 성장해나갈 수 있는 사람이 되어야겠다.
향후 계획
퇴사를 확정짓게 되면서, 다른 회사로 옮기는 데 도움을 주실 수 있다는 분들이 몇 분 계셨다. 하지만 일단 거절했다. 내가 원래부터 목표로 하던 것과, 그에 대한 계획이 있기 때문이다. 다만 계획대로 할 수 있을지, 계획대로 한다고 해도 목표를 이룰 수 있을지는 장담할 수가 없다. 상대적으로 가능성이 높은 방법을 버리고 도전을 하는 것이 맞는가에 대한 많은 고민이 있었다. 결론적으로는, ‘내가 해보고 싶은 것을 하자’ 라는 생각이 더 컸다.
그리고 도전해보고 잘 안 됐을 때 연락을 줘도 된다고 하신 분도 계시다. 너무나 감사한 일이다. 덕분에 마음에 안정을 갖고 계획에 임할 수 있지 않을까 한다. 계획을 잘 이행하고, 목표를 이뤄서 좋은 근황을 전해드릴 수 있도록 노력해야겠다. 결과가 어떻게 되든, 적어도 이 선택을 후회하지 않도록 스스로 납득할 수 있는 시간들을 만들어가고 싶다.
'잡담' 카테고리의 다른 글
| 2026년 2월, 향후 계획 (0) | 2026.02.01 |
|---|---|
| 블루 아카이브 4주년 페스티벌, 2025 K-라이스페스타 후기 (0) | 2025.12.01 |
| MIKU EXPO 2025 후기 (0) | 2025.11.30 |
| 무언가를 결정하기 어려울 때 (4) | 2025.04.20 |
| 사무실 책상 자랑 (0) | 2025.03.02 |