컴퓨터는 문자를 그대로 이해하지 못하고, 결국 숫자(바이트) 로 처리합니다.
따라서 우리가 입력한 안녕?, ABC123 같은 문자열은 내부적으로는 특정 규칙에 따라 숫자로 바뀌어 저장되거나 전송됩니다.
이때 중요한 개념이 바로 문자집합Character Set 과 인코딩(Encoding) 입니다.
1. Character Set
문자를 숫자에 매핑한 것을 문자 집합이라고 합니다.
Ex) A -> 65, B -> 66 등
대표적인 문자집합:
- ASCII
- EUC-KR
- Shift_JIS
- UTF-8
- UTF-16
- CP949 (한글 Windows 계열에서 많이 사용)
- 일본 Windows 코드페이지 (대표적으로 Shift_JIS 계열)
즉, 같은 문자라도 어떤 문자집합/인코딩 규칙을 쓰느냐에 따라 저장되는 바이트 값이 달라질 수 있습니다.
2. ASCII Code
ASCII는 영어, 숫자, 특수문자 등을 표현하는 기본적인 캐릭터셋입니다.

하지만 이것으로 한글 등 다른 나라 문자를 표현할 수 없습니다.
이러한 문제를 해결하기 위해 더 큰 문자집합이 필요합니다.
3. Encoding
한글 Windows에서 '안녕?' 이라고 쓴 뒤 일본 Windows 사용하는 친구에게 채팅을 치면 '뷁궥ㄹ뤡' 이런식으로 될 것입니다.
이걸 그대로 다시 한글 Windows로 가져오면 '불굮뢉ㄱ' 이렇게 될 것입니다.
서로 사용하는 문자집합과 인코딩 방식이 다르기 때문에 발생하는 문제입니다.
즉, 데이터 자체가 망가진 게 아니라,
같은 바이트를 다른 문자표로 읽어서 깨져 보이는 것입니다.
이 현상을 흔히 문자 인코딩 깨짐(모지바케, mojibake) 이라고 합니다.
예를 들어 안녕? 를 어떤 인코딩으로 바이트로 저장했다고 가정해보겠습니다.
- 사용자가 안녕? 입력
- 시스템이 이를 특정 인코딩(CP949, UTF-8 등)으로 바이트 변환
- 다른 시스템이 그 바이트를 다른 인코딩 방식으로 해석
- 결과: 뷁궥ㄹ뤡 같은 깨진 문자열 출력
핵심은 이겁니다.
- 인코딩: 문자를 바이트로 바꾸는 과정
- 디코딩: 바이트를 문자로 해석하는 과정
- 인코딩/디코딩 규칙이 서로 다르면 글자가 깨짐
4. URL Encoding
URL에는 한글, 공백, 특수문자 등을 그대로 넣기 어려운 경우가 많습니다.
그래서 웹에서는 URL에 안전하게 넣기 위해 퍼센트 인코딩(percent-encoding) 을 사용합니다.
예시:
대디펫 → %EB%8C%80%EB%94%94%ED%8E%AB
이 %EB%8C%80... 형태는 보통 UTF-8 바이트를 16진수로 표현한 것입니다.
네이버에 한글로 키워드 검색 후 URL을 자세히 보면
https://search.naver.com/search.naver?...&query=%EB%8C%80%EB%94%94%ED%8E%AB
query 값에 한글이 인코딩 되어 있는 것을 확인할 수 있습니다.
브라우저는 이 값을 URL 디코딩해서 다시 원래 문자열 대디펫 으로 해석합니다.
5. Base64 Encoding
Base64는 데이터를 64개의 문자만 사용해서 텍스트처럼 표현하는 방식입니다.
주로 이런 경우에 사용합니다.
- 바이너리 데이터를 텍스트 환경에서 안전하게 전송할 때
- 이메일 첨부
- JSON/XML에 바이너리 포함
- 토큰, 이미지 데이터 전달 등

Base64의 중요한 특징:
- 암호화가 아님
- 규칙만 알면 누구나 다시 원문 복원 가능
- 목적은 숨김이 아니라 표현/전송 편의성
즉, Base64는 보안 기능이 아닙니다.
7. HTML Encoding
HTML에서는 <, >, &, " 같은 문자가 태그로 해석될 수 있습니다.
그래서 이를 안전하게 출력하기 위해 HTML 엔티티로 인코딩하여 사용합니다.
예시:
- < → <
- > → >
- & → &
숫자 엔티티도 가능합니다.
- A → A
- 가 → 가
즉 HTML Encoding은 아래의 역할을 수행합니다.
- 브라우저가 문자를 태그로 오해하지 않게 함
- 웹페이지에 문자를 안전하게 표시하기 위한 용도
8. 인코딩과 암호화의 차이
인코딩(Encoding)
데이터를 다른 형식으로 표현하는 것입니다.
목적:
- 저장
- 전송
- 호환성
- 표현 규칙 통일
예시:
- UTF-8
- URL Encoding
- Base64
- HTML Encoding
특징:
- 규칙만 알면 누구나 디코딩 가능
- 기밀성 보장 목적이 아님
암호화(Encryption)
데이터를 인가된 사람만 읽을 수 있도록 변환하는 것입니다.
목적:
- 기밀성(confidentiality)
예시:
- AES
- RSA
특징:
- 키가 있어야 복호화 가능
- 단순 인코딩과 달리, 아무나 바로 읽을 수 없게 하는 것이 목적
'Web Hacking' 카테고리의 다른 글
| [Web Hacking] Web Trend (0) | 2026.03.13 |
|---|---|
| [Web Hacking] 브라우저 보안 정책 - SOP, CORS, Origin (0) | 2026.03.10 |
| [Web Hacking] HTTP Method (0) | 2026.03.10 |
| [Web Hacking] 요청과 응답 (Request, Response) (0) | 2026.01.30 |
| [Web Hacking] 웹의 작동 원리와 개발 방식 (0) | 2026.01.30 |
댓글