🥕
TIL
  • [TIL] Studying tech / computer science knowledge
  • KeyMap
  • 알고리즘
    • 복잡도 계산 ( Computational Complexity )
    • DisjointSet-unionFind
    • Bellman-ford Algorithm
    • Dijkstra's Algorithm
    • DP ( Dynamic Programming , 동적 계획법 )
    • 플로이드-워셜 알고리즘 (Floyd-Warshall algorithm)
    • Kruskal's Algorithm
    • 최장 증가 수열 (Longes Increasing Subsequence)
    • Prim's Algorithm
    • 정렬
    • 시간복잡도 와 공간복잡도 ( Time Complexity & Space Complexity )
    • Topological Sort (위상 정렬)
  • 책 읽고난 후 요약
    • 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략
    • cleancode
    • 도메인 주도 설계로 시작하는 마이크로서비스 개발
    • 오브젝트
  • CDC
    • debzium
    • kafka
  • 개발 상식
    • asciidoctor
    • 컴파일러
    • ELK 스택
    • 엔디안
    • git
    • Gitmoji
    • 테스트 종류
    • 라이브러리와 프레임워크
    • 정규 표현식
    • REST API
    • 동기와 비동기 / Blocking과 NonBlocking
    • Transaction Script와 Domain Model
    • 디자인 패턴
      • 행동 패턴
      • 객체 생성 패턴
        • 추상 팩토리 패턴
        • 빌더 패턴
        • 팩토리 메서드 패턴
        • [생성 패턴] 프로토 타입 (Prototype Parttern)
        • 싱글톤
      • 구조 패턴
        • 어댑터 패턴
        • 브릿지 패턴
        • 컴포짓(Composite) 패턴
        • 데코레이터
        • 프록시
    • refactoring
      • 중복 코드
      • 전역 데이터
      • 긴 함수
      • 긴 매개변수 목록
      • 가변 데이터
      • 이해하기 힘든 이름
  • 자료구조
    • AVL Tree
    • Splay Tree
    • aaTree
    • array-list
    • 자료구조 시간/공간 복잡도
    • 그래프
    • 힙
    • Red Black Tree
    • stack-queue
    • 트리 ( Tree )
  • DevOps
    • MSA
    • Kubernetes
      • AccessingAPI
      • controller
      • dashboard
      • kubernetes
      • object
      • pod
      • service
      • volume
  • Java
    • 어노테이션
    • 제어문
    • 데이터 타입
    • Enum
    • jvm
    • 연산자
    • thread
    • Java8
      • CompletableFuture
      • Date/Time
      • 어노테이션과 메타스페이스
      • 인터페이스
      • 람다식
      • Optional
      • 스트림
  • JavaScript
    • moduleProject
    • webpack-babel
    • 코어 자바스크립트
      • array
      • 함수 바인딩
      • 데코레이터와 포워딩
      • Class
      • 비교 연산자
      • Date 내장 객체
      • destructuring-assignment
      • function
      • 함수의 prototype 프로퍼티
      • 가비지 컬렉션 ( Garbage Collection )
      • JSON (JavaScript Object Notation)
      • map-set
      • 내장 프로토타입
      • new연산자와 생성자 함수
      • 객체
      • Object.keys, values, entries
      • 옵셔널 체이닝 '?.'
      • 프로퍼티 플래그
      • 프로퍼티 종류
      • 프로토 타입
      • 호출 스케줄링 ( scheduling a call )
      • scope
      • this
      • type-conversions
      • type
      • 함수의 자료형
      • var_let_const
  • Linux
    • 기본 명령어
    • 파일 종류
    • 리눅스
  • 네트워크
    • 응용 계층 ( Application Layer )
    • 오류 검출과 오류 정정
    • Http
    • Http Header
    • 컴퓨터 네트워크란
    • 네트워크 계층
    • 네트워크 제어 영역
    • 전송 계층 ( Transport Layer )
  • PHP
    • Facade
    • composer
    • scopeResolutionOperator
    • Laravel
      • SocialProvider
      • architecture
      • blade
      • controller
      • db
      • dbArchitecture
      • debug
      • eloquent
      • email
      • event
      • exceptionHandling
      • middleware
      • model
      • modelFactory
      • pagingLoading
      • queryBuilder
      • route
      • scout
      • seeding
      • tntsearch
      • validate
      • view
  • React
    • Next.js
    • React 란?
  • Spring
    • Controller
    • 요청이 들어왔을때 스프링이 처리하는 방법 ( 내부구조 )
    • ConfigurationProperties
    • Entity / DTO / VO
    • Maven
    • Repository와 DAO
    • 스프링 빈
    • Spring Framework
    • MVC 패턴
    • 도메인 입력값 검증
    • Spring Cloud
      • Spring Cloud
      • Eureka
    • Spring Data
      • JPA
      • JPA 어노테이션
      • 엔티티 비교
      • 복합 키와 식별 관계 매핑
      • JPA 예외처리
      • 객체지향 쿼리
      • EntityManagerFactory와 EntityManager
      • JPA 최적화
      • 프록시와 연관관계 맵핑
      • 연관관계
      • 상속관계 맵핑
      • 트랜잭션 범위와 영속성 컨텍스트
      • 데이터 타입
      • MySQL 연결
      • Pageable
    • Spring Project들과 library
      • Custom Serialize
      • Elasticsearch Index API
      • Spring HATEOAS
      • lombok (롬복)
      • Model Mapper
      • Object Mapper
      • Representation Model
      • Spring REST Docs
      • Spring Boot
    • Spring Security
      • Spring Security
      • Authentication
      • Authentication Filter
      • Authorization Filter
      • Filter Chain
      • SecurityContext
      • Spring OAuth2.0
    • Spring Test
      • AssertJ
      • Junit5
      • JunitParams
      • Mock Object
  • DataBase
    • ALIAS
    • CONCAT
    • CTE
    • Group By
    • HAVING
    • IFNULL
    • 인덱스
    • JOIN
    • ORDER BY
    • ROLLUP
    • SELECT
    • SELECT DISTINCT
    • SQL
    • WHERE
  • Web 상식
    • OAuth
    • WAS
    • HTTP통신 기반 인증
    • 브라우저
    • CSR 과 SSR
    • HTTPS
    • Web
