실행 파일로 묶기
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로 미리 확인하세요. - 프로그램이 읽는 데이터 파일(
[파일]로 여는 파일 등)은 묶이지 않아요. 실행하는 컴퓨터에 따로 있어야 해요. - 코드 서명이 필요하면 묶은 다음에 서명하세요. 실행 파일 뒤에 무언가 덧붙이면 서명이 깨져요.