And Brain said,

엔디언(Endian) 행진곡. 1 - 빅이냐 리틀이냐 그것이 문제로다 본문

IT/엔디언 행진곡

엔디언(Endian) 행진곡. 1 - 빅이냐 리틀이냐 그것이 문제로다

The Man 2023. 6. 18. 22:34
반응형

엔디언(Endian) 행진곡

0. 멀티바이트의 질서있는 행진
1. 빅이냐 리틀이냐 그것이 문제로다
2. Rust로 다시 쓰여지다
3. 제1장: Network
4. 제2장: FIle
5. 행진이 끝나고

예제 코드

>

 
'빅 엔디언'과 '리틀 엔디언'은 데이터를 메모리에 어떻게 배치할지를 결정하는 엔디언 방식의 두 가지 주요 유형입니다. 먼저 빅 엔디언과 리틀 엔디언의 차이점을 다시 한 번 살펴볼까요?

빅 엔디언 방식을 먼저 살펴봅시다. 이 방식에서는 가장 중요한 바이트(Most Significant Byte, MSB)가 낮은 메모리 주소에 위치하게 됩니다. 이것은 숫자를 읽거나 쓸 때 일반적으로 사용하는 방식과 유사합니다. 즉, 12345678이라는 숫자를 읽을 때 1이 가장 먼저 오는 것처럼, 빅 엔디언 방식에서도 가장 중요한 바이트가 먼저 메모리에 저장됩니다.

이와 달리 리틀 엔디언 방식에서는 가장 중요한 바이트가 높은 메모리 주소에 위치하게 됩니다. 이것은 숫자를 거꾸로 읽는 것과 같습니다. 즉, 12345678이라는 숫자를 뒤집어서 87654321로 읽는 것처럼, 리틀 엔디언 방식에서는 가장 중요한 바이트가 마지막에 메모리에 저장됩니다.

그렇다면 이 두 방식 중 어느 것이 더 나은 방식일까요? 그것은 어떤 상황에서 무엇을 하려고 하는지에 따라 달라집니다. 빅 엔디언 방식은 데이터를 읽고 이해하기 쉽기 때문에, 사람이 직접 데이터를 처리해야 하는 경우에 유리합니다. 반면, 리틀 엔디언 방식은 컴퓨터가 데이터를 처리하기 더 쉽기 때문에, 빠른 계산이 필요한 경우에 유리합니다.
 
 
자 그러면 본격적으로 이것들이 실제 세계에서 어떻게 적용되는지 알아봅시다.

첫 번째로, 엔디언은 네트워크 통신에서 중요한 역할을 합니다. 대부분의 네트워크 프로토콜은 빅 엔디언, 또는 '네트워크 바이트 오더'를 사용합니다. 이는 데이터를 전송할 때 가장 중요한 바이트를 먼저 보내는 방식으로, 이를 통해 수신 측에서는 메시지를 바로 해석할 수 있습니다. 하지만, 대부분의 개인용 컴퓨터는 리틀 엔디언을 사용하기 때문에, 네트워크 데이터를 처리할 때는 엔디언 변환 과정이 필요합니다.

두 번째로, 파일 시스템과 데이터베이스에서도 엔디언이 중요합니다. 특히, 바이너리 데이터를 저장하고 읽어올 때는 엔디언을 정확히 알고 있어야 합니다. 엔디언이 다른 시스템에서 파일을 읽거나 쓰려고 할 때는, 데이터가 올바르게 해석되지 않을 수 있습니다. 이 경우, 엔디언 변환 도구를 사용하여 데이터를 올바른 형태로 변환해야 합니다.

마지막으로, 소프트웨어 개발에서도 엔디언을 고려해야 합니다. 예를 들어, 멀티바이트 정수를 다루는 코드를 작성할 때는, 그 정수가 어떤 엔디언 방식을 사용하는지 알아야 합니다. 이는 특히 포터블 코드를 작성하거나, 다양한 플랫폼에서 동작하는 코드를 작성할 때 중요합니다.

엔디언은 복잡해 보일 수 있지만, 이는 컴퓨팅의 기본적인 부분입니다. 이를 이해함으로써, 우리는 데이터가 어떻게 저장되고, 어떻게 전송되며, 그리고 어떻게 처리되는지에 대한 더 깊은 이해를 얻을 수 있습니다.
 
 
우리에게 더 중요한 것은, 이러한 상황들에서 서로 다른 엔디언을 사용하는 시스템 간에 데이터를 원활하게 이동시키는 방법을 알아야 한다는 것입니다.

엔디언 변환은 바이트 순서를 바꾸는 것으로 간단히 변환시키는 경우도 있습니다. 예를 들어, 4바이트 정수를 리틀 엔디언에서 빅 엔디언으로 바꾸려면, 단순히 4개의 바이트의 순서를 반대로 바꾸면 됩니다. 그러나 이것은 단순한 경우이며, 실제로는 더 복잡합니다. 데이터 구조체를 변환하려면, 각 필드를 개별적으로 변환해야 합니다.

엔디언 변환에 대한 이해는, 데이터가 원활하게 이동하도록 하는 데 중요합니다. 서로 다른 엔디언을 사용하는 시스템 간에 데이터를 전송하거나, 다른 엔디언의 파일을 읽거나 쓰는 작업은 빈번히 일어나는 작업입니다.

다음 시간에는 Rust를 통한 엔디언 변환을 수행하는 실제 코드 예제에 대해 알아보겠습니다.
 

<- 이전으로

다음으로 ->

 

Thanks for watching, Have a nice day.

 

References

https://www.baeldung.com/cs/big-endian-vs-little-endian
https://www.techtarget.com/searchnetworking/definition/big-endian-and-little-endian

반응형
Comments