나의 첫 Go 프로그램

Twitter icon류광, 2019-06-01 14:06
Go 언어 몇십 분 정도 공부하고 짜본 프로그램입니다.

역자의 글에서 몇 번 언급한 적이 있지만, 번역하면서 비영어권 인명이나 지명을 만났을 때 한글라이즈라는 서비스를 아주 유용하게 사용하고 있습니다. 이 자리를 빌려 한글라이즈 관계자 분들께 다시금 감사 인사 드립니다.

그런데 한글라이즈 웹 서비스가 가끔 HTTP 503 오류를 뿜을 때가 있었습니다. 아주 가끔이고 시간이 조금 지나면 정상화되어서 한글라이즈 GitHub 저장소에 이슈를 등록하지는 않았는데요. 다음에 같은 일이 벌어지면 문제를 보고할 생각입니다.

비록 짧은 시간이지만 한글라이즈 웹 서비스가 안 될 때를 위해, 한글라이즈의 기능을 명령줄에서 사용할 수 있는 간단한 프로그램을 짜보았습니다.

GitHub 저장소에서 보듯이 현재 버전의 한글라이즈는 Go 언어로 구현되었습니다. Go 언어는 많이 들어 보았지만 공부해 본 적은 없는데, 일단 딱 필요한 만큼만 배워 보자고 생각하고 웹에서 강좌를 찾아보았습니다. 다행히 예제로 배우는 GO 프로그래밍이라는 훌륭한 사이트를 발견하고 한 15분 정도 읽은 후 바로 코딩으로 들어갔습니다(그 사이에 https://golang.org/에서 Go 개발 환경을 설치했고요).

우선 해야 할 일은 한글라이즈 Go 라이브러리를 설치하는 것인데, 다음 명령으로 한 번에 끝나더군요. 아주 인상적이었습니다.

> go get -u github.com/hangulize/hangulize

이 라이브러리의 사용법은 해당 GitHub 저장소의 Readme.md에도 나와있듯이 아주 간단합니다.[1]

import "github.com/hangulize/hangulize"

hangulize.Hangulize("ita", "Cappuccino")
// output: "카푸치노"

즉, 그냥 언어 코드와 문자열을 지정해서 Hangulize 함수를 호출하면 제가 원했던 결과가 반환됩니다.

전체적인 계획이 섰습니다. 명령줄 인수들로 지정된 언어 코드와 전사할 문자열로 Hangulize 함수를 호출해서 그 결과를 출력하면 끝입니다. 각설하고, 다음이 저의 첫 Go 프로그램입니다.

package main
import "os"
import "github.com/hangulize/hangulize"

func main() {
    var lang = os.Args[1]
    var str = os.Args[2]
    println(hangulize.Hangulize(lang, str))
}

이 코드를 hangulize-cmd.go라는 파일로 저장하고, 다음 명령으로 시험해 보았습니다.

> go run hangulize-cmd.go ita "cappuccino" 

카푸치노

의도대로 작동함을 확인한 후에는 다음 명령으로 실행 파일을 생성했습니다.

> go build -o hangulize.exe hangulize-cmd.go

다음은 위의 프로그램을 조금 개선한 버전입니다.

package main
import (
    "os"
    "strings"
)
import "github.com/hangulize/hangulize"
import "github.com/gojp/kana"

func main() {
    if len(os.Args) < 2 {
        println("Usage:\n\thangulize <lang-code> \"string to transcribe\"\n\n" +
            "See https://github.com/hangulize/hangulize for language codes.")
        return
    }
    var lang = os.Args[1]
    var str = os.Args[2]
    if lang == "jpn" {
        str = kana.RomajiToHiragana(strings.ToLower(str))
    }
    println(hangulize.Hangulize(lang, str))
}

우선 명령줄 인수가 두 개 미만일 때의 처리를 추가했고, 영문자로 표시된 일본어 문구를 적절히 처리하는 기능도 추가했습니다. 한글라이즈는 기본적으로 글자 대 글자 차원의 전사 프로그램인데, 일본어는 한자와 가나 문자만 처리합니다. 그래서 "Tokyo"에서 바로 "도쿄"를 얻을 수는 없고,[2] "Tokyo"를 먼저 "とうきょう"로 변환해야 합니다. 다행히 그런 기능을 제공하는 Go 라이브러리(https://github.com/gojp/kana)가 있어서 아주 간단하게 처리할 수 있었습니다.


처음 접한 Go의 인상은 아주 좋습니다. 필요한 만큼 배우고 배운 만큼 써먹을 수 있었고, 원하는 라이브러리도 쉽게 찾아서 적용할 수 있었습니다. 개발 환경을 준비하기도 아주 쉬웠고요.


  1. https://github.com/hangulize/hangulize/blob/master/README.md 

  2. 이것이 한글라이즈의 원래 용도는 아닐 것이고, 수식의 그리스 글자 몇 개 빼고는 거의 로마자로만 이루어진 영어 원서들을 번역하다 보니 생기는 요구입니다. 러시아어도 상황이 비슷한데, 키릴 문자를 영문자로 변환하는 Go 라이브러리를 찾으면 관련 기능을 추가할 생각입니다. 

태그: 프로그래밍

comments powered by Disqus