정의 및 사용 방법
Window
객체의 atob()
함수는 주어진 Base64로 인코딩된 ASCII 문자열을 디코딩하여, 원래의 이진 문자열(문자열의 각 문자가 1바이트 단위로 처리되는 문자열, 예: 숫자, 알파벳)로 반환합니다.
이 함수는 웹 클라이언트 환경에서 JSON, 데이터 URI 등 텍스트 기반의 통신 채널에서 전송된 Base64 문자열을 디코딩하여 원본의 이진 문자열 타입 데이터로 복원할 때 주로 사용됩니다.
주의할 점 - 디코딩할 문자열의 한계
atob()
함수는 주어진 Base64로 인코딩된 ASCII 문자열을 디코딩하도록 고안되었습니다.
Base64로 인코딩된 ASCII 문자열이 아닌 유효하지 않은 문자열은 제대로 처리할 수 없습니다. InvalidCharacterError
와 같은 예외가 발생합니다.
또한 디코딩된 문자열은 이진 문자열 데이터입니다. 인코딩 전의 원본 데이터에 이진 문자열이 아닌 멀티바이트 문자열(예: 한국어, 일본어, 중국어, 이모지와 같은 문자열)이 포함되어 있었다면 디코딩 시 원본 데이터가 손상됩니다.
구문
atob(encodedData)
매개변수
encodedData |
이진 문자열(문자열의 각 문자가 이진 데이터 바이트로 처리되는 문자열, 예: 숫자, 알파벳)을 Base64로 인코딩한 ASCII 코드로 구성된 문자열 |
---|
반환 값
encodedData
를 원본 이진 문자열(문자열의 각 문자가 1바이트 단위로 처리되는 문자열, 예: 숫자, 알파벳)로 반환합니다. encodedData
의 인코딩 전 원본 데이터에 멀티바이트 문자열이 포함되어 있었다면 1바이트를 초과하는 단위이므로, 처리할 수 없어 원본 데이터가 손상됩니다.
예외
encodedData
에 유효하지 않은 Base64 데이터가 포함되어 있으면 InvalidCharacterError
가 발생합니다.
예제
아래 예제들은 atob()
함수의 기본 사용법부터, 실제 활용까지 보여줍니다.
기본 디코딩
atob()
함수는 Base64로 인코딩된 ASCII 문자열을 디코딩하여, 원래의 이진 문자열(문자열의 각 문자가 1바이트 단위로 처리되는 문자열, 예: 숫자, 알파벳)로 반환합니다.
이 예제는 가장 기본적인 디코딩 방식을 보여줍니다.
const encoded = "SGVsbG8sIFdvcmxkIQ=="; // 원본: "Hello, World!"
const decoded = atob(encoded);
console.log(decoded); // 출력: Hello, World!
const encoded = "SGVsbG8%"; // 원본: "Hello, World!"
const decoded = atob(encoded);
console.log(decoded); // 출력: Hello, World!
JWT 토큰 페이로드 디코딩
btoa()
와 atob()
는 Base64 인코딩/디코딩에 사용되므로, 실제 웹 개발에서는 JWT(Json Web Token)와 같은 토큰 처리에도 활용할 수 있습니다.
아래 예제에서는 JWT 토큰의 페이로드 부분을 추출하고 디코딩하여 JSON 객체로 확인하는 과정을 보여줍니다.
부연설명
btoa()
함수는 주어진 이진 문자열(문자열의 각 문자가 이진 데이터 바이트로 처리되는 문자열, 예: 숫자, 알파벳)을 Base64로 인코딩한 ASCII 코드로 구성된 문자열로 반환합니다.
// 예시 JWT 토큰 (실제 토큰은 훨씬 길 수 있습니다)
const token = "eyJhbGciOiJIUInR5cCI6IkpXVCJ9.eyJ1c2VImlhdCI6MTY3ODA0ODgwMH0.SignaturePart";
// 1. 페이로드(두 번째 부분) 추출
// JWT는 "헤더.페이로드.서명" 형태로 구성되므로 split('.')로 나눕니다
const payloadBase64 = token.split('.')[1];
console.log(`추출된 페이로드(Base64): ${payloadBase64}`);
// 2. atob()를 사용하여 디코딩 (Base64 → JSON 문자열)
// btoa()는 인코딩, atob()는 디코딩 용도로 사용됩니다
const decodedJsonString = window.atob(payloadBase64);
console.log(`디코딩된 JSON 문자열: ${decodedJsonString}`);
// 3. JSON.parse()로 문자열을 객체화하여 정보 확인
const payloadObject = JSON.parse(decodedJsonString);
console.log(`사용자 ID: ${payloadObject.userId}`);
console.log(`토큰 만료 시간(exp): ${new Date(payloadObject.exp * 1000)}`);
// ⚠️ 주의:
// 실제 JWT 사용 시 민감 정보 처리에 주의하고,
// 클라이언트에서 디코딩만으로 인증 여부를 판단하면 안 됩니다.
호환성
메서드 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
Node.js
|
---|---|---|---|---|---|
atob()
|
4 | 12 | 1 | 3 | 16 |
웹 워커(Web Workers) 환경에서 사용 | 30 | 12 | 1 | 10 | 16 |
명세서
명세서 사양 | |
---|---|
atob()
|
HTML #dom-atob-dev |
같이 보기
- 자바스크립트 btoa() 함수 – 이진 문자열을 base64로 인코딩하기
- 자바스크립트 encodeURI() 함수 – 전체 URL을 인코딩할 때
- 자바스크립트 encodeURIComponent()
- 자바스크립트 URL 인코딩 함수 비교 – encodeURI() 함수와 encodeURIComponent() 함수
- 자바스크립트 encodeURI()로 인코딩한 URL 디코딩 – decodeURI()
- 자바스크립트 encodeURIComponent()로 인코딩한 URL 디코딩 – decodeURIComponent()
- 자바스크립트 URL 디코딩 함수 비교 – decodeURI() 함수와 decodeURIComponent() 함수