아파치 포터블 런타임 유틸리티 1.4.1이 릴리즈 되었습니다.


작성자 : 김민석 ( lemonfish at g m a i l dot com )
Apache Portable Runtime (이하 APR) 은 지금 까지 개발자들이 소프트웨어가 운영되는 플랫폼을 고려하여 특정 플랫폼에서만 제공하는 기능이나 오류를 처리하기위해 별도의 코드를 작성하던 것을 한데 모아 일관된 인터페이스를 통해 그러한 처리가 가능하도록 도와주기 위해 만들어진 프로젝트입니다. 잘 알고 계시는 Apache HTTP Server (흔히들 아파치나 아파치 서버라고 부르지요)나 Tomcat 도 ARP 을 사용하고 있거나 사용할 수 있도록 되어 있습니다.

APR 프로젝트에 속해있는 Apache Portable Runtime Utility (이하 ARP-util) 새 버전이 릴리즈 되었습니다.

이번 버전에서는 apr_cypto API 가 추가되었습니다.  apr_cypto API 는 OpenSSL 이나 NSS 와 같은 암호화와 관련된 라이브러리 사용에 대한 인터페이스로 구성되어 있습니다.

참고로, APR-util 에는 아래와 같은 모듈들이 들어 있습니다.

  • MD5 루틴
  • UUID 를 생성하거나 파싱하고, 포매팅하는 루틴
  • 국제화 지원을 위한 문자셋 변환처리 라이브러리 (iconv 기반)
  • Base64 인코딩
  • 여러개의 버킷 처리를 위한 함수
  • 날짜 루틴
  • DBM 루틴
  • 후크 함수
  • LDAP
  • MD4 라이브러리
  • 옵션처리용 함수
  • 멀티 스레드 환경에서 안전한 FIFO 큐
  • 자원목록 관리 루틴
  • 재할당 가능한 메모리 관리 루틴
  • 문자열 패턴 매칭 루틴 (Boyer-Moore-Horspool 알고리즘 사용)
  • URI 처리 루틴
  • XML 처리 루틴 (expat 기반)
  • APR-util 1.3 호환용 함수들



by killy | 2011/12/18 14:48 | Apache | 트랙백 | 덧글(0)

아파치 트래픽 서버 3.0.2 가 릴리즈 되었습니다.


작성자 : 김민석 ( lemonfish at g m a i l dot com )
Apache Software Foundation 에서 참 좋은 일을 많이 합니다. 이런식으로 가진 지식을 지역(?)사회에 환원할 줄 아는 존경스러운 개발자분들이 이렇게나 많다니... ㅠ_ㅠ 저도 언젠가는!!!

이번 릴리즈를 알리는 공지에도 역시나 다른 릴리즈와 마찬가지로 뻔한 말들이 쓰여 있습니다. 역시 이건 템플릿이 아닌가 싶네요. 그런데 외국사람들은 참 수식을 좋아하는 것 같습니다. bug fix release 라고 적고 말면 아쉬워서 인지. ironing out some minor crashers 라는 표현을 쓰네요. 
 
이하 원문의 일부.
This is primarily a bug fix release, ironing out some minorcrashers. More importantly however it includes two new SSLfeatures. We encourage Traffic Server users to upgrade - andeverybody else to try it out!
참 써보고 싶게 만들지 않습니까?

어쨌든. 이번 릴리즈의 새로운 점이나 수정된 사항을 얘기하기에 앞서. 잠시 Apache Traffic Server 에 대해서 간단히 알아보고 넘어가겠습니다.

