작업 흐름 팁

작업 흐름 팁 (Workflow Tips)

Julia를 효율적으로 다루기 위한 몇 가지 팁을 정리해 봤어요. 크게 REPL 기반, 브라우저 기반, 그리고 Revise를 활용한 개발 흐름으로 나눠서 차근차근 살펴볼게요.

출처: Julia 공식 매뉴얼 - Workflow Tips

REPL 기반 작업 흐름

Julia REPL 문서에서 이미 자세히 다뤘듯이, Julia의 REPL은 효율적인 대화형 작업 흐름을 돕는 풍부한 기능을 제공해요. 여기서는 커맨드라인에서의 경험을 더 한층 좋게 만들어 줄 몇 가지 팁을 소개할게요.

기본 에디터/REPL 작업 흐름

가장 기본적인 Julia 작업 흐름은 텍스트 에디터와 julia 커맨드라인을 함께 쓰는 방식이에요.

Tmp.jl 같은 파일을 하나 만들고, 그 안에 다음 내용을 넣어 보세요.

module Tmp

say_hello() = println("Hello!")

# Your other definitions here

end # module

using .Tmp

그리고 같은 디렉토리에서 Julia REPL(julia 명령)을 시작한 뒤, 새 파일을 다음과 같이 실행해요.

julia> include("Tmp.jl")

julia> Tmp.say_hello()
Hello!

REPL에서 아이디어를 이것저것 탐색해 보세요. 좋은 아이디어는 Tmp.jl에 저장해 두고, 파일을 바꾼 뒤 다시 불러오려면 그냥 include를 다시 실행하면 돼요.

여기서 핵심은 코드를 모듈로 캡슐화한다는 점이에요. 덕분에 Julia를 재시작하지 않고도 struct 정의를 수정하고 메서드를 제거할 수 있죠.

(설명을 덧붙이면, struct는 정의한 뒤 수정할 수 없고 메서드도 삭제할 수 없어요. 하지만 모듈의 정의는 덮어쓸 수 있고, 그게 바로 include("Tmp.jl")을 다시 실행할 때 일어나는 일이에요.)

게다가 코드를 모듈로 감싸 두면 REPL에 남아 있는 이전 상태의 영향으로부터 코드를 보호해 줘서, 눈에 잘 띄지 않는 오류로부터도 지켜줘요.

브라우저 기반 작업 흐름

Julia를 브라우저에서 다루는 방법도 몇 가지가 있어요.

  • Pluto.jl로 Pluto 노트북 사용하기
  • IJulia.jl로 Jupyter 노트북 사용하기

Revise 기반 작업 흐름

REPL에 있든 IJulia에 있든, Revise를 쓰면 개발 경험이 대체로 좋아져요. julia가 시작될 때마다 Revise가 함께 시작되도록 설정하는 게 보통이에요. 설정 방법은 Revise 문서에 잘 나와 있어요. 설정이 끝나면 Revise는 로드된 모듈의 파일들, 그리고 includet(일반 include가 아니라)로 REPL에 불러온 파일들의 변경을 계속 추적해요. 그래서 파일을 수정하기만 하면 julia 세션을 재시작하지 않아도 변경이 바로 적용되죠. 표준적인 작업 흐름은 앞서 본 REPL 기반 방식과 비슷한데, 다음 두 가지만 바꿔 주면 돼요.

  1. 코드를 로드 경로 안 어딘가의 모듈에 넣으세요. 방법이 몇 가지 있는데, 추천하는 두 가지는 다음과 같아요.

    • 장기 프로젝트라면 PkgTemplates을 쓰세요.

      using PkgTemplates
      t = Template()
      t("MyPkg")
      

      이렇게 하면 .julia/dev 디렉토리에 "MyPkg"라는 빈 패키지가 생성돼요. PkgTemplates는 Template 생성자를 통해 다양한 옵션을 조절할 수 있다는 점도 참고하세요.

      아래 2단계에서 MyPkg/src/MyPkg.jl을 수정해 소스 코드를 바꾸고, 테스트는 MyPkg/test/runtests.jl을 수정하면 돼요.

    • "일회성" 프로젝트라면 임시 디렉토리(예: /tmp)에서 작업해서 정리할 필요 자체를 없앨 수 있어요.

      임시 디렉토리로 이동해 Julia를 실행한 뒤, 다음처럼 하세요.

      pkg> generate MyPkg            # type ] to enter pkg mode
      julia> push!(LOAD_PATH, pwd())   # hit backspace to exit pkg mode
      

      주의할 점은 Julia 세션을 재시작하면 LOAD_PATH를 수정하는 그 명령을 다시 실행해야 한다는 거예요.

      아래 2단계에서 MyPkg/src/MyPkg.jl을 수정해 소스 코드를 바꾸고, 원하는 테스트 파일을 만들면 돼요.

  2. 패키지를 개발하세요.

    코드를 로드하기 전에 Revise가 실행 중인지 확인하세요. 즉 using Revise를 쓰거나, 문서에 나온 대로 자동으로 실행되도록 설정해 두세요.

    그 다음 테스트 파일(여기서는 "runtests.jl"이라 가정)이 있는 디렉토리로 이동해 다음처럼 실행하세요.

    julia> using MyPkg
    
    julia> include("runtests.jl")
    

    이제 에디터에서 MyPkg의 코드를 반복적으로 수정하고 include("runtests.jl")로 테스트를 다시 돌리면 돼요. 변경 사항을 보기 위해 julia 세션을 재시작할 필요는 대체로 없답니다 (몇 가지 제한은 있지만요).

더 알아보기 (Learn more)

  • Julia REPL — 대화형 작업 흐름의 기반
  • Pluto.jl — 브라우저 기반 대화형 노트북
  • Revise.jl — 코드 변경 자동 반영