비트 = bit = binary digit
하나의 비트는 0이나 1의 값을 가질 수 있다. 즉, 두 가지 경우의 수를 가진다.
모스부호에서 짧게 누르거나 길게 누르는 두 가지 경우로 문자들을 만드는 것과 같은 원리다.
이 원리는 한 가지 경우를 '무언가'로 약속할 수 있다는 것을 의미한다.
0을 'a'로, 1을 'b'로 약속할 수도 있고, 0을 '$', 1을 '?'로 약속할 수도 있다. 세상에 많은 문자를 저장하기 위해 우리는 많은 경우의 수가 필요하고 그 경우들을 문자 하나하나와 약속할 수 있다.
바이트(byte) = 8bit = 데이터 기본 단위
1비트로는 단 2가지 경우 밖에 약속할 수 없어 효용성이 적다. 그래서 문자를 표현하는 최소 단위를 정해줄 필요가 있었다. 최초 ASCII코드라는 알파벳 문자코드가 존재했는데 이때 한 문자의 크기가 8비트였다. 그래서 8비트가 바이트라는 데이터 기본 단위가 되었다.
8비트는 그럼 몇 가지 경우를 약속할 수 있을까? 2x2x2x2x2x2x2x2, 2의 8제곱, 256가지 경우를 약속할 수 있다.
ASCII코드에서는 알파벳 대문자 21자, 소문자 21자를 약속하고 214가지의 남는 경우는 각종 부호와 숫자, 심지어 제어할 수 있는 코드들로 알맞게 약속한다. 여기서, 제어 코드는 '백스페이스, 경고음' 등을 말한다. ASCII코드 12를 '백스페이스 기능'으로 약속하는 것이다.
유니코드
1바이트(256가지수)로 세상에 수많은 언어를 담기 위해서는 ASCII코드로는 부족했다. 그래서 여러 가지 진보를 거듭한 끝에 유니코드라는 기술이 나왔다. 한 문자를 표현하기 위해 1~4바이트까지 사용한다. 이 말은 256가지 수 ~ 42.9억 수까지 약속할 수 있다는 것을 의미하는데, 어떻게 4바이트가 42.9억 수가 되는지 의문이 들수 있다.
1바이트는 8비트를 의미하고, 2의 8 제곱을 의미한다. 4바이트는 32비트를 의미하고, 2의 32 제곱을 의미한다. 바이트를 먼저 비트로 생각하고 2의 제곱화를 해주어야 비로소 경우의 수를 제대로 계산할 수 있는 것이다.
경우의 수가 40억이 넘나보니 충분히 모든 언어와 약속할 수 있게 된 것이다.
킬로바이트, 메가바이트, 기가바이트, 테라바이트
지금부터 나오는 수들은 상상할 수도 없는 없는 큰 경우의 수를 가진다.
얼마나 큰 지 지금부터 설명해보려고 한다. 일단, 1024바이트는 1킬로바이트를 의마한다. 킬로-> 메가->기가->테라로 단위가 격상하면서 1024(2의 10 제곱)씩 곱수를 가진다. 한데, 1킬로바이트는 얼마나 많은 경우의 수를 담을까? 사실 실존하는 수로 계산하기가 어렵다. 왜냐면 8바이트만 해도 1844해의 수를 가지기 때문이다. '해'는 어마어마어마하게 큰 수다. 8바이트가 그런 수인데, 1024바이트는 얼마나 클까 실제로 1킬로바이트 = 1024바이트 = 2의 8192제곱을 말하며, 기하급수의 개념을 알고 있다면 이 수가 얼마나 엄청난 수인지 알 것이다.
킬로바이트가 이러한데, 메가바이트, 기가바이트, 테라바이트는 전 우주를 표현할 수도 없는 수일 수도 있다.
그런 어마어마한 데이터 단위를 우리는 컴퓨터, 핸드폰에서 쉽게 만날 수 있는 것이다.
텍스트, 이미지 그리고 영상
데이터를 만날 수 있는 곳은 많지만 대표적으로 위 세 개가 있다.
2쪽짜리 한글 문서는 39KB다. 실제로는 2의 319,488 제곱의 수를 가지는 데이터를 의미한다. 매우 매우 크지만 우리에겐 매우 매우 가벼운 데이터다.
위에 보이는 칩 이미지는 550X436X24b 해상도를 가지는 JPG 이미지 파일이다. 용량은 32.7KB다. 한글 문서보다 용량이 적은 사진이 존재할 수 있다는 것을 보여준다. 한데, 어떻게 이게 가능할까? 이미지는 좀 더 복잡하고 좀 더 많은 경우의 수를 계산해서 작업을 해야 나올 것 같아 용량이 더 클 것 같다. 실제로 고해상도 사진 파일들은 기본 1MB를 넘어간다. 헌데, 왜 이 사진은 32.7KB로도 충분히 이미지로서 역할을 할 수 있는 것일까?
답은 JPG라는 압축방식에 있다.
실제로 이 이미지는 719,400바이트719,400바이트 여야 한다. 계산은 550X436X24b라는 해상도를 모두 곱하면 알 수 있다. 719,400바이트는 702KB이다. 그러나 32,7KB면 충분하다. 5% 정도의 데이터로 압축을 한 것이다. 이렇게 압축할 수 있었던 한 가지 이유를 설명하면 쉽 인간의 눈으로 느끼지 못할 부분을 동일하게 배색하는 방법이다. (물론 더 다양한 방법이 있는 것으로 안다.)
데이터를 효율적으로 관리하기 위한 기술들은 계속해서 진보 중에 있다. 데이터 전송속도도 빨라지지만, 데이터 자체 용량 압축 기술도 계속 진보한다.
1시간 이상의 영상은 보통 1GB의 데이터를 차지하는데, 이 속에도 앞서 말한 압축 기술이 담겨있음을 알 수 있다. 또, 영상은 이미지보다 훨씬 진보하고 고용량을 다루는 기술임을 알 수 있다.
데이터 전송 속도, Mbps
데이터는 보관하는 용도이기도 하지만 네트워크 상에서 전송될 수 있기에 이 부분에도 데이터 용량 개념이 들어간다.
핸드폰 테더링으로 연결한 노트북 환경에서 네트워크 상태가 위 사진인데, 여기서 속도를 보면 72.2 Mbps임을 확인할 수 있다.
Mbps는 초당 전송 비트(Megabit Per Second)를 의미하며, 바이트가 아닌 비트이다. 참고로, bps는 1,024 단위로 격상하는 게 아니라 1,000 단위로 올라간다. 그래서 대충 어림잡아 생각하면, 100 Mbps는 10MB/s와 같음을 알 수 있다.
지금 위 사진의 컴퓨터는 7MB/s의 데이터 전송속도를 유지하고 있으며, 위에 사진과 텍스트는 1초 내에 전송할 수 있으며, 1GB 영상은 146초, 2분 26초 걸림을 알 수 있다. (조금 느린 것 같다.ㅋㅋ)
참고로, 속도 속도 하면 떠오르는 휴대폰 LTE 속도는 '17년 기사에 의하면, 평균 133.43 Mbps라고 한다. 특히, SKT는 163.92 Mbps로 3사 중 1등을 기록했다고 한다. (SKT LTE를 사용하면 1GB 영상을 1분이면 다운 가능하다는 것을 의미한다.)
'Googling > cs' 카테고리의 다른 글
[DB] 트랜잭션 격리수준과 부정합 이슈 (feat. Dirty Read ~ Phantom Read) (0) | 2022.04.23 |
---|---|
[CS] 동기(synchronous)와 비동기(Asynchronous)를 쉽게 이해해보기 (feat. 싱크로나이즈드 수영과 핫도그) (0) | 2022.03.18 |
[하드웨어] 보조기억장치 인터페이스 이해 (feat. HDD, SSD, NVMe, PCIe, M.2, SATA) (1) | 2021.06.04 |
[HTTP] RESTful API 이해 (feat. 신입개발자 자격요건) (0) | 2021.05.18 |
[HTTP] 쿠키와 세션 (feat. 신입개발자 면접질문) (0) | 2021.05.13 |