혹시 squid(오징어) 라고 들어 보셨나요? squid 는 아주 유명한 프락시 서버입니다. 몇 년 전 부터 많이 쓰이는 웹 가속기는 어떤가요? 웹가속기는 하드웨어적으로 구현된 프락시 서버라고 보시면 되겠네요. 혹시 모르니 곁다리로 프락시 서버에 대해서 설명을 해보지요. 프락시 서버는 실제 서버와 사용자 사이에서 동작합니다. 예를 들면 사용자가 어떤 웹페이지를 보고자 했을 때 그것을 그 웹페이지가 있는 실제 서버가 아닌 프락시 서버로 요청을 하게 됩니다. 그러면 프락시 서버는 그 웹페이지를 자기가 가지고 있으면 그걸 바로 사용자에게 보내주고, 없으면 실제 웹페이지를 가지고 있는 서버에 요청하여 가져온 다음 다시 사용자에게 보내 주는 것이죠. 사실 네트워크 인프라가 전세계 어느 나라보다 막강한 우리나라 사람들이야 그다지 필요성을 느끼지 못하겠지만. 망이 상상도 못할 정도로 저속인 국외에서는 저~~어기 있는 서버에서 여어~기 있는 사용자까지 한바이트씩 한바이트씩 왔다갔다하려면 한나절이었던 거죠. 그래서 실제 서버와 사용자 사이의 곳곳에 프락시 서버가 존재해서 열악한 네트워크 인프라를 극복했달까... 뭐 그렇습니다. 현대에 들어오면서 프락시 서버는 단순히 멀리 있는 컨텐츠를 근처에 미리 가져다 놓고 빨리 갔다가 쓰기 위한 용도뿐만이 아닌 로드밸런싱, 필터링, 로깅 등등의 다양한 용도로 사용되고 있지요. (해킹에도 사용됩니다 :P)

주저리주저리 서두가 길었습니다만 결론은 Apache Traffic Server 가 바로 그 프락시 서버라는 겁니다. squid 라는 유우우명한 프락시 서버가 있다더니 Apache Traffic Server 는 뭐 별거냐? 싶으실지도 모르겠네요. 

근데 요녀석이 좀 사연이 있는 녀석입니다. 
2009년 11월 2일. 야후에서 사용하던 놈이었던 Traffic Server 를 Apache Software Foundation 에 기증을 하게 됩니다. (내부적으로 세션관리나 인증, 설정관리, 로드밸런싱, 클라우드 컴퓨팅 스택간의 라우팅을 위해 사용되었다고 함) 오픈 소스 클라우드 컴퓨팅을 위한 투자로서 기증을 한거죠. 당시에 야후 클라우드 컴퓨팅 팀에서 소개한 바로는 

"졸라 졸라 빠르고, 졸라 졸라 성능 뛰어나고, 견고하고 확장성있는 API 에다가 프락시 + 알파로 요청 라우팅에 필터링에 로드 밸런싱에 블라블라블라... 1.86GHz 쿼드코어에서 일정한 트래픽 패턴일때 다른 애들은 초당 8천건의 요청을 처리하는데 우리는 초당 3만요청을 처리할 수 있고,.... 우리는 하루에 300억개의 컨텐츠, 400테라바이트의 데이터를 요놈으로 서비스 해왔고... 요거 만드는데 투입된 공수가 몇백년이고 squid 만들던 사람도 참여 했었고,...킹왕짱이야. 근데 사실 몇몇 부분에서는 squid 도 썼었어... 모든게 완별할 순 없잖아? 그러니까. 이렇게 다들 볼 수 있게 내놓을 테니 같이 ipv6 도 집어넣고,  64비트 지원도 넣고, 이것저것 넣어서 좀 잘 만들어보자. "

이만큼 각별한 소프트웨어를 오픈소스에 기증한 야후는 대인배~ 외쳐!!! ~야후! (관련기사는 여기에서)

전체 내용보다 서두가 길겠군요. 그럼 이제 요번 릴리즈를 살펴보지요. 

16개의 오류수정과 1개의 개선사항 1개의 새로운 기능이 이번 릴리즈에 포함되었습니다. 새로운 기능, 개선사항, 오류수정 순으로 보겠습니다.

