Apache 설정 파일(httpd.conf)이나 웹 도큐먼트 루트 디렉토리의 .htaccess 파일에 다음과 같이 추가해주면 된다.

# you probably want www.example.com to forward to example.com -- shorter URLs are sexier. 
#   no-www.org/faq.php?q=class_b 
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

불필요한 www를 때버리고 짧고 명료한 도메인 이름(Class B)으로 살며시 인도해준다. 이렇게 하면, SEO 측면에서도 중복된 검색 결과를 방지하는 효과를 얻을 수 있다.

과거 난해하고 너무나도 다양한 Ruby on Rails 어플리케이션 배포 환경 때문에 골치를 아파했던 개발자들에게 반가운 소식이 들려왔다. 일명 Apache의 mod_rails로 불리우는 Passenger가 공식 발표된 것.

Passenger의 설치는 너무나 간단해서, 아래처럼 Passenger gem 설치 후 설치 스크립트를 돌려주면 작업이 완료된다.

$ sudo gem install passenger
$ passenger-install-apache2-module

스크립트를 돌려서 컴파일링을 마치면 Apache 설정 파일에 추가해야 할 몇 가지 설정 사항들을 보여주는데, apache module 추가 관련 설정과 virtual host 용 설정 사항을 참고해서 자신의 사용 환경에 맞게 수정해서 httpd.conf 파일에 복사해 넣는다. 이렇게 해서, Apache를 재시동하면 바로 Rails Application을 손쉽게 Apache 위에 얹어놓고 돌려볼 수 있게 된다. 이렇게 설치는 너무나 간단하지만, 자세한 설치 과정을 담은 screencast도 제공하고 있다.

반가운 것은, 성능면에서 Mongrel 보다도 뛰어나서 거의 Thin에서 돌리는 것과 비슷한 성능을 보여준다는 것. 그리고, 아직 공식 배포는 이루어지지 않고 있지만, Ruby Enterprise Edition과 함께 돌리면 덤으로 33%의 메모리 절약을 기대할 수도 있다니, 이제 배포 환경 때문에 과거 골치를 썩혀왔던 걱정을 많이 덜게 되면서, 앞으로 Rails 어플리케이션의 채택율에도 더 가속도가 붙을 듯.

참고로, Rails 어플리케이션을 재시동하는 방법은 두 가지가 있는데, 하나는 물론 Apache를 재시동해도 되지만, 더 간편한 방법으로 Rails 어플리케이션이 위치하는 root 디렉토리 밑에 tem/restart.txt 파일을 추가하거나 수정해 주면 된단다. 이 작업은 터미널에서 다음과 같이 해주면 손쉬워진다:

$ touch /my_web_app/tmp/restart.txt

아직 다른 Ruby 웹 프레임워크에 대한 지원 계획은 미정이라니, 당장은 Rails만이 가지는 장점으로 남아 있을 듯.

서버에 물려있던 과거 케이블 선을 빛의 속도(?)라는 광랜으로 바꾸고 나서, 드디어 주소 끝에 붙어있던 인식 꼬리표를 뗄 수 있게 되었습니다. 새 주소: appletree.or.kr
다행히, 포트를 막아놓는 장난질은 안 했군요.

<VirtualHost *:8080>
  ...
  Redirect permanent / http://appletree.or.kr/
</VirtualHost>

전처럼 꼬리표가 달린 주소로 접속을 해도 서버가 응답할 수 있도록 Apache의 Virtual Host 설정에 redirect permanent 설정을 해주었지만, 서버 로그에는 여전히 항상 두 번씩 301과 200 응답 신호를 찍어내고 있기 때문에 알려드립니다.

광랜, 역시 빠르군요. 😀
이놈을 앞으로 Mac mini에다 물려놓으면 금상첨화겠구만.

YSlow는 Yahoo! 내부 개발 도구로 사용되어 오던 Firebug의 확장 플러그인으로, 런던에서 열렸던 @midia 2007 Conference의 “High Performance Web Sites”라는 주제의 강연에서 그 존재가 처음 알려졌었는데, 드디어 일반에게 공개되었다.

