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

CSV 텍스트 파일에서는 쉼표(빨간색)가 필드 구분자로 사용된다.

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

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

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

개요

편집

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

필드와 레코드 구분 문자

편집

필드 구분 문자는 데이터 필드를 분리한다. 레코드 구분 문자는 필드들의 그룹을 분리한다.[3]

예를 들어, CSV 파일 형식은 필드 간의 구분 문자로서 쉼표를 사용하고 레코드 사이의 구분자로는 줄바꿈(end-of-line) 문자를 사용한다. 다음의 예를 보자.

성,이름,나이,연봉
김,영희,33,₩30000000
홍,길동,28,₩25250000
이,철수,35,₩28700000

이 예는 CSV 파일 형식을 사용하여 간단한 플랫 파일 데이터베이스 테이블을 표현한다.

영역 구분 문자

편집

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

영역 구분 문자의 일반적인 예는 다음과 같다.[6]

구분 문자 설명
( and ) 괄호. 리스프 프로그래밍 언어의 문법에서는 주로 이 괄호를 사용하여 인식한다.[7]
{ and } 중괄호 (혹은 컬리 브래킷[8] )
[ and ] 대괄호 (일반적으로 첨자를 나타내기 위해 사용된다.)
< and > 꺾쇠 괄호[9]
" and " 일반적으로 문자열을 나타내기 위해 사용된다.[10]
' and ' 일반적으로 문자열을 나타내기 위해 사용된다.[10]
<? and ?> XML 처리 명령어 표시에 사용된다.[11]
/* and */ 일부 프로그래밍 언어의 주석을 나타내기 위해 사용된다.[12]
<% and %> 언어의 경계를 지정하는 일부 웹 템플릿들에 사용된다. 이들은 또한 템플릿 구분 문자 로도 불린다.[13]

규약

편집

컴퓨팅 플랫폼은 역사적으로 관례에 따라, 특정한 구분 문자를 사용한다.[14] 다음의 표가 비교를 위한 몇 가지 예를 보여준다.

프로그래밍 언어 (같이 보기 , 프로그래밍 언어 (문법)의 비교)

문자열 명령문의 끝
파스칼 작은따옴표 세미콜론
C 작은따옴표, 큰따옴표 세미콜론

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

필드의 끝 레코드의 끝 파일의 끝
Unix, Mac OS X, Amiga OS Tab LF none
Windows, MS-DOS, OS/2, CP/M Tab CRLF Control-Z[15]
Classic Mac OS, AppleDOS, ProDOS, GS/OS Tab CR none
ASCII/Unicode UNIT SEPARATOR
Position 31 (U+001F)
RECORD SEPARATOR
Position 30 (U+001E)
FILE SEPARATOR
Position 28 (U+001C)

구분 문자 충돌

편집

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

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

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

해결책

편집

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

같이 보기

편집

각주

편집
  1. “Federal Standard 1037C delimiter. 2013년 3월 5일에 원본 문서에서 보존된 문서. 2014년 1월 28일에 확인함. 
  2. Science, By (1973). 《Programming in Fortran》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7190-0555-8. 
  3. de Moor, Georges J. (1993). 《Progress in Standardization in Health Care Informatics》. IOS Press. ISBN 90-5199-114-2.  p. 141
  4. Friedl, Jeffrey E. F. (2002). 《Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools》. O'Reilly. ISBN 0-596-00289-0.  p. 319
  5. Scott, Michael Lee (1999). 《Programming Language Pragmatics》. Morgan Kaufmann. ISBN 1-55860-442-1. 
  6. Wall, Larry, Tom Christiansen and Jon Orwant (2000년 7월). 《Programming Perl, Third Edition》. O'Reilly. ISBN 0-596-00027-8. 
  7. Kaufmann, Matt (2000). 《Computer-Aided Reasoning: An Approach》. Springer. ISBN 0-7923-7744-3. p. 3
  8. Meyer, Mark (2005). 《Explorations in Computer Science》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7637-3832-7. 컬리 브래킷과 세미콜론이 특징인 C-스타일 프로그래밍 언어를 참조.
  9. Dilligan, Robert (1998). 《Computing in the Web Age》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-306-45972-6. HTML에서 사용되는 문법과 구분 문자들을 설명.
  10. Schwartz, Randal (2005). 《Learning Perl》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-10105-3.  문자열을 설명.
  11. Watt, Andrew (2003). 《Sams Teach Yourself Xml in 10 Minutes》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-672-32471-0.  XML 처리 명령을 설명. P. 21.
  12. Cabrera, Harold (2002). 《C# for Java Programmers》. Oxford Oxfordshire: Oxford University Press. ISBN 978-1-931836-54-8.  single-line 과 multi-line comments를 설명. P. 72.
  13. “Smarty Template Documentation”. 2010년 3월 12일에 확인함.  See e.g., Smarty template system documentation, "escaping template delimiters".
  14. International Organization for Standardization (December 1, 1975). "The set of control characters for ISO 646 Archived 2012년 7월 29일 - 웨이백 머신". Internet Assigned Numbers Authority Registry . Alternate U.S. version: [1] Archived 2006년 3월 5일 - 웨이백 머신. Accessed August 7, 2005.
  15. Lewine, Donald (1991). 《Posix Programmer's Guide》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-937175-73-6.  control-z의 사용을 설명. p.156
  16. Friedl, Jeffrey (2006). 《Mastering Regular Expressions》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-52812-6.  describing solutions for embedded-delimiter problems p. 472.

외부 링크

편집