기본 콘텐츠로 건너뛰기

실전 유니티 최적화가 필요한 개발자를 위한 '레트로의 유니티 성능 최적화' 리뷰

 "한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

이번에 한빛미디어에서 출간한 '레트로의 유니티 성능 최적화'는 유니티로 게임을 오래 만들어 왔지만, 막상 규모가 커진 프로젝트에서 실제로 부딪히는 성능 문제 앞에서는 어디서부터 손을 대야 할지 막막했던 개발자에게 특히 큰 도움이 되는 책이라고 느꼈습니다. 저희가 만들고 있는 프로젝트는 방치형 모바일 RPG이면서 동시에 PC와 모바일 크로스 플랫폼으로 플레이할 수 있도록 개발 중인데, 이런 프로젝트일수록 최적화는 선택이 아니라 거의 설계의 일부에 가깝다는 점을 절실하게 느끼고 있습니다.

그동안 회사에서 유니티 엔진으로 게임 개발을 진행한 기간은 꽤 되었지만, 주로 하이퍼 모바일 게임류의 비교적 작은 프로젝트를 다뤄왔습니다. 그런 프로젝트에서는 일정 수준의 최적화만 해도 큰 문제가 드러나지 않는 경우가 많았습니다. 하지만 최근처럼 콘텐츠 양이 많고, 캐릭터·UI·이펙트·장비·성장 시스템이 복합적으로 얽히는 규모 있는 게임 프로젝트를 진행하게 되니, 예전과는 전혀 다른 종류의 문제를 마주하게 되었습니다. 예를 들어 게임 로딩이 이해되지 않을 정도로 느려지거나, 특정 구간에서 플레이 중 갑자기 앱이 종료되거나, 장시간 실행 후에야 드러나는 메모리 사용량 증가와 프레임 저하 같은 문제들이었습니다. 처음에는 원인을 알 수 없어 막연하게 “유니티라서 그런가?” 하고 넘기기 쉬웠지만, 이 책을 읽고 나서는 적어도 어떤 관점으로 원인을 좁혀가야 하는지가 보이기 시작했습니다.

이 책의 가장 큰 장점은 “최적화는 무조건 코드 몇 줄 고치면 끝나는 작업”이 아니라, CPU, GPU, 메모리, 로딩 구조, 리소스 관리, 렌더링 방식, UI 구성까지 전체 흐름을 이해해야 하는 문제라는 점을 실무적으로 설명해 준다는 데 있습니다. 유니티는 최적화에 따라 성능을 꽤 높은 수준까지 끌어낼 수 있다는 것을 알게 되었지만, 동시에 엔진 소스를 직접 볼 수 없기 때문에 내부 동작을 추측하며 접근해야 하는 부분도 많습니다. 그런 점에서 이 책은 단순한 팁 모음집이 아니라, 왜 느려지는지, 어디를 의심해야 하는지, 어떤 도구와 지표를 봐야 하는지를 알려주는 가이드 역할을 해줍니다. 원인을 정확히 모르던 문제들도 “이건 로딩 구조 문제일 수 있겠다”, “이건 GC나 객체 생성 패턴을 의심해야겠다”, “이건 드로우콜이나 오버드로우 쪽일 가능성이 높겠다”처럼 유추할 수 있게 된 점이 정말 유익했습니다.

실제로 떠오르는 사례도 있습니다. 첫 번째는 초기 로딩 지연 문제입니다. 프로젝트 규모가 커지면서 로비 진입이나 전투 시작 전 로딩이 비정상적으로 길어지는 일이 있었는데, 예전에는 단순히 데이터가 많아서 그런가 보다 하고 생각했습니다. 하지만 이 책을 읽고 나서는 한 번에 너무 많은 리소스를 불러오고 있지는 않은지, 꼭 지금 불러와야 할 것과 나중에 불러와도 되는 것이 섞여 있지는 않은지, 동기 로딩이 병목이 되고 있지는 않은지 같은 관점으로 보게 되었습니다. 그 결과 로딩 타이밍을 나누고, 선로드와 지연 로드를 구분해야 한다는 인식이 생겼고, 실제로 일부 구간은 구조를 다시 보며 개선 방향을 잡을 수 있었습니다.

두 번째는 플레이 중 튕김과 메모리 문제입니다. 모바일에서는 특히 텍스처, 이펙트, UI 리소스가 누적되면 어느 순간 앱이 버티지 못하고 종료되는 상황이 생기는데, PC에서는 상대적으로 늦게 드러나기 때문에 초기에 놓치기 쉽습니다. 이 책은 플랫폼별로 자원 관리 관점이 달라야 한다는 점을 잘 짚어주고 있어서, “PC에서 괜찮으니 모바일도 괜찮겠지”라는 위험한 생각을 버리게 해줍니다. 예를 들어 사용이 끝난 오브젝트와 리소스가 정말 해제되고 있는지, 재사용 가능한 객체를 불필요하게 계속 생성하고 있지는 않은지, 텍스처 크기와 압축 방식이 적절한지 등을 점검하는 습관을 갖게 되었습니다. 원인을 몰랐던 크래시 문제도 이 책 덕분에 메모리 관점에서 접근해 볼 수 있었고, 몇 가지는 실제로 해결까지 이어졌습니다.

