Delphi Runtime Packages 옵션으로 프로그램(배포) 용량 줄이기
2013.12.19 01:53
해당 글의 예제는 Delphi XE5로 테스트 했으며, 다른버전의 화면 및 메뉴 명칭은 약간 다를 수 있습니다.
가끔 주위에서 배포 시 프로그램 용량이 너무 커서 dll 등으로 폼을 분리하는 방법을 문의합니다. 저는 되도록 UPX로 실행파일 압축을 권하지만, 근본적으로 실행파일 용량을 줄이고자 하시는 분들께 도움이되는 내용입니다.
Runtime Packages란?
- Runtime packages는 실행파일에 라이브러리를 포함하여 컴파일할지 결정하는 프로젝트 옵션(Project > Options > Packages > Runtime Packages)입니다.
- Runtime packages 옵션은 기본(신규 프로젝트 생성 시)으로 해제되어 있어, 컴파일된 실행파일에는 정적라이브러리(*.lib)가 모두 포함됩니다.
- 해당 옵션을 해제하게 되면 옵션명대로 Runtime에서 Package들을 사용해야 합니다. 즉, 라이브러리(bpl: Borland Package Library)를 함께 배포해야 합니다. 대신 실행파일의 용량은 확실하게 줄어들게 됩니다.
| Runtime Package 설정 시 용량차이
- IncludePackage.exe - 패키지가 포함된 실행파일(Runtime Packages 해제: 기본 설정)
- RunTimePackages.exe - 패키지가 제외된 실행일(Runtime Packages 설정)
위의 2개의 실행파일은 Delphi XE5로 신규 프로젝트(폼만 있는 빈 프로젝트)를 컴파일한 실행파일입니다. 빈 프로젝트를 컴파일 한 2개의 실행파일도 서로 용량 차이가 꽤 납니다.
Runtime packages으로 설정한 실행파일은 실행 시 라이브러리가 필요합니다. 위와 같이 Bpl파일을 함께 배포해야 합니다. 배포경로는 실행파일과 같은 위치 또는 윈도우 시스템 경로인 C:\Windows\System32, C:\Windows\SysWOW64에 Bpl파일을 복사하면 됩니다. 일반적인 Bpl파일은 델파이 실행파일 경로(C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\bin)에 위치합니다.
만약, Bpl파일을 배포하지 않는다면, 아래와 같은 오류가 발생합니다.(단, 델파이가 설치된 PC환경에서는 시스템 변수에 해당 경로가 등록되어 오류가 발생하지 않습니다.)
| 개발된 폼을 bpl로 배포하기
기본 bpl을 제외해서 용량을 줄이는 방법 외에도 개발에 사용된 폼을 패키지 프로젝트로 작성하여 Bpl로 배포함으로 배포용량을 분산할 수 있습니다.
폼이 2개인 어플리케이션에서 하나의 서브 폼을 패키지로 작성 후 배포하는 예로 설명을 하겠습니다.
전체적인 프로젝트 구성은 아래와 같습니다.
메인 프로젝트 생성
- File > New > VCL Form Application으로 프로젝트 생성
- Project Manager에서 Project를 선택하고 Add New > VCL Form으로 폼을 하나 추가
- File > Save로 프로젝트 및 Unit을 저장
- RunTImePackages.dpr로 프로젝트 저장
- 메인폼을 MainForm.pas로 저장
- 추가한 폼의 Name을 TfrmSecond로 지정 후 SecondForm.pas로 저장
- MainForm에 버튼을 올리고 ShowModal로 SecondForm을 호출하는 코드 추가
- 실행 및 테스트
1 2 3 4 5 6 7 8 9 10 11 12 13 | uses SecondForm; {$R *.dfm} procedure TForm4 . Button1Click(Sender: TObject); begin with TfrmSecond . Create( nil ) do begin ShowModal; Free; end ; end ; |
Second Form Package 생성
- 위의 프로젝트의 Project Manager에서 Project Group1 > Add New Project > Package 선택 및 확인
- Project Manager > Package1(추가한 Package) > Contains 우측 마우스 클릭 > Add > 위의 프로젝트의 SecondForm.pas 선택
- 프로젝트 저장
- SecondFormPackage.dpk로 프로젝트 저장
- 컴파일(Ctrl + F9) - 다른 Package가 필요하다는 메시지 창이 표시되면 확인 후 OK 클릭
- 위와 같이 컴파일하면 Bpl기본 경로(C:\Users\Public\Documents\RAD Studio\12.0\Bpl)에 SecondFormPackage.bpl이 생성됩니다.
Main 프로젝트를 Runtime Packages로 설정
- Runtime Packages 옵션 호출(Project > Options > Packages > Runtime Packages)
- 아래 그림과 같이 설정
- Runtime Packages > Inherit > True로 변경
- 입력된 값을 모두 지우고, 위에서 만든 패키지 이름 입력
| 주의할 사항
- 패키지로 배포할 경우 패키지 파일에서 사용하는 패키지도 함께 배포해야 합니다.
- 위의 이유로 사용하는 컴포넌트 및 패키지의 구조를 정확히 인지하는 경우만 위의 방식을 사용해야 합니다.
- 배포 전 반드시 델파이가 설치되지 않은 위치에서 배포 테스트를 진행해야 합니다.
사실 저도 이번 기회에 패키지를 처음 만들어 봤습니다. 테스트하는 과정에서 나온 내용을 공유하는 것이니 혹시 잘못된 내용이나 개선사항이 보이시면 http://blog.hjf.pe.kr/103/의 댓글이나 hjfactory@gmail.com으로 보내주시면 수정반영하겠습니다.
감사합니다.
댓글 4
-
늦바람
2014.07.09 21:50
-
Humphery
2014.07.25 08:01
별로 없는 장점에도 불구하고 실행파일 크기가 작아져야하는 경우가 있더라구요^^
(저도 요청한 분들이 있어서 작성했습니다.)
-
미누야
2016.03.08 12:09
현재 시애틀 사용중에 있습니다. 개발된 폼을 bpl로 분할해서 배포하고 싶어서 위 예제를 실행했는데, bpl이 없어도 파일 실행이 되는 상황입니다. 메인프로젝트를 runtime package로 정상 셋팅했음에도 그러합니다. 뭘 더 살펴보면 좋을까요?
-
험프리
2016.03.08 13:54
개발자 PC에서는 bpl이 없어도 정상동작합니다.
이유는 기본 VCL의 bpl과 사용자 젲작 bpl의 경로가 시스템 변수의 Path에 지정되어 있어 실행파일과 같은 경로에 있는 것으로 해석됩니다.
실행파일을 델파이가 설치되지 않은 PC에서 실행해 보시기 바랍니다.
딴지 거느건 아니구요.
상용 패키지라도 하나 썼다가는 배보다 배꼽이 몇 갑절 큽니다.
버전 업 할 때 관리도 그렇구요.
제가보기에 단지 장점이라고 하기에도 뭐한 실행 파일크기
줄어든다는 것 말고 폐헤가 훨씬 큰것 같습니다..
(전체 배포 사이즈는 훨~얼~씬 큼)
줏어먹는 처지에 죄송스럽지만
장점 단점을 균형있게 다뤄 주었으면 하는 바램입니다.