atob(encodedData)
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 토큰 (실제 토큰은 훨씬 길 수 있습니다)
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 사용 시 민감 정보 처리에 주의하고, 
// 클라이언트에서 디코딩만으로 인증 여부를 판단하면 안 됩니다.