구분 문자

구분 문자()는 일반 텍스트 또는 데이터 스트림에서 별도의 독립적 영역 사이의 경계를 지정하는 데 사용하는 하나의 문자 혹은 문자들의 배열을 말한다. 구분 문자의 한 예로 쉼표가 있는데, CSV(comma-separated values) 파일의 필드 구분자의 역할을 한다.

영어로 Delimit이 "범위(한계)를 정하다"라는 의미이다. 공식 문서에서는 'delim'와 같은 약어로 표시되기 때문에 주의가 필요하다.

예를 들어 istream& getline (istream& is, string& str, char delim); 와 같이 표시가 된다.

구분 문자는 데이터 스트림의 경계를 지정하는 다양한 방법 중 하나이다. 예를 들어, 선언적 표기법(Declarative notation)은 데이터 경계를 지정하는 다른 방법으로서, 데이터 스트림이 시작할 때 길이 필드에 그 스트림에 포함된 문자의 수를 지정하여 데이터의 경계를 지정한다.

 개요 
구분 문자는 다음과 같이 나눌 수 있다.:

 필드/레코드 구분 문자
 영역 구분 문자

 필드와 레코드 구분 문자 
필드 구분 문자는 데이터 필드를 분리한다. 레코드 구분 문자는 필드들의 그룹을 분리한다. p. 141

예를 들어, CSV 파일 형식은 필드 간의 구분 문자로서 쉼표를 사용하고 레코드 사이의 구분자로는 줄바꿈(end-of-line) 문자를 사용한다. 다음의 예를 보자.
성,이름,나이,연봉
김,영희,33,₩30000000
홍,길동,28,₩25250000
이,철수,35,₩28700000
이 예는 CSV 파일 형식을 사용하여 간단한 플랫 파일 데이터베이스 테이블을 표현한다.

 영역 구분 문자 

영역 구분 문자(혹은 블록 구분 문자, 괄호 구분 문자)는 텍스트 영역의 시작과 끝을 모두 표시한다. p. 319

영역 구분 문자의 일반적인 예는 다음과 같다.
구분 문자설명  ( and )  괄호. 리스프 프로그래밍 언어의 문법에서는 주로 이 괄호를 사용하여 인식한다.p. 3  { and } 중괄호 (혹은 컬리 브래킷컬리 브래킷과 세미콜론이 특징인  C-스타일 프로그래밍 언어를 참조. )  [ and ] 대괄호 (일반적으로 첨자를 나타내기 위해 사용된다.)  < and >  꺾쇠 괄호HTML에서 사용되는 문법과 구분 문자들을 설명.  " and " 일반적으로 문자열을 나타내기 위해 사용된다. 문자열을 설명.  ' and ' 일반적으로 문자열을 나타내기 위해 사용된다.  <? and ?> XML 처리 명령어 표시에 사용된다. XML 처리 명령을 설명. P. 21.  /* and */ 일부 프로그래밍 언어의 주석을 나타내기 위해 사용된다. single-line 과 multi-line comments를 설명. P. 72.  <% and %> 언어의 경계를 지정하는 일부 웹 템플릿들에 사용된다. 이들은 또한 템플릿 구분 문자 로도 불린다. See e.g., Smarty template system documentation, "escaping template delimiters".

 규약 

컴퓨팅 플랫폼은 역사적으로 관례에 따라, 특정한 구분 문자를 사용한다.International Organization for Standardization (December 1, 1975). "The set of control characters for ISO 646 ". Internet Assigned Numbers Authority Registry . Alternate U.S. version:  . Accessed August 7, 2005. 다음의 표가 비교를 위한 몇 가지 예를 보여준다.

프로그래밍 언어
(같이 보기 , 프로그래밍 언어 (문법)의 비교)
문자열명령문의 끝파스칼 작은따옴표 세미콜론C 작은따옴표, 큰따옴표 세미콜론

필드와 레코드 구분 문자 ''(참고: ASCII, 제어 문자).

필드의 끝레코드의 끝파일의 끝 Unix, Mac OS X, Amiga OS  Tab  LF  none Windows, MS-DOS, OS/2, CP/M  Tab  CRLF  Control-Z control-z의 사용을 설명. p.156 Classic Mac OS, AppleDOS, ProDOS, GS/OS  Tab  CR  none ASCII/Unicode  UNIT SEPARATORPosition 31 (U+001F)  RECORD SEPARATORPosition 30 (U+001E)  FILE SEPARATORPosition 28 (U+001C)

 구분 문자 충돌 
구분 문자 충돌은 작성자나 프로그래머가 구분자를 별도의 영역 사이의 경계로 해석하려는 의도 없이 텍스트에 구분자를 도입할 때 발생하는 문제이다. describing solutions for embedded-delimiter problems p. 472. 예를 들어 XML의 경우 작성자가 꺾쇠 괄호 문자를 지정하려고 할 때마다 이런 일이 발생할 수 있다.

대부분의 파일 유형에는 필드 구분 기호와 레코드 구분 기호가 모두 있으며 둘 다 충돌할 수 있다. 예를 들어, CSV (파일 형식) 파일의 경우 작성자가 필드 값의 일부로 쉼표를 포함하려고 시도할 때마다(예: salary = "$30,000") 필드 충돌이 발생할 수 있으며 필드 충돌이 발생할 때마다 레코드 구분 기호 충돌이 발생할 수 있다. 여러 줄이 포함되어 있다. 레코드와 필드 구분 기호 충돌은 모두 텍스트 파일에서 자주 발생한다.

어떤 상황에서는 악의적인 사용자나 공격자가 이 문제를 의도적으로 악용하려고 할 수도 있다. 결과적으로 구분 기호 충돌은 보안 취약점 및 악용의 원인이 될 수 있다. 악의적인 사용자는 SQL 및 HTML과 같은 언어의 구분 기호 충돌을 활용하여 각각 SQL 삽입 및 사이트 간 스크립팅과 같은 잘 알려진 공격을 배포할 수 있다.

해결책
구분자 충돌은 매우 일반적인 문제이기 때문에 이를 방지하기 위한 다양한 방법이 개발되었다. 일부 작성자는 데이터 스트림 자체에 나타날 가능성이 없는 구분 기호 문자(또는 문자 시퀀스)를 선택하여 문제를 방지하려고 시도할 수 있다. 이 임시 접근 방식은 적합할 수 있지만 반드시 데이터 스트림에 나타날 내용에 대한 정확한 추측에 따라 달라지며 악의적인 충돌에 대한 보안을 제공하지 않는다. 따라서 다른 보다 공식적인 규칙도 적용된다.

 같이 보기 
 영어 위키백과 문서
 문자열 리터럴 (영문)

 각주 

 외부 링크 
 Data File Metaformats from The Art of Unix Programming by Eric Steven Raymond

분류:마크업 언어
분류:패턴 매칭
분류:프로그래밍 구성체
분류:문자열