새로운 기능. 두구궁.

  • SSL 설정과 관련한 기능입니다. ssl_multicert.config 는 Traffic Server 에 여러 아이피가 부여된 경우 요청이 들어온 서버 아이피에 따라서 인증서를 따로 주기위한 것인데. CA 체인도 별도로 지정할 수 있게 됐답니다. (원래는 CA 는 다 동일하게 쓰게 되어있었음)
다음으로 개선사항입니다.

  • 이것도 SSL 과 관련된 것이군요. SSL 이 사용될 때 클라이언트와 서버간에 협상이라는게 이뤄지는데요. 간단하게 말하면 클라이언트는 128비트 암호화밖에 못다루는데 서버에서 1024비트로 암호화된 내용을 날리면 전혀 대화가 안되겠지요. 때문에 인증정보를 날리기 전에 클라이언트가 어디까지 처리가능한지 확인하는 겁니다. 이전 버전의 Traffic 서버에서는 이 부분을 전혀 제어할 수 없었습니다. 따라서 클라이언트가 128비트 암호화만 지원하면 서버에서는 당연히 128비트로 암화화된 내용을 전달해 왔던 거지요. 근데 보안이 중요한 곳에서는 "무조건 128비트 보다 높은 암호화 수준으로 통신을 하고 그에 미달되는 놈은 차라리 튕겨내겠다" 라고 할 수 도 있을 겁니다. 그래서 이번 릴리즈에서 그러한 암호화 수준을 지정할 수 있는 기능이 추가되었습니다. 
이제 어떤 오류들이 수정되었는지 보겠습니다.

  • 아주 치명적인 버그가 수정되었습니다. 헤더를 처리할 때 자주쓰이는 문자열들을 맵에 저장해서 사용하고 있는데 해쉬값과 길이만 비교하고 있었네요. 그렇게 될 경우 실제 동일한 해쉬값과 길이를 가진 다른 문자열이 헤더에 섞여 들어올 경우 보안에 문제가 심하게는 서버가 뻗을 수 있다는 이유로 후다닥.. 수정.
  • 솔라리스 10 에서 SSL 커넥션에 행이 걸리는 문제가 수정 되었습니다. 소스를 보니 읽기,쓰기가 별도로 처리되어야 하는데 분기처리를 하나 잘못 해서 읽으려는놈을 쓰라고 하고 쓰려는 놈을 읽으라고 하고 있었네요. 커허. 어쨌든 수정되었으니 OK!
  • 디버그 빌드를 구동중이거나 스레드별 커넥션풀을 사용중일 때 활성화 되지 않아야할 assert 가 제거되었습니다.
  • 분석을 위해 사용되는 바이너리 로그 생성시 추가적인 개행이 들어가서 traffic_logstats 명령을 이용해 요약을 만들 수 없었답니다. 보니까. writeln 을 write 로 변경했군요. 
  • ssl.server.cert.path 설정과 ssl.server.private_key.path 설정이 경우에 따라서 제대로 먹질 않는다는 보고가 있었습니다. 각각을 처리하는 함수들이 따로 따로 만들어져 있다보니 동일한 방식으로 처리가 되지 않았나 봅니다. 소스상에서 모두다 동일한 함수를 사용하게 해서 처리했군요. 
  • proxy.config.http.forward.proxy_auth_to_parent 라는 길기도 긴 옵션이 동작하지 않는다는 버그입니다. 일단 수정은 된것 같은데. 이 옵션 사용은 그다지 권장하지 않는다는군요. 
  • 빌드 시 최적화 옵션이 먹지 않던게 수정되었습니다.
  • 데비안과 솔라리스에서 make check 수행시 fail 이 뜬다는데. 이게 원래 수정된 사항이었다네요. 그래서 백포트 되었습니다.
  • TSFetchURL 이 호출될 때 PluginVC 에서 처리될 이벤트가 없는데 이벤트를 타면서 죽어버리는 현상이 수정되었습니다.
  • HTTP 컴포넌트에서 메모리 누수가 보고되었는데 보니까 뭐랄까. 요새는 메모리가 기가단위인데... 몇십바이트 정도야... 새도 상관없지 않을까 하는 생각도 드네요. 어쨌든 수정이 되었습니다. (초기화 과정에서 파일명을 담는 변수에서 좀 샛나 보네요)
  • TSHttpIsInternalRequest() 함수에서 클라이언트가 중간에 연결을 끊어버리면 뻗는 버그가 있었네요. 수정되었습니다. 
  • Mac OSX 10.6.8 에서 보고된 traffic_logstat 명령 수행시 죽어버리는 버그가 고쳐졌습니다. 
  • traffic_logstats 명령이 잘못된 도움말을 표시하던게 수정되었습니다. -l 옵션이 로그파일 지정에도 쓰이고, 출력 라인 길이 지정용으로도 나오더랍니다. ( -f 는 로그파일 지정이고 -l 은 라인길이지정이 맞습니다. )
  • Free BSD 에서 컴파일시 malloc.h 말고  stdlib.h 를 써야된다고 피드백이 들어왔네요. malloc.h 를 쓰게되면 컴파일이 안된 답니다. 빌드설정이 수정되었네요.
  • SSL 이 firefox 에서는 안되는데 google chome 에서는 되는 버그가 있었다네요. 예전에 수정되었던 사항이라 백포트 되었습니다. 소스를 보니 앞에서도 한번 나왔던 듯 한데. 읽기 쓰기를 반대로 고쳤네요. 애네들 그걸 자주 헷갈리나 봅니다.
  • forward proxy 모드에서 계층적인 캐싱을 위해서 부모 서버를 지정했는데 부모 서버로 요청이 안가고 지가 다 처리하는 버그가 있었네요. 다른 버전에서 수정되었던 사항이라 백포트 되었습니다.

