Sunday, April 28, 2019

아파치 톰캣 9 한글화 (Apache Tomcat 9 Korean Translation)

1. 해석의 시간


갓난아이 때부터 한국어를 듣고 배웠던 사람들에게는, 한국어로 된 정보나 오류 메시지가 더 쉽고 빠르게 와 닿을 것이다. 예를 들어, 아파치 톰캣에는 아래의 영어 오류 메시지가 있다. (출처: https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/core/LocalStrings.properties#L20)

applicationContext.addListener.iae.sclNotAllowed=Once the first ServletContextListener has been called, no more ServletContextListeners may be added.

위 메시지가 의미하는 바는, 다들 해석할 수 있듯이, ServletContextListener가 한번이라도 호출된 경우에는 더 이상 새로운 ServletContextListener를 추가할 수 없다는 뜻으로, 아래와 같이 번역된다. (출처: https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/core/LocalStrings_ko.properties#L20)

applicationContext.addListener.iae.sclNotAllowed=첫번째 ServletContextListener가 호출되고 나면, 더 이상 ServletContextListener들을 추가할 수 없습니다.

영어 메시지의 경우, 나처럼 사고 체계가 이미 한국어로 정착된 사람에게는 해석의 시간이 필요하다. 어떤 사람에게는 그 시간이 빠르고 나 같은 사람에게는 더 길다. 영어권 사람이거나 영어에 매우 능통한 사람이 1초 이내에 인지할 수 있는 것을 나는 몇 배의 시간을 들여 해석해야 한다. 그리고 이런 경험은 한두번이 아니고 쌓이고 쌓여서 몇 시간, 몇 일 또는 몇 달의 차이를 만들 수 있다. 소프트웨어의 메시지들을 번역하는 것은 이런 해석의 시간을 현격히 줄이게 한다.
    물론 그 번역은 올바라야 한다. 예전에  "" 출판사에서 나오는 책들은 한국어로 번역된 책인데도 해석하기가 힘들었다. 영어 실력은 있어도 아마 개발자 출신이 아니거나 개발자들의 검토를 받지 않았기 때문이라 생각했었다. IT 분야만 그런 것이 아니었다. 경제학이든 통계학이든 어떤 책들은 한국어 (번역)본이 더 해석하기 힘든 경우가 종종 있었다. 문맥에 맞지 않거나 실제 현장에서 쓰지 않는 용어가 사용되거나, 또는 이상한 한자어의 조합이 있거나, 아니면 지나치게 직역된 어색한 수동태들. 그래서 어떤 분들은 원서를 찾아 읽기도 하고, 어떤 분들은 "맨땅에 헤딩"하거나 했다. 나를 포함해서.
    분명한 사실은, 누군가에 의해 올바로 번역되기만 한다면 그것은 사람들이 투자해야 할 해석의 시간을 현격히 줄여 준다는 것이다. 그 소프트웨어가 보다 많은 사람들이 보다 자주 사용하는 것이라면 - 아파치 톰캣 처럼 - 그 가치는 배가된다.

2. 아파치 톰캣 메시지 한글화


아파치 톰캣 9.0.15 이후 버전에서는 거의 모든 메시지들이 한글화되었다. JVM의 기본 언어를 아래와 같이 한국어로 설정하면  (`CATALINA_OPTS="-user.country=KR -Duser.language=ko"), 모든 내부 정보, 경고, 오류 등의 메시지들이 한국어로 출력된다. 아래에서는 간단히 `bin/catalina.sh run`으로 아파치 톰캣을 실행하였다.

$ export CATALINA_OPTS="-Duser.country=KR -Duser.language=ko"

$ bin/catalina.sh run

Using CATALINA_BASE:   /Users/tester/tomcat
Using CATALINA_HOME:   /Users/tester/tomcat
Using CATALINA_TMPDIR: /Users/tester/tomcat/temp
...
24-Apr-2019 23:51:08.477 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log 서버 버전 이름:        Apache Tomcat/9.0.18-dev24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log Server 빌드 시각:          Apr 20 2019 19:48:52 UTC
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log Server 버전 번호:         9.0.18.0
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log 운영체제 이름:               Mac OS X
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log 운영체제 버전:            10.14.4
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log 아키텍처:          x86_64
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log 자바 홈:             /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 버전:           1.8.0_144-b01
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 벤더:            Oracle Corporation
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /Users/tester/tomcat
24-Apr-2019 23:51:08.481 정보 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /Users/tester/tomcat
...
24-Apr-2019 23:51:08.488 정보 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다: [/Users/tester/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]24-Apr-2019 23:51:08.749 정보 [main] org.apache.coyote.AbstractProtocol.init 프로토콜 핸들러 ["http-nio-8080"]을(를) 초기화합니다.
24-Apr-2019 23:51:08.775 정보 [main] org.apache.coyote.AbstractProtocol.init 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 초기화합니다.
24-Apr-2019 23:51:08.778 정보 [main] org.apache.catalina.startup.Catalina.load [526] 밀리초 내에 서버가 초기화되었습니다.
24-Apr-2019 23:51:08.806 정보 [main] org.apache.catalina.core.StandardService.startInternal 서비스 [Catalina]을(를) 시작합니다.
24-Apr-2019 23:51:08.807 정보 [main] org.apache.catalina.core.StandardEngine.startInternal 서버 엔진을 시작합니다: [Apache Tomcat/9.0.18-dev]
24-Apr-2019 23:51:08.814 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/docs]을(를) 배치합니다.
24-Apr-2019 23:51:09.052 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/docs]에 대한 배치가 [237] 밀리초에 완료되었습니다.
24-Apr-2019 23:51:09.055 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/manager]을(를) 배치합니다.
24-Apr-2019 23:51:09.117 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/manager]에 대한 배치가 [62] 밀리초에 완료되었습니다.
24-Apr-2019 23:51:09.117 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/examples]을(를) 배치합니다.
24-Apr-2019 23:51:09.911 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/examples]에 대한 배치가 [793] 밀리초에 완료되었습니다.
24-Apr-2019 23:51:09.911 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/ROOT]을(를) 배치합니다.
24-Apr-2019 23:51:09.969 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/ROOT]에 대한 배치가 [57] 밀리초에 완료되었습니다.
24-Apr-2019 23:51:09.969 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/host-manager]을(를) 배치합니다.
24-Apr-2019 23:51:10.019 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/Users/tester/tomcat/webapps/host-manager]에 대한 배치가 [50] 밀리초에 완료되었습니다.
24-Apr-2019 23:51:10.022 정보 [main] org.apache.coyote.AbstractProtocol.start 프로토콜 핸들러 ["http-nio-8080"]을(를) 시작합니다.
24-Apr-2019 23:51:10.029 정보 [main] org.apache.coyote.AbstractProtocol.start 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 시작합니다.
24-Apr-2019 23:51:10.031 정보 [main] org.apache.catalina.startup.Catalina.start 서버가 [1,252] 밀리초 내에 시작되었습니다.


거의 모든 메시지들이 한국어로 서비스된다. "... 밀리초 내에 서버가 초기화되었습니다", "웹 애플리케이션 디렉토리", "배치가 ... 완료되었습니다", 등등.
    아래 화면은 현재 최신의 아파치 톰캣 서버 9.0.20을 시작 시키고, 기본 예제 웹 애플리케이션의 HelloWorldExample 서블릿을 실행한 것이다. 즉, http://localhost:8080/ 을 방문한 다음, "Examples" 상단 메뉴를 클릭한 후, "Servlet Examples" 링크를 클릭한 다음, "Hello World" 예제 링크를 클릭한 결과다.


헬로 월드 서블릿 예제 (/examples/servlets/servlet/HelloWorldExample)

그리고 요청 정보 예제 서블릿("RequestInfoExample")도 아래와 같이 한국어로 서비스된다.

요청 정보 출력 서블릿 예제 (/examples/servlets/servlet/RequestInfoExample)

Control-C를 입력하여 로컬 아파치 톰캣 서버를 종료시켰다. 종료 시 처리하는 내역 또한 한국어로 정보가 제공된다.

^C
25-Apr-2019 00:08:47.580 정보 [Thread-5] org.apache.coyote.AbstractProtocol.pause 프로토콜 핸들러 ["http-nio-8080"]을(를) 일시 정지 중
25-Apr-2019 00:08:47.589 정보 [Thread-5] org.apache.coyote.AbstractProtocol.pause 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 일시 정지 중
25-Apr-2019 00:08:47.595 정보 [Thread-5] org.apache.catalina.core.StandardService.stopInternal 서비스 [Catalina]을(를) 중지시킵니다.
25-Apr-2019 00:08:47.615 정보 [Thread-5] org.apache.coyote.AbstractProtocol.stop 프로토콜 핸들러 ["http-nio-8080"]을(를) 중지시킵니다.
25-Apr-2019 00:08:47.618 정보 [Thread-5] org.apache.coyote.AbstractProtocol.stop 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 중지시킵니다.
25-Apr-2019 00:08:47.619 정보 [Thread-5] org.apache.coyote.AbstractProtocol.destroy 프로토콜 핸들러 ["http-nio-8080"]을(를) 소멸시킵니다.
25-Apr-2019 00:08:47.620 정보 [Thread-5] org.apache.coyote.AbstractProtocol.destroy 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 소멸시킵니다.
$

3. 어떻게 시작되었나


잘 알다시피 아파치 소프트웨어 재단(https://apache.org)은 개인 자원봉사자들의 자발적인 기여에 의해 훌륭한 소프트웨어 프로젝트들과 커뮤니티들을 지키고 가꿔온 곳이다. 소프트웨어와 관계된 사람들이, 자신이 필요로 하거나 관심있는 프로젝트의 메일링리스트와 같은 커뮤니티 활동을 통해 서서히 참여하게 된다. 사용자 메일링리스트를 통해 질문을 올리거나 남의 질문에 답변해 가면서 돕기도 하고, 테스트, 개발, 문서화 등에 관심을 갖는 사람들은 개발자 메일링리스트를 통해 개선 방안을 논의하기도 하고, 버그 추적 시스템을 통해 오류를 보고하기도 한다. 적잖은 기여를 한 사람들은, 커뮤니티에 의해 커미터로 초대되어 소스를 변경할 수 있는 권한이 주어지며, 더 나아가 프로젝트관리위원회의 멤버가 되어, 커뮤니티를 대표해 프로젝트의 각종 의사결정에 참여하기도 한다. 이러한 거버넌스 모델은 소위 The Apache Way로 불리는데, 더 자세한 내용은 https://www.apache.org/theapacheway/index.html를 참조하기 바란다.
    여하튼 그러한 자발적 커뮤니티의 문화에 기반하여 이 한글화 작업은 시작되었다. 바로 2018년 11월 12일, 오랜 아파치 톰캣 커미터이고 프로젝트관리위원회 멤버이며, 아파치소프트웨어 재단에 많은 기여를 해 온 Mark Thomas 씨가 아래와 같은 메시지를 사용자 메일링리스트에 보냈다. (출처: https://lists.apache.org/thread.html/d53034694855fcc346e660fb688ddb7886574e0168d6eca70e4ece37@%3Cusers.tomcat.apache.org%3E) 요점은 많은 사람들이 기여를 하고 싶어도 잘 할 수가 없는 - 예를 들면 소프트웨어 메시지를 번역해서 기여하고 싶어도 그 메시지 리소스 파일이 어디있는지 어떻게 편집하고 저장하여 패치를 보내야 하는지 전문가가 아니면 잘 알 수 없는 - 구조적 문제를 해결하고자, 아파치 톰캣 프로젝트관리위원회에서는 POEditor 프로젝트(아래 스크린샷 참조)를 만들어 보다 많은 사람들이 번역 작업에 참여할 수 있게 했으니, 보다 많은 사람들이 함께 노력하여 아파치 톰캣 9 버전을 릴리즈할 때에 그 성과를 반영하자는 얘기다.

From: Mark Thomas
Subject: Translation help wanted
Date: 2018/11/12 11:49:51
List: users@tomcat.apache.org

All,

Apache Tomcat includes some translations for error messages and parts of
the user interface - primarily the Manager web application. We would
like to improve the coverage and quality of these translations.
Accordingly, the Tomcat project has been set up on POEditor, a web-based
service for managing the translation of resource files.

The aim is that anyone who wants to contribute to the translations (it
could be anything from fixing a typo in an existing translation to
adding support for a new language) can create an account and contribute.

If you would like to contribute in this way then the
The Tomcat project can be found here:

https://poeditor.com/join/project/NUTIjDWzrl

Anyone should be able to join up as a contributor. If you are
interested, please sign up and start contributing.

Note: All contributions will be taken as being made under the terms of
the Apache License version 2.

I'm aiming to export the translations on a regular basis to the Tomcat
source code. How regularly will depend on the rate of new/updated
translations but as a minimum, I'm aiming to get any updates into the
next Tomcat 9 release.

If you have any difficulties or questions, please ask here.

Thanks,

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


위에서 밝힌 출처 링크를 클릭해서 살펴 보면, 믿을 수 없을 정도로 많은 사람들이 자원하기로 답장을 통해 밝혔고, 그 결과는 불과 일주일 여만에 엄청난 공동 번역 작업 성과를 보이기 시작했다. 다음은 역시 Mark Thomas 씨가 바로 9일 뒤에 보낸 메시지이다. (출처: https://lists.apache.org/thread.html/3dfab1b732e4223bd846617086b788ee41d35228b684f4714404f2a3@%3Cusers.tomcat.apache.org%3E)

From: Mark Thomas
To: Tomcat Users List
Subject: Translations update
Date: 2018/11/21 09:58:15
List: users@tomcat.apache.org

Hi all,

I wanted to let you know about the amazing progress that is being made
on the Tomcat translations at
https://poeditor.com/join/project/NUTIjDWzrl

In the short time since this effort has started the community has
achieved the following:

- French has increased from 18% to 64% coverage
- Simplified Chinese has been added and has already reached 32% coverage
- Korean has been added and has reached 10% coverage
- German has increased from 2% to 7% coverage
- Brazilian Portuguese has been added and has reached 4% coverage
- Spanish has increased from 42% to 44% coverage

as well as a smaller number of additions and corrections to another 6
languages.

A big thank you to everyone who has contributed.

There is still lots to do so if you would like to help out please join
us at:
https://poeditor.com/join/project/NUTIjDWzrl

Thanks,

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


열흘도 안되어, 프랑스어는 18%에서 64%로, 스페인어는 42%에서 44%로, 독일어는 2%에서 7%로 증가되었다. 뿐만 아니라 이전에는 전혀 번역되지 않았던, 중국어는 32%, 한국어는 10%, 브라질 포르투갈어는 4% 이상 번역이 추가되었다.
    이 글을 쓰고 있는 2019년 4월 28일 현재, 한국어는 이미 99% 이상 번역 되었고, 140 명 이상의 자원자들에 의해 총 17개 언어로 3,044 회 이상의 기여 작업이 이루어졌다. 그리고 이 공동 작업은 계속될 것이다. 자세한 내역은 아래 POEditor 프로젝트 홈페이지 참조: https://poeditor.com/join/project/NUTIjDWzrl.


4. 그리고 계속된다


혹시 IT 분야에서 일하면서 가끔씩 이상하게 번역된 메시지들을 본 적이 있나요? 영어가 한국어로 제대로 번역되었다 하더라도, 한국 IT 분야에서 일해온 사람들의 눈에는 뭔가 어감이 이상하게 다가오는 번역문들을 본 적이 있나요?
    아파치 톰캣 커뮤니티는 우리가 오랫동안 가져온 그러한 문제의식에 공감하여 함께 해결해 가자고 제안한다. 그리고 그 제안은 단지 추상적인 것이 아니라 매우 구체적이고 실용적인 대안으로 왔다. POEditor (https://poeditor.com/join/project/NUTIjDWzrl). 전혀 어렵지 않고, 쉽게 메시지를 편집할 수 있다. 만일 왜 그런 메시지를 사용되었는지 문맥을 모르겠거나 확실하지 않다면, 각 메시지 항목에서 채팅과 같은 메시지를 주고 받으며 아이디어들을 교환할 수도 있다. 아파치 톰캣 프로젝트의 커미터가 답변을 줄 수도 있고, 다른 언어로 번역하는 사람들과 의견을 주고 받을 수도 있다.

서로 돕고 서로 이익이 되는 이러한 경험을 공유하고 싶다면, 언제든 아파치 톰캣 POEditor (https://poeditor.com/join/project/NUTIjDWzrl) 프로젝트에 한국어 번역자로 참여하기 바랍니다.
    또한 사용자메일링리스트 (영어 또는 한국어 사용 가능) 또는 개발자메일링리스트에 질문 또는 의견을 나누고 싶으시면 https://tomcat.apache.org/lists.html 페이지를 참조하십시오.


오늘날 디지털로 연결된 세계에서 전 세계 각지에 있는 사람들이 관심있고 자신에게 도움이 되는 오픈 소스 프로젝트와 커뮤니티에 참여하고 기여하기 시작한다. 마치 옛날에 마을 사람들이 공동으로 저수지를 만들듯이. 홍수에 대비하여 긴 둑에 공동으로 제방공사를 하고 나무를 심듯이. 이미 좀 알고 있는 사람은 어떻게 하면 사람들이 쉽게 참여할 수 있을까 고민하고 방안을 구현한다. POEditor처럼 쉬운 도구를 활용하여 접근성을 용이하게 한다. 함께 하면 결국엔 더 쉬워짐을 알기에. 함께 하면 결국 더 많은 것을 성취하고 골고루 이익을 볼 수 있다는 것을 알기에.