Web taemy's Site
apache 를 웹서버로 사용한다면,  rewrite rule 을 사용하고 있거나, 사용해봤을 것이다.
블로그 툴로 많이 쓰는 테터툴즈도 rewrite rule 을 사용하고 있다.

요근래에는 Fancy URL 이라고 하여, URL 이 복잡하게 되는 것을 방지하기 위해 많이 쓰이는 편이다.

크게 rewrite rule 이 적용되는 것을 살펴보면,
1. 모듈로딩 ( rewrite 모듈을 apache 가 읽어들이도록 한다.)
2. apache 설정 ( virtual host )
3. .htaccess 설정
으로 볼 수 있다.

1. Rewrite 모듈로딩
배포판 마다 apache 설정 파일의 위치가 다르긴 하지만, 다음과 같은 항목을 포함한다.
(ubuntu / debian 계열은 /etc/apache2/mods-enabled 에 설정한다.)

모듈 설정 항목은
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
와 같은 항목이다.

2. apache conf 설정

보통 일반적인 설정이다.(Virtual Host 사용)
<VirtualHost *:80>
    ServerAdmin webmaster@yourdomain.co.kr
    DocumentRoot /user/yourdomain.co.kr/
    ServerName yourdomain.co.kr
    ServerAlias www.yourdomain.co.kr
    ErrorLog logs/yourdomain.co.kr-error_log
    CustomLog logs/yourdomain.co.kr-access_log combined
</VirtualHost>
이때 Rewrite rule 을 Virtual host 항목에 직접 써 넣을 수 있다.
그러나, 보통 다음에 이야기할 .htaccess 파일을 사용한다.(태터툴즈도 이 방법을 사용)

3. .htaccess 에 rule 설정

설정하려는 도메인의 DocumentRoot 에 .htaccess 파일을 만들고 rule 을 설정한다.
(위의 예에서는 /user/yourdomain.co.kr/.htaccess 가 되겠다)

흔히 사용하는 rule 하나를 예를 들면..
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /demo/([a-z0-9_-]+)$
RewriteRule demo/(.*) /demo/index.php?key=$1 [R,L]
yourdomain.co.kr/demo/keyname  형식으로 접속하면,
yourdomain.co.kr/demo/index.php?key=keyname  으로 rewrite 해주는 rule 이다.

보통  ProcessFile?key=aaa&key2=bbb  처럼  URL 이 복잡해지는 것을 줄이는 용도로 사용한다.


# 이때 .htaccess 파일을 설정했는데, Rule 이 작동하지 않는 경우

알아 두어야 할 것은 .htaccess 파일을 사용하려면,
AllowOverride  항목이 'None' 이상(?)이어야 한다.(이부분은 확인필요)

이것도 배포판 마다 다를 것이다.

ubuntu 인 경우  <Directory /> 가 AllowOverride none 으로 설정되어 있다.

따라서 .htaccess 를 사용하기 위해서는 위의 Virtual Host 설정탭 사이에 다음처럼 추가한다.
<Directory /user/yourdomain.co.kr/>
AllowOverride all
</Directory>
자세한 옵션은 다음을 참조한다 .

혹시 Rewrite Rule 을 설정할때, .htaccess 에 있는 설정이 적용되지 않는다면, 위 부분을 확인해 본다.
<VirVirtualHost> </VirtualHost>  사이에 .htaccess 에 설정된 Rule 을 직접 입력하면 되는데,
.htaccess 로 하는 경우 안된다면 위의 문제일 가능성이 많다.

위 AllowOverride 설정을 맨 상위디렉토리(/user 나 /)에 설정을 해도 되지만,
그런경우  /user/.htaccess  /user/otherdomain/.htaccess 등을 모두 찾으려 하기 때문에 속도저하가 있을 수 있다.
꼭 필요한 경우에 해당 위치에만 사용하는 것이 좋을 듯 하다.


# 참조
http://httpd.apache.org/docs/2.0/ko/howto/htaccess.html
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

이올린에 북마크하기(0) 이올린에 추천하기(0)
이전편 1회에 이어서..

처리순서를 간단히 정리하자면.(1회의 언급한 내용)
  1. 업그레이드 전 dump (euckr , utf8 확인)
  2. mysql 업그레이드 ... ( 3.x , 4.0.x -> 4.1.x or 5.x )
  3. set names euckr 명시 (euckr 환경인경우)
  4. table 의 Engine , Charset 를 조정.
  5. 덤프 데이터 restore
  6. 확인.

