해당 글의 예제는 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 21879
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 20525
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 22550
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28305
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 29592
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 24925
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 45869
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 181417
1323 파이어몽키를 이용해서 아이폰앱을 개발할때 스타일 바꾸기 관리자 2012.04.19 9015
1322 BOGO 프로모션 툴 다운로드 받는 방법 안내(2015.6.1~2015.6.30 구매고객) 관리자 2014.06.16 8797
1321 델파이 XE2의 Namespace 문제 박병일 2012.01.19 8713
1320 [델파이 문법] 프로시저와 함수 #1 file 관리자 2012.07.23 8694
1319 [링크]안드로이드를 위한 데이터 스냅 서버 박병일 2012.01.12 8449
1318 Firemonkey MAC OSX 에서 ComboBox 다운현상 [2] c2design 2012.03.28 8368
1317 [델파이 문법] 프로그램과 유닛 #2 file 관리자 2012.09.06 8363
1316 VCL 폼을 파이어몽키 폼으로 바꿀수 있는 컨버터 프로그램 file 박병일 2012.03.01 8353
1315 [델파이 문법] 데이터 타입, 변수 및 상수 #2 file 관리자 2013.02.04 8344
1314 Platforms Expert for XE2 Beta 2 file 박병일 2012.02.06 8344
1313 [동영상강의] 델파이 기본교육_3.유니트구조와 코드작성1 관리자 2012.05.03 8310
1312 RadPHP 한글문제 관리자 2012.04.13 8211
1311 [참고] MAC OSX 어플리케이션 프로젝트 경로 문제 [1] c2design 2012.03.23 8167
1310 [델파이 문법] 클래스와 객체 #13 file 관리자 2012.06.11 8072
1309 [델파이 문법 시리즈] #1. 익명메소드 - 문법 file 관리자 2012.04.04 8051
1308 dbExpress 에는 TUpdateSQL 컴포넌트가 없어요! file 박병일 2012.03.05 7980
1307 VCL Style을 사용하면서 Edit 콘트롤의 컬러 변경하기 file 박병일 2012.02.08 7977
1306 [델파이 문법 시리즈] #8. 제네릭 - 문법 변경 사항(마지막) file 관리자 2012.04.03 7883
1305 [추가자료] 델파이에서 안드로이드 앱 개발 "환경설정과 개발의 시작" [1] 관리자 2013.10.01 7874
» Runtime Packages 옵션으로 프로그램(배포) 용량 줄이기 [4] file Humphery 2013.12.19 7861