텍스트 줄바꿈 종류 - LF·CRLF·CR 차이와 변환 방법
LF(Unix), CRLF(Windows), CR(구형 Mac)의 차이와 혼용 시 발생하는 문제, 편집기·Git에서 줄바꿈을 통일하는 방법을 설명합니다.
Q.LF와 CRLF의 차이는 무엇이고, 어떻게 변환하나요?
LF(\n)는 Unix/Linux/Mac의 줄바꿈 방식이고, CRLF(\r\n)는 Windows의 방식입니다. 혼용 시 코드 diff가 오염되거나 스크립트 실행이 실패할 수 있습니다. VS Code에서는 우측 하단 'CRLF/LF' 버튼으로, Git에서는 core.autocrlf 설정으로 통일합니다.
GitHub에서 풀 리퀘스트를 열었더니 실제 코드 변경은 없는데 모든 줄이 변경된 것으로 표시된다면, LF와 CRLF 혼용 문제다. 팀 내에서 Windows·Mac·Linux 개발자가 섞여 있으면 이 문제가 반드시 발생한다.
줄바꿈 종류와 역사
줄바꿈 문자는 타자기 시대에서 비롯된다.
| 기호 | 이름 | 16진수 | 사용 OS |
|---|---|---|---|
| LF | Line Feed (\n) | 0x0A | Unix, Linux, macOS (OS X 이후) |
| CR | Carriage Return (\r) | 0x0D | 구형 Mac OS (OS 9 이전) |
| CRLF | CR + LF (\r\n) | 0x0D 0x0A | Windows |
현대 개발 환경에서 CR 단독은 거의 사라졌다. 문제는 CRLF(Windows)와 LF(Unix) 사이의 혼용이다.
혼용 시 발생하는 문제
1. Git diff 오염
Windows에서 LF 파일을 편집하면 자동으로 CRLF로 변환되어 실제 변경 없이 모든 줄이 diff에 표시될 수 있다.
2. 셸 스크립트 실행 실패
Windows에서 작성한 .sh 파일을 Linux에서 실행하면
문자로 인해 bad interpreter: No such file or directory 오류가 발생한다.
3. CSV 파싱 오류
CRLF CSV 파일을 LF 기반 파서로 읽으면 각 행 끝에
이 데이터로 포함될 수 있다.
Git에서 줄바꿈 통일
Git core.autocrlf 설정으로 체크인/체크아웃 시 자동 변환을 제어한다.
bash
# Windows 개발자 권장: 체크아웃 시 CRLF, 커밋 시 LF
git config --global core.autocrlf true
# Linux/Mac 개발자 권장: 체크아웃 시 변환 없음, 커밋 시 LF
git config --global core.autocrlf input
# 자동 변환 비활성화 (프로젝트에서 .gitattributes로 제어)
git config --global core.autocrlf false
팀 전체에 강제 적용하려면 저장소 루트에 .gitattributes 파일을 추가한다.
# .gitattributes
* text=auto eol=lf
*.bat text eol=crlf
VS Code에서 줄바꿈 변환
우측 하단 상태바에 CRLF 또는 LF가 표시된다. 클릭하면 선택 메뉴가 나타나 변환할 수 있다.
또는 명령 팔레트(Ctrl+Shift+P)에서 Change End of Line Sequence를 실행한다.
.editorconfig 파일로 프로젝트 전체에 강제 적용도 가능하다.
ini
[*]
end_of_line = lf
Notepad++에서 변환
편집 → 줄끝 문자 변환 메뉴에서 Unix 형식(LF), Windows 형식(CRLF), Mac 형식(CR) 중 선택한다. 보기 → 기호 표시 → 모든 문자 표시로 줄바꿈 문자를 시각적으로 확인할 수 있다.
---
이 글은 AI가 공개 자료를 기반으로 작성했습니다. 프로젝트 표준은 팀 합의 후 .gitattributes로 강제 적용하는 것을 권장합니다.