유니티 최근 업데이트
일주일 치를 정직하게 그으니 릴리스 5건이 전부였습니다. 그런데 그 안에 기능 추가가 아니라 이사가 들어 있었습니다.
게임 만드는 프로그램(유니티)의 최근 소식을 훑은 기록입니다. 「이번 주에 뭐 나왔나」를 정직하게 세어 봤더니 다섯 건뿐이었는데, 그 안에 「새 기능」이 아니라 「이사 공사」가 들어 있었습니다.
유니티는 제가 게임을 만들 때 쓰는 프로그램입니다. 이런 프로그램은 자동차처럼 계속 새 판이 나오는데, 새 판이 늘 좋은 소식은 아닙니다.
「이번 주 소식」을 정직하게 긋는 것부터가 일이었습니다
보통 「최근 소식」을 찾아보면 화려한 발표가 잔뜩 나옵니다. 그런데 날짜를 딱 일주일로 자르고 그 안에 실제로 일어난 일만 세어 보니 다섯 건이었습니다. 큰 발표들은 그 일주일 밖에 있었습니다.
이게 시시한 결과 같지만 아닙니다. 「조용한 주였다」는 사실 자체가 정보입니다. 다섯 건만 남으니 오히려 이 회사가 지금 네 갈래를 동시에 굴리고 있다는 구조가 선명하게 보였습니다.
새 기능이 아니라 「집을 뜯어고치는 공사」가 진행 중입니다
다섯 건 중 둘은 시험판이었습니다. 버전 번호만 보면 「시험판 두 개 나왔네」로 끝납니다. 열어 보니 그게 아니었습니다.
프로그램 내부에서 「물건에 이름표를 붙이는 방식」을 통째로 갈아엎는 중이었습니다. 집으로 치면 벽지를 바꾸는 게 아니라 배관을 새로 까는 공사입니다.
그래서 이런 일이 생깁니다.
| 보통 업데이트 | 이번 같은 공사 | |
|---|---|---|
| 내가 물어야 할 것 | 「새 기능 뭐 있나」 | 「내 코드가 아직 돌아가긴 하나」 |
| 영향받는 곳 | 새로 쓰는 부분만 | 기존 코드 수백 군데 |
지금까지 쌓인 「기존 코드가 깨지는 변경」이 188건입니다.
그런데 그 188이라는 숫자를 그대로 인용하면 안 됩니다
여기서 값을 치른 교훈이 나옵니다. 188은 어디서 나온 숫자인가를 봐야 합니다.
- 이건 시험판에서 쌓인 누적 숫자입니다.
- 정식판으로 나올 때 그대로 남아 있을지는 아무도 모릅니다. 중간에 되돌릴 수도 있고 더 늘 수도 있습니다.
- 지금 정식판을 쓰는 사람에게는 오늘 당장 해당되는 숫자가 아닙니다.
그래서 이 숫자를 인용할 때는 「시험판 누적치」라는 단서를 반드시 같이 붙여야 합니다. 단서를 떼고 「188군데가 깨진다」고만 하면 틀린 말이 됩니다.
저는 시험판에 올라타지 않습니다 — 그리고 그건 겁이 나서가 아닙니다
제 판정은 정식판 유지입니다. 이유가 둘입니다.
첫째, 시험판은 만든 회사가 「실제 서비스에는 쓰지 말라」고 못 박아 둡니다.
둘째가 더 중요합니다. 제 게임은 지금 만드는 중입니다. 만드는 중에 바닥이 흔들리면, 게임이 안 돌 때 원인이 내 실수인지 바닥 탓인지 구분이 안 됩니다. 그 구분이 안 되는 상태가 제일 비쌉니다.
그래서 규칙을 하나 적었습니다 — 「이사는 짐을 다 싼 다음에」
그렇다고 영원히 안 올라탈 수는 없습니다. 언젠가는 옮겨야 합니다. 그래서 시점 규칙을 정했습니다.
큰 공사 버전으로 올리는 것은 개발 중반이 아니라, 한 덩어리를 끝낸 직후에 한다.
한 덩어리가 끝난 시점은 「어제까지 되던 것」이 명확한 시점입니다. 그때 올리면 뭔가 깨졌을 때 범인이 이사라는 걸 바로 압니다. 중반에 올리면 내가 만들던 것과 이사가 섞여서 영원히 못 가립니다.
여기부터는 자세한 기록입니다
“이번 주 뉴스”를 정직하게 그었더니 릴리스 빌드 5건이 전부였습니다. 발표도 키노트도 그 창 안에 없었습니다. 그런데 버전 번호만 보면 「베타 빌드 두 개 나왔네」로 끝날 것을 열어 보니, 안에 엔진 구조를 갈아치우는 공사가 들어 있었습니다. 깨지는 변경 188건. 이건 “새 기능 써볼까” 가 아니라 “내 코드가 컴파일이나 되나” 를 물어야 하는 규모입니다.
무엇이 있었나
기간을 먼저 정직하게 그은 게 이 자료의 시작입니다. 요청은 “최근 1주일” 이었고, 그 창 안에 실제로 일어난 일은 릴리스 빌드 5건이 전부였습니다. 발표나 키노트 같은 큰 뉴스는 그 창 밖에 있었습니다.
그래서 둘로 나눠 적혀 있습니다 — 기간 안에 실제로 나온 것, 그리고 그걸 이해하는 데 필요한 직전 맥락을 따로. 기간을 늘려서 큰 뉴스를 끌어오지 않았습니다.
사흘 동안 네 트랙에서 빌드 다섯 개가 나왔습니다. 장기 지원 · 정식 · 베타 · 알파를 동시에 굴리는 구조가 그대로 드러납니다.
대표 변화 — 기능 추가가 아니라 이사다
엔진 전반에서 객체 식별자를 체계적으로 갈아치우는 중입니다. 애니메이션·물리·그래픽스 등 수백 개 API가 영향을 받고, 베타 기준 깨지는 변경이 188건 쌓였습니다.
왜 하느냐가 중요합니다 — 엔티티 기반 워크플로와 기존 오브젝트 워크플로를 하나로 합치는 기반 공사입니다. 엔티티 개념을 엔진 전체의 공용 식별자로 끌어올리는 것이 목적입니다. 그래서 이 버전은 기능 추가 버전이 아니라 이사 버전입니다.
그 옆에 오래 기다린 기능이 하나 들어옵니다. 사전 자료구조 직렬화가 내장됩니다. 지금까지는 콜백이나 커스텀 래퍼, 서드파티 에셋에 의존해야 했던 부분입니다.
| 항목 | 내용 |
|---|---|
| 대상 | 선언 타입이 정확히 그것이어야 한다 — 상속·래핑은 안 된다 |
| 방식 | 옵트인. 직렬화할 필드마다 표시를 붙여야 한다 |
| 인스펙터 | 전용 2컬럼 뷰(키 / 값) |
| 중복 키 | 편집 중에는 임시 허용하고, 중복 행마다 아이콘과 안내를 띄운다 |
그리고 엔티티 패키지 전체가 코어로 들어옵니다. 엔진 릴리스와 버전이 같이 가게 되어 별도 버전 관리가 사라집니다. 대신 매니지드 컴포넌트가 폐기 수순이라 클래스 기반 컴포넌트를 구조체로 바꿔야 합니다 — 이쪽도 파괴적 변경입니다.
깨본 결과
“188건”이 무엇의 수인지 봐야 합니다. 이건 베타 트랙 누적치이고, 정식으로 풀릴 때 그대로 남아 있을지는 알 수 없습니다. 지금 정식 버전을 쓰는 사람에게는 오늘 해당되는 숫자가 아닙니다.
사전 직렬화도 조건이 빡빡합니다. 선언 타입이 정확해야 하고 상속이나 래핑이 안 됩니다. 기존 프로젝트가 대개 래퍼를 거쳐 쓰고 있을 텐데, 그 래퍼를 걷어내는 작업이 먼저입니다. “드디어 내장됐다” 와 “내일부터 쓸 수 있다” 사이에 그 일이 있습니다.
그리고 이 자료 자체의 성격이 다른 편들과 다릅니다. 뜯을 대상이 레포도 영상도 아니라 릴리스 노트입니다. 깨볼 주장이 별로 없고, 있는 건 “이번 주는 조용했다” 를 인정한 것 정도입니다. ⚠ 그래서 이 편은 판정보다 위치 확인에 가깝습니다.
내 환경에 대봤다
저는 정식 트랙에 서 있어야 합니다. 베타는 프로덕션 금지이고, 제 게임은 만드는 중이라 엔진이 흔들리면 안 됩니다. 이번 주 릴리스 중 제게 해당하는 건 정식 안정화 패치 하나입니다.
이사 버전을 미리 아는 게 이 자료의 값어치입니다. 언젠가 올려야 할 텐데, 그게 기능 추가가 아니라 대공사라는 걸 알면 올릴 시점을 다르게 잡습니다 — 개발 중반이 아니라 한 덩어리가 끝난 뒤로.
사전 직렬화는 실제로 기다리던 것입니다. 제 프로젝트에도 래퍼가 들어가 있고, 걷어낼 수 있으면 코드가 줄어듭니다. ⚠ 다만 정식으로 풀린 뒤의 얘기이고, 래퍼를 먼저 걷어내야 합니다.
판정
| 무엇 | 판정 |
|---|---|
| 지금 서 있을 트랙 | 정식 유지. 베타는 프로덕션 금지 |
| 이사 버전 대비 | 채택 — 시점 규칙으로. 올린다면 개발 중반이 아니라 한 덩어리가 끝난 뒤 |
| 사전 직렬화 | 대기. 정식 이후 + 래퍼 제거가 선행 |
| 엔티티 워크플로 | 해당 없음. 제 게임 규모가 그걸 필요로 하지 않는다 |
| “188건” 인용 | ⚠ 한정 필요. 베타 누적치이고 정식에 그대로 남을지 모른다 |
이 편에서 값을 치른 교훈은 자료 쪽이 아니라 읽는 법입니다 — 기간을 정직하게 그으면 「조용한 주」가 그 자체로 정보가 됩니다. 다섯 건뿐이라는 사실이, 네 트랙을 동시에 굴리고 있다는 구조를 오히려 선명하게 보여줬습니다.
그리고 ⚠ 버전 번호로는 대공사가 안 보입니다. “베타 빌드 두 개” 와 “깨지는 변경 188건” 은 같은 사건인데, 앞의 표현만 보고 넘기면 나중에 올릴 때 그 188건을 처음 만납니다.