인코딩은 데이터를 특정 형식으로 변환하여 저장하거나 전송할 수 있도록 만드는 과정입니다.
텍스트, 이미지, 영상 등 모든 데이터는 컴퓨터 내부에서 숫자로 저장되므로, 서로 다른 시스템에서도 데이터를 올바르게 읽고 쓸 수 있도록 변환하는 과정이 필요합니다.
| 인코딩 방식 | 설명 | 예시 |
|---|---|---|
| UTF-8, ASCII | 텍스트 데이터를 숫자로 변환 | UTF-8, ASCII, EUC-KR |
| Base64 | 바이너리 데이터를 ASCII 문자로 변환 | 이메일 첨부파일, JSON, 이미지 데이터 URI |
| URL Encoding | URL에 포함할 수 없는 문자(공백, 특수문자)를 변환 | 웹 주소(URL), HTTP 요청 |
| 파일 인코딩 | 오디오, 동영상, 이미지 등 미디어 파일을 특정 포맷으로 변환 | MP3, JPEG, MP4 |
컴퓨터는 문자를 직접 이해할 수 없기 때문에 문자를 숫자로 변환해야 합니다.
이를 위해 문자 인코딩 방식을 사용하며 대표적으로 ASCII, UTF-8, UTF-16 등이 있습니다.
ASCII 코드 예시
console.log("A".charCodeAt(0)); // 65
console.log(String.fromCharCode(65)); // "A"
UTF-8 변환 예시
const utf8Bytes = new TextEncoder().encode("안녕");
console.log(utf8Bytes);
// 출력: Uint8Array(6) [ 236, 149, 136, 235, 133, 149 ]
UTF-16 변환 예시
const utf16Bytes = new TextEncoder("utf-16").encode("Hello");
console.log(utf16Bytes);
// 출력: Uint8Array(12) [ 255, 254, 72, 0, 101, 0, 108, 0, 108, 0, 111, 0 ]
바이너리 데이터를 텍스트(ASCII 코드)로 변환하는 방식 입니다. ASCII 코드 중 하위 문자들로만 변경됩니다.
[##Image|kage@A2U8Y/btsL8YCuhhQ/KO1qLHyq0iZAOGJJ9x4D0K/img.png|CDM|1.3|{"originWidth":526,"originHeight":962,"style":"alignCenter","width":220,"height":402}##]
Base64 인코딩 예시
const text = "Hello, World!";
const base64Encoded = btoa(text);
console.log(base64Encoded); // "SGVsbG8sIFdvcmxkIQ=="
const base64Decoded = atob(base64Encoded);
console.log(base64Decoded); // "Hello, World!"
URL에 포함할 수 없는 특수문자나 공백을 안전하게 변환하는 방식입니다.
URL에는 ASCII 문자(영어, 숫자, 일부 특수 문자)만 허용됩니다.
한글, 공백, &, ?, / 등의 문자들은 URL에서 정상적으로 동작하지 않을 수 있으므로 변환이 필요합니다.
URL 인코딩 예시
const url = "https://example.com?q=hello world!";
const encodedUrl = encodeURIComponent(url);
console.log(encodedUrl);
// 출력: "https%3A%2F%2Fexample.com%3Fq%3Dhello%20world%21"
const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl);
// 출력: "https://example.com?q=hello world!"
음악, 영상, 이미지 등의 파일을 특정 포맷으로 변환하는 방식입니다.
파일 크기를 줄이거나 특정 장치에서 재생할 수 있도록 변환합니다.
| 파일 유형 | 대표적인 인코딩 방식 |
|---|---|
| 이미지 | JPEG, PNG, GIF, WebP |
| 오디오 | MP3, AAC, FLAC, WAV |
| 비디오 | MP4, H.264, HEVC, VP9 |