Skip to main content

Command Palette

Search for a command to run...

캐리지 리턴(cr)과 라인 피드(lf)

Updated
2 min read

개행(줄바꿈)문자

\r Carriage Return(CR) 맨앞으로 이동하라는 뜻

\n Line Feed(LF) New Line, 즉 새로운 라인이라는 뜻

타자기가 타이핑을 하는 방식에서 유래되었다.

Windows : CRLF

타자기가 한 줄을 모두 입력한 후 다음 줄을 입력하기 위해 한 줄 간격만큼 아래로 이동하는 것을 LF(Line Feed),

그리고 한 줄을 모두 입력해서 잉크를 찍는 부분이 종이의 가장 오른쪽에 위치해있으니 다시 처음부터 입력하기 위해 가장 왼쪽으로 이동하는 것을 Carriage Return(CR) 이라고 한다.

초창기에는 컴퓨터가 아닌 teletype이라는 타이핑용 장비를 직접 제어하여 코드를 입력했기 때문에 CR과 LF가 모두 필요했고, Windows는 바로 이 방식을 참고해 CRLF방식을 채택했다. 실제로 window에서 작성된 파일을 확인해보면 CRLF방식으로 저장된 것을 확인할 수 있다.

💡
Notepad에서 보기>기호보기>줄 끝 표시 로 간단하게 확인이 가능함.

Linux와 최신 MacOS : LF

하지만 점차 디지털화 되어가면서 화면(display)를 사용하게 되자, 커서를 맨 앞으로 되돌리지(CR) 않아도 충분히 줄을 바꾸겠다는 의미를 전달할 수 있게 되었다. 굳이 한 문자(1Byte)로 표현할 수 있는 정보를 두 개의 문자(2Byte)로 늘려서 표현하지 않아도 되는 것이다.

그래서 Windows와 달리 Unix는 LF방식을, 초창기 클래식 MacOS는 CR방식을 채택했다. Linux는 Unix의 방식을 그대로 가져왔고, MacOS의 경우는 최신 운영체제에선 LF방식으로 변경되었다.

OS별로 줄바꿈 문자에 차이가 생겨서

인식하는 문자가 다르기 때문에 같은 파일이 OS에 따라 다르게 보일 수 있는 문제가 발생했다. 로컬과 서버의 OS가 다른 경우나, 다른 개발자들과 함께 작업하는 환경에서 OS에 차이가 있을 경우 혼란이 발생할 수 있다.

그래서 오늘날 이런 문제를 방지하기 위해 작업자들끼리 규칙(e.g. 코딩 컨벤션)을 정하거나, 다양한 방법으로 OS가 달라져도 파일의 양식을 맞출 수 있도록(e.g. git, Docker) 설정해주고 있다.

LF방식의 장점

일반적으로 LF를 추천하는데, 아무래도 CRLF에 비해 불필요한 문자가 하나 줄어든다는 점이 큰 이점이다. 파일 크기는 작을수록 좋으니까.

여러 서버 환경에서 Linux 운영 체제가 주로 사용되고 있기도 하고, Git과 같은 형상 관리 도구도 LF 방식을 표준으로 채택하고 있기 때문에 호환성과 파일 처리 효율성도 좋다.


참고 자료

More from this blog

실시간 스트리밍에서 락 없이 Race Condition을 다루는 법

race condition을 피하고 싶었어 웹서비스를 하다 보면 race condition을 피하기 어려운 경우가 많다. 이를 해결하기 위해 공용 자원에 대한 접근을 제한하거나 락(lock)을 걸기도 하지만, 이 방식은 이 글을 읽는 여러분도 알다시피 서버 성능에 큰 영향을 준다. 그래서 많은 서비스들이 캐시나 메시지 큐 등 다양한 설계를 도입해 이를 보완한다. 스트리밍 서비스 같은 실시간 시스템에서도 race condition은 당연히 발생한...

Jun 15, 20254 min read

Ui 공통 모듈...을 만들게 됐어요

우당탕탕 프론트 일기 1탄… 현재 서비스중인 프로그램엔 모바일 클라이언트와 윈도우 클라이언트가 각각 존재한다. 근데 두 클라이언트가 별도로 개발돼있어서 디자인 작업을 두 번 해야 하는 번거로움이 있어 이번에 일부 기능을 합치기로 했다. 채팅 기능인데, 덕분에 기존 채팅관련 소스를 파악하는 중이라 재밌고 신기해하는 중. 채팅 기능을 첨 접해봐가지구…헷 모듈 내부에 큰 기능이 있는 건 아니고 정말 UI만 지원하는 거라 역할을 분리해서 생각하는 게 ...

May 10, 20254 min read

Proxy와 Annotation

Proxy 역할 어노테이션은 기능을 활성화하거나 설정, 프록시는 실제로 그 기능을 구현하는 역할 어노테이션이 적용된 메서드나 클래스에 대해 추가로직을 삽입하거나, 메서드 호출을 가로채 특정 기능을 수행 동작 방식 JDK 동적 프록시 인터페이스 기반 : 인터페이스를 구현하는 프록시 객체를 생성 InvocationHandler 인터페이스를 구현하여 메서드 호출을 가로챔 인터페이스가 없는 클래스는 적용 불가능 CGLIB 프록시 클래스 ...

Aug 10, 20242 min read

Untitled Publication

14 posts