Julia

Julia언어 체감 속도 향상 (!! 필수 !!)

KimUH 2025. 3. 14. 09:32

-----------------------------------------

추후 수정>  디버깅 중 재시작 속도 문제는 Julia REPL창에서 include("파일명.jl")만 재실행 시켜도 해결된다.

-----------------------------------------

 

줄리아 언어는 문법적으로는 동적 언어이지만, 연산 성능을 위해서 (인터프리터가 아니라) '컴파일'을 하기 때문에, R/파이썬과 같은인터프리터 동적 언어와 같은 빠릿빠릿한 맛이 없다.

디버깅 과정에서 '수정 후 재실행'을 반복할 때, 느려터진 재시작 속도가 개발 생산성의 발목을 잡는다.

 

이 문제는 TTFP(Time to First Plot : 첫 그래프를 그릴 때까지 걸리는 시간.) 문제로 칭해지며, Julia언어의 약점으로 널리 알려져 있다.

줄리아 버전 1.9부터 많이 개선되었지만, 파이썬, R 같은 인터프리어 언어에 비하면 여전히 느려터졌으며, 심지어 정적 컴파일 언어인 Go언어에 비해서도 답답하게 느껴진다.

(Go언어의 컴파일 속도가 아주 빠르긴 하다.)

 

TTFP문제의 원인은 (줄리아 언어 런타임을 실행하고, 외부 라이브러리 패키지를 로딩하는 등) 실행 준비에 오랜 시간이 소요되기 때문이다.

예를 들면, 실제 연산은 0.01초만에 끝나는 데, 실행 준비에 10초가 걸리는 식이다.

 

'DaemonMode.jl' 은 실행 준비에 걸리는 시간을 최소화 해준다.

'Revise.jl'과 함께 사용하면 느려터진 재시작 문제가 90% 해결된다.

 

Julia언어 REPL 화면에서 다음과 같이 Revise.jl 패키지와 DaemonMode.jl 패키지를 설치한다.

julia> using Pkg

julia> Pkg.add("DaemonMode")
julia> Pkg.add("Revise")

 

간편한 실행을 도와주는 윈도우용 배치 파일을 다음과 같이 작성한다.

REM 서버 프로세스 실행 배치 파일 : julia_server.bat

julia --startup-file=no -e "using Revise; using DaemonMode; serve()"
REM 클라이언트 실행 배치 파일 : julia_client.bat

@echo off
julia --startup-file=no -e "using Revise; using DaemonMode; runargs()" %1

 

 

우선 julia_server.bat 배치 파일을 이용해서 서버 프로세스를 실행시킨다.

1번째 터미널 창에서 서버 프로세스를 실행시킨 모습

 

서버 프로세스가 실행되는 창을 닫지 않고 열어둔 상태에서 새로운 창을 열어서 julia_client.bat 배치 파일을 이용해서 Julia언어 소스 코드 파일을 시킨다.

(예제 화면에서는 hello_world.jl 파일을 실행했다.)

2번째 터미널 창에서 hello_world.jl 예제를 실행시킨 모습

 

서버 프로세스와 코드 실행이 별도의 창에서 실행되었다는 점이 중요하다.

2번째 창에서 실행된 Julia언어 코드는 (2번째 창이 아니라) 1번째 창의 서버 프로세스에 넘겨져서 처리되고, 처리된 결과물만 받아보는 방식으로 동작한다.

서버 프로세스는 클라이언트 실행이 끝나도 종료되지 않고 재활용 되면서, (첫번째 실행 이후에는) 재시작 과정을 아예 건너뛰는 방식으로 TTFP문제를 해결한다.

 

마지막으로 단점이 하나 있다.

바로 에러 메시지가 제대로 나오지 않을 수 있다는 점이다.

 

그럼에도 DaemonMode.jl과 Revise.jl를 사용해서 재시작 속도가 빨라지면 Julia언어 사용이 엄청나게 쾌적해진다.