해당 글의 예제는 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 14387
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
170 [추가된 문법] DLL 정적 호출 시 지연 호출(Delayed)-델파이 2010 추가 김원경 2016.12.27 1090
169 부동소수점 숫자(실수)에 대한 참고 글 [1] 험프리 2016.12.14 1126
168 퀵레포트(Quick Report)에 사진 출력하기 험프리 2016.08.01 1849
167 BLOB 컬럼에 (이미지 등의)데이터 읽고 쓰기 험프리 2016.08.01 6073
166 1차 공개 중고생 강의용 앱 소스 및 메뉴얼입니다. file 쭈니아빠 2016.07.16 759
165 [추가된 문법 정리] - 배열 상수 초기화:델파이 XE7 추가 관리자 2016.06.03 3294
164 [추가된 문법 정리] - 클래스 필드(Class Field):델파이 2007 추가 관리자 2016.06.03 824
163 브레이크 포인트를 설정해도 디버깅이 안되는 경우 살펴볼 항목 file 험프리 2016.05.13 2789
162 OutputDebugString 함수로 디버그로그를 출력할 수 있습니다. file 험프리 2016.02.16 4221
161 [안드로이드] 배포파일, 아이콘, 스플래쉬 등이 잘 배포되었는지 확인하기 file 험프리 2015.11.11 1520
160 [다시보기] RAD Studio 10 시애틀 딥다이브 세션 다시보기(영문) Humphery 2015.10.02 549
159 [마이그레이션] 함수(또는 변수)에 빨간밑줄이 가고 컴파일 시 Undeclared Identifier 오류 시 조치방법 file 험프리 2015.09.30 2353
158 델파이 문서화 도구 참고링크 Humphery 2015.09.11 1149
157 [하이브리드 앱 개발] 웹페이지에서 델파이 함수 호출하기 Humphery 2015.06.26 4049
156 안드로이드 웹브라우저에서 "tel:, sms:" 링크가 동작하지 않는 이슈 해결하기 Humphery 2015.06.26 4805
155 [윈도우10] 델파이로 윈도우10 알림 표시하기(WinRT API 이용) Humphery 2015.06.24 2304
154 파이어닥(FireDAC)으로 IBLite 연결 시 "unavaliable database." 오류 발생에 대한 대응 file Humphery 2015.05.15 765
153 델파이에서 MSOffice 엑셀과 워드 연동 참고자료. [1] Humphery 2015.04.27 3748
152 [델파이7 이후 새로운 기능][XE2~] 프로젝트 매니저에서 타겟플랫폼을 64-bit Windows로 선택 해 64비트 애플리케이션을 개발할 수 있습니다. file Humphery 2015.04.23 4719
151 [델파이7 이후 새로운 기능] 추가되고 개선된 VCL 컴포넌트 Humphery 2015.04.22 3560