Print Friendly and PDF

유니티/최적화

[최적화] Assembly Defintion

나는야 개발자 2025. 1. 13. 23:35
반응형

Library란?

- 컴퓨터 프로그램이 사용하는 비휘발성 자원(함수, 데이터 ,타입 등)의 모임

 

DLL(Dynamic-Link Library) 이란?

- 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함한 라이브러리

 

PDB(Program DataBase)파일 이란?

- 앱의 디버그 구성에 대한 링크를 허용하는 디버깅 및 프로젝트 상태 정보가 저장됨

 

Assembly Defintion이란?

-  우리가 작성하는 코드는 Assembly-CSharp.dll에 모두 들어가 있는데 크기가 크면 클수록 컴파일이 오래 걸리는데 이것을 방지하기 위해 사용하는 기능

- 첨부 사진처럼 ThirdParty.dll의 코드가 수정이 되면 나머지 stuff.dll, Library.dll은 컴파일 할 필요 없기 때문에 컴파일 시간이 단축 될 수 있음

 

특징

- 대규모 프로젝트에서의 컴파일 시간 관리
- 모듈 간 의존성 관리
- 코드 구조의 명확한 분리

 

1. Assembly Definition References
- 다른 Assembly Definition을 참조할 수 있음
- 순환 참조는 허용되지 않으므로 주의 필요

2. Platform 특정 구현
- 특정 플랫폼에서만 동작하는 코드를 별도 Assembly로 분리 가능
- Define Constraints를 통한 조건부 컴파일 지원

 

3. 네이밍 컨벤션과 구조
- [CompanyName].[ProductName].[Optional] 형식 권장
- 예: MyCompany.MyGame.Core, MyCompany.MyGame.UI

4. Assembly Definition의 범위
- 폴더 단위로 적용
- 하위 폴더는 자동으로 포함되나, 별도 Assembly Definition 생성 가능

 

5. 성능 고려사항
- Assembly 간 통신 오버헤드 발생 가능
- 과도한 분할은 오히려 성능 저하 초래
- Hot Reload 시 재컴파일 범위 최소화 가능

 

질문

Q. Assembly Definition을 사용할 때 주의해야 할 의존성 관련 이슈는 무엇인가요?

A. Assembly간 통신의 오버헤드를 주의 해야하고 과도한 분리는 오히려 성능 저하를 일으킴

 

Q. Assembly Definition이 컴파일 시간을 줄이는 원리는 무엇인가요?

A. 연결된 dll만 컴파일 하여 시간을 줄이는 방식


Q.  프로젝트에서 Assembly Definition을 몇 개로 나누는 것이 적절할까요?

A. 갯수는 따로 정해진건 없고 폴더별로 적절하게 나누고 너무 복잡하지 않고 과도하지 않게 하는 것이 핵심 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

좋은 구조의 예시

Core/
- MyGame.Core.asmdef (핵심 시스템)
  - 기본 인터페이스
  - 공통 유틸리티
  
Features/
- MyGame.Features.Combat.asmdef (전투 시스템)
- MyGame.Features.Inventory.asmdef (인벤토리 시스템)

UI/
- MyGame.UI.asmdef (UI 시스템)

이런 구조는 명확한 책임 분리와 효율적인 컴파일을 가능하게 합니다.


구현 우선순위:
1. Core Assembly Definition 설정
2. 기능별 Assembly 분리
3. 테스트 Assembly 구성
4. 성능 모니터링 시스템 구축

주의사항:
- Assembly 간 순환 참조 주의
- 컴파일 시간 정기적 모니터링
- 팀 내 코딩 컨벤션 공유
반응형