[2026] Bit·Byte·KB·MB·GB 완벽 가이드 | 데이터 단위와 이진수 표현
이 글의 핵심
Bit, Byte, KB, MB, GB 등 데이터 단위를 완벽히 이해합니다. 이진수 표현, 2의 거듭제곱, KiB vs KB 차이, 네트워크 속도 표시 방식까지 실전 예제로 설명합니다.
들어가며
Bit, Byte, KB, MB, GB는 프로그래머가 매일 사용하는 기본 단위입니다. 하지만 1KB가 1000바이트인지 1024바이트인지, 100Mbps가 초당 몇 MB인지 헷갈리는 경우가 많습니다. 비유로 말씀드리면, Bit는 전구 하나(켜짐/꺼짐)이고, Byte는 전구 8개의 조합입니다. 이 조합으로 문자, 숫자, 색상 등 모든 데이터를 표현합니다.
이 글을 읽으면
- Bit와 Byte의 개념을 이해합니다
- KB, MB, GB 등 데이터 단위를 파악합니다
- 이진수와 십진수 변환을 익힙니다
- 네트워크 속도 표시 방식을 이해합니다
실무에서 마주한 현실
개발을 배울 때는 모든 게 깔끔하고 이론적입니다. 하지만 실무는 다릅니다. 레거시 코드와 씨름하고, 급한 일정에 쫓기고, 예상치 못한 버그와 마주합니다. 이 글에서 다루는 내용도 처음엔 이론으로 배웠지만, 실제 프로젝트에 적용하면서 “아, 이래서 이렇게 설계하는구나” 하고 깨달은 것들입니다. 특히 기억에 남는 건 첫 프로젝트에서 겪은 시행착오입니다. 책에서 배운 대로 했는데 왜 안 되는지 몰라 며칠을 헤맸죠. 결국 선배 개발자의 코드 리뷰를 통해 문제를 발견했고, 그 과정에서 많은 걸 배웠습니다. 이 글에서는 이론뿐 아니라 실전에서 마주칠 수 있는 함정들과 해결 방법을 함께 다루겠습니다.
목차
Bit와 Byte 기초
Bit (비트)
Bit는 컴퓨터가 다루는 가장 작은 단위입니다.
Bit = Binary Digit (이진수 숫자)
값: 0 또는 1
예시:
0 → 꺼짐 (전구 꺼짐, 스위치 OFF)
1 → 켜짐 (전구 켜짐, 스위치 ON)
Byte (바이트)
Byte는 8개의 Bit입니다. 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
1 Byte = 8 Bits
예시:
01001000 → 'H' (ASCII 코드 72)
01100101 → 'e' (ASCII 코드 101)
왜 8개인가?
역사적 이유:
- 초기 컴퓨터는 6비트, 7비트 등 다양
- IBM이 8비트를 표준화 (1960년대)
- 8비트 = 256가지 조합 (2^8)
- 영문 대소문자 + 숫자 + 특수문자 표현 충분
Bit와 Byte 표기
| 표기 | 의미 | 예시 |
|---|---|---|
| b (소문자) | Bit | 100Mbps (메가비트/초) |
| B (대문자) | Byte | 100MB (메가바이트) |
| 주의: 대소문자 구분이 매우 중요합니다! |
데이터 단위
2진수 기반 (컴퓨터 메모리)
2의 거듭제곱 사용:
| 단위 | 기호 | 값 | 계산 |
|---|---|---|---|
| Byte | B | 1 | 2^0 |
| Kibibyte | KiB | 1,024 | 2^10 |
| Mebibyte | MiB | 1,048,576 | 2^20 |
| Gibibyte | GiB | 1,073,741,824 | 2^30 |
| Tebibyte | TiB | 1,099,511,627,776 | 2^40 |
| 예시: |
RAM 8GB = 8 × 1,073,741,824 = 8,589,934,592 바이트
10진수 기반 (저장장치)
10의 거듭제곱 사용:
| 단위 | 기호 | 값 | 계산 |
|---|---|---|---|
| Byte | B | 1 | 10^0 |
| Kilobyte | KB | 1,000 | 10^3 |
| Megabyte | MB | 1,000,000 | 10^6 |
| Gigabyte | GB | 1,000,000,000 | 10^9 |
| Terabyte | TB | 1,000,000,000,000 | 10^12 |
| 예시: |
SSD 500GB = 500 × 1,000,000,000 = 500,000,000,000 바이트
KiB vs KB 차이
혼란의 원인:
1KB = 1,000 바이트 (10진수, SI 단위)
1KiB = 1,024 바이트 (2진수, IEC 표준)
차이: 1,024 - 1,000 = 24 바이트 (2.4%)
실제 영향:
| 용량 | 10진수 (GB) | 2진수 (GiB) | 차이 |
|---|---|---|---|
| 100GB | 100,000,000,000 | 93.13 GiB | 6.87% |
| 500GB | 500,000,000,000 | 465.66 GiB | 6.87% |
| 1TB | 1,000,000,000,000 | 931.32 GiB | 6.87% |
| 왜 500GB SSD가 465GB로 보이나요? |
제조사: 500GB = 500,000,000,000 바이트 (10진수)
OS: 500,000,000,000 ÷ 1,073,741,824 = 465.66 GiB (2진수)
이진수 표현
이진수 기초
10진수를 2진수로 변환: 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
10진수: 13
2진수: 1101
계산:
13 = 8 + 4 + 1
= 2³ + 2² + 2⁰
= 1×8 + 1×4 + 0×2 + 1×1
= 1101₂
2진수 → 10진수
아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
1101₂ = ?
자릿수: 2³ 2² 2¹ 2⁰
값: 8 4 2 1
비트: 1 1 0 1
계산: 1×8 + 1×4 + 0×2 + 1×1 = 13
10진수 → 2진수
아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
13을 2진수로 변환:
13 ÷ 2 = 6 ....나머지 1 ↑
6 ÷ 2 = 3 ....나머지 0 |
3 ÷ 2 = 1 ....나머지 1 |
1 ÷ 2 = 0 ....나머지 1 |
아래에서 위로 읽기: 1101₂
프로그래밍 언어별 표현
아래 코드는 cpp를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// C++
int x = 0b1101; // 2진수 리터럴 (C++14)
int y = 13; // 10진수
int z = 0xD; // 16진수
std::cout << std::bitset<8>(13); // "00001101"
아래 코드는 python를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
# Python
x = 0b1101 # 2진수
y = 13 # 10진수
z = 0xD # 16진수
print(bin(13)) # "0b1101"
print(hex(13)) # "0xd"
아래 코드는 javascript를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// JavaScript
const x = 0b1101; // 2진수
const y = 13; // 10진수
const z = 0xD; // 16진수
console.log((13).toString(2)); // "1101"
console.log((13).toString(16)); // "d"
네트워크 속도
Mbps vs MB/s
가장 헷갈리는 부분:
Mbps = Megabits per second (메가비트/초)
MB/s = Megabytes per second (메가바이트/초)
변환: Mbps ÷ 8 = MB/s
실전 계산
100Mbps 인터넷: 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// 실행 예제
100Mbps = 100 메가비트/초
= 100 ÷ 8 메가바이트/초
= 12.5 MB/s
1GB 파일 다운로드 시간:
1,000MB ÷ 12.5MB/s = 80초
1Gbps 인터넷: 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
1Gbps = 1,000Mbps
= 1,000 ÷ 8 MB/s
= 125 MB/s
1GB 파일 다운로드 시간:
1,000MB ÷ 125MB/s = 8초
네트워크 속도 비교
| 속도 | Mbps | MB/s | 1GB 다운로드 |
|---|---|---|---|
| 느린 ADSL | 10 | 1.25 | 13분 20초 |
| 일반 인터넷 | 100 | 12.5 | 1분 20초 |
| 기가 인터넷 | 1,000 | 125 | 8초 |
| 10기가 인터넷 | 10,000 | 1,250 | 0.8초 |
왜 8로 나누나?
네트워크 전송 구조: 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
데이터 전송 단위:
[시작 비트][데이터 8비트][패리티 비트][정지 비트]
실제 데이터: 8비트
오버헤드: 시작/정지/패리티 비트
따라서: 1 Byte 전송 ≈ 10 Bits 필요
간단히: Mbps ÷ 8 = MB/s
실전 계산
파일 크기 계산
텍스트 파일: 아래 코드는 code를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
"Hello" = 5글자
ASCII 인코딩:
H = 01001000 (1 Byte)
e = 01100101 (1 Byte)
l = 01101100 (1 Byte)
l = 01101100 (1 Byte)
o = 01101111 (1 Byte)
총 크기: 5 Bytes
UTF-8 한글: 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
"안녕" = 2글자
UTF-8 인코딩:
안 = 11101010 10110000 10010000 (3 Bytes)
녕 = 11101010 10110001 10010101 (3 Bytes)
총 크기: 6 Bytes
이미지 크기 계산
RGB 이미지: 아래 코드는 code를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
해상도: 1920 × 1080 (Full HD)
색상: RGB (각 8비트)
계산:
픽셀 수 = 1920 × 1080 = 2,073,600
각 픽셀 = R(1 Byte) + G(1 Byte) + B(1 Byte) = 3 Bytes
총 크기 = 2,073,600 × 3 = 6,220,800 Bytes
= 6,220,800 ÷ 1,024 = 6,075 KB
= 6,075 ÷ 1,024 = 5.93 MB
압축 효과: 다음은 간단한 code 코드 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
원본: 5.93 MB
JPEG (80% 품질): 약 500 KB (91% 압축)
PNG (무손실): 약 2 MB (66% 압축)
WebP (80% 품질): 약 300 KB (95% 압축)
동영상 크기 계산
1분 Full HD 동영상: 아래 코드는 code를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
해상도: 1920 × 1080
프레임: 30 FPS
시간: 60초
계산:
프레임 수 = 30 × 60 = 1,800
각 프레임 = 5.93 MB (위 계산)
총 크기 = 1,800 × 5.93 MB = 10,674 MB (압축 전)
H.264 압축 (일반):
10,674 MB → 약 100 MB (99% 압축)
메모리 사용량 계산
배열 메모리: 아래 코드는 cpp를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// C++
int arr[1000]; // int는 4바이트
메모리 사용량:
1,000 × 4 = 4,000 Bytes = 4 KB
구조체 메모리: 아래 코드는 cpp를 사용한 구현 예제입니다. 클래스를 정의하여 데이터와 기능을 캡슐화하며. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
struct Person {
char name[20]; // 20 Bytes
int age; // 4 Bytes
double salary; // 8 Bytes
}; // 총 32 Bytes (패딩 제외)
Person people[1000];
메모리 사용량:
1,000 × 32 = 32,000 Bytes = 32 KB
트러블슈팅
1. 파일 크기가 다르게 표시됨
문제:
Windows: 파일 크기 1,024 KB
macOS: 파일 크기 1.0 MB
원인:
- Windows: 1,024 KB (2진수)
- macOS: 1.0 MB (10진수) 해결:
실제 크기: 1,048,576 Bytes
Windows: 1,048,576 ÷ 1,024 = 1,024 KB
macOS: 1,048,576 ÷ 1,000,000 = 1.05 MB
2. 네트워크 속도가 느림
문제:
인터넷: 100Mbps
다운로드 속도: 10 MB/s (예상: 12.5 MB/s)
원인:
- 네트워크 오버헤드 (프로토콜, 헤더)
- 실제 속도는 이론치의 80-90% 계산:
100Mbps ÷ 8 = 12.5 MB/s (이론)
12.5 × 0.8 = 10 MB/s (실제)
3. 메모리 부족 에러
문제:
int arr[1000000000]; // 10억 개
// 메모리 부족 에러
원인: 아래 코드는 code를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
필요 메모리:
1,000,000,000 × 4 Bytes = 4,000,000,000 Bytes
= 4 GB
스택 메모리 제한: 보통 8 MB
해결: 아래 코드는 cpp를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// 힙 메모리 사용
vector<int> arr(1000000000); // 힙에 할당
// 또는 동적 할당
int* arr = new int[1000000000];
마무리
Bit, Byte, KB, MB, GB는 프로그래머의 기본 언어입니다. 핵심 요약:
- 1 Byte = 8 Bits
- 1 KiB = 1,024 Bytes (2진수, 메모리)
- 1 KB = 1,000 Bytes (10진수, 저장장치)
- Mbps ÷ 8 = MB/s (네트워크 속도) 실전 팁:
- 메모리 계산: 2의 거듭제곱 (1024)
- 파일 크기: 상황에 따라 다름
- 네트워크: 비트(b) vs 바이트(B) 구분 다음 단계:
- 비트 연산 완벽 가이드
- 진법 변환 가이드
- 메모리 구조 이해 이제 데이터 단위를 완벽히 이해했으니, 비트 연산으로 넘어가 보세요!