“Endianness, WOOT?”라는 제목의 글을 보고 웃음이 났다. 빅 엔디안, 리틀 엔디안. 컴퓨터공학 수업에서 처음 배웠을 때의 혼란이 떠올랐기 때문이다.
요즘 고수준 언어만 다루는 개발자들은 엔디안을 신경 쓸 일이 별로 없다. 하지만 네트워크 프로그래밍을 하거나, 바이너리 파일 포맷을 다루거나, 임베디드 개발을 하면 이 문제와 마주치게 된다.
걸리버 여행기와 컴퓨터
엔디안이라는 이름이 “걸리버 여행기”에서 왔다는 것을 아는 사람이 얼마나 될까. 달걀을 어느 쪽에서 깨는지로 전쟁까지 벌인 소인국 이야기에서 따온 것이다. 컴퓨터 과학자들도 유머 감각이 있다는 증거다.
빅 엔디안은 큰 자릿수가 먼저 오고, 리틀 엔디안은 작은 자릿수가 먼저 온다. 사람이 숫자를 읽는 방식과 컴퓨터가 처리하기 편한 방식의 차이라고 할 수 있다.
실무에서의 경험
임베디드 시스템을 다루던 시절, 아키텍처가 다른 두 시스템 간에 데이터를 주고받을 때 바이트 순서가 꼬여서 고생했던 적이 있다. 몇 시간이고 디버깅하다가 htonl, ntohl 함수의 존재를 알게 되었을 때의 허탈함.
네트워크 바이트 순서가 빅 엔디안으로 표준화된 것은 다행이다. 하지만 파일 포맷은 그렇지 않다. BMP는 리틀 엔디안, TIFF는 둘 다 가능… 이런 혼란이 아직도 존재한다.
기초의 중요성
요즘 개발자들이 이런 저수준 개념을 꼭 알아야 하냐고 물을 수 있다. 대부분의 경우에는 몰라도 된다. 하지만 알면 디버깅할 때 큰 힘이 된다. 원인 모를 버그가 사실은 엔디안 문제였던 경우를 여러 번 봤다.
40대가 되니 기초 지식의 가치가 더 느껴진다. 프레임워크는 바뀌어도 기본 원리는 변하지 않는다. 가끔은 이렇게 뿌리로 돌아가보는 것도 좋다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.