소프트웨어란 뚝딱하고 만들어서 완성되자마자 완벽해지는 것이 아닌. 오랜기간 쓰이고 고쳐지면서 점점 성장하는 그런 것이 아닌가 싶습니다. 마치 나무처럼 말이죠. 어이구 내 새끼! ㅋ


by killy | 2011/12/10 03:54 | Apache | 트랙백 | 덧글(2)

아파치 커먼즈 대몬 1.0.8 이 릴리즈 되었습니다.


작성자 : 김민석 ( lemonfish at g m a i l dot com )

Apache Commons 에는 자바 개발시 쉽게 사용이 가능한 아주 다양한 라이브러리들이 하위 프로젝트로 있습니다. 그중 Daemon 은 서버 프로세스에서 자바 응용프로그램을 돌릴수 있도록 도와주는 유틸과 클래스들로 구성 되어 있습니다. 유닉스의 'daemon' 프로세스 나 윈도즈의 서비스와 같은 기능을 구현하는데 유용합니다.

Commons Daemon 은 JDK 1.3 이상의 실행환경을 필요로 합니다. 


요번 릴리즈의 새로운 기능을 살펴 보죠.
  • jsvc 에 -umask 옵션이 추가 되었습니다. 이제는 다른 umask 를 설정하기 위해 재컴파일이 필요없게 되었네요.
