개발일기/TIL(Since24.04.19)

CRLF vs LF 문제

w.llama 2025. 5. 7. 22:02

맥에서 잘되던 프로젝트가 윈도우에서 작업 하면 문제가 생길때가 있다 특히 도커로 프로젝트를 실행했을때 나는 다음과 같은 문제를 직면했다

이를 해결하기위해서 인텔리제이에서 gradlew파일들을 하나하나 lf로 변경했다

이후 server.sh를 실행했더니 잘되었다. 왜 CRLF와 LF문제가 자주 생길까? 이를 좀 알아보고자 한다.

먼저, 윈도우와 맥(리눅스) 환경의 가장 큰 차이 중 하나가 바로 줄바꿈 문자(Line Ending) 방식이다.

  • 윈도우는 CRLF(\r\n)
  • 맥과 리눅스는 LF(\n)

이 차이 때문에, 맥에서 잘 동작하던 쉘 스크립트나 gradlew 같은 파일이 윈도우에서 CRLF로 저장되면, 도커나 리눅스 환경에서 실행할 때 에러가 발생한다. 대표적으로 /bin/bash^M: bad interpreter: No such file or directory 같은 오류가 뜬다. 이건 윈도우에서 저장된 CRLF의 ^M(CR)이 리눅스에서 해석되지 않아서 생기는 문제다.

특히 git을 사용할 때도 이 문제가 자주 드러난다. git은 기본적으로 윈도우에서는 체크아웃할 때 LF를 CRLF로 바꿔주고, 커밋할 때는 다시 LF로 변환해준다. 이 설정이 꼬이면 의도치 않게 줄바꿈이 뒤섞이거나, 실행 오류가 발생할 수 있다

결론적으로CRLF와 LF 문제는 OS마다 줄바꿈 문자를 다르게 쓰기 때문에 생긴다.

윈도우에서 작업한 파일을 리눅스/맥에서 실행하거나 혹은 반대로 리눅스/맥에서 만든 파일을 윈도우에서 열 때 줄바꿈이 맞지 않아 오류가 발생할 수 있다.

해결 방법은 생각보다 간단하다.

  1.  IDE에서 줄바꿈을 LF로 통일하기
  2.  git의 core.autocrlf 설정을 잘 맞추기
  3.  .gitattributes 파일로 명시적으로 줄바꿈 정책을 지정하기

줄바꿈 문제는 사소해 보이지만, 크로스플랫폼 개발에서는 꼭 짚고 넘어가야 하는 부분이다.
나처럼 삽질하지 않으려면, 프로젝트 시작할 때부터 줄바꿈 정책을 팀원들과 맞춰두는 게 가장 좋은거 같다.