오늘은 컴퓨터 과학에서 자주 등장하는 개념 중 하나인 Endianess에 대해 이야기해보려고 한다. 이름이 조금 낯설게 들릴 수도 있지만, 사실 이건 우리가 컴퓨터로 데이터를 다룰 때 아주 중요한 역할을 하는 개념이다. 그럼 천천히, 쉽게 풀어서 알아보자.
1. Endianess가 뭔데?
Endianess는 컴퓨터가 데이터를 메모리에 저장하거나 읽을 때, 바이트 순서(byte order)를 어떻게 처리하는지를 나타낸다. 특히 숫자 같은 데이터를 여러 바이트로 쪼개서 저장할 때, 그 바이트들을 어떤 순서로 배치하느냐가 바로 Endianess의 핵심이다.
예를 들어, 숫자 0x1234를 생각해보자. 이건 16진수로 표현된 2바이트(16비트) 숫자인데, 바이트 단위로 보면 12와 34로 나뉜다. 이제 이걸 메모리에 저장할 때, 순서가 달라질 수 있다는 것이다.:
• Big-Endian: 큰 자리부터 저장. 즉, 12가 먼저 오고 34가 뒤에 온다.
• Little-Endian: 작은 자리부터 저장. 즉, 34가 먼저 오고 12가 뒤에 온다.

이 차이는 중요하다. 컴퓨터 시스템마다 이 순서를 다르게 처리할 수 있어서, 서로 다른 시스템 간에 데이터를 주고받을 때 혼란이 생길 수 있기 때문이다.
2. Big-Endian vs Little-Endian
이제 두 가지 방식을 조금 더 자세히 들여다보자.
<Big-Endian (빅 엔디안)>
◦ “큰 쪽부터”라는 뜻이다. 사람이 숫자를 읽고 쓰는 방식과 비슷해서 직관적이라고 느껴질 수 있다.
◦ 예: 0x1234를 저장하면 메모리에서 [12, 34] 순서로 들어간다.
◦ 주로 네트워크 프로토콜(예: TCP/IP)이나 일부 오래된 시스템에서 사용한다.
◦ 장점: 숫자의 크기를 비교하거나 읽을 때 편리하다.
<Little-Endian (리틀 엔디안)>
◦ “작은 쪽부터”라는 뜻이다. 언뜻 이상하게 느껴질 수도 있지만, 현대 컴퓨터에서 더 흔히 볼 수 있다.
◦ 예: 0x1234를 저장하면 메모리에서 [34, 12] 순서로 들어간다.
◦ 인텔 x86, x64 아키텍처 같은 대부분의 PC 프로세서가 이 방식을 사용한다.
◦ 장점: 작은 숫자를 다룰 때 메모리 효율성이 좋다.
3. 어디서 온 이름일까?
Endianess라는 이름은 조나단 스위프트의 소설 걸리버 여행기에서 나온 재미있는 이야기에서 유래했다. 소설 속에서 달걀을 깨는 방법(큰 쪽 vs 작은 쪽)을 두고 싸우는 두 나라가 나오는데, 이걸 비유해서 컴퓨터 과학자들이 “Big-Endian”과 “Little-Endian”이라는 용어를 만들어낸 거다.
4. 왜 신경 써야 할까?
프로그래머라면 Endianess를 알아두는 게 중요하다. 특히 다음과 같은 경우에 해당한다.
• 네트워크 프로그래밍: 데이터를 주고받을 때 서로 다른 Endianess를 사용하는 시스템 간에 호환성 문제가 생길 수 있다. 그래서 네트워크 표준은 보통 Big-Endian을 사용한다.
• 파일 포맷: 일부 파일 형식은 특정 Endianess를 따르는데, 이를 모르면 데이터를 잘못 읽을 수도 있다.
• 저수준 프로그래밍: 하드웨어와 직접 소통할 때 바이트 순서를 맞춰줘야 제대로 동작한닼
5. 간단한 예제
C 언어로 Endianess를 확인하는 코드를 한번보자.
#include
int main() {
unsigned int num = 0x12345678;
unsigned char *ptr = (unsigned char*)#
printf("바이트 순서: ");
for (int i = 0; i < 4; i++) {
printf("%02x ", ptr[i]);
}
printf("\n");
return 0;
}
• Little-Endian 시스템에서는 출력이 78 56 34 12로 나온다.
• Big-Endian 시스템에서는 12 34 56 78로 나온다.
6. 마무리
엔디언을 이해하면 시스템 개발 및 디버깅에서 발생할 수 있는 문제를 예방하고, 멀티플랫폼 환경에서 보다 안정적인 코드를 작성할 수 있다.
'임베디드' 카테고리의 다른 글
Trace32 디버깅에 대해서 (0) | 2025.03.23 |
---|---|
GDB 디버깅에 대해서 (0) | 2025.03.22 |
ARM Exception Level(EL) 알아보기(2): EL2(하이퍼바이저)와 EL3(보안 모드) (0) | 2025.03.19 |
ARM Exception Level(EL) 알아보기(1): EL의 개념과 EL0~EL1 분석 (0) | 2025.03.18 |
Flash 메모리: 대용량 비휘발성 저장 장치 (1) | 2025.03.17 |