👤 UX 개선

사용자 이름 개인화 기능으로 UX 개선하기

"홍길동님, 반갑습니다!" 작은 변화가 만드는 큰 차이

📅 2026.02.15 ⏱️ 8분 읽기 👨‍💻 개발자

💭 왜 이 기능을 추가했나

MBTI 테스트와 번아웃 테스트를 만들고 나서, 뭔가 허전한 느낌이 들었습니다. 검사를 진행하고 결과를 받는데, 마치 공장에서 찍어낸 것 같은 느낌? 모든 사용자에게 똑같은 경험을 제공하는 게 아쉬웠습니다.

그래서 생각한 게 **이름 개인화**였습니다. 사용자의 이름이나 닉네임을 입력받아서, 검사 과정과 결과 페이지에서 계속 호칭하는 거죠. 작은 변화지만 사용자 경험에 큰 차이를 만들 수 있을 것 같았습니다.

💡 개인화가 중요한 이유

  • • 사용자에게 특별한 경험 제공
  • • 감정적 연결 강화
  • • 결과에 대한 몰입도 증가
  • • 공유 시 바이럴 효과 상승

🎯 설계 아이디어

처음에는 어디에 이름 입력 창을 넣을지 고민했습니다. 몇 가지 옵션이 있었죠:

❌ 옵션 1: 검사 중간에

검사 흐름이 끊김. 사용자가 이탈할 수 있음

❌ 옵션 2: 결과 페이지에서

이미 검사가 끝난 후라 개인화 효과 반감

✅ 선택: 검사 시작 전

별도 페이지로 분리. 자연스러운 흐름. 첫인상부터 개인화

❌ 옵션 4: 선택사항으로

많은 사용자가 건너뛰기 가능성

결국 검사 시작 전에 별도 페이지를 만들기로 했습니다. 사용자가 "검사 시작하기" 버튼을 누르면, 먼저 이름 입력 페이지가 나오고, 입력 후 실제 검사 페이지로 이동하는 방식이죠.

💻 구현 과정

1단계: 이름 입력 페이지 만들기

각 테스트마다 `name-input.html` 파일을 만들었습니다. 깔끔한 UI에 input 박스 하나만 집중되도록 디자인했습니다.

<input 
    type="text" 
    id="userName" 
    placeholder="예: 김철수, 혜리, 민지 등"
    maxlength="20"
    class="w-full px-6 py-4 text-lg text-center"
>

💡 디자인 포인트

  • • 큰 텍스트 크기 (text-lg)로 가독성 확보
  • • 중앙 정렬로 시각적 집중
  • • 최대 20자 제한으로 공간 문제 방지
  • • 플레이스홀더에 예시를 넣어 이해도 향상

2단계: LocalStorage에 저장

입력받은 이름은 LocalStorage에 저장했습니다. 서버 없이도 페이지 간 데이터를 유지할 수 있거든요.

function startTest() {
    const userName = userNameInput.value.trim();
    
    // 유효성 검사
    if (!userName) {
        alert('이름을 입력해주세요!');
        return;
    }
    
    if (userName.length < 2) {
        alert('이름은 최소 2글자 이상 입력해주세요!');
        return;
    }
    
    // LocalStorage에 저장
    localStorage.setItem('mbti_userName', userName);
    
    // 테스트 페이지로 이동
    window.location.href = './index.html';
}

🔒 개인정보 처리

LocalStorage는 사용자의 브라우저에만 저장되므로 서버로 전송되지 않습니다. 개인정보 보호 측면에서도 안전합니다.

3단계: 모든 페이지에서 사용

이제 저장된 이름을 각 페이지에서 불러와 표시했습니다.

// 검사 페이지
const userName = localStorage.getItem('mbti_userName');
document.getElementById('user-name-display').textContent = userName;
// 출력: "홍길동님 반가워요!"

// 결과 페이지
const userName = localStorage.getItem('mbti_userName');
document.getElementById('userNameDisplay').textContent = userName;
// 출력: "홍길동님의 검사 결과"

4단계: 예외 처리

사용자가 이름 입력을 건너뛰거나, 직접 URL로 검사 페이지에 접근하는 경우를 대비했습니다.

// 검사 페이지 진입 시 체크
const userName = localStorage.getItem('mbti_userName');
if (!userName) {
    alert('잘못된 접근입니다. 처음부터 다시 시작해주세요.');
    window.location.href = './name-input.html';
}

📈 체감 효과

개인화 전 vs 후

Before (개인화 전)

"INTJ 유형입니다. 용의주도한 전략가 성향을 보입니다."

→ 딱딱하고 기계적인 느낌

After (개인화 후)

"홍길동님은 INTJ 유형입니다. 용의주도한 전략가 성향을 보입니다."

→ 친근하고 맞춤형 느낌

작은 차이지만 체감 효과는 생각보다 컸습니다. 마치 나를 위한 특별한 결과처럼 느껴지더군요. 특히 결과를 공유할 때 "홍길동님의 MBTI는..."이라고 표시되니까 더 특별해 보였습니다.

🤔 개선하고 싶은 점

현재 구현에서 아쉬운 부분도 있습니다:

📝 이름 수정 기능

검사 도중 이름을 잘못 입력했을 때 수정할 방법이 없습니다. 처음부터 다시 시작해야 하죠.

→ 헤더에 작은 수정 버튼을 추가할 예정입니다

🎨 더 다양한 호칭

현재는 "○○님" 형식만 사용하는데, 상황에 따라 다양하게 변화를 주면 좋을 것 같습니다.

→ "○○님이", "○○님은", "○○님께" 등 문맥에 맞게 변화

💾 이전 결과 기억

같은 사용자가 다시 방문했을 때 이전 이름을 기억해서 자동으로 채워주면 편할 것 같습니다.

→ 쿠키나 LocalStorage 활용

🎓 배운 점

작은 기능, 큰 차이

  • 1️⃣ 사용자 입장에서 생각하기: 개발자 입장에서는 당연한 것들이 사용자에게는 특별할 수 있습니다
  • 2️⃣ 구현은 단순하게: 복잡한 로직 없이도 LocalStorage만으로 충분했습니다
  • 3️⃣ 일관성 유지: 모든 페이지에서 같은 호칭을 사용해야 자연스럽습니다
  • 4️⃣ 예외 처리는 필수: 사용자는 예상치 못한 경로로 접근할 수 있습니다

💡 마치며

개인화 기능을 추가하면서 "사용자 경험"이란 게 뭔지 조금 더 이해하게 되었습니다. 거창한 기능이 아니어도, 사용자를 생각하는 작은 배려가 모여 좋은 서비스를 만드는 거더군요.

다음 단계로는 히스토리 기능을 추가해서, 같은 사용자가 여러 번 검사했을 때 이전 결과와 비교할 수 있게 만들고 싶습니다. 그러면 "홍길동님, 지난번보다 외향성이 10% 증가했네요!" 같은 피드백도 줄 수 있을 것 같아요.

🚀

다음 글 예고

HTML2Canvas로 검사 결과를 이미지로 만들어 공유하기

블로그 목록으로 홈으로 가기