CRLF LF로 생긴 문제 해결하기

김민아·2022년 7월 28일
0

하루종일 npm run test랑 씨름한 썰푼다

발단

문제의 시발점.. fs.readFile callback으로 data를 출력하는 실습을 진행했다.
npm으로 과제 제출을 하는데, 오류를 뱉어내는 터미널 (터미널은 잘못이 없지😤)
처음에는 당연히 코드를 잘못 쓴 줄 알았지 (내가 썼으니까) 페어분의 코드를 복사해봐도 안넘어가는 것이다.

그런데, 에러 메시지가 좀 수상하다. 위 ExpectedReceived 값이 동일하게 출력되고 있다.

의심 1. 코드를 잘못 쳤다. (지울 수 없는 합리적 의심)
의심 2. 테스트 환경 버전이 다른가. npm version 확인하자.

페어분께도 양해를 구하고, 디코에도 도움을 요청하고 여러가지 시도해 보았지만, 결국 아고라까지 갔다! (심리적 거리감일까, 항상 아고라는 마지막에)

문제의 원인, CRLF, LF란?

코드는 똑같아 보이는데, diff가 이렇게 많이 나온다구요?!
변경한게 없단 말입니다!!

CRLF/LF는 OS에 따라 다른 개행 방식이다. 리눅스와 맥같은 Unix-like System은 LF 방식을 사용하고, 윈도우는 CR/LF 방식을 사용하기 때문이다.
'CR LF‘Carriage Return, Line Feed’의 약자이다. 고전 타자기에서 비롯되었다. 종이를 고정하는 Carriage를 제자리로 미는 동작 (Carriage Return, \r)과 종이를 올리고 줄을 바꾸기 위해 사용한 동작을 (Line Feed, \n) 나타낸다.

결국은 바이트일 뿐

CR과 LF도 byte code 일 뿐이다. CR은 아스키(문자 인코딩 프로토콜)에서 13 혹은 이진수로 00001101, 마찬가지로 LF도 10, 이진수로 00001010이다.

test에서 expected는 LF로 되어 있고, 내가 불러왔던 파일은 CRLF로 작성되있었던 것.


VScode에서 CRLF/LF 설정

편집중인 파일에서 설정

만약 VScode에서 편집중인 파일에서 LF/CRLF의 경고 메시지가 뜬다면 에디터에서 간단하게 설정할 수 있다.

새로 생성되는 파일에 설정

VScode에서 setting.json으로 설정을 지정할 수 있다.  단축키 ⌘ + , → 'CRLF'를 검색하면 다음 설정을 지정할 수 있다.

Git에서 다음과 같은 에러가 나온다면?

Warning: CRLF will be replaced by LF 혹은,
Warning: LF will be replaced by CRLF

운영체에 따라 다른 경고 메시지인데, core.autocrlf기능을 비활성화하면 Unix-like와 Windows에 따라 자동으로 변환이 되지 않는다.

$ git config --global core.autocrlf false
//false를 삭제하면 현재 어떻게 설정되어 있는지 알 수 있다. 

오늘 페어 프로그래밍 진행하면서 정말 진땀 뺐다. 맥에서 CRLF가 설정 되어 있었던 것은 예전에 window - mac 간의 git issue가 있어서였던 것 같은데, 설정했던 것도 잊고 있었다.

동기분들의 공감과 도움 덕분에 여러가지로 시도해 볼 수 있었고 결론적으로 잘 해결할 수 있었다. (너무 감사했습니드.. 다들 복받으세요 😭)


출처

인코딩 및 줄 바꿈 문자 - Visual Studio (Windows)
How to Get Consistent Line Breaks in VS Code (LF vs CRLF)
git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기

0개의 댓글