Skip to main content

1바이트씩 출력해 보는 메가바이트·킬로바이트 로드 프로그램 만들기 (초보자 가이드, 쉽게 따라하기)

Published 4 min readMarkdown

# 서론 – “왜 이렇게 많은 데이터를 출력해야 할까?”

프로그램을 개발하거나 서버를 운영할 때 테스트용 데이터가 필요합니다.

예를 들어 파일 업로드·다운로드 속도 측정, 메모리 사용량 파악, 혹은 네트워크 대역폭 검증 등 다양한 상황에서 정해진 바이트 수 만큼의 데이터를 빠르게 만들고 싶어지죠.

하지만 “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])

# 코드 설명 (초보자를 위한 상세 주석)

  1. import sys – 표준 입출력 스트림에 접근하기 위해 사용합니다.

  2. print_bytes 함수 – 인자로 'kb' 혹은 'mb'를 받아 바이트 수를 계산합니다.

  3. chunk – 한 번에 10 000 바이트씩 출력하도록 나누어, 콘솔이 버퍼 오버플로우되는 상황을 방지합니다.

  4. sys.stdout.write – print() 대신 사용하면 줄바꿈 없이 연속 출력이 가능해 파일 입출력과 유사한 동작을 구현합니다.

  5. 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 바이트 = 1 문자 → '0'을 반복 출력하면 바이트 단위 데이터 생성

    2. 파이썬 한 줄 코드로 킬로바이트·메가바이트를 즉시 출력

    3. sys.stdout.write와 flush() 로 파일 입출력 없이도 부하 시뮬레이션 가능

이제 여러분도 프로그래밍 초보 단계에서 바로 활용할 수 있는 “Load a Megabyte or a Kilobyte” 프로그램을 완성했습니다.

행동 유도:

1️⃣ 위 코드를 복사해 load.py 파일에 저장하고 실행해 보세요.

2️⃣ wc -c 혹은 파일 크기 확인 명령으로 정확히 1 KB / 1 MB가 출력되는지 검증해 보세요.

3️⃣ 필요에 따라 네트워크 부하 테스트나 로그 파일 자동 생성 등 다양한 상황에 적용해 보세요.

작은 코드 한 줄이 여러분의 개발·운영 환경을 더 견고하고 효율적으로 만들어 줄 것입니다. 궁금한 점이나 추가 아이디어가 있다면 댓글로 알려 주세요! 🚀

No comments yet. Be the first to comment.

More from this blog