1바이트씩 출력해 보는 메가바이트·킬로바이트 로드 프로그램 만들기 (초보자 가이드, 쉽게 따라하기)
# 서론 – “왜 이렇게 많은 데이터를 출력해야 할까?”
프로그램을 개발하거나 서버를 운영할 때 테스트용 데이터가 필요합니다.
예를 들어 파일 업로드·다운로드 속도 측정, 메모리 사용량 파악, 혹은 네트워크 대역폭 검증 등 다양한 상황에서 정해진 바이트 수 만큼의 데이터를 빠르게 만들고 싶어지죠.
하지만 “1 MB를 바로 만들고 싶다”는 생각은 간단해 보이지만, 실제로는 ‘0’ 문자 1 048 576번을 출력하는 정도의 로직이 필요합니다.
이번 포스트에서는 레딧에 올라온 “Load a Megabyte or a Kilobyte” 아이디어를 기반으로, 파이썬만 있으면 몇 줄의 코드로 킬로바이트·메가바이트 단위 데이터를 손쉽게 “프린트”하는 방법을 초보자도 이해할 수 있게 풀어보겠습니다.
핵심 키워드:
파이썬 파일 입출력,바이트 단위 출력,프로그래밍 초보
# 1. 프로그램 개요와 원리
# 1‑1. 1 바이트 = 1 문자
컴퓨터는 문자 하나를 1 바이트(ASCII 기준)로 저장합니다.
따라서 '0' 한 글자를 print() 하면 1 바이트가 출력되는 것이죠.
# 1‑2. 킬로바이트와 메가바이트 정의
| 단위 | 바이트 수 | 파이썬 코드 예시 |
|------|-----------|-----------------|
| 1 KB | 1 024 B | '0' * 1024 |
| 1 MB | 1 048 576 B| '0' * 1024 * 1024 |
즉, ‘0’을 1 024번 반복하면 1 KB, ‘0’을 1 048 576번 반복하면 1 MB가 됩니다.
# 1‑3. 왜 “프린트”만으로도 충분할까?
콘솔에 출력되는 텍스트 자체가 파일이 아니라 메모리 버퍼에 저장됩니다.
테스트용이라면 파일을 실제로 쓰지 않아도 표준 출력만으로 충분히 부하를 발생시킬 수 있습니다.
파일 입출력(
파이썬 파일 입출력)보다 속도가 빠르고 코드가 간결합니다.
# 2. 파이썬으로 구현하기 – 초보자도 5분 안에 완성!
아래 코드는 명령줄 인자로 kb 혹은 mb를 받아 해당 크기의 데이터를 콘솔에 출력합니다.
python
# !/usr/bin/env python3
import sys
def print_bytes(size: str):
'''size가 'kb'이면 1KB, 'mb'이면 1MB를 출력한다.'''
if size.lower() == 'kb':
count = 1024 # 1KB = 1024 바이트
elif size.lower() == 'mb':
count = 1024 * 1024 # 1MB = 1,048,576 바이트
else:
print('사용법: python load.py [kb|mb]')
return
# 바이트 단위 출력 (키워드: 바이트 단위 출력)
# 한 번에 너무 많이 출력하면 콘솔이 멈출 수 있으니
# 10,000개씩 나눠서 출력한다.
chunk = 10_000
full_chunks, remainder = divmod(count, chunk)
for _ in range(full_chunks):
sys.stdout.write('0' * chunk)
if remainder:
sys.stdout.write('0' * remainder)
# 마지막에 개행을 넣어 깔끔하게 마무리
sys.stdout.write('\n')
sys.stdout.flush()
if __name__ == '__main__':
if len(sys.argv) != 2:
print('사용법: python load.py [kb|mb]')
else:
print_bytes(sys.argv[1])
# 코드 설명 (초보자를 위한 상세 주석)
import sys– 표준 입출력 스트림에 접근하기 위해 사용합니다.print_bytes함수 – 인자로'kb'혹은'mb'를 받아 바이트 수를 계산합니다.chunk– 한 번에 10 000 바이트씩 출력하도록 나누어, 콘솔이 버퍼 오버플로우되는 상황을 방지합니다.sys.stdout.write–print()대신 사용하면 줄바꿈 없이 연속 출력이 가능해 파일 입출력과 유사한 동작을 구현합니다.flush()– 버퍼에 남아 있는 데이터를 강제로 출력합니다.
팁: 파일에 저장하고 싶다면
sys.stdout을 파일 객체(open('output.bin','wb'))로 바꾸면 됩니다. 이때는 바이트 문자열(b'0')을 사용해야 합니다.
# 3. 실행 결과 확인 방법
# 3‑1. 콘솔에서 바로 확인
bash
$ python load.py kb | wc -c
1024
$ python load.py mb | wc -c
1048576
wc -c는 바이트 수를 세어 주는 리눅스 명령어입니다.위와 같이 파이프(
|)를 연결하면 출력된 바이트 수를 즉시 검증할 수 있습니다.
# 3‑2. 파일로 저장하고 확인하기
bash
$ python load.py mb > test.bin
$ ls -l test.bin
-rw-r--r-- 1 user user 1048576 Dec 13 12:30 test.bin
파일 크기가 1 MB가 된 것을 확인할 수 있습니다.
이때는 파이썬 파일 입출력을 활용한 것이므로, 파일 시스템에 실제 데이터가 기록됩니다.
# 4. 응용 아이디어 – 테스트 환경을 더 풍부하게 만들기
| 활용 분야 | 구체적인 적용 예시 |
|----------|-------------------|
| 네트워크 부하 테스트 | nc(netcat)와 결합해 nc -l 12345 < test.bin 로 전송 속도 측정 |
| 메모리 사용량 측정 | python -c 'data='0'* (1024*1024*10); print(len(data))' 로 10 MB 메모리 할당 |
| 스트리밍 서비스 시뮬레이션 | ffmpeg -f lavfi -i testsrc=size=1280x720:rate=30 -t 5 -f rawvideo - 와 파이프 연결 |
| 로그 파일 자동 생성 | 일정 주기로 load.py kb >> daily.log 로 로그 파일 용량 관리 |
이처럼 ‘0’만 출력하는 간단한 프로그램도 상황에 맞게 조합하면 다양한 테스트 시나리오를 손쉽게 구축할 수 있습니다.
# 결론 – 직접 실행해 보고, 나만의 부하 테스트 도구를 만들어 보세요!
핵심 요점
1 바이트 = 1 문자 →
'0'을 반복 출력하면 바이트 단위 데이터 생성파이썬 한 줄 코드로 킬로바이트·메가바이트를 즉시 출력
sys.stdout.write와flush()로 파일 입출력 없이도 부하 시뮬레이션 가능
이제 여러분도 프로그래밍 초보 단계에서 바로 활용할 수 있는 “Load a Megabyte or a Kilobyte” 프로그램을 완성했습니다.
행동 유도:
1️⃣ 위 코드를 복사해
load.py파일에 저장하고 실행해 보세요.2️⃣
wc -c혹은 파일 크기 확인 명령으로 정확히 1 KB / 1 MB가 출력되는지 검증해 보세요.3️⃣ 필요에 따라 네트워크 부하 테스트나 로그 파일 자동 생성 등 다양한 상황에 적용해 보세요.
작은 코드 한 줄이 여러분의 개발·운영 환경을 더 견고하고 효율적으로 만들어 줄 것입니다. 궁금한 점이나 추가 아이디어가 있다면 댓글로 알려 주세요! 🚀
Comments
Join the discussionNo comments yet. Be the first to comment.