IP 주소는 다들 아시죠? IP는 인터넷 프로토콜(Internet Protocol)의 약자입니다. 프로토콜은 쉽게 말해 통신 규약입니다. 나는 영어로 말하는데 상대방은 독일어 밖에 모른다면 소통이 안 되겠죠. 이처럼 프로토콜은 서로간에 통신이 가능하도록 해주는 일종의 규칙입니다. IP는 그러니까 인터넷상에서(또는 인트라넷상에서) 웹브라우저와 웹서버가 서로 신호를 주고받기 위한 하나의 약속입니다.
에궁, 이러다 짧은 실력 들통날라! 오늘 설명드릴 것은 IP가 아니라 IP 주소에 관한 것입니다. IP 주소는 아시다시피 4자리의 숫자로 되어 있습니다. 또한 각 자리는 1바이트씩입니다. 1바이트는 2의 8승이므로 모두 256가지가 나올 수 있습니다. 0부터 센다면 255까지가 되겠네요. 부호를 붙인다면 ?127부터 128까지가 되겠지만 주소에는 음수가 없죠?
210.113.22.1
위의 IP 주소는 유효합니다. 하지만
210.256.233.21
위의 IP 주소는 아닙니다. 256이 유효 범위를 벗어났습니다. 이처럼 IP 주소가 유효한지 아닌지를 판별하는 정규식에 대해 알아 보겠습니다. 15회에 소개해 드린 파이어폭스의 부가기능 ‘Regular Expression Tester’ 생각나시나요? 그것을 실행한 후 Options 버튼을 누르시고 맨 밑의 Settings를 선택하세요. 창이 하나 열리면 ‘Saved Expressions’를 누릅니다. 두 번째 줄에 있는 IPv4를 마우스로 클릭하신 후 오른쪽 Edit 버튼을 누르세요. 다시 창이 하나 열릴텐데 위에서 두 번째 Expression 박스에 포커스를 두고 Ctrl+A를 눌러 전체를 블록으로 잡은 뒤 Ctrl+C로 복사합니다. 그런 뒤 울트라 에디트 등에 붙이면 다음과 같은 정규식이 나올 것입니다.
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
이것이 바로 그 유명한 ‘IP 주소 유효성 검사를 위한 정규식’입니다. 어느 강좌에서나 안 빠지고 단골로 등장하는 넘이죠. 식이 좀 길긴 하지만 사실 별거 아닙니다. 지난번에 보여드린 20((11-02-(([0-1][0-9])|([2][0-8])))|(12-02-(([0-1][0-9])|([2][0-9]))))나 거기서 거기입니다. 우선 IP 주소의 유효성 자체를 알아보죠.
IP 주소는 네 단위로 구성됩니다. 그 각 단위의 규칙은 동일합니다. 그 규칙은,
1) 한 자리나 두 자리 숫자. 즉, 한 자리나 두 자리로만 구성돼 있는 경우는 어느 숫자라도 올 수 있음.
2) 1로 시작하는 세 자리 숫자. 즉, 1로 시작하기만 하면 그 다음 숫자들은 어느 것이라도 올 수 있음.
3) 2로 시작하는 세 자리 숫자 가운데 두 번째 자리가 0부터 4인 숫자. 이 경우 세 번째 자리에는 어느 숫자라도 올 수 잇음.
4) 2로 시작하는 세 자리 숫자 가운데 두 번째 자리가 5이고 세 번째 자리가 0부터 5인 숫자
이를 좀더 쉽게 풀어서 설명해 볼까요? 한 자리나 두 자리 숫자는 아무거라도 됩니다. 즉 2, 3, 99 등 다 됩니다. 문제는 세 자리일 때입니다. 1로 시작하는 세 자리 숫자는 뒤에 아무거나 와도 상관 없습니다. 그러나 2로 시작하는 세 자리 숫자는 두 번째 자리가 5를 넘어가면 안 됩니다. 즉 266 등은 허용될 수 없습니다. 또 두 번째 자리가 5인 경우는 세 번째 자리에 0부터 5까지만 와야 합니다.
위의 정규식에서 앞의 ^이나 뒤의 $는 꼭 들어가야 합니다. 아니면 다음과 같은 주소와도 매치가 됩니다.
266.23.2.2
244.233.21.266
위의 첫 줄과는 맨 앞의 2를 빼고 66.23.2.2과 매치됩니다. 두 번째 줄과는 뒤의 66을 빼고 244.233.21.2와 매치됩니다.
아무튼 위의 정규식을 보면 중간쯤 \.){3} 라는 게 보입니다. 이는 정규식의 4단위가 모두 동일하면서 마지막 단위 다음에는 마침표가 없기 때문에 그렇습니다. 즉 4단위가 모두 동일한 규칙을 갖고 있지만 마침표 때문에 마지막 한 단위만 따로 처리하는 것입니다. 실제로 자세히 보면 {3} 좌우의 정규식이 마침표만 빼고는 똑같다는 것을 알 수 있습니다.