세 번째는 방치형 RPG 특유의 UI와 이펙트 누적 문제입니다. 방치형 장르는 화면에 항상 여러 UI가 떠 있고, 성장 알림, 재화 획득, 버튼 강조, 캐릭터 스킬 이펙트 등 시각 요소가 끊임없이 쌓입니다. 여기에 모바일과 PC 크로스 플랫폼 대응까지 더해지면 단순히 “보이기 좋게” 만드는 것만으로는 부족하고, 어떤 요소가 프레임을 갉아먹는지를 함께 고민해야 합니다. 이 책은 이런 부분을 감으로 접근하지 않게 해주었습니다. 캔버스 분리, 불필요한 갱신 최소화, 배치와 드로우콜, 오버드로우, 프로파일러 기반 확인 같은 개념을 실무 흐름 안에서 이해할 수 있어서, 단순히 책을 읽고 끝나는 것이 아니라 바로 프로젝트에 대입해 보게 만든다는 점이 좋았습니다.

무엇보다 이 책은 “최적화는 고수들만 하는 어려운 영역”이라는 막연한 두려움을 줄여줍니다. 물론 유니티 최적화는 결코 쉬운 일이 아니고, 엔진 소스를 공개하고 있지 않기 때문에 답답한 순간도 많습니다. 그럼에도 불구하고 이 책은 보이지 않는 엔진 내부를 전부 알 수는 없어도, 최소한 증상을 통해 원인을 추적하는 방법을 알려줍니다. 그 덕분에 문제를 마주했을 때 막연히 불안해하기보다, 프로파일링하고 가설을 세우고 확인하는 식의 좀 더 개발다운 접근이 가능해졌습니다.

결론적으로 '레트로의 유니티 성능 최적화'는 유니티를 어느 정도 써 본 개발자, 특히 작은 프로젝트를 넘어 조금 더 큰 규모의 게임을 다루기 시작한 팀에게 매우 추천할 만한 책입니다. 저처럼 하이퍼 모바일 게임 중심의 경험에서 출발해, 이제는 방치형 모바일 RPG 같은 규모 있는 프로젝트를 PC와 모바일 크로스 플랫폼으로 개발하며 새로운 문제들을 마주하는 입장에서는 더더욱 공감되는 내용이 많았습니다. 단순히 성능을 “좋게 만드는 법”을 알려주는 책이 아니라, 왜 문제가 생기는지 이해하고, 원인을 유추하고, 실제 해결 방향을 잡게 해주는 책이라는 점에서 실무 가치가 높았습니다. 원인을 몰랐던 문제들을 추정할 수 있게 되었고, 실제로 몇 가지는 해결까지 이어졌다는 점에서, 이 책은 저희 프로젝트에 분명히 도움이 된 실용적인 개발서였습니다.


#한빛미디어, #레트로의유니티성능최적화, #유니티최적화, #유니티성능최적화

댓글

이 블로그의 인기 게시물

천주교 성경책 구입

수요일 교리를 마치고도 봉사자님께 질문을 드렸었지만, 천주교는 개신교와는 성경이 다르다. 사실 나는 9월 말에 프리마켓에서 중고로 구입한 '개신교 성경책'이 있다. 그때만해도 내가 몇주 뒤에 성당에 다니게 될 거라고는 상상조차 하지 않았으니까, 교양서 읽듯이 읽어보려고 샀었다. 하지만 '우리말 성경'이라고 해놓고서 번역이 엉망진창이라 이해하려고 노력하다가 포기했다. 제대로 보지 못하고 구석에 처박힌 개신교 성경은 뒤로하고, 천주교 성경이 필요했다. 인터넷에 검색을 해보니 신자의 가정에 비치해야할 물건에는, 성경책, 가톨릭기도서, 성가집, 십자고상, 성모상, 묵주 가 있다고 했다. 사실 교재 공부를 할 때도 성경이 필요해서 성경책을 하나 구입하려고는 했는데, 인터넷으로 찾아보니 달랑 대,중,소에 1단, 2단 이렇게 쓰여져 있는데 무슨 소린지 도통 알 수가 없었다. 지퍼가 있고 없고만 알아들을 수 있었다. 아무래도 곁에 두고 자주 읽을 책이니 직접 보고 결정하기로 마음 먹었다. 천주교 수영성당으로 향했다. 2단으로 된 성경책을 사가지고 왔다. 재미있게도 이 성경책은 모든 곳에서 판매가가 29,000원이다. 오프라인이든 온라인이든. 신기한 일이다. 세로 22cm, 가로는 15.5cm 정도 된다. 2단이지만 폰트가 깔끔하고 읽기 편하게 되어 있다. 굵기도 적당해서 수시로 펴고 읽기에 좋았다. 개신교 성경처럼 화려하지도 장식이 있지도 않지만, 표지는 감촉이 좋고 책장 넘김도 좋고 책갈피 줄도 두 줄이나 있다. 크기도 딱 적당하다. 매우 마음에 든다. 이렇게 나의 첫 신앙물품은 당연하게도 성경책이 됐다. 교회 공용으로 사용하는 성경이 있다니. 이것도 천주교라서 가능한 걸까. 내가 구입한 책은 2017년 5월 1일에 재판된 책이다. 이제 공부 준비는 충분한 것 같다. 책상 위 나와 가장 가까운 위치의 책꽂이에 성경책과 교재를 꼽아 두었다. 언제라도 꺼내서 볼 수 있도록. 사실 성경책은 그날의 독서에...

