학습 자료 글/컴퓨터시스템

컴퓨터시스템 기초 6. 바이트 순서는 왜 값을 다르게 보이게 만들까

cedis 2026. 3. 31. 16:21

[컴퓨터 시스템] 6. 바이트 순서는 왜 값을 다르게 보이게 만들까

5편에서 같은 비트열을 어떤 규칙으로 읽느냐가 중요하다는 감각을 잡았다면, 이제는 멀티바이트 값이 메모리에 어떤 순서로 놓이는지 봐야 합니다. 바로 여기서 엔디안이 등장합니다.

엔디안은 비트가 뒤집히는 마법이 아니라, 여러 바이트로 이루어진 값을 메모리 주소 증가 방향에 어떻게 배치하느냐의 문제입니다. 이번 글은 그 과정을 실제 주소 흐름으로 따라가며 정리합니다.

먼저 짚고 갈 용어
byte: 대개 8비트 묶음으로 다루는 기본 저장 단위
endianness: 멀티바이트 값을 메모리에 배치하는 바이트 순서 규칙
network byte order: 네트워크에서 주로 big-endian을 기준으로 삼는 규약
이번 글에서 다루는 것
  • 엔디안이 정확히 무엇을 바꾸고 무엇은 바꾸지 않는지
  • 4바이트 값 하나가 메모리에 놓이는 과정을 주소 흐름으로 보기
  • big-endian과 little-endian을 비교표와 단계 흐름으로 이해하기
  • 엔디안이 비트 순서와 다른 이유
  • 네트워크, 파일 포맷, 메모리 덤프에서 엔디안이 왜 중요한지
한눈에 보는 흐름
1
엔디안이 정확히 무엇을 바꾸고 무엇은 바꾸지 않는지
2
4바이트 값 하나가 메모리에 놓이는 과정을 주소 흐름으로 보기
3
big-endian과 little-endian을 비교표와 단계 흐름으로 이해하기
4
엔디안이 비트 순서와 다른 이유

1. 엔디안은 멀티바이트 값의 배치 규칙이다

엔디안을 처음 들으면 값 자체가 달라지는 현상처럼 느껴질 수 있습니다. 하지만 엔디안은 값의 수학적 의미를 바꾸는 것이 아니라, 그 값을 이루는 여러 바이트를 메모리 주소 순서에 어떻게 놓을지 정하는 규칙입니다.

그림으로 먼저 보기
1바이트 값 저장
엔디안이 관여하는가: 거의 아니다
설명: 한 칸뿐이라 순서 개념이 약하다
4바이트 정수 저장
엔디안이 관여하는가: 그렇다
설명: 각 바이트를 어느 주소에 둘지 정해야 한다
비트 자체의 0/1 의미
엔디안이 관여하는가: 아니다
설명: 엔디안은 바이트 배치 규칙이다

즉 1바이트 값에는 엔디안이 거의 의미가 없고, 2바이트 이상으로 이루어진 값에서만 본격적으로 중요해집니다.

질문엔디안이 관여하는가설명
1바이트 값 저장거의 아니다한 칸뿐이라 순서 개념이 약하다
4바이트 정수 저장그렇다각 바이트를 어느 주소에 둘지 정해야 한다
비트 자체의 0/1 의미아니다엔디안은 바이트 배치 규칙이다

2. 4바이트 값을 메모리에 놓는 과정을 먼저 보자

예를 들어 0x12345678 이라는 4바이트 값을 생각해 봅시다. 값 자체는 같아도 메모리 주소 1000번부터 1003번까지 어떤 순서로 바이트를 놓느냐에 따라 눈에 보이는 모양이 달라집니다.

과정 그림
1
값을 바이트 단위로 나누면 12, 34, 56, 78 네 조각이 된다.
2
big-endian은 가장 앞자리 바이트를 낮은 주소에 둔다.
3
little-endian은 가장 뒤자리 바이트를 낮은 주소에 둔다.
4
따라서 메모리 덤프를 읽을 때 같은 값도 서로 다른 순서로 보일 수 있다.
핵심 감각
바뀌는 것은 값의 '읽는 규칙'이 아니라 메모리에 놓인 바이트 순서입니다.

3. big-endian과 little-endian을 주소 흐름으로 비교해 보자

엔디안은 이름만 외우면 계속 헷갈립니다. 낮은 주소에서 높은 주소로 읽어 나갈 때 무엇이 먼저 보이는지로 생각하는 편이 훨씬 덜 흔들립니다.

