Monthly Archives: October 2006

Still Got the Blues (1997)

      mix1009-still_got_the_blues.mp3

1997년 10월 대학원 논문을 대충 마무리하고, 컴퓨터업그레이드후에 컴퓨터에서 처음 녹음한 곡입니다. 코드를 게리무어의 곡에서 따와서 곡명은 그대로이지만 들어보면 아시겠지만 크게 관계없다고 생각하시면 됩니다^^ 첨부터 끝까지 한번에 녹음한 거고, 처음 녹음한 곡 치고는 괜찮게 녹음된 듯 합니다. 기타 이외의 부분은 모두 미디로 되어있습니다.

사용악기: 삼익기타, 보스GT-5, ST97Ruby

UTF-8, putty, VIM, screen

원래 EUC-KR로 터미널에서 작업했었는데, 태터툴즈를 깔고 나서 UTF-8로 일부 변경하고 있습니다. 사용하는 환경은 윈도우즈에서 putty를 이용하여 FreeBSD 서버에 SSH로 접속해서 screen을 띄우고 vim을 이용하여 편집합니다.

putty설정: “창-변환-수신한 데이타를 이 문자셋으로 가정”에서 UTF-8로 바꾼후 설정 저장.

vim설정: .vimrc에 다음 추가합니다. euc-kr 파일도 편집이 가능하며, 새로운 파일을 저장할때는 UTF-8로 저장됩니다. 기존 euc-kr 문서는 그대로 저장됩니다.

set encoding=utf-8
set fileencodings=utf-8,euc-kr

screen: -U 옵션 사용.  처음 세션 만들때 뿐만이 아니라, 세션을 resume할때도 -U 옵션을 주어야합니다! 아직 .screenrc에 어떻게 넣어야 적용되는지 모르겠습니다.

% screen -US mysession
[Ctrl-A][Ctrl-D] (detach screen)
% screen -Ur mysession

.cshrc: .cshrc에 LANG을 아래와 같이 정해주면 screen에서 -U 옵션을 주지 않아도 되더군요.

setenv LANG ko_KR.UTF-8

bash 사용자는

export LANG=ko_KR.UTF-8

플래시 플레이어에서 한글 mp3 태그 문제

한글문제는 mp3에 포함된 ID3 태그를 UTF-8로 바꾸니 해결이 됐습니다. 하지만, mp3 파일 다운로드할 경우 winamp 5.21에서는 한글이 제대로 표시안되는 문제가 있네요. 그리고 폰트가 좀 작네요… ID3 태그 편집은 유닉스에 있는 mp3info 라는 툴을 이용해서 했습니다. (FreeBSD: /usr/ports/audio/mp3info)