화장실 문이 잠겼을 때 여는 방법

10일. 손님이 왔다가 갔다. 손님이 화장실을 사용했는데, 나중에 손님이 집에 간 뒤 들어가려고 보니까 화장실 문이 안에서 잠겼다. 이런 망할. 일단 급한대로 가까운 지하철역 화장실에 다녀왔다. 현관문에 붙어 있는 열쇠상에 다 전화를 돌렸지만, 새벽 한 시에 와 줄 수 있는 사람은 아무도 없었다. 그래서 그냥 슈퍼가서 손톱가는 것을 사와서 집에 있는 클립과 함께 진지하게 화장실 문따기를 시작했다. 우리집 화장실은 안쪽으로 열리는 타입이라 턱이 있어서 난이도가 좀 있었다. 손톱 가는 것과 클립 펼친 것과 제본 표지였던 플라스틱 접은 것으로 사투 끝에 문을 여는데에 성공했다. 문을 열고 원인을 확인해보니, 보통은 화장실 문은 잠그고서 안에서 문고리를 돌리면 같이 열리는데, 이 문은 안에서 문고리를 돌리면 열리기는 하는데 잠금은 안 풀리는 것이다. 그래서 닫힌 뒤에 밖에서는 열리지 않는 문제가 발생한다. 앞으로 손님이 올 때는 이점을 꼭 당부를 드려야겠다. 진짜 식겁했다. 아무튼 문을 따고 나서 이쪽으로 전직을 해야하는 걸까나 라는 그런 생각을 했다. ㅋㅋㅋ

샷시문, 유리문, 현관문 방화문으로 교체비용, 방화문으로 바꾸는 가격

샷시문 방화문으로 교체. 유리문 방화문으로 교체. 현관문 철문 교체. 현관문 철문 가격. 내가 왜 이런것을 알아보았느냐면, 우리집에는 현관문이 2개가 있다. 1층 현관문과 2층 현관문. 2층 현관문은 보시다시피 알루미늄 샷시에 유리가 끼워져있는 매우 부실한 현관문이다. 물론 1층에도 현관문이 하나 더 있기 때문에 크게 신경쓸 필요는 없지만. 그래도 여기는 지금 안락동집처럼 외부 창고같은 것이 없기 때문에 택배를 받기가 애매해서, 부피가 큰 택배를 받을때 1층 현관문을 열어두기 위해 2층 현관문을 보강할 필요가 있었다. 우리집 문의 크기는 아래와 같다. (cm) 문틀포함 문높이 171 / 문틀포함 문폭 76 문틀비포함 문높이 172 / 문틀비포함 문폭 69 문틀면 폭 5~6 문윗 스틸 폭 10 / 문옆 스틸폭 7 / 문가운데 스틸폭 10 / 문아래 스틸폭 50 문윗유리 가로 54 / 문윗유리 세로 69 문아랫유리 가로 54 / 문아랫유리 세로 30 안락동집 근처 문마트라는 곳에 가서 사이즈와 사진을 보여주고 견적을 받았다. 지식인은 물론 카페와 블로그, 각종 사이트 등에서 나와 같은 경우를 찾아 보고 엄청나게 알아보았으나, 다들 교체비용이 40~50만원이 든다고 하더라. 집근처에 문마트가 있다는 걸 떠올리고 직접 견적을 내러 가보니 문틀 포함해서 시공비까지 27만원이라고 했다. 샷시문 철문으로 교체, 현관문 철문으로 교체하는게 27만원이면 충분하다. 주문하고 맞춤 제작이 들어가기 때문에 시공 완료까지 일주일정도 소요가 된다고 한다. 나 말고도 막막하게 인터넷으로 알아보는 사람들을 위해서 정보 공유차 글을 올려본다. 불안에 떨지말고, 문을 철문, 방화문 교체하는거 크게 비싸지 않다. 한달 월세만큼이면 충분하니 집주인하고 상의해보거나 해서 부산분이라면 교체하는 것도 좋을 것 같다. 물론 철문이라고 해도 문에 틈이 있으면 장도리로 뚫리고, 홀커터로 털릴 수도 있는거라 완전한 안전지대는 없지만, 그래도 마음은 편안하지 않은가. 더...