Powered by GitBook
On this page
  • 빅 엔디안
  • 리틀 엔디안
  • 바이 엔디안 (Bi Endian)
  • 미들 엔디안
  • Reference
  1. 개발 상식

엔디안

PreviousELK 스택Nextgit

Last updated 3 years ago

데이터를 저장하면 메모리에 저장이 되는데 이때 그냥 저장하는 것이 아닌 데이터(바이트)를 어떻게 저장하냐에 따라 크게 두가지로 나뉘어 저장이 된다.

엔디안? 배열형식으로 되어있는 메모리블럭에 데이터를 배열하는 방법

빅 엔디안

MSB(Most Significant Byte) 부터 메모리 앞의 주소에 저장하는 방식

예를 들어 0x12FF34라는 데이터가 있을 때 데이터가 메모리에 앞에서부터 12 / FF / 34 순서대로 저장되는 방식이다.

보통 메모리는 1블럭에 1byte를 갖고 16진수는 1자리수에 4bit를 필요로 하기 때문에 메모리의 1블럭에 숫자 2개씩 들어가게 되고 Big Endian은 데이터 앞에서부터 메모리의 앞의 자리에 삽입되는 방식이다.

주로 네트워크의 ip주소같은 곳에 쓰이고 있다.

빅엔디안은 사람이 읽고쓰기 편하게 앞에서부터 저장이 되기 때문에 디버깅도 쉬울수 있다는 장점이 존재하지만 32bit 빅엔디안의 환경에서 0x12의 12의 데이터bit를 사용하려고 할때 0x12는 00 00 00 12으로 표시되고 이를 꺼내쓰기 위해서는 앞의 3byte를 날리는 등의 작업이 필요로 하다.

또한 가산기와 같이 하위 숫자부터 더해 올림을 해주어야하는 등의 작업은 오히려 불편해진다.

네트워크 통신은 빅엔디언 방식을 사용하기 때문에 ip주소가 192.168.0.1이라면 그대로 앞에서부터 192(c0), 168(a8), 0(00), 1(01)로 읽고 쓰면 되고 데이터 전송을 할때는 꼭 빅엔디안에 맞춰 전송을 해야한다.

대표적인 빅엔디안으로 JVM도 있다. JVM은 다른 아키텍쳐와다르게 레지스터기반이 아닌 JVM 스택기반으로 동작하는데 플랫폼간의 독립성을 유지하기 위함과 네트워크 전송 시 유리한 빅엔디안 방식을 사용한다.

리틀 엔디안

LSB(Least Significant Byte) 부터 메모리 앞의 주소에 저장하는 방식

똑같이 0x12FF34라는 데이터가 있을 때 이번에는 반대로 뒤의 숫자부터 메모리의 앞에 저장되는 방식이고 주로 인텔, AMD의 아키텍쳐가 리틀 엔디안으로 동작한다.

사람이 보기 불편할 수 도 있지만, 32bit의 0x12를 표현할때 12 00 00 00순으로 저장이 되기 때문에 메모리 앞에서 바로 꺼내사용할 수 있고, 수치계산시에 하위 숫자(메모리의 상위에 위치한 데이터)부터 계산하기 때문에 올림을 계산하기 수월하다는 장점이 있다.

하지만, 숫자의 비교에 있어서는 빅엔디안보다는 느릴 수 있다.

바이 엔디안 (Bi Endian)

ARM과 같은 아키텍쳐는 제조사가 설계할때 둘 중 선택할 수 있게 설계되었다.

예를 들어 ARM아키텍쳐를 이용해 제조하는 퀄컴은 둘 중 선택하여 제조를 하고 설명서에 어떤 엔디안을 사용했는지 명시한다.

미들 엔디안

한가지만 선택하여 설계한 것이 아닌 2바이트 단위는 빅엔디안, 2바이트 안의 1바이트는 리틀 엔디안으로 설계하는 것과 같이 한번에 두개를 동시에 사용하는 방식이다.


Reference

https://duzi077.tistory.com/201

https://d2.naver.com/helloworld/1230

bigEndian
littleEndian