새로운 기능이 좀 적나요? 그래도 버그는 좀 많이 수정 되었네요. 개선된 사항과 버그를 살펴 보죠.
  • 윈도즈에서 서비스 중지할 때 문제가 있었나 봅니다. net stop servicename 명령을 실행하면 에러코드 109 가 나타나고, 제어판에서 중지 시키려면 CPU 사용률이 올라가다가 응답없음... 이랬다네요. 톰캣 7.0.6 에 포함되어 쓰이다가 보고된 버그랍니다. 1.0.5 버전 때 부터 있던 버그인데 이번에 수정되었네요. 수정된 사항을 보니 서비스 중지 명렬을 통해 이미 죽어버린 녀석의 응답을 기다린게 문제 였군요. prunsrv.c 에서 중지 명령을 날리고 응답을 기다리던 코드가 제거 되었습니다. 
  • 역시나 윈도즈에서의 버그입니다. --ServiceUser --ServicePassword 와 같은 옵션 없이 Win32 서비스로 등록된 경우 로컬시스템 계정으로 서비스가 실행되는데, 로컬사용자 계정으로 변경을 하려니 오류가 나더랍니다. 수정된 사항을 보니 서비스 설정을 변경할 때 실행되는 루틴에 파라메터를 잘못 넘기고 있었네요. service.c 에서 서비스 설정 변경시 올바른 파라메터를 넘기도록 수정되었습니다.
  • 서비스 구동시 트레이아이콘을 사용할 경우 --type interactive 옵션을 사용해야 하는데 그 옵션을 주게되면 콘솔이 뜨게 되니까 보기가 싫더랍니다. 근데 버그 리포트가 있기도 전에 개발자 분이 수정을 하셨네요. 이유는 보기 싫어서가 아니라. 사용자가 CTRL+C 로 서비스를 종료할까봐 라서 랍니다. prunsrv.c 가 수정되었습니다.
  • 윈도즈용 톰캣 5.5.17 에 포함되어 사용되다가 보고된 버그입니다. 톰캣이 아스키가 아닌 문자를( 예를 들어 한글이라던가 )포함한 경로에 설치될 경우 시작이 안된답니다. prunsrv.c 에서 경로를 변환하는 부분에 WideToUTF8 이라는 함수를 사용하고 있었는데 WideToANSI 라는 함수를 사용하도록 수정했군요. 
  • --StopClass 옵션이 비어있을 경우 죽어버리는 버그가 있답니다. 비어있을 때는 java.lang.System 을 쓰도록 prunsrv.c 가 수정 되었습니다. 
  • 소스 빌드시에 설정이 모자란 감이 있었나 봅니다. jvm 감지 부분등이 개선 되었다고 합니다. .configure.in 파일이 개선되었습니다.
  • 리눅스가 아닌곳에서 빌드할 때 리눅스에서만 사용할 수 있는 옵션이 활성화 되니 제거해 달라는 요청이 있었네요. 전처리기를 이용해서 빠지게 처리했군요.
  • Itanium 프로세서를 쓰는 HP-UX 에서 컴파일할 때 OS 감지가 제대로 안되더랍니다. 수정됐네요. 
  • openSUSE 와 같은 리눅스 배포판에서는 JVM 의 경로가 update-alternatives 란 기능을 이용해서 왔다리 갔다리가 됩니다. 그 기능 때문에 JAVA_HOME 경로가 고정되어 있어도 실제 다른 버전의 JVM 을 사용할 수 있는 것이죠. 근데 그 고정된 경로가 /etc/alternatives/jre 인지라 그 경로를 JRE 경로를 감지루틴에 추가해 달라는 요청이 반영 되었네요.
  • Itanium 프로세서를 쓰는 HP-UX 에서는 두가지 형태의 JVM 이 존재하는데 컴파일할 때 각각의 JVM 에 맞는 컴파일이 가능하도록 해달하는 요청이 반영 되었습니다. 
  • HP-UX 에서는 PA-RISC 프로세서를 사용할 경우 라이브러리의 확장자가 .sl 로 끝난답니다. 원래는 다 .so 라고 가정을 했었는데 컴파일시 그러한 차이를 반영하도록 스크립트가 수정되었습니다. 
여기까지가 이번 릴리즈를 통해 변경된 사항이네요. 많은 사용자를 통해 다양한 환경에서 사용되며 Commons Daemon 프로젝트가 성장해 나가길 개발자의 한 사람으로서 빌어 봅니다. 다음 릴리즈에는 어떤 변화가 있을지 기대가 됩니다. 

by killy | 2011/12/07 00:25 | Apache | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶


rss

skin by FreeCssTemplates