일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JWT 하드코딩
- JWT 만들어보기
- express session
- mysql wsl
- 블록 만들기
- 아이디 중복체크기능
- useContext
- express실행
- next 매개변수
- node.js path
- FormData()
- OAuth 카카오
- 라우터와 미들웨어
- 라우터미들웨어 분리
- ws 라이브러리
- nodejs파일업로드
- 라우트 매개변수
- javascript기초
- express.static
- css기초
- 시퀄라이즈 기본설정
- useEffect clean up
- 세션으로 로그인 구현
- cookie-parser 만들어보기
- buffer.from
- Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>
- JWT 로그인 기능 구현
- 라우터 분리
- 비동기파일업로드
- express router
- Today
- Total
즐코
bit 와 byte / ASCII, Unicode / Text encording ?! 본문
1/ bit와 byte
2/ ASCII, Unicode
3/ Text encording (UTF-8 ?!)
컴퓨터는 0과 1밖에 모른다.
즉 0과 1로 이루어진 데이터/정보들의 조합만 처리 가능하다. (신호가 있고 1 없고 0 => CPU가 처리)
그래서 CPU가 높을수록 많은 데이터 처리가 가능하다!!
1/ bit와 byte
Bit = Binary digit
컴퓨터는 0,1 두 종류 중 하나만 담을 수 있는 bit라는 가장 최소의 단위를 가진다.
1 bit = 0 / 1= 2가지 정보를 담을 수 있다. (boolean : true or false)
2 bits = 00 / 01 / 10 / 11 = 4가지 정보를 담을 수 있다.
4 bits = 0000 / 0001 / ~ / 1110 / 1111 = 2^4 = 16가지 정보를 담을 수 있다 (4 bit = 1 nibble)
8 bits = 2^8 = 256가지의 다른 정보를 담을 수 있다 (8 bit = 1 byte)
컴퓨터 프로그래밍에서는 이 1byte를 가장 기본 단위로 잡고 본다.
쉽게 기본적으로 숫자로 따지면 0~255 까지의 숫자를 나타낼수가 있다.
오랜만에 수학공부(?) 좀 했다. 이렇게 십진수를 이진수로 바꿀 수 있다.
(10진수의 숫자를 2로 나눠지지 않을 때까지 나눠주고 여기서 발생한 나머지를 연결해주면 이진수 탄생!)
2/ ASCII, Unicode
그렇다면, 문자는 과연 어떻게 변환할까?
이 때 나오는 게 ASCII code다. 풀어쓰면 미국 정보 교환용 표준 부호라고 한다.
American Standard Code for International Interchange
즉, 사람들끼리 (물론 영어권사람들끼리ㅋ) 미리 약속해서 알파벳을 컴퓨터가 이해할 수 있는 이진수로 만들어 놓은 문자열 표, 규격과 같은 것이다. 이 문자열 표를 기반으로 알파벳, 즉 문자를 컴퓨터 기계어로 변환을 해준다.
근데 세상엔 영어만 있는게 아니다. 수천만개의 다양한 언어가 존재한다.
그래서 나온게, 바로 Unicode다.
이 유니코드에 들어간 문자열은 1byte에 다 담을수가 없어서 2 byte부터 그 이상의 byte를 이용해서 전체적인 문자열을 나타낸다. 언어뿐만 아니라 온갖 특수문자들도 표현 가능하다.
번외지만, 알파벳과 한글을 메모장에 써보면 한글이 좀 더 뒤로 밀린다. 왜냐면 2byte부터 시작하기 때문
근데, 여기서 근본적으로 왜 bit와 byte를 이해하는게 중요한가?
프로그래밍 시 변수를 선언할 때 어떤 데이터 타입이냐에 따라서 메모리에 얼마나 크게 공간이 확보되는지가 정해진다.
메모리가 넉넉하지 못한 환경에서 동작하는 프로그램의 경우,
이런 데이터 타입을 알맞게 선택해서 효율적으로 작성하는게 중요하다고 한다.
예를 들어 알파벳이나 1, 2처럼 1 byte 정도를 담을 거면서 2바이트나 그 이상의 바이트 타입의 변수를 사용하면 메모리 낭비니까? (혼자 살건데 4룸에서 사는 느낌)
맞는진 모르겠지만!!
오늘 수업에서 자바스크립트를 처음 배웠는데 변수를 선언할 때 왜 데이터 타입에 대해서 배웠는지 알 것 같다..
3/ Text encording (UTF-8 ?!)
Text Encoding
현존하는 많은 문자열을 어떻게 이진수 형태로 나타낼건지 그 규격을 약속하는 것
옛날에는 언어/나라마다 다양한 텍스트 인코딩이 존재했는데, 서로 다른 규격 때문에 웹사이트 깨지는 문제 발생
-> 이걸 해결하기 위해서 나온게 UTF-8 이라고 한다.
UTF-8 : Unicode Transformation For mat(8 bit) 의 약자
맨날 인터넷 하다보면 가끔 UTF-8이란걸 본적이 있었는데, 인코딩 방법이었구나
이는 가변길이 유니코드 인코딩 방식 / 길이가 정해져 있지 않고 필요에 의해 길어질 수 있음을 나타낸다.
모든 ASCII 코드는 7bit로 나타낼 수 있기 때문에 UTF-8 에선 모두 1byte로 표현이 가능하며
유니코드의 경우는 최소 2byte에서 4byte까지 표현이 가능하다.
즉, UTF-8에선 1byte로 표현가능하면 그대로 데이터를 표현하고,
만약 2byte 이상이 필요하면 첫번째 덩어리에서 10을 붙여주고 두번째 덩어리에서 110을 붙여주면서 총 문자를 나타내는데 몇 byte가 필요한지 힌트를 줄수있다고 한다. (문자를 숫자로 인코딩해준걸 다시 인코딩하는건가?)
UTF-16은 이에 비해 가변길이인건 맞지만 기본적으로 2byte를 사용하고 있기 때문에 아스키처럼 1byte로 충분히 표현이 가능함에도 2byte를 소모하게 된다. 그래서 UTF-8이 더 통상적으로 많이 이용된다고 한다.
'CS' 카테고리의 다른 글
웹브라우저의 동작 원리 / 스택, 큐 구조 / 재귀함수 (0) | 2022.01.11 |
---|---|
컴퓨터=하드웨어+소프트웨어+펌웨어 (0) | 2021.12.30 |