구분 문자
이 문서는 다른 언어판 위키백과의 문서(en:Delimiter)를 번역 중이며, 한국어로 좀 더 다듬어져야 합니다. |
구분 문자(영어: Delimiter)는 일반 텍스트 또는 데이터 스트림에서 별도의 독립적 영역 사이의 경계를 지정하는 데 사용하는 하나의 문자 혹은 문자들의 배열을 말한다.[1] 구분 문자의 한 예로 쉼표가 있는데, CSV(comma-separated values) 파일의 필드 구분자의 역할을 한다.
영어로 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") 필드 충돌이 발생할 수 있으며 필드 충돌이 발생할 때마다 레코드 구분 기호 충돌이 발생할 수 있다. 여러 줄이 포함되어 있다. 레코드와 필드 구분 기호 충돌은 모두 텍스트 파일에서 자주 발생한다.
어떤 상황에서는 악의적인 사용자나 공격자가 이 문제를 의도적으로 악용하려고 할 수도 있다. 결과적으로 구분 기호 충돌은 보안 취약점 및 악용의 원인이 될 수 있다. 악의적인 사용자는 SQL 및 HTML과 같은 언어의 구분 기호 충돌을 활용하여 각각 SQL 삽입 및 사이트 간 스크립팅과 같은 잘 알려진 공격을 배포할 수 있다.
해결책
편집구분자 충돌은 매우 일반적인 문제이기 때문에 이를 방지하기 위한 다양한 방법이 개발되었다. 일부 작성자는 데이터 스트림 자체에 나타날 가능성이 없는 구분 기호 문자(또는 문자 시퀀스)를 선택하여 문제를 방지하려고 시도할 수 있다. 이 임시 접근 방식은 적합할 수 있지만 반드시 데이터 스트림에 나타날 내용에 대한 정확한 추측에 따라 달라지며 악의적인 충돌에 대한 보안을 제공하지 않는다. 따라서 다른 보다 공식적인 규칙도 적용된다.
같이 보기
편집각주
편집- ↑ “Federal Standard 1037C delimiter”. 2013년 3월 5일에 원본 문서에서 보존된 문서. 2014년 1월 28일에 확인함.
- ↑ Science, By (1973). 《Programming in Fortran》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7190-0555-8.
- ↑ de Moor, Georges J. (1993). 《Progress in Standardization in Health Care Informatics》. IOS Press. ISBN 90-5199-114-2. p. 141
- ↑ Friedl, Jeffrey E. F. (2002). 《Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools》. O'Reilly. ISBN 0-596-00289-0. p. 319
- ↑ Scott, Michael Lee (1999). 《Programming Language Pragmatics》. Morgan Kaufmann. ISBN 1-55860-442-1.
- ↑ Wall, Larry, Tom Christiansen and Jon Orwant (2000년 7월). 《Programming Perl, Third Edition》. O'Reilly. ISBN 0-596-00027-8.
- ↑ Kaufmann, Matt (2000). 《Computer-Aided Reasoning: An Approach》. Springer. ISBN 0-7923-7744-3.p. 3
- ↑ Meyer, Mark (2005). 《Explorations in Computer Science》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7637-3832-7.컬리 브래킷과 세미콜론이 특징인 C-스타일 프로그래밍 언어를 참조.
- ↑ Dilligan, Robert (1998). 《Computing in the Web Age》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-306-45972-6.HTML에서 사용되는 문법과 구분 문자들을 설명.
- ↑ 가 나 Schwartz, Randal (2005). 《Learning Perl》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-10105-3. 문자열을 설명.
- ↑ Watt, Andrew (2003). 《Sams Teach Yourself Xml in 10 Minutes》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-672-32471-0. XML 처리 명령을 설명. P. 21.
- ↑ 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.
- ↑ “Smarty Template Documentation”. 2010년 3월 12일에 확인함. 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 Archived 2012년 7월 29일 - 웨이백 머신". Internet Assigned Numbers Authority Registry . Alternate U.S. version: [1] Archived 2006년 3월 5일 - 웨이백 머신. Accessed August 7, 2005.
- ↑ Lewine, Donald (1991). 《Posix Programmer's Guide》. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-937175-73-6. control-z의 사용을 설명. p.156
- ↑ 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.
외부 링크
편집- Data File Metaformats from The Art of Unix Programming by Eric Steven Raymond