왜 이런 도구가 매번 필요할까
큰 프레임워크나 라이브러리를 쓸 일은 계획적으로 준비하지만, 해시값 하나 뽑아보거나 JWT 토큰 내용 확인하거나 타임스탬프를 사람이 읽는 날짜로 바꾸는 일은 늘 갑자기, 짧게 필요합니다. 그때마다 새 터미널을 열고 스크립트를 짜기보다, 브라우저에서 바로 처리되는 도구를 북마크해두면 훨씬 빠릅니다. 아래 도구들은 모두 파일이나 입력값을 서버로 보내지 않고 브라우저 안에서만 계산되므로, 토큰이나 해시값처럼 민감할 수 있는 값도 비교적 안심하고 다룰 수 있습니다.
해시(SHA-1/256/512) 생성기
해시 생성기는 입력한 텍스트의 SHA-1·SHA-256·SHA-512 해시값을 계산합니다. 브라우저에 내장된 Web Crypto API를 그대로 사용하기 때문에 별도 라이브러리 없이도 Node.js의 crypto.createHash()나 리눅스 sha256sum 명령과 동일한 결과를 얻을 수 있습니다. 파일 무결성을 확인하거나(다운로드한 파일의 해시값이 배포 사이트에 적힌 값과 같은지), 두 텍스트가 완전히 같은지 빠르게 비교할 때 유용합니다.
주의할 점은 해시는 단방향이라는 것입니다. 결과값만 보고 원본 텍스트를 되돌릴 수 없고, 같은 입력이면 항상 같은 출력이 나온다는 성질만 보장됩니다. 그래서 비밀번호를 저장할 때도 평문 대신 해시값(정확히는 salt를 섞은 값)을 저장하는 방식이 널리 쓰입니다.
UUID 생성기
UUID 생성기는 RFC 4122 v4 규격의 UUID를 생성합니다. 개수를 지정하면 한 번에 여러 개를 만들 수 있어, 테스트 데이터의 기본키(primary key)를 대량으로 채워야 할 때나 데이터베이스 레코드 ID, 세션 토큰, 파일명 충돌 방지용 식별자가 필요할 때 바로 복사해 쓸 수 있습니다. v4 UUID는 사실상 무작위 값이라 중앙 서버 없이도 서로 다른 클라이언트에서 동시에 생성해도 충돌할 확률이 극히 낮습니다.
JWT 디코더 — 토큰 안에 뭐가 들었는지 확인하기
로그인 후 발급받은 JWT(JSON Web Token)가 eyJhbGci... 같은 긴 문자열로 오면 그 안에 어떤 정보(사용자 ID, 만료 시각, 권한 등)가 들어있는지 눈으로 확인하고 싶을 때가 많습니다. JWT 디코더는 header.payload.signature 형식의 토큰을 붙여넣으면 헤더와 페이로드를 사람이 읽을 수 있는 JSON으로 풀어서 보여줍니다.
여기서 꼭 알아둬야 할 점: 디코딩은 서명 검증이 아닙니다. JWT의 헤더·페이로드는 암호화가 아니라 Base64URL 인코딩만 되어 있어서, 토큰을 가진 사람이면 누구나 내용을 열어볼 수 있습니다. 실제 보안은 서버만 아는 비밀키로 만든 서명(마지막 부분) 쪽에서 나오며, 이 서명 덕분에 페이로드가 발급 이후 조작되지 않았음이 보장됩니다. 그래서 JWT 페이로드 안에는 절대 비밀번호·주민등록번호 같은 민감정보를 넣으면 안 됩니다.
Unix 타임스탬프 ↔ 날짜 변환
로그 파일이나 API 응답에 1798012345 같은 숫자만 덜렁 찍혀 있으면 사람이 바로 읽을 수 없습니다. 타임스탬프 변환 도구는 Unix 타임스탬프를 초 단위인지 밀리초 단위인지 자동으로 판별해 날짜/시간으로 바꿔주고, 반대로 특정 날짜를 타임스탬프 숫자로 바꿀 수도 있습니다.
| 구분 | 예시 값 | 자릿수 | 주로 쓰는 곳 |
|---|---|---|---|
| 초 단위 | 1798012345 | 10자리 | 유닉스 명령어, 대부분의 서버 로그, JWT의 exp/iat 클레임 |
| 밀리초 단위 | 1798012345000 | 13자리 | 자바스크립트 Date.now(), 다수의 웹 API |
변환은 브라우저의 로컬 시간대를 기준으로 표시되므로, 서버가 UTC로 로그를 남기는 경우라면 표시된 시각과 실제 서버 시각 사이에 시차(한국은 UTC+9)가 있을 수 있다는 점을 감안해서 봐야 합니다.
Base64 인코딩/디코딩 — 텍스트와 파일 둘 다
Base64는 압축이 아니라 바이너리 데이터를 텍스트로 안전하게 옮기기 위한 인코딩입니다. 그래서 인코딩하면 원본보다 오히려 약 33% 정도 용량이 늘어납니다. 텍스트 Base64 인코더/디코더는 UTF-8 텍스트를 Base64로, 또는 그 반대로 바꿔주고, Base64 → 파일 변환 도구는 data:image/png;base64,... 같은 데이터 URI나 순수 Base64 문자열을 원래 파일로 복원해 다운로드까지 해줍니다. API 응답에 이미지가 Base64로 인코딩되어 내려올 때, 실제로 어떤 이미지인지 눈으로 확인하고 싶을 때 특히 유용합니다.
URL 인코딩/디코딩
URL의 쿼리스트링에는 한글, 공백, &나 = 같은 특수문자를 그대로 넣을 수 없습니다. URL 인코딩/디코딩 도구는 문자열을 percent-encoding(예: 공백 → %20, 한글 → %EC...)으로 바꾸거나 그 반대로 되돌려, 링크에 한글 검색어나 콜백 URL을 안전하게 끼워 넣어야 할 때 씁니다.
정규식 테스터
정규식 테스터는 정규 표현식과 테스트할 문자열을 함께 입력하면 일치하는 부분을 하이라이트로 보여주고, 괄호로 감싼 캡처 그룹의 값도 따로 나열해줍니다. 이메일 형식 검증, 로그에서 특정 패턴만 뽑아내기, 문자열 치환 전 미리 확인하기 등에 활용할 수 있습니다.
정규식이 생각과 다르게 매칭될 때 가장 흔한 원인은 탐욕적(greedy) 매칭입니다. .*는 가능한 한 가장 긴 범위를 잡아먹으려 하는데, 뒤에 물음표를 붙여 .*?로 쓰면 최소한만 매칭하는 게으른(lazy) 방식으로 바뀝니다. 여러 줄 문자열을 다룰 때는 .이 개행 문자(\n)를 포함하지 않는다는 점도 자주 놓치는 부분입니다.
텍스트 Diff 비교
텍스트 Diff 비교는 두 텍스트를 줄 단위로 비교해 추가된 줄과 삭제된 줄을 색으로 구분해 보여줍니다. Git이 설치되어 있지 않은 환경에서 급하게 두 버전의 코드나 설정 파일, 계약서 문구 차이를 확인해야 할 때, 또는 번역본과 원본을 나란히 비교할 때 유용합니다.
그 외 자주 찾는 텍스트 도구
비밀번호 생성기는 Web Crypto API의 안전한 난수를 사용해 무작위 비밀번호를 만들며, 입력한 옵션과 생성된 값 모두 서버로 전송되지 않습니다. 텍스트 케이스 변환기는 문자열을 camelCase·PascalCase·snake_case·kebab-case 등 프로그래밍에서 자주 쓰는 표기법으로 한 번에 바꿔주고, 줄바꿈(CRLF ↔ LF) 변환은 Windows와 Mac/Linux의 줄바꿈 방식이 달라 Git diff가 지저분해지거나 스크립트가 다른 OS에서 제대로 실행되지 않는 문제를 해결해줍니다.
자주 묻는 질문
해시(SHA-256)는 되돌릴 수 있나요?
아니요. 해시는 원본 데이터를 고정된 길이의 값으로 압축하는 단방향 함수라 결과값만으로 원본을 복원할 수 없습니다. 그래서 비밀번호 저장이나 파일 무결성 검증처럼 "같은지만 확인하면 되는" 상황에 쓰입니다.
JWT를 디코딩하면 비밀번호처럼 안전하게 감춰지나요?
아닙니다. JWT의 헤더와 페이로드는 암호화가 아니라 Base64URL로 인코딩만 되어 있어서 누구나 디코딩해 내용을 볼 수 있습니다. 안전한 건 서버만 알고 있는 비밀키로 만든 서명(signature) 부분이며, 이 서명 덕분에 내용이 위조되지 않았다는 것만 검증됩니다. 그래서 JWT 페이로드에 비밀번호나 주민등록번호 같은 민감정보를 넣으면 안 됩니다.
Unix 타임스탬프가 초 단위인지 밀리초 단위인지 헷갈려요
자릿수로 구분하면 됩니다. 2026년 기준으로 초 단위 타임스탬프는 10자리(예: 1798000000), 밀리초 단위는 13자리(예: 1798000000000)입니다. 자바스크립트의 Date.now()는 밀리초, 많은 서버 로그나 유닉스 명령어는 초 단위를 씁니다.
Base64로 인코딩하면 용량이 줄어드나요?
아니요, 오히려 늘어납니다. Base64는 바이너리 데이터를 텍스트로 안전하게 옮기기 위한 인코딩 방식이라 원본보다 약 33% 정도 크기가 커집니다. 압축이 목적이 아니라, 이메일 첨부나 JSON·URL처럼 텍스트만 다룰 수 있는 곳에 이미지·파일을 안전하게 끼워 넣기 위한 용도입니다.
정규식이 원하는 것과 다르게 매칭돼요
가장 흔한 원인은 탐욕적(greedy) 매칭입니다. .*처럼 수량자를 그대로 쓰면 가능한 한 긴 범위를 잡아먹는데, 이때 .*? 처럼 물음표를 붙이면 최소한으로만 매칭하는 게으른(lazy) 방식으로 바뀝니다. 여러 줄 문자열을 다룰 때는 개행 문자(\n)가 .에 포함되는지도 함께 확인해보세요.