💻인코딩, 디코딩 이란?
-> 인코딩이란 어떠한 정보를 , 다른 형태로 변환하는 행위를 의미합니다.
컴퓨터에서 문자를 저장,연산하기 위해서는, 컴퓨터가 이해할수있는 즉 바이너코드 0과 1로 변환해주는 작업을 인코딩, 그반대로 바이너리코드를 사람이 이해할수있는 작업을 디코딩이라한다.
그렇다면
컴퓨터가 0과 1로 연산하기 위해 데이터를 인코딩한다면, 값에 맞게 매핑하는 기준이 있어야 할 텐데 기준이 뭘까?
그게 바로 최초로 탄생한 ASCII 테이블이다.
아스키 코드는 처음으로 표준을 정의한 문자열 인코딩 방식이다. 0~127까지 대응되는 문자를 숫자로 표현한다.
하지만, 각나라에서 컴퓨터를 사용함으로써 한글,중국어,일본등 다양한 문자집합과 인코딩방식이 필요했음.
ECU-KR 탄생
그래서 우리나라에서는 컴퓨터로 한글을 표현하는 방법으로 ECU-KR 문자 집합을 만들었다.
EUC-KR은 자체적으로 문자집합 + 인코딩 방식을 모두 포함한 형태이고,동시에 이 문자들을 컴퓨터에 어떻게 저장할지
아스키코드는 문자를 표현할떄는 1바이트 한글을 표현할떄는 2바이트로 표현했다.
하지만 ECU-KR을 지원하지 않는 소프트웨어나 환경이 많아 , 사용 시 데이터 손실, 깨짐 등의 문제가 발생했고,
ECU-KR은 한글을 표현하는데 맞춰진 인코딩임으로써 다른나라 언어(중국어,일어) 표현하는데에는 부족했음.
유니코드 탄생
그래서 이를 해결하기 위해 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 처리할 수 있도록 만든 문자 집합표가 탄생한다.
유니코드는 왜 따로 인코딩 방식이 필요한것인가? (UTF-8)
아스키는 7비트(128개 문자) 만을 사용하기 때문에, 모든 문자가 단순한 정수 값(0~127) 로 직접 대응된다.
즉, "A"라는 문자는 01000001(2진수) = 65(10진수) 로 정해져 있고, 이를 저장하거나 전송할 때 추가적인 변환 과정이 필요 없다.따라서 아스키는 별도의 인코딩 방식이 필요하지 않다.
유니코드 문자는 단순히 저장할수 없고,특정 방식(UTF-8)으로 변환해야한다.
즉, 128개 문자만 다루는 아스키와 달리 유니코드는 100만 개 이상의 문자 가 포함되어 있습니다.
이렇게 많은 문자를 저장하고 전송하려면 단순한 1:1 대응 방식이 불가능 하므로, 다양한 인코딩 방식이 필요합니다.
유니코드 대표적인 인코딩 방식은 UTF-8을 사용한다.
그럼 UTF-8은 뭐야?
UTF-8(Unicode Transformation Format - 8-bit)은 유니코드 문자를 가변 길이(1~4바이트)로 인코딩하는 방식이다.UTF-8인코딩을 사용하는 이유는 다른 인코딩은
문자 A를 저장하려는데 1바이트로 충분히 표현할수 있는것을 고정크기 2바이트,3바이트,4 저장할시 메모리 낭비가 발생한다.하지만 UTF-8은자주 사용하는 문자(영어, 숫자)는 1바이트로 처리 하고 유럽어는 2바이트 한국어는 3바이트로 가변적으로 문자를 저장하기 떄문에 메모리 효율이 좋기떄문에 현재 UTF-8로 인코딩하는 방식이 국제 표준이다.
정리하자면?
- 아스키는 문자 개수가 적어 1:1 매핑이 가능 하므로 별도 인코딩 방식이 필요 없음.
- 유니코드는 문자 개수가 많아 효율적인 저장과 전송을 위해 인코딩 방식이 필요함.
쉽게 말해,
아스키는 "문자 = 숫자" 공식이 단순해서 변환 과정이 필요 없지만,
유니코드는 너무 많은 문자를 다루다 보니 "어떻게 저장할지"를 고민해야 해서 인코딩 방식이 필요한것 이다.
UTF-8 로 변환하는과정
각 문자는 유니코드(Unicode) 코드 포인트 로 표현된.
예를 들어: 한글 '한; 이라는 문자열은 유니코드 표에 -> U+D55C 범위에 표현되며
코드 포인트 범위UTF-8 바이트 수바이트 패턴
- 코드 포인트: U+D55C (10진수: 54620)
- 범위: U+0800 ~ U+FFFF (3바이트)
- UTF-8 변환: 1110xxxx 10xxxxxx 10xxxxxx
- U+D55C → 1101 0101 0101 1100
- 1바이트: 11101101 (0xED)
- 2바이트: 10010101 (0x95)
- 3바이트: 10011100 (0x9C)
- 결과: '한' → 0xED 0x95 0x9C 으로 인코딩된다.
'Develop > CS' 카테고리의 다른 글
[CS] HTTP 메서드 PUT,PATCH 차이점 및 종류 (0) | 2025.02.15 |
---|---|
[Web]Servlet&JSP, Model1/Model2방식 차이와 스프링MVC (1) | 2025.01.22 |
Web Server 와 WAS 차이와 웹 서비스 구조 (0) | 2024.02.18 |
쿠키 와 세션을 이용한 로그인 처리 (0) | 2024.02.17 |