그 동안 웹 서비스 보안 취약점을 공부하고 활용할 때 마다 내가 웹에 대해 궁금하지만 바빠서 넘어갔던 부분이 많았다. 이제 좀 여유를 찾아서 궁금증도 해소하면서 웹에 대해 조금 더 이해하는 시간을 가져볼까 한다. 드림핵의 웹 서비스 보안 커리큘럼을 학습하면서 단어나 문장에 생긴 궁금점을 적어두고 이에 대해 알아보고 정리해보는 방식으로 할 생각이다.
URL과 URI
URL과 URI는 각각 RFC1738 와 RFC3986에 정의되어있다.
어찌보면 같은 의미의 단어가 3개나 (+URN, 실제론 별로 안쓰니 내용엔 포함하지 않겠다) 있고 그것이 계속 유지되었다는 것은 각각이 상징적인 의미를 가지고 있다고 볼 수 있다. 다행히도 RFC3986 1.1.3 항목에서 이 내용이 이미 소개되어있다. URI가 더 포괄적인 Identifier로서의 의미를 가지고 URL과 URN으로 분류될 수 있다. URN은 constant한 name으로서, URL은 locator로서의 의미를 가진다.
URI는 포괄적으로 쓰기 좋은 단어라고 할 때 URL이라고 하면 안되는 URI는 무엇일까? URL을 더 파고들어가보자 URL은 특정 자원의 위치와 접근에 대한 정보를 담은 문자열이다. 특정 자원의 위치를 가리키지 못하면 URL이 아니다. 예를 들어 현재시간을 출력하는 api 주소가 있다고 하자 해당 URI는 URL도 URN도 될 수 없다. 특정 자원과 관련이 없기 때문이다. 이에 따른 논의는 더 될 수 있을 것 같다. 시간이란 것도 자원으로 해석될 수 있다고 본다. 하지만 일반적인 상황에서는 그냥 URI라고 하면 된다.
URN은 무엇인지 궁금해서 chatgpt를 활용해서 살펴보았다. URN은 urn:ietf:rfc:1738과 같이 인터넷 상 문서나 urn:isbn:~ 과 같은 isbn번호 같은 조금은 더 포괄적으로 자원의 이름에 대한 정보로 쓰는 문자열이다. 하지만 일반적으론 잘 안 쓰니 알고만 있으면 될 것 같다.