파일 끝에 Newline이 필요한 이유와 VSC로 해결하는 방법
No newline at end of file 이라고? newline 없는게 왜?🤷
0. 들어가기
GitHub에 파일을 푸시하면 한번씩 이런 경고 받지 않아?

No newline at end of file
해석해 보자면 "파일 끝에 newline이 없다"는 뜻이다.
해결법도 정말 간단하다. 파일 마지막에 newline이 없으니 새로 빈 줄을 하나 추가하면 된다.
그런데 왜 파일 마지막에 newline을 넣어야 하는걸까?
1. UNIX 정의
파일 마지막에 newline이 있어야 한다는 규칙은 Unix 표준에서부터 왔다고 한다.
정확한 서술은 못 찾았지만 다들 그렇게 말하더라고...
Unix란?
일단 Unix가 무엇인냐 하면, 운영 체제이다.
그리고 Linux, macOS처럼 현재 사용하는 대부분의 운영 체제는 Unix를 기반으로 만들어졌다.
Text File/Line이란?
서로 다른 Unix OS에서 공통된 API를 IEEE에서 정리한 표준을 POSIX(Portable Operating System Interface)이라고 하는데, POSIX docs에서 Text File의 정의를 찾을 수 있다.
3.403 Text File
A file that contains characters organized into zero or more lines. The lines do not contain NUL characters and none can exceed {LINE_MAX} bytes in length, including the character. (후략)
3.403 Text File
문자들이 0개 이상의 행(line)으로 배열된 파일이다. 행은 NUL 문자를 포함하지 않고, 문자를 포함해 {LINE_MAX} 바이트를 넘을 수 없다. (후략)
즉, 텍스트 파일이란 0개 이상의 line으로 구성된 파일이다. Line의 정의는 이렇다.
3.206 Line A sequence of zero or more non-
<newline>characters plus a terminating<newline>character.
3.206 Line
<newline>이 아닌 문자 0개 이상으로 이루어진 연속된 문자열과, 이들을 끝내는<newline>문자이다.
참고로 빈 행(Empty LIne)에 대한 정의도 있다. 빈 행은 <newline>하나만을 포함하는 행이다.
결국 파일이란 0개 이상의 행으로 이루어지는데, 이 행들은 모두 마지막에 <newline>을 포함해야 하는 것이다.
2. newline, 왜 필요한가?
그렇다면 왜 파일 끝에 <newline>이 있어야 할까?
사실 이 문제에 대한 답은 나도 못 찾았다😭
대신에 <newline>이 있으면 좋은 점을 소개하고자 한다.
Unix에서는 cat, sed, awk같은 명령어를 이용해서 텍스트 파일을 다룰 수 있다. 만약 파일 마지막에 newline이 없다면, 이런 명령어들이 파일의 마지막 줄을 올바르게 처리하지 못한다.
예시
아래와 같은 test.txt 파일이 존재한다고 가정하자.
hello
cat 명령어를 통해 파일의 내용을 출력해보자.
$ cat test.txt test.txt hellohello
<newline>이 없다면, 이렇게 파일이 어디에서 끝나는지 명확히 알기 어려워진다.
3. VSCode에서 자동으로 <newline> 추가하기
일일이 newline을 추가하는 것도 좋지만, vscode 설정을 통해 자동으로 newline을 넣어줄 수 있다.

이렇게 해당 옵션에 체크하면 저장할 때마다 파일 끝에 newline이 있는지 검사하고, 없다면 자동으로 newline이 추가된다!
setting.json 파일에 "files.insertFinalNewline": true 옵션을 추가하는 것도 동일한 효과를 얻을 수 있다.