[LEMBEDC|http://file.mix1009.net/AOD/test.mp3|340|300|N]

해결방법 찾다가 플래시에서 첫프레임에

System.useCodepage = true;

을 넣어주면 OS 디폴트 코드페이지를 이용한다고 하는데, 테스트해본 결과, 태그는 원래와 같은 형태로 깨져서 나왔습니다. 플래시 6이상에서는 UTF-8이 기본이고 위에처럼 지정해주면 OS의 코드페이지를 따라간다고 한다. [참고 URL]

99년에 플래시를 약간 배워서 데모할때 사용했었는데 너무 많이 변해서 뭐가뭔지 모르겠네요. –; actionscript 소스를 좀 보니 많이 좋아지긴 했네요.

블로그 본문에 음악 넣기

위쪽 프레임에 있는 배경음악플레이어는 아래 설명한 방법으로 설치하였으며,
블로그 글에 음악을 끼워넣는것은 테터툴즈 플러그인을 설치했습니다.

[tt1.0.x]EmbedTagAutoInsert V1.2.2(7/6일 Update)

플러그인이 무척 마음에 드네요. ^^

[LEMBEDC|http://file.mix1009.net/AOD/mix1009-one_step_ahead.mp3|340|300|N]

근데 한가지 문제점이 있긴합니다. 사용한 플래시플레이어가 한글 ID3 태그를 인식 못합니다. 아마도 한글 폰트 문제가 아닌가 생각이 드네요. 소스가 있으니 한번 찔러나 봐야겠습니다. 사용한 플래시 플레이어는 아래에 자세한 정보와 소스가 있습니다.

http://www.1pixelout.net/code/audio-player-wordpress-plugin

블로그 배경음악 달기

페이지 위쪽에 음악을 들을수 있도록 플래시 기반 플레이어를 달았습니다.

예전에 만들었던 음악들을 다시 홈페이지에 어떻게 달까 생각하다가 좀 더 쉽게 들을수 있도록 하기 위해서 플래시 기반 음악 플레이어를 달기로 마음 먹고 구글에서 찾아 본 결과, 여러가지 기능을 제공하는

http://jeroenwijering.com/?item=Flash_MP3_Player

플레이어를 사용하기로 결정했습니다.

하지만 페이지를 왔다갔다할때마다 음악이 다시 시작되거나 끊기는건 아닌것 같아서, 어쩔수 없이 frame으로 페이지를 나눴습니다.  위에 20 pixel로 플레이어 frame을 만들었고 다른 링크들도 여기에 걸 생각입니다. 동작은 잘 했지만, 메인 페이지로 들어올때만 플레이어가 표시되고, 외부 링크를 눌렀을때도 플레이어가 남는등 .. 안좋은 점들이 있어서 찾다가 테터툴즈 플러그인 페이지에서 좋은 정보를 찾았습니다.

[Tatter1.0.?]루트에 설치된 태터에 배경음악 달기

이 방법대로 했더니 잘 동작은 하는데 몇가지 문제도 발견되었습니다. IE에서는 잘 동작하지만 Opera에서는 메인 페이지가 표시되지 않고, Firefox에서는 첫 페이지 접속할때 계속 요청이 반복되는 현상이 발견되었습니다 OTL. 물론 페이지 표시도 안됐습니다. 정확히 원인 파악은 안됐지만 lighttpd proxy -> apache 로 설정되서 이런문제가 발생하는지도 모르겠네요.

아래는 IE에서 접속했을 경우 아파치 로그:

127.0.0.1 – – [14/Oct/2006:13:40:37 +0900] “GET / HTTP/1.0” 200 470 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.1.4322)”
127.0.0.1 – – [14/Oct/2006:13:40:37 +0900] “GET /mover.php?page= HTTP/1.0” 200 37 “http://mix1009.net/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.1.4322)”
127.0.0.1 – – [14/Oct/2006:13:40:38 +0900] “GET / HTTP/1.0” 200 79563 “http://mix1009.net/” “Mozilla/4.0 (compatible; MS

아래는 Firefox에서 접속했을 경우 아파치 로그:

127.0.0.1 – – [14/Oct/2006:13:42:52 +0900] “GET / HTTP/1.0” 200 470 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7”
127.0.0.1 – – [14/Oct/2006:13:42:52 +0900] “GET /mover.php?page= HTTP/1.0” 200 37 “http://mix1009.net/” “Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7”
127.0.0.1 – – [14/Oct/2006:13:42:52 +0900] “GET /mover.php?page= HTTP/1.0” 200 37 “http://mix1009.net/mover.php?page=” “Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7”
127.0.0.1 – – [14/Oct/2006:13:42:52 +0900] “GET /mover.php?page= HTTP/1.0” 200 37 “http://mix1009.net/mover.php?page=” “Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7”
127.0.0.1 – – [14/Oct/2006:13:42:52 +0900] “GET /mover.php?page= HTTP/1.0” 200 37 “http://mix1009.net/mover.php?page=” “Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7”

이렇게 계속 반복되서 DoS 공격이 되어버립니다. @@ 원인이 뭔지 빨리 파악해서 고쳐야하는데…

어디서 봤는지 잘 모르겠지만, 자바스크립트로 동적으로 a link를 찾아서 특정 확장자에 대해서 앞에 이미지를 달고 하는 걸 봤는데, 이걸 응용하면, link 주소에 따라서 target을 달리주는 방법으로 외부링크와 내부링크를 구분해서 동작하도록 하는것도 한가지 방법이 될듯하네요.

아직 htaccess와 mover.php 사용한 코드가 명확히 이해가 안됐는데 좀더 들여다봐야겠네요.

옛 홈페이지 복구했습니다.

예전에 만들었다가 버려졌던 홈페이지를 복구했습니다.

생각보다 나름 괜찮네요 *^^* 그전에 올렸던 글중 괜찮을걸 찾아서 현재 블로그로 옮기는 작업을 해야겠습니다. 근데 Wiki 링크나 음악 파일등은 복구가 안되었습니다. 링크가 mix1009.sarang.net으로 되어있었는데 도메인 업데이트 할 방법이 없는거 같네요. 서버 이전으로 아이피가 바뀌었거든요. 혹시 sarang.net 도메인 업데이트 방법 아시면 알려주시길…

옛날 홈페이지는 http://mix1009.net:18080/ 입니다. 옛날 Zope/python 버전을 돌리기 때문 문제가 좀 있긴 하네요..

올린 글들 날짜를 보니 너무 오래 잠수했었네요.

컴퓨터와의 인연

제가 컴퓨터와 가까와진 얘기를 하려합니다.

얼마전에 구글 비디오에서 컴퓨터 언어에 대한 여러가지 비디오를 찾다가 오래된 Smalltalk 비디오를 찾았습니다. 정확한 연도는 기억나지 않지만 아마 83년이나 84년 정도가 아닐까 생각되네요. “Bits & Bytes” 라는 TV 프로그램에 나왔던 내용이였습니다.

어렸을때 아버지 일로 미국에서 몇년간 생활했었습니다. 어떻게 “Bits & Bytes”를 보게 되었는지는 정확하게 모르겠지만 당시 아버지께서도 컴퓨터에 관심이 많으셨던거 같습니다. 당시 녹화도 해서 봤었고, 아직까지 인상적으로 남는건 로고 언어, TI 컴퓨터의 음성합성, 그리고 위 링크에서 볼수있는 스몰토크 등이네요. 그리고 신기술인 8인치짜리 CD도 신기한 내용중 하나였습니다. 컴퓨터 전문가인 여자분과 컴퓨터에 대해서 전혀 모르던 빌리 아저씨가 등장하는데, 여러가지 새로운 기술이나 주제에 대해서 설명하고 간단한 걸 빌리 아저씨가 배워보는 내용으로, 컴퓨터에 대해서 아무것도 몰랐던 제게 아주 큰 흥미를 줬었습니다.

미국에 별 준비없이 가서 영어도 안되고, 공부에 흥미도 없었습니다. 하지만, 도서실 옆쪽에 있는 컴퓨터들에는 관심이 갖죠. PET 컴퓨터로 Commodore에서 나온 모니터,본체,키보드가 일체형으로 된 컴퓨터였고, 베이직언어가 롬에 포함되어있었으며, 저장장치로 카세트테이프를 사용했습니다. 카세트테이프는 일반음악 카세트 테이프를 사용했었으며, 베이직 프로그램을 저장하고 불러들일수 있었습니다. 프로그램 하나 로드 하는데 꽤나 걸렸던걸로 기억합니다. 당시 형이 저보다도 훨씬 관심이 많았던거 같고, 학교 끝나고 도서실에 남아서 베이직으로 “scramble”이라는 프로그램을 형이 짰었습니다. scramble은 영어 단어의 문자들을 섞어서 제시하면 원래 단어를 맞추는 게임인데, 그 프로그램은 섞인 단어도 프로그램에 포함되어서, 저는 단어를 맞추기 힘들었지만, 프로그램을 짠 형은 아주 쉽게 맞췄었습니다 ^^.

얼마후 집에 역사적인(?) Commodore 64를 Radio Shack에서 사왔고, 주로 오락기로 활용됐지만, 호기심에 베이직과 여러가지 잔기술(peek,poke)을 배웠습니다. Z80 기반인 C-64는 sprite가 하드웨어적으로 지원되서 게임같은거 만들기 편했고, 3가지 화음을 동시에 낼수있는 사운드가 지원됐었습니다. 그냥 베이직으로는 한계가 있어서 거금을 모아서 “Graphics Basic”이라는 툴을 사서 몇가지 게임을 제작했었습니다. Sprite를 이용해서 미로를 통과하는 게임과 갤러그처럼 비행기 조정해서 나쁜놈 맞추는 게임이었는데, 대단한건 아니지만 프로그래밍의 매력을 느낄수 있었던 기회였죠. 당시 베이직에 한계를 느껴 어셈블리를 배우려다가 포기했었습니다.

몇년후 한국에 돌아와서 C-64가 운명을 달리한 후에는 컴퓨터를 접할 기회가 없었고, 제가 고3때 형이 컴퓨터를 구입해 DOS를 처음 접했었습니다. 사실 DOS는 몰랐고 NC만 알았었죠 –;

대학에서는 컴퓨터에 대해서 배워보고 싶어서 “전자통신공학과”에 가게됐는데, 제가 생각했던 컴퓨터와는 좀 거리가 있었습니다. 다행히 과내에 있는 학회에서 소프트웨어에 관련된 것을 많이 습득할수 있었습니다. (상영이형, 병주형, 진석이형 고맙습니다:)
1~2학년 때는 주로 OS쪽에 대한 공부를 많이 했었고, 3학년때부터는 몇가지 프로그램을 만들어보면서 프로그래밍 언어에 관심을 갖게됐습니다. 아래는 대학교때 몇가지 개인 프로젝트로 학회전시회때 출품했던 프로그램입니다.

  • Mod4X: 리눅스에서 Tcl/Tk 이용해서 s3m이라는 음악 플레이어 UI frontend
  • 신경망을 이용한 기타 음높이 인식 (리눅스)

지금 보니, 주요 관심사인 음악과 컴퓨터가 접목을 했었네요.

뭐 이렇게 시작하여, 전공하고는 약간 틀린 프로그래밍이 직업이 되었답니다. 전공에서 배운 지식을 그대로는 활용하지는 못해도, 전산 전공한 사람들에 비해 전체 시스템을 보는 관점은 틀려서 도움이 될때도 많은거 같습니다.

lighttpd 1.4.12 bug

1.4.12로 업그레이드한 후 서버가 가끔씩 죽었었는데 버그 찾아보니 해결되었네요. 1.4.11로 다운그레이드했었는데 소스 패치해서 다시 올려야겠네요. 1.4.11은 POST할때 가끔 먹통되는 버그가 있었는데, 해결은 아래 링크를 참조:

http://trac.lighttpd.net/trac/changeset/1352

FreeBSD 4.10에서 컴파일 안되는 버그도 있는데, 아래 URL을 참조:

http://trac.lighttpd.net/trac/ticket/875
http://trac.lighttpd.net/trac/changeset/1383

XP에서 (좀더) 안전하게 인터넷 서핑하기

얼마전 발생한 VGXvgx.dll exploitXSS 데모를 보면 인터넷 서핑하기 무서워지네요. IE도 문제지만 FireFox도 보안버그가 많이 발견되고 있습니다. FireFox가 안전하다고 하고, 여러가지 추가 기능들을 모듈(addon)을 통하여 설치할수 있지만… 아직 한국 사이트에서는 제약이 많습니다. IE 외의 브라우저에서는 정상적으로 보이지 않는 사이트들이 아직 많습니다. FireFox에 IE Tab을 설치하여 정상적으로 보이지 않는 페이지를 볼수는 있지만, IE로 볼때 마우스 제스처등이 안되는등 불편한 점이 많습니다. 또한 발표되는 FireFox 버그들을 보면 소스가 공개되서 그런건지 모르지만, 보안 버그들이 자주 발견됩니다.

buffer overflow에 대한 해결책으로 최근 나오는 프로세서들에서 지원하는 데이타 실행 방지(Data Execution Prevention) 기능을 사용하는 방법이 있습니다. 자세한 것은 모르겠지만, 스택 영역을 실행하려고 할때 CPU에서 이에 대한 예외(exception)을 발생시켜주는 것입니다. 많은 버퍼 오버플로우 공격이 이 기능을 통해서 막아지며 이번 dll 공격도 이 기능이 활성화 되어 있다면 영향을 받지 않았다고 합니다. DEP 기능은 XP SP2와 최신 CPU에서만 동작하며, 디폴트는 시스템과 서비스 내에서만 활성화 되어 있습니다. 모든 프로그램에서 실행되도록 변경하기 위해서는 “시스템 등록 정보-고급 탭-성능 설정-데이타 실행 방지(DEP) 탭” 에서 “데이타 실행 방지(DEP)를 …. 모든 프로그램 및 서비스에서 사용”을 선택하면됩니다. 프로그램에 따라서 예외를 등록할수도 있습니다. 옛날에 최적화가 과하게(?) 된 프로그램은 예외를 등록해야 동작되는 프로그램이 있다고 하는군요.

VMware, Parallels, Virtual PC등의 Virtualization 기술을 이용하여, Sandbox 안에서 좀더 안전하게 서핑할수 있는 방법도 있지만, 세팅하기도 힘들고 무겁습니다. 비록 쉐어웨어지만 Sandboxie라는 프로그램을 통하여 IE나 필요한 임의의 프로그램을 Sandbox 내에서 실행할수 있습니다. 라이센스는 30일간 사용 가능하며 등록비도 그리 비싸지는 않습니다. 그리고 아직 30일이 지나지 않았지만 별다른 제약은 없는거 같습니다. Sandbox에서 실행될때는 원래 하드디스크에 쓸수 없기때문에, 악의적인 코드가 실행되더라도 Sandbox 내의 드라이브만 영향을 줄수있습니다.

위에 설명한 방법으로 어느정도 공격은 막을수 있습니다. “IE 대신 XX 브라우저를 쓰면 안전하다”라는건 그냥 선전문구 정도만 될수 있고, 실질적으로 안전한 서핑을 하기 위해서는 좀더 근본적인 접근 방법이 필요할것 같습니다. 위에서 언급한 XSS 공격 데모는 정말 충격적이었습니다. 데모에서 보여진 공격들은 위에서 얘기한 공격방지 방법으로는 모두 해결되지 않습니다.

웹 클라이언트쪽의 보안 분야가 현재까지보다 앞으로 훨씬 더 많은 이슈가 발생할 것이고, 많은 공격이 시도될것이라 생각합니다. 앞으로 어떤 해결책이 나올지 지켜봐야겠네요. 지금으로서는 보안 전문가들 보다 크래커들이 한발 앞서있는 느낌입니다.

Varnish Cache Project & 웹서버 최적화

웹 프로그래밍을 전문적으로 하고 있지는 않으나, 서비스에 사용자가 많이 늘면서 여러가지 기술들을 찾고 있는데, 아직 본격적으로 적용은 못했으나 관심을 갖아볼 만한 프로젝트입니다. Varnish는 웹캐시로 웹속도를 줄이기위한 방법중 하나로 Reverse Proxy 역할을 위주로 설계됐습니다. 많이 쓰이는 Squid라는 프록시는 클라이언트 단에서 서버에서 오는 정보를 캐싱하여 클라이언트 단에서의 접속 속도를 향상시키는 역할이 주인 (Forward) Proxy로 주로 쓰입니다. 반면 Reverse Proxy는 서버단에 가까운곳에 위치하여 서버에서 나오는 데이타를 캐싱하여 서버의 부하를 줄이는 역할을 하며, 주로 동적으로 생성되는 페이지가 많을 경우 효과를 볼수 있습니다.

Varnish는 효율성을 위해서 C로 짜여져 있으며, VCL이라는 언어로 설정이 가능합니다. VCL은 간단한 언어로 오브젝트 파일로 컴파일되어 데몬에서 호출되는 등 빠르게 동작할수 있도록 최적화에 신경을 많이 썼습니다. 주 개발자는 FreeBSD 커널 여러부분에서 작업해서 OS에 대한 이해도가 높고, 기존에 있던 캐싱 시스템들이 옛날 하드웨어 맞게 최적화되어 개발되어 있기 때문에 오히려 요즘 처럼 여러단계로 메모리가 캐싱되는 하드웨어 상황에서는 적합하지 않다고 얘기합니다.

홈페이지는 http://varnish-cache.org/ 이며, FreeBSD에서는 /usr/ports/www/varnish 에서 설치할수 있습니다.

회사 서비스 중 웹서버에 많은 부하가 집중되어 있었는데 많은 부분 해결이 되었습니다. 해결을 위해 동원된 방법은…

  • SQL 쿼리 최적화
  • PHP에서 필요한 부분만 include (main include 파일이 커져서)
  • 랜더링 오래 걸리는 페이지 memcache에 캐싱
  • 잘 변하지 않는 페이지 html로 저장
  • 웹서버 Apache에서 lighttpd로 변경
  • xcache 적용 (코드 캐시만 사용)

동시 연결된 클라이언트가 급속히 늘다보니 아파치 1.3에서는 mod_php는 메모리가 너무 많이 차지하여 한계가 생겼었습니다. 당시 php 처리도 느렸었지만, lighttpd에 fastcgi로 바꾸고 나서는 메모리 사용량이 현저히 줄었습니다. xcache는 php 컴파일된 코드를 메모리에 캐싱하는 모듈로 적용후 php의 부하를 많이 줄일수 있었습니다. xcache에서 memcache와 동일한 기능도 제공합니다. 그외에 pen이나 plb등의 S/W load balancer 도입도 생각하고 있으며, lighttpd의 fastcgi load balancing도 고려하고 있습니다.