[CORE-004][기초] 문자·이미지·소리를 숫자와 바이트로 보기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[CORE-004][기초] 문자·이미지·소리를 숫자와 바이트로 보기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 255회 작성일 26-08-31 00:35

본문

[이번 수업]
컴퓨터에는 글자, 사진, 목소리가 그대로 저장되지 않습니다. 모두 바이트로 바뀌며, 같은 바이트도 읽는 규칙에 따라 문자·픽셀·소리가 됩니다. 작은 Python 프로그램으로 세 데이터를 만들어 보며 데이터와 해석 규칙의 관계를 배웁니다.

[선수지식]
CORE-001의 입력·처리·출력, CORE-002의 비트·바이트, CORE-003의 메모리·저장장치 역할을 알면 좋습니다. Python 코드는 그대로 실행해도 됩니다.

[학습목표]
1. 문자 코드 포인트와 UTF-8 바이트의 차이를 설명한다.
2. 픽셀·채널·비트 깊이가 이미지 크기를 정하는 원리를 이해한다.
3. 소리의 표본값·표본화율·채널·비트 깊이를 구분한다.
4. 바이트를 해석하려면 형식과 메타데이터가 필요함을 설명한다.

[핵심개념]
문자는 먼저 코드 포인트라는 고유 번호를 얻습니다. '가'는 U+AC00, 'A'는 U+0041입니다. 인코딩은 이 번호를 저장·전송할 바이트로 바꾸는 규칙입니다. UTF-8에서 A는 1바이트, 가는 3바이트이므로 글자 수와 바이트 수는 다를 수 있습니다.

이미지는 작은 점인 픽셀의 격자입니다. 흑백 2×2 이미지는 밝기값 네 개로 표현할 수 있습니다. 색상 이미지는 보통 픽셀마다 빨강·초록·파랑 채널값을 둡니다. 비트 깊이는 채널값의 정밀도입니다. 가로·세로, 채널 수, 비트 깊이를 모르면 바이트를 그림으로 배치할 수 없습니다. PNG는 크기와 색상 형식, 압축 데이터 등을 청크 구조로 담습니다.

소리는 진동을 일정한 간격으로 재어 숫자로 기록합니다. 한 번 잰 값이 표본, 1초에 재는 횟수가 표본화율입니다. 채널은 모노·스테레오처럼 동시에 기록하는 소리 줄의 수이고 비트 깊이는 표본 하나의 정밀도입니다. PCM은 표본값을 순서대로 표현하며, WAV는 표본화율·채널 정보와 PCM 데이터를 담을 수 있는 컨테이너입니다. 원본 값이 완전히 돌아오는 무손실 압축과 일부 정보를 줄이는 손실 압축도 목적에 맞게 선택합니다.

[따라하기]
아래 내용을 media_data.py로 저장합니다.

```python
import struct

text = '가A'
text_bytes = text.encode('utf-8')
code_points = [f'U+{ord(char):04X}' for char in text]

pixels = [[0, 255], [128, 64]]
pixel_bytes = bytes(value for row in pixels for value in row)

samples = [0, 1000, -1000, 32767]
audio_bytes = struct.pack('<4h', *samples)

print('문자 코드:', code_points)
print('UTF-8:', list(text_bytes))
print('픽셀:', list(pixel_bytes), '바이트:', len(pixel_bytes))
print('소리 바이트:', len(audio_bytes))

assert text_bytes.decode('utf-8') == text
assert struct.unpack('<4h', audio_bytes) == tuple(samples)
```

Windows PowerShell에서는 `python media_data.py`, macOS·Linux에서는 보통 `python3 media_data.py`를 실행합니다.

```text
문자 코드: ['U+AC00', 'U+0041']
UTF-8: [234, 176, 128, 65]
픽셀: [0, 255, 128, 64] 바이트: 4
소리 바이트: 8
```

`<4h`는 리틀 엔디언 순서(`<`)로 부호 있는 16비트 정수(`h`) 네 개를 담으라는 뜻입니다. 각 표본이 2바이트이므로 총 8바이트입니다. assert가 조용히 끝나면 원래 값 복원도 통과한 것입니다. 픽셀과 소리는 아직 PNG·WAV 파일이 아닌 원시 값입니다.

[흔한 실수]
- 글자 수를 저장 용량으로 착각합니다. UTF-8 문자마다 바이트 수가 다를 수 있습니다.
- 픽셀값만 있으면 이미지가 된다고 생각합니다. 크기·채널 순서·비트 깊이도 필요합니다.
- 표본 수만 보고 재생 시간을 정합니다. 표본화율과 채널 수도 필요합니다.
- 확장자만 바꾸면 형식이 바뀐다고 생각합니다. 내부 구조는 그대로입니다.

[보안 주의]
외부 파일은 확장자나 전달된 MIME 유형만 믿지 말고 유지 관리되는 라이브러리로 형식을 확인하세요. 크기·이미지 치수·재생 시간에 상한을 두고, 잘못된 UTF-8을 거부할지 대체 문자로 바꿀지 정합니다. 사진·음성의 위치나 기기 메타데이터도 공개 전 확인합니다. 실습은 본인 컴퓨터에서 만든 값만 사용합니다.

[직접 해볼 과제]
1. text를 '한

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
1,763
어제
5,103
최대
16,772
전체
772,817
Copyright © 소유하신 도메인. All rights reserved.