줄바꿈 형식 통일이 필요해
옛날에 컴퓨터가 나오기 이전에 타자기로 글을 쓰다가 종이 끝까지 다 썼을 때 줄바꿈을 해야 됐다. 그때 일어나는 2가지 행위가 있는데 하나가 Carriage Return(CR)이고 다른 하나가 Line Feed(LF)이다.
말 그대로 캐리지를 리턴한다는 뜻이다. 타자기를 사용하는 모습을 보면 움직이던 부분을 다시 앞으로 이동시키는 모습을 볼 수 있다. 이 행동을 Carriage Return이라고 한다. 이때 커서가 해당 라인의 제일 앞쪽으로 이동하게 된다. 우리가 글을 쓰다가 [Home] 버튼을 누르게 되는 상황과 비슷하다.
커서는 그대로 있으면서 종이만 올린다. 즉, 줄을 바꾼다는 뜻이다. 우리가 키보드로 [아래쪽 방향키]를 누를때의 느낌과 비슷하다고 볼 수 있다.
우리가 흔히 줄바꿈을 할때 많이 쓰는 [ENTER] 엔터키는 캐리지 리턴과 라인 피드가 합쳐진 것이다. (CRLF) 아랫줄로 내려가서 제일 앞쪽으로 이동하는 것. 이게 엔터이다.
지금은 운영체제별로 줄 바꿈 문자를 채택한 게 다르다. Windows 운영체제는 CRLF 이고, UNIX와 Mac OS 계열은 LF를 채택하고 있다. 간혹 협업을 하다 보면 어떤 사람이 맥 OS에서 작업한 코드를 내가 받아서 실행시키려고 하면 에러가 나는 경우가 있다. 오늘 그런 일이 있었다. 맥 OS에서 작업했던 gradlew 파일을 내 PC에서 docker 빌드를 하면서 실행되다가 자꾸 에러가 뜨는 거였다. 문제는 기본 줄바꿈의 포맷이 달랐던 거였다.
해결 방법은 매우 간단했다. VS code 하단에 보면 LF와 CRLF를 선택하는 부분이 있다. gradlew 파일을 열고 에디터 하단의 설정에서 CRLF를 LF로 바꿔주었더니 바로 해결되었다. 간단하게 해결할 수 있는 문제였지만 원인을 몰랐다면 1주일은 헤매고도 남을 문제였다.
그리고 CRLF는 \r\n 로 처리되기 때문에 줄바꿈을 할때마다 4바이트를 사용하고 LF는 \n로 처리되어 2바이트를 사용한다. 줄바꿈을 할때마다 2배정도 차이가 나기 때문에 보통 LF를 권하고 있다.
혼자서 작업할 때는 상관 없지만 여러 사람이 여러 OS에서 작업하게 될 경우, 에러가 날 수도 있다. 만약 react나 vue 프로젝트라면 빌드시 이런 에러를 만나기도 하기에 미리 설정을 통일하는 부분이 필요하다.
Expected linebreaks to be 'LF' but found 'CRLF'
해당 언어의 lint 설정을 해주는 방법이 있다. 대표적으로 eslintrc.js 파일에 아래와 'linebreak-style' 규칙을 직접 추가해주거 설정을 해주는 방법이다.
// .eslintrc.js
rules:
{
'linebreak-style': 0, // 0으로 하면 아예 무시
}
에디터의 하단의 설정을 바꿔줄 수 있다. 하지만 파일의 개수가 많을 경우 일일이 해야 하는 번거로움이 있다. 문자 일괄 변경을 통해 모든 파일을 한번에 LF나 CRLF로 변경해줄 수도 있지만 전체 프로젝트가 변경되는 부분이니 조심스럽게 바꾸는 것이 좋겠다.
VScode :
기본 설정을 변경하고 싶다면, File - Preferences - Settings에 들어가서 Eol 부분을 변경합니다.
앱 전체가 아닌, 특정 워크스페이스에서 설정을 변경하고 싶다면, .vscode settings.json 파일에 다음 설정값을 추가합니다.
IntelliJ:
기본 설정을 변경하려면 Settings - Editor - Code Style 에서 "Line Separator"를 원하는 걸로 변경해주면 된다.
인텔리제이에서 기존 파일의 설정을 변경하는 방법은 이 글을 참고하면 좋을 것 같다.
이건 이 글에서 자세히 설명해주고 있다. 포스팅을 확인하자! (절대 귀찮아서 그런거 아님 ;-D )