그림으로 먼저 보기
1000
big-endian: 12
little-endian: 78
1001
big-endian: 34
little-endian: 56
1002
big-endian: 56
little-endian: 34
1003
big-endian: 78
little-endian: 12
주소big-endianlittle-endian
10001278
10013456
10025634
10037812
읽는 요령
낮은 주소에서 큰 자릿수가 먼저 보이면 big-endian, 낮은 주소에서 작은 자릿수 쪽 바이트가 먼저 보이면 little-endian으로 떠올리면 됩니다.

4. 엔디안은 비트 순서가 아니라 바이트 순서다

자주 생기는 오해 중 하나가 엔디안이 비트 순서를 거꾸로 바꾸는 것이라는 생각입니다. 하지만 엔디안은 바이트들 사이의 배치 문제이지, 한 바이트 안의 비트열을 뒤집는 규칙이 아닙니다.

그림으로 먼저 보기
엔디안은 비트가 뒤집히는 현상이다
정확한 이해: 엔디안은 바이트 배치 순서를 다루는 규칙이다
엔디안이 다르면 값 자체가 달라진다
정확한 이해: 값은 같고 메모리에서 보이는 바이트 순서가 다르다
1바이트 문자에도 엔디안 문제가 크다
정확한 이해: 멀티바이트 값에서 의미가 커진다

이 차이를 놓치면 메모리 덤프나 네트워크 데이터를 읽을 때 엉뚱한 가정을 하게 됩니다.

오해정확한 이해
엔디안은 비트가 뒤집히는 현상이다엔디안은 바이트 배치 순서를 다루는 규칙이다
엔디안이 다르면 값 자체가 달라진다값은 같고 메모리에서 보이는 바이트 순서가 다르다
1바이트 문자에도 엔디안 문제가 크다멀티바이트 값에서 의미가 커진다

5. 이 감각이 실제로 필요한 장면

엔디안은 시험용 개념처럼 보이지만, 실제로는 네트워크 프로토콜, 파일 포맷, 바이너리 파싱, 디버거에서 메모리 보기, 다른 아키텍처 간 데이터 교환에서 계속 등장합니다.

예를 들어 네트워크 바이트 순서는 보통 big-endian을 기준으로 삼기 때문에, little-endian 머신에서 값을 그대로 보내면 해석이 어긋날 수 있습니다.

장면왜 엔디안이 중요한가
네트워크상대와 같은 바이트 순서 규약을 맞춰야 한다
파일 포맷정해진 순서로 저장된 바이트를 올바르게 읽어야 한다
메모리 덤프/디버깅보이는 바이트열을 값으로 다시 조립해야 한다

6. 비트 표현에서 한 단계 더 나아간 질문

5편이 '값을 어떤 규칙으로 읽는가'의 글이었다면, 이번 편은 '그 값이 여러 바이트로 나뉠 때 주소 공간에 어떻게 배치되는가'의 글입니다. 같은 비트 표현 공부라도 질문 수준이 한 단계 더 내려온 셈입니다.

이 감각은 이후 어셈블리와 네트워크, 메모리 덤프를 읽을 때 계속 재사용됩니다.

앞선 편과 연결되는 지점
signed와 unsigned가 같은 비트열을 다른 규칙으로 읽는 문제였다면, 엔디안은 멀티바이트 값을 어떤 주소 순서로 놓는지의 문제입니다.

7. 직접 해볼 문제: 메모리 덤프를 값으로 다시 읽어 보자

이 문제는 이름 외우기보다 주소 순서 감각을 확인하는 데 목적이 있습니다.

미니 문제
메모리 주소가 낮은 곳부터 78 56 34 12가 보일 때, 이것을 little-endian 기준 0x12345678로 읽을 수 있는 이유를 스스로 설명해 보세요.

이번 글에서 기억할 것

엔디안은 값 자체보다 멀티바이트 값을 메모리 주소에 어떻게 배치하는지를 다룬다.
big-endian과 little-endian 차이는 낮은 주소에 어떤 바이트가 먼저 오는지로 이해하면 흔들림이 적다.
네트워크, 파일 포맷, 메모리 덤프에서는 바이트 순서를 해석하는 감각이 필수다.

스스로 점검

엔디안이 비트 순서가 아니라 바이트 순서라는 점을 설명할 수 있는가
0x12345678 같은 값을 big-endian과 little-endian으로 주소별로 써볼 수 있는가
왜 네트워크나 바이너리 파일에서 엔디안이 중요한지 예를 들어 말할 수 있는가

다음 글 예고

다음 글에서는 정수보다 더 까다로운 실수 표현으로 넘어가, 왜 0.1 같은 값이 정확히 저장되지 않을 수 있는지 정리합니다.

한 줄 정리
엔디안은 숫자를 다르게 만드는 규칙이 아니라, 같은 멀티바이트 값을 메모리에 어떤 순서로 배치할지를 정하는 규칙입니다.