웹 페이지 최적화 등급은 모두 13가지의 웹 페이지 최적화 규칙을 기반으로 매겨지는데, 이 규칙들은 일반 웹 애플리케이션의 최적화를 위한 알짜배기 정보로도 참고될 수 있다.

YSlow를 설치하면 크게 네 가지의 View를 제공하는데, 아래는 이곳의 최적화 등급을 나타낸 Performance View 모습이다.

YSlow의 Performance View 창 그림

그림에는 각 최적화 규칙에 대한 현재 웹 페이지의 평가 등급을 한눈에 알 수 있게 보여준다.
여기서 주의할 것은, 2번 규칙인 Use a CDN(Content Delivery Network)에 관해서 제대로 된 등급을 매기려면, CDN으로 등록되어 있는 hostname을 자신이 사용하는 것으로 바꾸어 주어야 하는데 방법은 YSlow FAQ에 설명되어 있다.
등급 결과를 보면 B라는 흐뭇한(?) 점수를 받았지만, 두 군데에서 낙제점을 받았는데 Configure ETags 항목에서 낙제점이 찍힌 것은 이곳이 단일 서버에서 돌아가는 곳으로 cluster servers와는 상관이 없다는 것을 생각해 보면 무시해도 될 듯하다. 결국 비교적 많은 HTTP 요청 횟수가 문제지만 이것도 두 번째 방문부터 차기 cache로 흡수될 것을 생각하면 당장의 불안 요인은 아닌 듯. 이것은 “Stats” View에서도 확인할 수가 있는데, Full Cache일 때는 서버로 단 두 개의 HTTP 요청만 소모된다.

덤으로, Tools 항목에는 JavaScript 코드의 오류 방지를 위한 정리 도구인 JSLint가 내장되어 있고, 웹 페이지에 포함된 모든 js, css 파일을 뽑아서 보여주는 도구 그리고 마지막으로 Performance View의 결과 내용을 나중 검토를 위해 종이로 인쇄할 수 있는 형식으로 정리해서 보여주는 “Printable View” 도구가 자리 잡고 있다.

참고로 아래는 웹 페이지 최적화와 관련해서 이곳에서 사용하는 Gzip 압축과 Expires HTTP headers 부분의 Apache 환경 설정 사항이다.

# 
# Compress some document types using mod_deflate module 
# 
<Location />
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xhtml+xml
  AddOutputFilterByType DEFLATE text/css application/javascript text/javascript
  AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp application/x-httpd-eruby
  AddOutputFilterByType DEFLATE application/xml application/rss+xml application/atom+xml image/svg+xml
 
  # Netscape 4.x has some problems... 
  BrowserMatch ^Mozilla/4 gzip-only-text/html
 
  # Netscape 4.06-4.08 have some more problems 
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
 
  # MSIE masquerades as Netscape, but it is fine 
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 
  # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48 
  # the above regex won't work. You can use the following 
  # workaround to get the desired effect: 
  #BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 
 
  # Don't compress images, compressed files, movies, audio files 
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary
 
  # Make sure proxies don't deliver the wrong content 
  Header append Vary User-Agent env=!dont-vary
 
  # n = 1..9 with 9 being the highest compression level. Standard is 6. 
  # DeflateCompressionLevel n 
</Location>
 
# 
# Expires HTTP headers 
# 
<IfModule expires_module>
  ExpiresActive on
  ExpiresDefault "access plus 2 weeks"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 month"
  <FilesMatch "\.(php|php4)$">
      ExpiresByType text/html "now"
  </FilesMatch>
</IfModule>

당분간 등급 놀이에 빠져있겠군. 😉

Mac에서 손쉽게 설치 가능한 바이너리 형태로 제공되는 Apache 2와 PHP 5로는 각각 Server Logistics에서 제공하는 Complete Apache 2와 Marc Liyanage씨의 PHP 5 Package가 많이 쓰이고 있습니다.
그런데, 이 PHP 5 Package는 Mac OS X Server에 설치되어 있는 Apache 2와 함께 사용되도록 컴파일 되었기 때문에 그냥은 Complete Apache 2가 인식을 못합니다.

하지만, 간단하게 이 문제를 해결할 수 있는 방법이 있답니다. Complete Apache 2를 위한 PHP 5 설치(이)란 제목의 글 마저 읽기 →