바이트란 무엇인가요?
바이트(byte)는 8비트로 이루어진 디지털 데이터 단위로, 0부터 255까지 256가지 값을 나타낼 수 있습니다. 대부분의 컴퓨터에서 자기 주소를 가지는 가장 작은 메모리 단위이며, 파일 크기는 바이트로 셉니다.
업데이트: 2026년 9월 24일
- 48H
- 69i
- 20␣
- F0 9F 98 80😀
4글자, 7바이트
컴퓨터에 저장된 글자 A는 숫자 65이고, 숫자 65는 여덟 개의 비트 01000001로 저장돼요. 이 여덟 개짜리 묶음이 바이트예요. 메모리 주소도 바이트를 세고, 파일 크기도 바이트를 세며, 프로그래밍 언어의 거의 모든 데이터 타입은 길이가 바이트의 정수배예요.
왜 1바이트는 8비트인가요
"바이트"라는 단어는 1956년 IBM의 Stretch 컴퓨터를 개발하던 베르너 부흐홀츠(Werner Buchholz)가 만들었어요. "bit"로 잘못 읽히지 않도록 y를 넣어 byte로 썼어요. 초기 컴퓨터는 여러 크기의 묶음을 썼는데, 흔히 6비트였어요. 대문자와 숫자에는 충분했지만 소문자까지는 담을 수 없었어요.
1964년에 나온 IBM System/360이 8비트 바이트를 썼고, 나머지 업계가 이를 따랐어요. 8비트는 256가지 값을 주므로 대문자와 소문자, 숫자, 구두점, 제어 코드를 담을 공간이 돼요. 8은 2의 거듭제곱이기도 해서 바이트는 4비트짜리 절반 두 개로 딱 나뉘고, 각 절반은 16진수 한 자리로 써요. 네트워크 표준에서는 정확히 8비트라는 것을 분명히 해야 할 때 지금도 "옥텟(octet)"이라고 써요.
1바이트에 담을 수 있는 것
바이트에는 00000000부터 11111111까지 256가지 패턴이 있어요. 프로그램은 이를 몇 가지 표준 방식으로 읽어요.
- 0부터 255까지의 부호 없는 수로;
- -128부터 127까지의 부호 있는 수로;
A(65)나!(33) 같은 문자 하나로;00부터FF까지의 16진수 두 자리로.
Python의 bytes 타입은 이런 값들의 시퀀스이며, 0부터 255 범위를 벗어나는 값은 받아들이지 않아요.
b'Hi!'
[72, 105, 33]
01001000 48
ValueError: bytes must be in range(0, 256)
모든 문자가 1바이트에 들어가지는 않아요. 웹 대부분이 쓰는 인코딩인 UTF-8은 128개의 ASCII 문자를 각각 1바이트에, 나머지는 2바이트에서 4바이트에 저장해요.
A 1 bytes: [65] 41
é 2 bytes: [195, 169] c3a9
€ 3 bytes: [226, 130, 172] e282ac
😀 4 bytes: [240, 159, 152, 128] f09f9880
그래서 문자열의 글자 수와 바이트 크기가 다를 수 있어요.
비트와 바이트의 차이
비트는 하나의 0 또는 1이에요. 바이트는 8비트예요. 두 단위는 기호가 대소문자만 다르기 때문에 헷갈리기 쉬워요.
| 비트 | 바이트 | |
|---|---|---|
| 정의 | 이진 숫자 하나 | 8비트 |
| 가능한 값 | 2개(0 또는 1) | 256개(0부터 255) |
| 기호 | b(소문자) | B(대문자) |
| 주로 측정하는 것 | 네트워크 속도: Mbps, Gbps | 저장 공간과 파일 크기: KB, MB, GB |
| 예시 | 100 Mbps 인터넷 연결 | 5 MB 사진 |
비트를 바이트로 바꾸려면 8로 나눠요. 100 Mbps 연결은 최대 초당 12.5 MB를 전송하므로, 5 MB 사진을 받는 데 적어도 0.4초가 걸려요.
킬로바이트, 메가바이트, 기가바이트
더 큰 단위에는 두 가지 체계가 있고, 둘 사이의 차이 때문에 새 드라이브가 Windows에서 라벨보다 작게 보예요.
| 10진(SI) | 바이트 | 2진(IEC) | 바이트 |
|---|---|---|---|
| 킬로바이트(kB) | 1,000 | 키비바이트(KiB) | 1,024 |
| 메가바이트(MB) | 1,000,000 | 메비바이트(MiB) | 1,048,576 |
| 기가바이트(GB) | 1,000,000,000 | 기비바이트(GiB) | 1,073,741,824 |
| 테라바이트(TB) | 1,000,000,000,000 | 테비바이트(TiB) | 1,099,511,627,776 |
드라이브 제조사, 네트워크 속도, macOS(2009년 10.6 버전부터)는 10진 단위를 써요. RAM 용량과 Windows는 2진 단위를 쓰지만, Windows는 이를 KB, MB, GB로 표시해요. IEC는 이 혼란을 끝내려고 1998년에 키비바이트, 메비바이트, 기비바이트라는 이름을 도입했지만, 아직 많은 프로그램이 이 이름을 쓰지 않아요.
1.0 TB (decimal, used on the box)
931.3 GiB (binary, what Windows calls GB)
12.5 MB per second
사라진 공간은 없어요. 드라이브에는 상자에 적힌 대로 1조 바이트가 들어 있어요. Windows가 1,000 대신 1,024로 세 번 나눌 뿐이에요.
코드 속의 바이트
메모리의 모든 값은 바이트의 정수배만큼 공간을 차지해요. C에서는 sizeof가 그 수를 알려 줘요. char는 정의상 정확히 1바이트이고, 현재의 64비트 Linux, macOS, Windows 시스템에서 short는 2바이트, int는 4바이트, double은 8바이트예요. 따라서 int 값 1,000개짜리 배열은 4,000바이트를 차지해요.
printf("%zu\n", sizeof(int)); /* prints 4 */
Java의 byte 타입은 항상 부호가 있어서 -128부터 127까지이므로, 200 같은 값은 들어가지 않아요.
byte b = (byte) 200; // b is -56: the same 8 bits, read as signed
이미지, 압축 파일, 네트워크 패킷 같은 원시 데이터는 바이트 배열로 다뤄요. Python에서는 bytes와 bytearray, Java에서는 byte[], JavaScript에서는 Uint8Array예요. Python에서 "rb" 모드로 파일을 열면 텍스트 대신 그 파일의 바이트를 얻어요.
해시와 체크섬도 바이트로 크기를 재요. SHA-256 다이제스트는 32바이트여서 16진수 64자로 출력되고, CRC32 체크섬은 4바이트예요. 해시 생성기는 어떤 텍스트든 두 값을 모두 보여 줘요.
다음 단계
바이트 아래의 단위에 대해서는 비트란 무엇인지를, 손상된 파일을 감지하는 데 바이트가 어떻게 쓰이는지는 체크섬이란 무엇인지를 읽어 보세요. 진법 변환기는 어떤 바이트든 10진수, 2진수, 16진수로 바꿔 주고, C 데이터 타입 가이드에는 C의 모든 타입의 크기가 바이트 단위로 정리되어 있어요.
자주 묻는 질문
8비트 11111111은 무엇이라고 부르나요?
11111111은 모든 비트가 1인 바이트예요. 부호 없는 수로 읽으면 바이트가 담을 수 있는 가장 큰 값인 255이며, 16진수로는 FF로 써요. 2의 보수를 쓰는 부호 있는 바이트로 읽으면 같은 비트가 -1을 뜻해요.왜 8비트가 1바이트인가요?
4비트를 왜 니블(nibble)이라고 부르나요?
1바이트는 4비트인가요?
바이트와 GB 중 어느 쪽이 더 큰가요?
1바이트는 실제로 어떻게 생겼나요?
01000001처럼 0과 1 여덟 개가 늘어선 거예요. 이 패턴은 숫자 65이고, ASCII에서 글자 A의 코드이기도 해요. 프로그래머는 보통 바이트를 16진수 두 자리로 적으므로 01000001은 41이 돼요.