맥에서 잘되던 프로젝트가 윈도우에서 작업 하면 문제가 생길때가 있다 특히 도커로 프로젝트를 실행했을때 나는 다음과 같은 문제를 직면했다
이를 해결하기위해서 인텔리제이에서 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마다 줄바꿈 문자를 다르게 쓰기 때문에 생긴다.
윈도우에서 작업한 파일을 리눅스/맥에서 실행하거나 혹은 반대로 리눅스/맥에서 만든 파일을 윈도우에서 열 때 줄바꿈이 맞지 않아 오류가 발생할 수 있다.
해결 방법은 생각보다 간단하다.
- IDE에서 줄바꿈을 LF로 통일하기
- git의 core.autocrlf 설정을 잘 맞추기
- .gitattributes 파일로 명시적으로 줄바꿈 정책을 지정하기
줄바꿈 문제는 사소해 보이지만, 크로스플랫폼 개발에서는 꼭 짚고 넘어가야 하는 부분이다.
나처럼 삽질하지 않으려면, 프로젝트 시작할 때부터 줄바꿈 정책을 팀원들과 맞춰두는 게 가장 좋은거 같다.
'개발일기 > TIL(Since24.04.19)' 카테고리의 다른 글
WebSocket을 통한 실시간 데이터 통신 (0) | 2025.05.17 |
---|---|
디버그 와 코드리뷰 버그 공유 를 잘하자!! (0) | 2025.05.11 |
Kotiln 공부하기 (1) | 2025.04.26 |
ES 조건 별 검색하는방식 Must, Filter (0) | 2025.04.22 |
타임리프에서 SPA로? SSR과 CSR 개념 정리 (0) | 2025.04.21 |