# 위 업그레이드 절차를 좀더 자세히 설명한다.
  1. 업그레이드 전 dump (euckr , utf8 확인)
    • 명령은 간단한다.(추가적인 옵션등은 검색)
      • mysqldump {DB_name} > DB_name.sql
      • mysqldump {DB_name} -u {user_name} -p{password} > DB_name.sql
      • mysqldump -F -n --add-drop-table {DB_name}> DB_name.sql

  2. mysql 업그레이드 ... ( 3.x , 4.0.x -> 4.1.x or 5.x )
    • 각 배포판, APM 배포판 별로 업그레이드 한다.
      • 업그레이드 방법은 별도로 찾아본다.
    • 위 단계에서 dump 파일이 있으니, 안심해도 된다.
    • 다시 롤백을 해야할 상황은 없길 바란다.

  3. set names euckr 명시 (euckr 환경인경우)
    • dump 파일을 euckr , utf8 에 맞게 iconv 같은 것으로 변환을 하는 경우도 있는데, 굳이 필요 없다.
    • 이전 환경이 euckr 이면 dump 파일 맨 위에 "set names euckr" , utf8 이면 "set names utf8" 이라고 한줄 추가해 준다.

  4. table 의 Engine , Charset 를 조정.
    • 4.0.x 를 덤프하면 create table 부분에  " ) Type=MyISAM " 이라고 되어 있을 것이다
    • 덤프파일에서 Engine , Charset 을 적절히 바꾼다.
      • " ) ENGINE=InnoDB DEFAULT CHARSET=euckr " 형태로 바꾸어 준다.
      • 각각 InnoDB/MyISAM , euckr/utf8 로 적절한 환경으로 바꾸어 준다.

  5. 덤프 데이터 restore
    • 위 수정된 덤프파일을 저장한다.
    • mysql {DB_name} < DB_name.sql 으로 복구한다.

  6. 확인(my.cnf 등의 옵션 조정)
    • 데이터가 이상없는지 확인.
    • euckr 환경인 경우
      • my.cnf 의 mysqld 항목에 init_connect = 'set names euckr' 를 추가한다.
    • utf8 환경이라도 init_connect = 'set names utf8' 이라고 넣어주는 것이 좋다.
      • php 에서 위 설정을 해주지 않으면 latin1 으로 기본 설정된다.
    • chartset 에 관한 부분은 추후 더 정리할 예정.


# 업그레이드시 주의사항
  1. 테이블 charset 변경시 : alter table {테이블명} convert to character set utf8 명령으로 하면.
    • multibyte 를 사용하는 db 의 경우 필드 값이 반으로 줄어 버림
    • 그래서 dump 로 처리하는 것이 좋음
    • 덤프파일의 create table 항목의 charset 을 변경하는 방식으로 처리.
  2. 4.0.x 에서 dump 시 euckr , utf8 인지 확인
    • euckr 인 경우 덤프파일의 맨위에 set names euckr , utf8 은 set names utf8 를 삽입
    • 이부분만 주의하면 무리없이 진행가능.
  3. php 에서는 기본이 latin1 으로 잡힘
    • my.cnf 에 default-character-set 을 설정확인.
    • init_connect ='set names euckr' 최종 값이 설정됨.
    • init_connect 가 php 의 설정에 영향을 미침.
  4. dump 파일의 ENGINE , CHARSET 을 변경가능 (InnoDB , MyISAM) , (euckr , utf8)

ps. 좀더 자세한 설명이지만, 배포판별 mysql 업그레이드 방법, 세부 mysql 옵션등의 설명은 생략하였다.
   더 자세한 설명은 메뉴얼을 참조한다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
많은 웹사이트들이 APM - Apache + PHP + Mysql 조합으로 운영되고 있다.

Apache 는 1.x 버전에서 2.x 로의 버전 업그레이드가 되었고,
PHP 는 4.x , 5.x 버전으로 업그레이드가 되고 있다. 이제 6 버전이 개발중에 있다.

mysql 의 버전은 3.x 버전을 거쳐, 4.0.x , 4.1.x , 5.x  버전으로 업그레이드가 되었다.
그런데, mysql 의 버전 업그레이드를 하면서 내부적인 변화때문에 데이터의 호환성, 변경 문제를 겪게 되었다.
크게 (3.x ,4.0.x)  와  (4.1.x ,5.x) 의 두 그룹 사이의 업그레이드에 주의하면 된다.

한글 환경을 사용하는 국내에서는 charset(euckr , utf8) 에 조금만 주의를 하면
어렵지 않게 업그레이드 할 수 있다.

약간은 철지난 이슈이긴 하지만, 몇가지 주의사항 및
쉽게 업그레이드 할 수 있는 방법을 정리하고자 한다.

먼저 자신의 환경을 파악한다. euckr 환경인지, utf8 환경인지.
업그레이드시 euckr 환경으로 할지, utf8 환경으로 할지 등을 점검하고 업그레이드 한다.

가장 흔한 조합은
1. euckr 환경에서 사용하다가 업그레이드 euckr 환경을 계속 유지.
2. euckr 환경에서 utf8 환경으로 업그레이드
3. 테이블이 latin1 형식에서 euckr , utf8 환경으로 업그레이드
이 정도일 듯 하다.

가장 쉽고, 최선의 방법은 dump 후 restore 하는 방법이다.(당연하다고? ^^ )
아무튼 무작정 업그레이드 시도하기전에 백업은 필수!!

처리순서를 간단히 정리하자면.
  1. 업그레이드 전 dump (euckr , utf8 확인)
  2. mysql 업그레이드 ... ( 3.x , 4.0.x -> 4.1.x or 5.x )
  3. set names euckr 명시 (euckr 환경인경우)
  4. table 의 Engine , Charset 를 조정.
  5. 덤프 데이터 restore
  6. 확인.

구체적인 방법은 다음회에...(2회 보기)

ps. 총 3-4 회에 걸쳐 정리할 예정.

이올린에 북마크하기(0) 이올린에 추천하기(0)