두 파일은 화면에 같은 두 줄을 표시했지만 LF 표본은 11바이트, CRLF 표본은 13바이트였고 SHA-256도 달랐습니다. 해시 차이를 곧바로 문장 변경으로 해석하면 안 됩니다.
확인 방법
- UTF-8 ASCII 범위 문자로 alpha와 beta 두 줄을 만들었습니다.
- 한 파일은 줄 끝마다 LF 1바이트, 다른 파일은 CR과 LF 2바이트를 기록했습니다.
- macOS wc와 shasum으로 파일 크기와 SHA-256을 측정했습니다.
2바이트 차이가 파일 정체성을 바꿨다
LF 파일은 11바이트이고 SHA-256은 e49c81e2…d0d78ee였습니다. CRLF 파일은 줄마다 CR이 하나씩 추가돼 13바이트이고 SHA-256은 98ab4d3a…b6fc80이었습니다.
일반 편집기에서는 둘 다 alpha와 beta 두 줄로 보입니다. 하지만 백업 비교, 배포 검증, 디지털 서명처럼 바이트 동일성을 묻는 과정에서는 서로 다른 파일입니다.
| 표본 | 줄바꿈 | 크기 | SHA-256 앞 8자리 |
|---|---|---|---|
| lf.txt | LF | 11 B | e49c81e2 |
| crlf.txt | CRLF | 13 B | 98ab4d3a |
Git이 줄바꿈을 정규화하는 이유
Git은 text와 eol 속성에 따라 저장소 내부와 작업 폴더의 줄바꿈을 다르게 처리할 수 있습니다. 팀원이 파일을 바꾸지 않았다고 생각해도 설정 차이로 전체 줄이 변경된 것처럼 보일 수 있습니다.
협업 저장소에서는 .gitattributes로 정책을 명시하고, 이미 들어간 파일을 한 번에 바꾸기 전에 별도 브랜치에서 영향 범위를 확인하는 편이 안전합니다.
비교 목적을 먼저 정한다
문장 의미가 같은지를 보려면 줄바꿈을 정규화한 뒤 텍스트 비교가 적합합니다. 전달받은 원본 바이트가 같은지를 입증하려면 정규화하지 않은 원본 해시를 보존해야 합니다.
확인한 1차 자료
- Git gitattributes 공식 문서 (2026-10-01 확인)
- NIST Secure Hash Standard FIPS 180-4 (2026-10-01 확인)