하리Hari

실행 파일로 묶기

hana pack으로 내 프로그램을 하자나 Hana가 없는 컴퓨터에서도 도는 실행 파일 하나로 묶어요.

내가 만든 프로그램을 친구에게 주려면 보통 “먼저 Hana를 설치하세요”라고 해야 해요. hana pack은 이 일을 없애 줘요. 프로그램을 실행 파일 하나로 묶어서, 받는 사람은 Hana 없이 더블클릭하거나 터미널에서 이름만 쳐서 실행해요.

묶어 보기

hana pack 앱.hr

같은 폴더에 앱.exe(윈도우) 또는 (리눅스, 맥)이 만들어져요. 이름을 정하려면 -o를 써요.

hana pack 앱.hr -o 내앱

카나데 프로그램(.knd)도 똑같이 묶어요. 묶기 전에 hana run --bc 앱.hr로 돌려 보면 묶은 뒤와 같은 방식(바이트코드)으로 확인할 수 있어요.

안에 무엇이 들어 있나요?

묶은 파일은 세 가지를 이어 붙인 거예요.

  • 작은 런타임: 프로그램을 돌리는 데 필요한 것만 든 hana-runtime(약 6MB)이에요. 소스를 읽는 파서나 언어 서버는 없어요.
  • 프로그램: 소스를 미리 컴파일한 바이트코드예요. 가져온 하자·카나데 파일과, hana add로 받은 패키지의 코드도 이때 함께 들어가요. 그래서 받는 사람에게 소스 파일이나 hana.json은 필요 없어요.
  • 네이티브 라이브러리(있다면): 패키지가 네이티브 라이브러리를 쓰면 함께 챙겨져요.

hana pack을 쓰려면 hana 실행 파일 옆에 hana-runtime이 있어야 해요. Hana를 직접 빌드했다면 README의 안내대로 hana-runtime도 함께 만들어 두세요.

네이티브 라이브러리는 어디에 두나요?

기본은 실행 파일 옆의 libraries/ 폴더예요. 묶은 실행 파일과 이 폴더를 함께 전해야 해요.

내앱.exe
libraries/
└── http_server.dll

폴더 없이 파일 하나만 주고 싶다면 --embed를 붙여요. 라이브러리가 실행 파일 안에 압축되어 들어가고, 처음 실행할 때 사용자 캐시 폴더에 한 번 풀려요.

hana pack 서버.hr --embed

다른 운영체제용으로 만들기

--target으로 다른 운영체제와 CPU용 실행 파일을 만들어요. 윈도우에서 리눅스용을 만드는 식이에요.

hana pack 앱.hr --target linux-amd64

그 플랫폼용 런타임이 필요해요. hana 옆에 hana-runtime-linux-amd64라는 이름으로 두거나 --runtime으로 경로를 알려 주세요. 런타임은 Hana 소스에서 GOOS=linux GOARCH=amd64 go build -o hana-runtime-linux-amd64 ./cmd/hana-runtime처럼 만들어요.

옵션 정리

옵션 하는 일
-o 이름 만들 실행 파일의 경로. 안 주면 입력 파일 이름을 써요
--embed 네이티브 라이브러리를 실행 파일 안에 넣어요
--target 플랫폼 windows-amd64, linux-arm64처럼 만들 플랫폼
--runtime 파일 바탕이 될 hana-runtime 파일

알아 둘 것

  • 묶은 프로그램은 바이트코드 엔진으로 돌아요. 바이트코드 엔진이 지원하지 않는 기능(변수 이름을 글자로 만들어 부르는 동적 호출)은 묶은 프로그램에서 쓸 수 없어요. hana run --bc로 미리 확인하세요.
  • 프로그램이 읽는 데이터 파일([파일]로 여는 파일 등)은 묶이지 않아요. 실행하는 컴퓨터에 따로 있어야 해요.
  • 코드 서명이 필요하면 묶은 다음에 서명하세요. 실행 파일 뒤에 무언가 덧붙이면 서명이 깨져요.
놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.