뜯어본 생각공개

유니티 최근 업데이트

일주일 치를 정직하게 그으니 릴리스 5건이 전부였습니다. 그런데 그 안에 기능 추가가 아니라 이사가 들어 있었습니다.

breaking 188

게임 만드는 프로그램(유니티)의 최근 소식을 훑은 기록입니다. 「이번 주에 뭐 나왔나」를 정직하게 세어 봤더니 다섯 건뿐이었는데, 그 안에 「새 기능」이 아니라 「이사 공사」가 들어 있었습니다.

유니티는 제가 게임을 만들 때 쓰는 프로그램입니다. 이런 프로그램은 자동차처럼 계속 새 판이 나오는데, 새 판이 늘 좋은 소식은 아닙니다.

사흘 동안 네 트랙에서 빌드 다섯 개 — 병행 유지 구조가 그대로 보인다 장기 지원 유지보수 패치 안전 정식 안정화 패치 25건 지금 쓸 것 베타 — 이번 주 알맹이 식별자 전면 교체 공사 프로덕션 금지 알파 차기 런타임 선발대 실험만 ⇒ 이번 주는 "발표 주"가 아니라 "굴러가는 주"였다 — 그리고 그게 정보다 네 트랙을 동시에 굴린다는 사실 자체가, 어느 버전에 서 있어야 하는지를 결정한다 ⚠ 기간을 늘려 "최근 소식"으로 묶으면 이 구조가 안 보인다 — 큰 뉴스가 작은 사실을 덮는다
다섯 건을 나열하는 것으로는 의미가 안 나온다. 네 트랙이라는 배치를 봐야 어디에 서야 할지가 나온다.

「이번 주 소식」을 정직하게 긋는 것부터가 일이었습니다

보통 「최근 소식」을 찾아보면 화려한 발표가 잔뜩 나옵니다. 그런데 날짜를 딱 일주일로 자르고 그 안에 실제로 일어난 일만 세어 보니 다섯 건이었습니다. 큰 발표들은 그 일주일 밖에 있었습니다.

이게 시시한 결과 같지만 아닙니다. 「조용한 주였다」는 사실 자체가 정보입니다. 다섯 건만 남으니 오히려 이 회사가 지금 네 갈래를 동시에 굴리고 있다는 구조가 선명하게 보였습니다.

새 기능이 아니라 「집을 뜯어고치는 공사」가 진행 중입니다

다섯 건 중 둘은 시험판이었습니다. 버전 번호만 보면 「시험판 두 개 나왔네」로 끝납니다. 열어 보니 그게 아니었습니다.

프로그램 내부에서 「물건에 이름표를 붙이는 방식」을 통째로 갈아엎는 중이었습니다. 집으로 치면 벽지를 바꾸는 게 아니라 배관을 새로 까는 공사입니다.

그래서 이런 일이 생깁니다.

보통 업데이트 이번 같은 공사
내가 물어야 할 것 「새 기능 뭐 있나」 「내 코드가 아직 돌아가긴 하나」
영향받는 곳 새로 쓰는 부분만 기존 코드 수백 군데

지금까지 쌓인 「기존 코드가 깨지는 변경」이 188건입니다.

그런데 그 188이라는 숫자를 그대로 인용하면 안 됩니다

여기서 값을 치른 교훈이 나옵니다. 188은 어디서 나온 숫자인가를 봐야 합니다.

  • 이건 시험판에서 쌓인 누적 숫자입니다.
  • 정식판으로 나올 때 그대로 남아 있을지는 아무도 모릅니다. 중간에 되돌릴 수도 있고 더 늘 수도 있습니다.
  • 지금 정식판을 쓰는 사람에게는 오늘 당장 해당되는 숫자가 아닙니다.

그래서 이 숫자를 인용할 때는 「시험판 누적치」라는 단서를 반드시 같이 붙여야 합니다. 단서를 떼고 「188군데가 깨진다」고만 하면 틀린 말이 됩니다.

저는 시험판에 올라타지 않습니다 — 그리고 그건 겁이 나서가 아닙니다

제 판정은 정식판 유지입니다. 이유가 둘입니다.

