npcode.com/blog/2010/11

오늘 코딩중 변수명을 지으려다 의문이 하나 생겼다.

path에서 /과 같은 separator로 구분되는 단어 하나하나를 뭐라고 부르지?

npcode.com/blog/2010/11 <= blog, 2010, 11 요런거 라던지,

/home/nori/hello.txt <= home, nori, hello.txt 이런거 라던지.

파일이름이라고 할 수도 없고 디렉토리라고 할 수도 없어서 고민하다가, 이런 문제는 운영체제 관련 책에 나와있지 않을까 싶어서 책장에 꽂혀있던 ‘리눅스 커널의 이해’를 펼쳐서 경로명 탐색에 대한 부분을 읽어보았다. 그리고 저런 것을 ‘구성요소’ 라고 부르고 있는 것을 확인했다. ‘구성요소’라니 좀 어색한데 영어로는 뭔가 하고 그 책의 원서를 뒤져보았다.

pathname component

‘pathname component’라는 표현을 쓰고 있는 것을 확인.

정말로 리눅스 커널에서 저렇게 부르는지 궁금해서 리눅스 커널 소스(linux-2.6.32.8)를 들여다보았다. 파일시스템 관련 코드 등에서 ‘pathname component’라는 표현을 7번 사용한 것을 확인했다.

아, 이건가 보다 하며 안심하고 변수이름을 pathname_component로 하여 커밋. 그런데…

path component

문득 pathname component가 정말 널리 쓰이는 용어인지 의문이 들어 구글링을 좀 해봤다. 그런데 파이썬 문서에서 pathname component보다 path component라는 용어를 더 많이 사용하는 것을 발견했다.

어라? 해서 리눅스 커널 소스를 다시 뒤져보니 path component가 28회나 사용되고 있었다. pathname component 보다 4배나 많잖아?

URI를 정의한 RFC 3986에서 path component로 검색해보니…

We use the generic term "path component" to describe the URI substring
matched by the parser to one of these rules.

      path          = path-abempty    ; begins with "/" or is empty
                    / path-absolute   ; begins with "/" but not "//"
                    / path-noscheme   ; begins with a non-colon segment
                    / path-rootless   ; begins with a segment
                    / path-empty      ; zero characters

      path-abempty  = *( "/" segment )
      path-absolute = "/" [ segment-nz *( "/" segment ) ]
      path-noscheme = segment-nz-nc *( "/" segment )
      path-rootless = segment-nz *( "/" segment )
      path-empty    = 0<pchar>
      segment       = *pchar
      segment-nz    = 1*pchar
      segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                    ; non-zero-length segment without any colon ":"

      pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

대충만 보고 path component가 내가 찾던 정답이 맞다고 생각했다 그러나,

path segment

수일 후, HTTP: The definitive guide를 읽다가 path segment라는 단어를 내가 원하는 바로 그 의미로 사용하고 있는 것을 보았다. 깜짝 놀라 RFC 3986에서 이 단어를 찾아보고 다음과 같은 설명을 발견했다.

A path consists of a sequence of path segments separated by a slash (“/”) character.

내가 완전히 잘못 이해하고 있었다. path component는 URL에서의 path 부분 전체를 의미하는 것이었고,  /로 나뉘는 요소 하나하나는 path segment라고 불러야 맞는 것이었다. 답을 알고 난 뒤 위의 인용문을 다시 읽어보니, 역시 path component는 path 전체를 의미하는 것이 맞다.

이 글도 뒤늦게 고쳤다.

결론

path segment가 맞다. (적어도 URI에서 쓰는거라면)

교훈

IETF의 RFC 문서들은 BNF스러운 문법(ABNF라고 한다)으로 개념을 정의하기 때문에 용어 정의는 굉장히 잘 되어있다. 인터넷 관련 용어에 대해 궁금한 것이 생겼을 때는 역시 RFC.

Advertisements

npcode.com/blog/2010/11”에 대한 1개의 생각

  1. 마침 궁금했던 부분이었는데 이렇게 깔끔하게 정리된 포스트가 있을 줄은 몰랐습니다.
    좋은 정보 잘 얻고 갑니다. 블로그 깔끔하네요! ^^~

    좋아요

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중