테스트잇 «숨은 성격 찾기» 로직 해부

심리 척도가 아니라, 12번의 클릭을 4개의 다수결로 압축해 미리 써둔 16개 결과문 중 하나를 출력하는 결정론적 분기 스크립트

https://test-it.co.kr/test395.html · 분석 대상: 인라인 <script> (약 23KB)

0요약 지표

12문항 (축당 3문항 × 4축)
16결과문 (MBTI 전 조합, 하드코딩)
4096 → 16가능한 답변 경로가 접히는 비율
0서버 통신 / 저장 / 무작위성

1처리 파이프라인

1. 문항 렌더questions[i] 의 선택지 2개를 버튼으로 생성
2. 클릭 = +1score[선택지.type] += 1 (가중치·역채점 없음)
3. 축별 다수결E/I, S/N, T/F, J/P 각각 큰 쪽 글자 채택
4. 16분기 출력results[MBTI] 텍스트 + palettes[MBTI] 색상 렌더

12문항을 다 누르면 setTimeout(showResult, 120) 으로 결과 화면 전환. 중간 저장·전송 없음.

2문항 → 축 매핑 (전문)

축이 E/I → S/N → T/F → J/P 순서로 정확히 3바퀴 반복됩니다. 순서를 알면 원하는 결과를 그대로 만들 수 있습니다.

#질문선택지 A선택지 B

3채점 코드 원문

// 클릭 한 번 = 해당 글자에 1점. 그게 전부.
function selectAnswer(type) {
  score[type] += 1;
  currentQuestion += 1;
  if (currentQuestion >= questions.length) setTimeout(showResult, 120);
  else renderQuestion();
}

function getMbti() {
  const ei = score.E >= score.I ? "E" : "I";
  const sn = score.S >= score.N ? "S" : "N";
  const tf = score.T >= score.F ? "T" : "F";
  const jp = score.J >= score.P ? "J" : "P";
  return ei + sn + tf + jp;  // 16분기 키
}
검증 — 로직만 떼어 시뮬레이션하면 A만 전부 선택 = ESTJ(3/3/3/3), B만 전부 선택 = INFP(3/3/3/3)로 정확히 떨어집니다.

4직접 돌려보기 (원본 로직 재현)

원본과 동일한 채점 함수를 그대로 옮겨 심었습니다. 축별 득표가 실시간으로 보입니다.

516개 결과문 전체

타입을 누르면 해당 결과 화면에 실제로 출력되는 텍스트가 그대로 나옵니다. 색상도 원본 palettes 값입니다.

공통 템플릿

16개가 전부 “겉은 A인데 속은 정반대 A’” 라는 동일한 반전 공식으로 작성돼 있습니다. “숨은 성격”이라는 컨셉의 실체는 타입별 outer/inner 두 문장의 대비입니다.

타입별명겉모습 (outer)숨은 성격 (inner)

6데이터 처리 / 프라이버시

HTML 전문 검색 결과 fetch, XMLHttpRequest, localStorage, sessionStorage, gtag, dataLayer 모두 0건. 답변은 어디에도 저장·전송되지 않고 새로고침하면 사라집니다.

7설계상 걸리는 점

되돌아가기 불가 — 선택 즉시 다음 문항으로 넘어가고 이전 답을 수정하는 UI가 없습니다.
Q6 매핑이 논쟁적 — 짐 싸기에서 “꼭 쓸 것만 가볍게”=S, “비상사태 대비 바리바리”=N으로 잡았는데, 통상 해석과는 오히려 반대로 읽히기 쉽습니다.
해상도가 낮음 — 축당 3문항이라 2:1로 갈린 사람과 3:0인 사람이 완전히 같은 결과를 받고, 퍼센트 표시도 없습니다.
결과 조작 쉬움 — 축 순서가 뻔히 반복돼서 각 축 3문항 중 2개만 원하는 쪽으로 누르면 특정 타입을 그대로 뽑을 수 있습니다.