CRLF는 도대체 무엇인가?

raccoonback·2019년 8월 10일
3

초기 여러 운영체제 시스템에서는 US-ASCII 표준의 CR과 LF를 이용해서 각각의 다양한 "end-of-line" 컨벤션을 채택하고 있었다. 이는 동일한 시스템 간 통신에서는 문제가 없었으나, 서로 다른 시스템 간 네트워크 통신시 문제가 발생했다. 각각의 시스템은 서로 다른 EOL을 사용하고 있었기 때문이다.

왜 이러한 일이 벌어지는 것 일까? 애초에 US-ASCII에 EOL을 위한 New Line 문자가 있었다면 문제가 없었을 텐데 말이다.

US-ASCII에는 New Line character가 없다.

US-ASCII 표준은 EOL(End Of Line)에 대한 규격을 정하지 않았다. 따라서, 초기 많은 운영체제에서는 캐리지 리턴(CR)과 라인 피드(LF)을 이용해서 각자 시스템만의 방식으로 End Of Line을 정의하였다.

  • Carrage Returen(CR) : 커서를 현재 행의 맨 좌측으로 이동
  • Line Feed(LF) : 커서를 현재 행의 다음 행으로, 즉 수직 아래로 이동

네트워크 통신을 위한 규약을 필요로 하게 된다.

서로 다른 시스템은 각자만의 EOL 규칙을 가지며, 네트워크 통신시 공통된 규격을 필요로 하게 된다. 따라서, 아래와 같은 규칙이 나오게 된다.

네트워크를 통해 전송되는 ASCII 텍스트는 CRLF의 EOL을 사용해야만 한다.

ASCII 텍스트가 네트워크 통신하기 위해서는 전송하기 이전에 모든 EOL을 CRLF로 변환해야 한다는 것이다. 이러한 EOL 규칙은 초기 텔넷 프로토콜 정의의 핵심이기도 했다. Jon Postel는 (EOL == CRLF) 텔넷 규칙을 FTP 및 SMTP까지 이식시키며 현재 많은 프로토콜에서도 통용되고 있다.

요약하자면, 각 운영체제는 자신들만의 EOL을 사용하고 있으며, 네트워크 통신을 위해서는 모든 EOL을 CRLF로 변환해야 한다는 것이다.

현재 운영체제에서 사용하고 있는 EOL 규칙을 살펴보자.

  • Windows는 MS-DOS부터 EOL로 CRLF를 채택하였다. 따라서 Windows에서는 네트워크 통신시 별도의 CRLF 변환이 필요가 없다.
  • 유닉스/리눅스는 EOL로 LF를 채택해왔기 때문에, 네트워크 통신을 위해서는 CRLF로 변환이 필요하다.
  • Mac은 10 버전 이전에는 CR 규칙을 이용하였고, 이후에는 LF 규칙으로 변경하였다.

만약 FTP 이진 모드로 파일을 전송한다고 생각해보자. 파일은 바이트 스트림으로 전송되므로 동일한 EOL 규칙을 사용하는 시스템에서는 문제가 없지만, EOL 규칙이 다른 시스템간에는 CR이 추가되거나 누락되어 파일이 깨질 수 있다는 점을 유의해야 한다.

참고

profile
한번도 실수하지 않은 사람은, 한번도 새로운 것을 시도하지 않은 사람이다.

1개의 댓글

comment-user-thumbnail
2021년 4월 18일

이해에 큰 도움이 되었습니다 감사합니다!

답글 달기