이 도구가 해결하는 일

로그에 찍힌 User(id=1, name=kim) 같은 Java toString() 출력, 자바스크립트 소스에서 복사한 객체 리터럴, Map을 그대로 출력한 텍스트 — "JSON처럼 생겼지만 JSON이 아닌" 데이터를 표준 JSON으로 정규화합니다. 백엔드 검증 도구·API 테스트처럼 엄격한 파서에 넣기 전의 변환 단계로 씁니다.

이 작업을 손으로 하면 따옴표를 일일이 붙이다가 하나를 빠뜨리고, 정규식 치환으로 하면 값 안의 특수문자에 걸려 깨집니다. 전용 파서가 구조를 이해하고 바꾸는 것이 안전합니다.

다른 도구와 다른 점 — 단정하지 않습니다

느슨한 입력은 본질적으로 애매합니다. 1은 숫자일까요, 문자열일까요? 01012345678을 숫자로 바꾸면 앞의 0이 사라집니다. 이 도구는 해석이 갈리는 값마다 가능한 해석 선택지를 달아 보여주고, 사용자가 고른 대로 JSON을 조립합니다 — 조용히 틀린 값을 만드는 대신 애매함을 드러내는 설계입니다.

받아주는 입력 형태

입력 형태어디서 오나
Java toString() (Lombok 스타일)User(id=1, name=kim)서버 로그의 객체 출력 — 클래스명은 벗겨냅니다
Map 출력{id=1, name=kim}HashMap을 그대로 로그에 찍은 경우
객체 리스트[User(id=1), User(id=2)]컬렉션 로그 — JSON 배열로 변환
JS 객체 리터럴{ id: 1, name: 'kim', }프론트 소스에서 복사 — 작은따옴표·트레일링 콤마 처리
따옴표 깨진 입력{name: "kim, age: 20}잘린 로그 — 최대한 펼치고 의심 줄에 경고 표시

타입이 애매한 값 — 선택지가 뜨는 경우

해석 후보왜 위험한가
01012345678문자열 / 숫자숫자로 바꾸면 앞의 0이 사라져 전화번호가 깨집니다
1e5문자열 / 숫자 100000코드성 문자열일 수도, 지수 표기일 수도 있습니다
true불리언 / 문자열 "true"API가 문자열 "true"를 기대하는 경우가 실무에 흔합니다
(빈 값)null / 빈 문자열 / 생략셋의 의미가 서버에서 전부 다릅니다
{ id: 1, name: 'kim', tags: ['a', 'b'], }   ← JS 리터럴 (JSON 아님)
→ { "id": 1, "name": "kim", "tags": ["a", "b"] }

표준 JSON과 느슨한 표기 — 무엇이 다른가

항목표준 JSON느슨한 표기(이 도구가 흡수)
키 따옴표"id" 필수id — 따옴표 생략
문자열 따옴표큰따옴표만작은따옴표 'kim' 허용
마지막 쉼표금지[1, 2,] 허용
값 구분콜론(:)만등호(=)도 인식 — toString() 형태

이 차이들은 자바스크립트 소스나 로그에서는 자연스럽지만, 엄격한 파서는 첫 위반 지점에서 멈춥니다. 도구가 이 간극을 자동으로 메우고, 사람은 애매한 값의 판정에만 개입합니다.

실무 시나리오

자주 겪는 함정

자주 묻는 질문

왜 결과가 바로 안 나오고 선택지가 나오나요?
값 타입을 추측으로 확정하면 앞자리 0 손실 같은 조용한 오류가 납니다. 애매한 값만 물어보고 나머지는 자동입니다.
중첩 객체도 되나요?
평면 객체와 객체 리스트가 중심입니다. 깊은 중첩 구조의 정식 JSON은 포맷터 탭이 담당합니다.
클래스명은 어디로 가나요?
JSON에는 클래스명 자리가 없어 벗겨냅니다. 필요하면 결과에 별도 키로 직접 추가하세요.
입력이 서버로 전송되나요?
아니요. 파싱·변환 전부 브라우저 안에서 끝나고 네트워크 요청이 없습니다 — 운영 로그를 다뤄도 안전합니다.
따옴표가 깨진 입력은 어떻게 처리되나요?
오류로 멈추지 않고 최대한 펼친 뒤, 값이 잘못 합쳐졌을 수 있는 줄에 ⚠️ 의심 표시를 답니다.
결과 JSON의 키 순서는 유지되나요?
입력에 나타난 순서를 그대로 유지합니다 — 로그와 나란히 대조하기 좋게 하기 위해서입니다.

함께 쓰는 도구

정규화된 JSON을 들여쓰기·트리로 보려면 포맷터로, 두 로그의 차이를 찾으려면 Diff 비교로 이어가세요. 스택트레이스가 섞인 로그는 스택트레이스 도구가 먼저 정리해 줍니다.

DoffKit(도프킷) — 개발자 텍스트·코드 툴킷

DoffKit(도프킷)은 개발자가 매일 반복하는 텍스트·코드 손작업을 한 화면에 모은 웹 툴킷입니다. JSON·SQL·XML 포맷터(XML은 문서·트리 뷰어 겸), 들여쓰기 정리, 느슨한 객체 정규화, 인코딩 변환과 암복호화, 텍스트 비교(Diff), 정규식 테스트, 케이스 변환, 해시·로직 지문, 스택트레이스 정리, URL 파싱까지 자주 쓰는 도구를 설치나 회원가입 없이 브라우저에서 바로 씁니다.

모든 계산과 변환은 접속한 기기(브라우저) 안에서 끝나며, 입력한 코드·데이터는 외부 서버로 전송되지 않습니다. 사내망·보안이 민감한 환경에서 온라인 포맷터에 코드를 붙여넣기 꺼려질 때를 위해 만들었습니다. 아래에서 각 도구의 쓰임과 자주 묻는 질문을 정리했습니다.

주요 기능

사용법

포맷터·들여쓰기

한 줄로 뭉친 JSON이나 SQL을 붙여넣으면 사람이 읽을 수 있게 정렬하고 구문을 색으로 구분합니다. XML은 포맷에 더해 문서 뷰 — 꺾쇠·태그 없이 제목·라벨:값·표로 읽는 화면 — 와 접기·검색이 되는 트리 뷰를 제공해, 서버 설정 파일처럼 긴 XML을 훑기 좋습니다. 필드→JSON 서브탭은 id·login처럼 필드 이름만 줄줄이 붙여넣으면 키를 채운 JSON 뼈대를 만들어 주고, 값은 표에서 채웁니다. 전문(고정길이) 모드로 바꾸면 레이아웃(이름·길이·타입)에 맞춰 문자는 공백, 숫자는 0으로 패딩한 TCP 전문을 자동 조립합니다 — 길이 기준은 EUC-KR·UTF-8 바이트, 문자 수 중에서 고릅니다. 느슨한 객체 탭은 따옴표가 빠진 키나 트레일링 콤마처럼 표준을 벗어난 데이터도 정규화해 줍니다.

인코딩·암복호화

Base64·URL 인코딩을 양방향으로 바꾸고, JWT 토큰을 사람이 읽을 수 있게 디코딩합니다. 암복호화는 브라우저 내장 Web Crypto 표준을 써서 키와 평문이 기기 밖으로 나가지 않습니다.

Diff 비교·정규식

두 텍스트나 코드의 바뀐 부분을 줄·글자 단위로 강조해 비교합니다. 정규식 테스터는 패턴과 대상 문자열을 넣으면 일치 위치를 실시간으로 보여주고, 자주 쓰는 패턴 치트시트를 제공합니다.

케이스·해시·스택트레이스·URL

변수명을 카멜/스네이크/케밥으로 바꾸고, 문자열의 SHA-2 해시와 코드의 로직 지문을 계산합니다. 지저분한 스택트레이스에서 원인 체인을 정리하고, URL의 쿼리 파라미터를 표로 풀어냅니다.

자주 묻는 질문

DoffKit은 무료인가요?

네, 모든 도구를 무료로 쓸 수 있습니다. 운영 비용은 페이지에 표시되는 광고로 충당합니다.

회원가입이나 설치가 필요한가요?

아니요. 브라우저로 페이지를 열면 바로 쓸 수 있고, 로그인이나 프로그램 설치가 필요 없습니다.

입력한 코드나 데이터가 서버로 전송되나요?

아니요. 포맷·비교·암복호화 등 모든 처리는 접속한 기기의 브라우저 안에서 이뤄지며, 입력한 내용은 외부 서버로 전송되지 않습니다.

인터넷 연결이 필요한가요?

페이지를 처음 여는 데는 인터넷이 필요합니다. 다만 도구의 계산·변환은 접속한 기기 안에서 처리되어 입력값이 외부로 나가지 않습니다.

어떤 정보가 저장되나요?

테마(다크/라이트)와 마지막으로 연 탭 같은 화면 설정만 브라우저 localStorage에 저장됩니다. 입력한 코드·텍스트 자체는 저장하지 않습니다.

광고와 쿠키는 어떻게 처리되나요?

Google 애드센스 광고가 표시될 수 있으며 광고 목적의 제3자 쿠키가 사용될 수 있습니다. 자세한 내용은 페이지 하단 "개인정보 안내"에서 확인할 수 있습니다.

도구별 페이지

도구 가이드·레퍼런스