첫째, 시험판은 만든 회사가 「실제 서비스에는 쓰지 말라」고 못 박아 둡니다.

둘째가 더 중요합니다. 제 게임은 지금 만드는 중입니다. 만드는 중에 바닥이 흔들리면, 게임이 안 돌 때 원인이 내 실수인지 바닥 탓인지 구분이 안 됩니다. 그 구분이 안 되는 상태가 제일 비쌉니다.

그래서 규칙을 하나 적었습니다 — 「이사는 짐을 다 싼 다음에」

그렇다고 영원히 안 올라탈 수는 없습니다. 언젠가는 옮겨야 합니다. 그래서 시점 규칙을 정했습니다.

큰 공사 버전으로 올리는 것은 개발 중반이 아니라, 한 덩어리를 끝낸 직후에 한다.

한 덩어리가 끝난 시점은 「어제까지 되던 것」이 명확한 시점입니다. 그때 올리면 뭔가 깨졌을 때 범인이 이사라는 걸 바로 압니다. 중반에 올리면 내가 만들던 것과 이사가 섞여서 영원히 못 가립니다.

여기부터는 자세한 기록입니다

“이번 주 뉴스”를 정직하게 그었더니 릴리스 빌드 5건이 전부였습니다. 발표도 키노트도 그 창 안에 없었습니다. 그런데 버전 번호만 보면 「베타 빌드 두 개 나왔네」로 끝날 것을 열어 보니, 안에 엔진 구조를 갈아치우는 공사가 들어 있었습니다. 깨지는 변경 188건. 이건 “새 기능 써볼까” 가 아니라 “내 코드가 컴파일이나 되나” 를 물어야 하는 규모입니다.

무엇이 있었나

기간을 먼저 정직하게 그은 게 이 자료의 시작입니다. 요청은 “최근 1주일” 이었고, 그 창 안에 실제로 일어난 일은 릴리스 빌드 5건이 전부였습니다. 발표나 키노트 같은 큰 뉴스는 그 창 밖에 있었습니다.

그래서 둘로 나눠 적혀 있습니다 — 기간 안에 실제로 나온 것, 그리고 그걸 이해하는 데 필요한 직전 맥락을 따로. 기간을 늘려서 큰 뉴스를 끌어오지 않았습니다.

사흘 동안 네 트랙에서 빌드 다섯 개가 나왔습니다. 장기 지원 · 정식 · 베타 · 알파를 동시에 굴리는 구조가 그대로 드러납니다.

대표 변화 — 기능 추가가 아니라 이사다

엔진 전반에서 객체 식별자를 체계적으로 갈아치우는 중입니다. 애니메이션·물리·그래픽스 등 수백 개 API가 영향을 받고, 베타 기준 깨지는 변경이 188건 쌓였습니다.

왜 하느냐가 중요합니다 — 엔티티 기반 워크플로와 기존 오브젝트 워크플로를 하나로 합치는 기반 공사입니다. 엔티티 개념을 엔진 전체의 공용 식별자로 끌어올리는 것이 목적입니다. 그래서 이 버전은 기능 추가 버전이 아니라 이사 버전입니다.

그 옆에 오래 기다린 기능이 하나 들어옵니다. 사전 자료구조 직렬화가 내장됩니다. 지금까지는 콜백이나 커스텀 래퍼, 서드파티 에셋에 의존해야 했던 부분입니다.

항목 내용
대상 선언 타입이 정확히 그것이어야 한다 — 상속·래핑은 안 된다
방식 옵트인. 직렬화할 필드마다 표시를 붙여야 한다
인스펙터 전용 2컬럼 뷰(키 / 값)
중복 키 편집 중에는 임시 허용하고, 중복 행마다 아이콘과 안내를 띄운다

그리고 엔티티 패키지 전체가 코어로 들어옵니다. 엔진 릴리스와 버전이 같이 가게 되어 별도 버전 관리가 사라집니다. 대신 매니지드 컴포넌트가 폐기 수순이라 클래스 기반 컴포넌트를 구조체로 바꿔야 합니다 — 이쪽도 파괴적 변경입니다.

깨본 결과

