사용 환경(Context)

아파치 모듈의 지시자들은 사용할 수 있는 장소와 범위가 정해져 있다. 이 장에서 설명하는 모듈들의 지시자들은 mod_ssl 의 지시자를 제외하고는 httpd.conf 를 의미하는 서버 설정(server config), 가상 호스트(<VirtualHost>, 디렉터리(<Directory>, 로케이션(<Location>) 지시자에 모두 사용할 수 있다.


범위는 어떤 사용 장소에 설정했는지에 따라 다르다. 서버 설정에 사용했다면 전역적으로 적용되며 가상 호스트에 사용했다면 해당 가상 호스트에만, 디렉터리나 로케이션에 사용했다면 해당 위치에만 효과가 나타난다.


이 장에서 모듈 지시자에 특별히 사용 장소를 지정하지 않았다면 서버 설정, 가상 호스트, 디렉터리/로케이션에 모두 사용할 수 있다는 의미이다.


정규 표현식(regex - regular expression)

정규식은 특정한 형식을 가진 문자열을 기술하고 처리하기 위한 형식 언어로 매우 복잡하고 어려운 언어이지만 원하는 형식의 문자열의 패턴을 간략하게 기술할 수 있는 장점이 있다.

HTTP 가 텍스트 기반의 프로토콜이다 보니 아파치의 설정중 많은 부분이 정규 표현식(또는 정규식)을 사용하여 설정을 할 수 있게 되어 있다.

또 상당수의 모듈들이 정규식에 대한 지식이 어느 정도 있어야 제대로 사용할 수 있을 정도로 정규식은 아파치를 제대로 사용하기 위해서는 넘어야 할 중요한 관문이기도 하다. 

정규식을 자세히 다루는 것은 이 책의 범위를 넘어서고 필자도 그럴 정도의 지식은 없지만 정규식에 익숙하지 않은 독자를 위해 아파치 웹서버 설정에 필요한 기본적인 정규식에 대한 내용을 알아보도록 하자.


문자의미
.임의의 한 개의 문자
\이스케이프 문자로 \ 를 사용하면 특수 문자의 의미가 없어진다. 예로 \. 는 임의의 한 개의 문자가 아니라 . 문자와 매칭된다
^문자열의 시작을 의미. ^Hos 는 문자열이 Ho 로 시작되는 걸 의미하며 Host, Hospital 에 일치한다.
$

문자열이 끝을 의미한다. X$ 의 의미는 문자열이 반드시 X 자로 끝나야 한다는 의미이다.

+

하나, 또는 그 이상과 일치함을 의미한다. 예로 a+ 는 a, aa, aab 와 모두 일치하나 abc와는 일치하지 않는다.

*

0 또는 그 이상과 일치함을 의미한다.

?

0 또는 1번 일치함을 의미한다. 예로 그림 파일의 일종인 JPEG 는 확장자가 jpg 또는 jpeg 일 수 있다. jpe?g 라고 적으면 jpg, jpeg 와 모두 일치한다.

|여러 개 중에 하나만 일치하면 된다. abc|bcd 는 "abcd" 또는 "bcde" 와 일치하지만 "abce" 와 일치하지는 않는다.
()

일치한 내용을 그룹화 및 캡춰할 수 있다. 이미지 파일의 확장자는 다음과 같이 그룹화할 수 있다. (gif|jpe?g|png). 일치한 내용은 사용할 수 있는데 정규식 구현물에 따라 $ 또는 % 문자에 숫자를 붙이면 참조 가능하다.

첫 번째로 일치한 내용은 $1 또는 %1로 참조할 수 있다.

[]

문자 클래스라고 하며 "["과 "]" 사이에 문자중 하나만 일치하면 된다. [abc]d 는 ab, bd, cd 와 모두 일치한다. - 를 쓰면 구간을 지정할 수 있는데 모든 알파벳 문자를 의미할 경우 [a-z] 라고 적으면 된다.

^

복잡하게도 ^ 는 두 가지 의미가 있고 문맥에 따라 해석해야 한다. 여기서 ^ 는 부정의 의미로 [^a-z] 는 알파벳 소문자가 아닌 모든 문자를 의미한다.

!

정규식의 맨 처음에 사용할 경우 부정의 의미로 사용된다.

{m}

출현 빈도를 의미한다. m 은 숫자이며 {3} 일 경우 3번 출현해야 함을 나타낸다. 구간은 , 로 표시할 수 있다. {3,} 은 3번 이상이며 {3,5} 는 3번 이상 5번 이하를 의미한다.

a{3} 은 aaab 와 일치하지만 aaab 와는 일치하지 않는다.

정규식 어휘표


위에서 설명한 정규식의 어휘표는 이제 다음 장부터 사용하게 된다. 익숙하지 않더라도 잘 눈여겨 보자.