해당 글의 예제는 Delphi XE5로 테스트 했으며, 다른버전의 화면 및 메뉴 명칭은 약간 다를 수 있습니다.


   가끔 주위에서 배포 시 프로그램 용량이 너무 커서 dll 등으로 폼을 분리하는 방법을 문의합니다. 저는 되도록 UPX로 실행파일 압축을 권하지만, 근본적으로 실행파일 용량을 줄이고자 하시는 분들께 도움이되는 내용입니다.


Runtime Packages란?

  • Runtime packages는 실행파일에 라이브러리를 포함하여 컴파일할지 결정하는 프로젝트 옵션(Project > Options > Packages > Runtime Packages)입니다.
  • Runtime packages 옵션은 기본(신규 프로젝트 생성 시)으로 해제되어 있어, 컴파일된 실행파일에는 정적라이브러리(*.lib)가 모두 포함됩니다.
  • 해당 옵션을 해제하게 되면 옵션명대로 Runtime에서 Package들을 사용해야 합니다. 즉, 라이브러리(bpl: Borland Package Library)를 함께 배포해야 합니다. 대신 실행파일의 용량은 확실하게 줄어들게 됩니다.


| Runtime Package 설정 시 용량차이


RunTimePackage_bpl copy.jpg
  • 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환경에서는 시스템 변수에 해당 경로가 등록되어 오류가 발생하지 않습니다.)

RunTimePackage_err copy.jpg


| 개발된 폼을 bpl로 배포하기


  기본 bpl을 제외해서 용량을 줄이는 방법 외에도 개발에 사용된 폼을 패키지 프로젝트로 작성하여 Bpl로 배포함으로 배포용량을 분산할 수 있습니다. 


  폼이 2개인 어플리케이션에서 하나의 서브 폼을 패키지로 작성 후 배포하는 예로 설명을 하겠습니다.

  전체적인 프로젝트 구성은 아래와 같습니다.

RunTimePackage_Form02 copy.jpg


메인 프로젝트 생성

  1. File > New > VCL Form Application으로 프로젝트 생성
  2. Project Manager에서 Project를 선택하고 Add New > VCL Form으로 폼을 하나 추가
  3. File > Save로 프로젝트 및 Unit을 저장
    • RunTImePackages.dpr로 프로젝트 저장
    • 메인폼을 MainForm.pas로 저장
    • 추가한 폼의 Name을 TfrmSecond로 지정 후 SecondForm.pas로 저장
  4. MainForm에 버튼을 올리고 ShowModal로 SecondForm을 호출하는 코드 추가
  5. 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;

  6. 실행 및 테스트


Second Form Package 생성

  1. 위의 프로젝트의 Project Manager에서 Project Group1 > Add New Project > Package 선택 및 확인
  2. Project Manager > Package1(추가한 Package) > Contains 우측 마우스 클릭 > Add > 위의 프로젝트의 SecondForm.pas 선택
  3. 프로젝트 저장
    • SecondFormPackage.dpk로 프로젝트 저장
  4. 컴파일(Ctrl + F9) - 다른 Package가 필요하다는 메시지 창이 표시되면 확인 후 OK 클릭
Change_Package copy.jpg 
  1. 위와 같이 컴파일하면 Bpl기본 경로(C:\Users\Public\Documents\RAD Studio\12.0\Bpl)에 SecondFormPackage.bpl이 생성됩니다.


Main 프로젝트를 Runtime Packages로 설정

  1. Runtime Packages 옵션 호출(Project > Options > Packages > Runtime Packages)
  2. 아래 그림과 같이 설정
    • Runtime Packages > Inherit > True로 변경
    • 입력된 값을 모두 지우고, 위에서 만든 패키지 이름 입력
RunTImePackage_Option copy.jpg 
  
  위와 같이 컴파일하면 Bpl기본 경로(C:\Users\Public\Documents\RAD Studio\12.0\Bpl)에 SecondFormPackage.bpl이 생성됩니다.
RunTimePackage_FormBpl copy.jpg

| 주의할 사항


  • 패키지로 배포할 경우 패키지 파일에서 사용하는 패키지도 함께 배포해야 합니다.
  • 위의 이유로 사용하는 컴포넌트 및 패키지의 구조를 정확히 인지하는 경우만 위의 방식을 사용해야 합니다.
  • 배포 전 반드시 델파이가 설치되지 않은 위치에서 배포 테스트를 진행해야 합니다.


사실 저도 이번 기회에 패키지를 처음 만들어 봤습니다. 테스트하는 과정에서 나온 내용을 공유하는 것이니 혹시 잘못된 내용이나 개선사항이 보이시면 http://blog.hjf.pe.kr/103/ 댓글이나 hjfactory@gmail.com으로 보내주시면 수정반영하겠습니다.


감사합니다.


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 23878
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 22193
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 24218
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 30105
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 31212
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 26567
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 47553
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 184437
130 XE7에서 추가 된 안드로이드 프로젝트에서 외부 라이브러리(jar) 사용을 위한 정보 [1] Humphery 2014.11.03 3264
129 8단계로 완성하는 "2014년 출시 앨범" 앱 개발 따라하기 [1] file Humphery 2014.10.07 3729
128 [온라인 세미나 발표자료] RAD Studio XE7! 관리자 2014.09.17 1677
127 [기술문서] 델파이와 유니코드 관리자 2014.09.16 1970
126 [기술문서] 델파이XE2와 파이어몽키 관리자 2014.09.16 1685
125 [기술문서] Delphi 코딩 스타일과 아키텍처(Delphi 2009의 언어 기능 리뷰) 관리자 2014.09.16 1558
124 [Step UP! 마이그레이션] RAD 업그레이드 마이그레이션 기술 브리핑 자료(2014.8.21) 관리자 2014.08.22 2022
123 델파이를 이용해 구글크롬캐스트와 연결 Humphery 2014.07.22 2657
122 델파이 물리엔진 Box2d 소개. FMX, VCL 용(오픈소스) [1] Humphery 2014.04.22 4267
121 [XE5만의 특별한 기능] 응답하라! Delphi VCL 개발자 관리자 2013.12.21 4931
» Runtime Packages 옵션으로 프로그램(배포) 용량 줄이기 [4] file Humphery 2013.12.19 7911
119 ComPort(시리얼 통신) 컴포넌트 설치안내 [11] file 험프리 2013.12.04 113013
118 11월 26일 "RAD Studio XE5 따라잡기: 모바일 개발 퀵스타트 LIVE!" 발표자료입니다. file 관리자 2013.12.03 3631
117 엔터프라이즈 데이터 기반의 모바일 앱 과정(2일) 우선 등록 안내 관리자 2013.11.21 2745
116 델파이 안드로이드앱에서 jar 클래스 사용하기 file 관리자 2013.10.31 5399
115 Release Notes for XE5 Update 1 c2design 2013.10.29 3406
114 델파이1 부터 델파이XE5까지의 역사 관리자 2013.10.26 4721
113 iOS 7 앱 개발을 위한 XE5 업데이트 제공 안내 관리자 2013.10.15 3917
112 CodeRage 8: Delphi 온라인 무료 세미나 개최 관리자 2013.10.15 3387
111 iOS UI 디자인 (델파이XE4 활용) 관리자 2013.07.19 3816