“188건”이 무엇의 수인지 봐야 합니다. 이건 베타 트랙 누적치이고, 정식으로 풀릴 때 그대로 남아 있을지는 알 수 없습니다. 지금 정식 버전을 쓰는 사람에게는 오늘 해당되는 숫자가 아닙니다.

사전 직렬화도 조건이 빡빡합니다. 선언 타입이 정확해야 하고 상속이나 래핑이 안 됩니다. 기존 프로젝트가 대개 래퍼를 거쳐 쓰고 있을 텐데, 그 래퍼를 걷어내는 작업이 먼저입니다. “드디어 내장됐다” 와 “내일부터 쓸 수 있다” 사이에 그 일이 있습니다.

그리고 이 자료 자체의 성격이 다른 편들과 다릅니다. 뜯을 대상이 레포도 영상도 아니라 릴리스 노트입니다. 깨볼 주장이 별로 없고, 있는 건 “이번 주는 조용했다” 를 인정한 것 정도입니다. ⚠ 그래서 이 편은 판정보다 위치 확인에 가깝습니다.

다섯 건 중 오늘 나에게 해당되는 것 정식 안정화 패치 오늘 해당 — 유일하다 깨지는 변경 188건 베타 누적치 — 정식에 그대로 남을지 모른다 사전 직렬화 내장 기다리던 것 — 단 래퍼 제거가 선행이다 엔티티 워크플로 통합 해당 없음 — 내 게임 규모가 필요로 하지 않는다 차기 런타임 알파 실험만 ⇒ 다섯 중 넷은 "언젠가"이지 "지금"이 아니다 — 그걸 아는 게 이 자료의 값어치다 그리고 이사 버전이라는 걸 미리 알면 올릴 시점이 달라진다 — 개발 중반이 아니라 한 덩어리가 끝난 뒤 ⚠ "188건"은 베타 트랙 누적치다. 지금 정식을 쓰는 사람에게 오늘 해당되는 숫자가 아니다
릴리스 노트를 읽는 일은 "무엇이 나왔나"가 아니라 "그중 무엇이 지금 나에게 오나"를 가르는 일이다.

내 환경에 대봤다

저는 정식 트랙에 서 있어야 합니다. 베타는 프로덕션 금지이고, 제 게임은 만드는 중이라 엔진이 흔들리면 안 됩니다. 이번 주 릴리스 중 제게 해당하는 건 정식 안정화 패치 하나입니다.

이사 버전을 미리 아는 게 이 자료의 값어치입니다. 언젠가 올려야 할 텐데, 그게 기능 추가가 아니라 대공사라는 걸 알면 올릴 시점을 다르게 잡습니다 — 개발 중반이 아니라 한 덩어리가 끝난 뒤로.

사전 직렬화는 실제로 기다리던 것입니다. 제 프로젝트에도 래퍼가 들어가 있고, 걷어낼 수 있으면 코드가 줄어듭니다. ⚠ 다만 정식으로 풀린 뒤의 얘기이고, 래퍼를 먼저 걷어내야 합니다.

판정

무엇 판정
지금 서 있을 트랙 정식 유지. 베타는 프로덕션 금지
이사 버전 대비 채택 — 시점 규칙으로. 올린다면 개발 중반이 아니라 한 덩어리가 끝난 뒤
사전 직렬화 대기. 정식 이후 + 래퍼 제거가 선행
엔티티 워크플로 해당 없음. 제 게임 규모가 그걸 필요로 하지 않는다
“188건” 인용 ⚠ 한정 필요. 베타 누적치이고 정식에 그대로 남을지 모른다

이 편에서 값을 치른 교훈은 자료 쪽이 아니라 읽는 법입니다 — 기간을 정직하게 그으면 「조용한 주」가 그 자체로 정보가 됩니다. 다섯 건뿐이라는 사실이, 네 트랙을 동시에 굴리고 있다는 구조를 오히려 선명하게 보여줬습니다.

그리고 ⚠ 버전 번호로는 대공사가 안 보입니다. “베타 빌드 두 개” 와 “깨지는 변경 188건” 은 같은 사건인데, 앞의 표현만 보고 넘기면 나중에 올릴 때 그 188건을 처음 만납니다.