FROM THE WORKSHOP / 노하우
회원정보 저장이 「닉네임 중복 확인」에 막힐 때 — 고장 난 검사를 건너뛰면 빠진 항목이 지워진다
한 통신사 사이트 회원정보 변경에서 마케팅 동의만 바꿔도 「닉네임 중복 확인」 경고로 저장이 막혔다. 페이지 코드를 읽어 보니 저장 함수가 화면에 없는 칸을 비교했고, 중복확인 버튼이 부르는 함수도 페이지에 없었다. 확인 표시를 켜고 저장 함수를 다시 불러 해결했지만, 저장 양식에 닉네임이 빠져 있어 닉네임이 빈 값으로 덮였다. 저장 직후 안 바꾼 항목까지 확인하고 원래 값을 넣어 다시 저장해 복구했다.
회원정보 저장이 「닉네임 중복 확인」에 막힐 때 — 고장 난 검사를 건너뛰면 빠진 항목이 지워진다
2026-10-13 · 자동화
알뜰폰 회선을 새로 만들려고 한 통신사 웹사이트에 가입했다. 가입 직후 회원정보 변경 화면에서 마케팅 정보 수신을 「비동의」로 바꾸고 「변경」을 눌렀다. 그런데 「닉네임 중복 확인을 해주세요.」 경고만 뜨고 저장이 안 됐다. 닉네임은 건드리지도 않았다. 중복확인 버튼을 눌러도 아무 일이 없었다.
화면에서 할 수 있는 건 다 해 봤다. 그래서 AI(Claude)에게 브라우저를 넘겼다. AI는 버튼을 더 누르지 않고 페이지 코드부터 읽었다.
1. 저장 함수가 화면에 없는 칸을 비교하고 있었다
「변경」 버튼이 부르는 저장 함수에는 이런 검사가 있었다.
var nickname = ($("#nick_nm").val() || '').trim(); // 지금 닉네임 칸
var originalNickname = ($("#rnick_nm").val() || '').trim(); // 숨은 원래 닉네임
if (nickname !== originalNickname && !isCheckedNickname) {
alert("닉네임 중복 확인을 해주세요.");
return false;
}
그런데 화면에 #nick_nm 칸이 없었다. 닉네임 입력칸은 다른 이름(joinNick)이었다. 없는 칸의 값은 빈 문자열이 된다. 그래서 검사는 「빈 값 ≠ 원래 닉네임」을 보고 닉네임을 바꿨다고 판정한다. 중복 확인 표시(isCheckedNickname)가 켜지기 전에는 무엇을 바꿔도 저장이 안 되는 구조였다.
2. 중복확인 버튼도 고장 나 있었다
그럼 중복확인을 통과하면 된다. 그런데 버튼이 부르는 함수는 이것뿐이었다.
function nickCheck(){ wordchk($("#joinNick").val()); }
wordchk 함수가 이 페이지에 없었다. 버튼을 누르면 스크립트 오류로 조용히 끝난다. 화면만 보는 사람은 이유를 알 수 없다.
정리하면 화면 조작만으로는 저장할 방법이 없는 상태였다.
3. 해결 — 확인 표시를 켜고 저장 함수를 다시 부른다
브라우저 개발자 도구 콘솔에서 두 줄이면 된다.
isCheckedNickname = true; // 중복 확인을 마친 것으로 표시
chgInfo(); // 「변경」 버튼이 원래 하는 일
「변경 되었습니다.」가 떴다. 새로고침해도 「비동의」가 남아 있었다.
4. 함정 — 저장 양식에 빠진 항목은 빈 값으로 덮인다
끝이 아니었다. 새로고침한 화면에서 숨은 원래 닉네임 칸(rnick_nm)이 비어 있었다. 저장 직전에는 가입 때 받은 닉네임이 들어 있었다.
원인은 저장 양식이었다. 서버로 보내는 양식(updateForm)에는 이름·연락처·주소·마케팅 동의만 있고 닉네임 항목이 없었다. 서버는 닉네임이 오지 않은 것을 빈 닉네임으로 바꾸라는 뜻으로 처리했다. 화면 검사는 아마 이 사고를 막으려고 있었을 것이다. 그 검사가 고장 나 있었던 셈이다.
복구는 원래 닉네임을 양식에 넣어 한 번 더 저장하는 것으로 끝났다.
const f = document.querySelector('#updateForm');
f.appendChild(Object.assign(document.createElement('input'),
{ type: 'hidden', name: 'nick_nm', value: '원래 닉네임' }));
isCheckedNickname = true;
chgInfo();
다시 새로고침해서 마케팅 「비동의」와 원래 닉네임이 둘 다 남아 있는 것을 확인했다.
5. 배운 것
| 상황 | 할 일 |
|---|---|
| 버튼이 안 먹는다 | 더 누르지 말고 버튼이 부르는 함수를 읽는다. 없는 칸이나 없는 함수가 원인인 경우가 많다 |
| 화면 검사를 건너뛴다 | 저장 양식에 무엇이 실려 가는지 먼저 본다. 빠진 항목은 서버에서 지워질 수 있다 |
| 저장에 성공했다 | 바꾼 항목만 보지 말고, 안 바꾼 항목도 그대로인지 새로고침해서 확인한다 |
| 이런 우회를 쓴다 | 내 계정에서, 사이트가 원래 허용하는 값으로만 한다 |
「성공」 알림은 내가 바꾼 것만 알려 준다. 같이 지워진 것은 알려 주지 않는다. 저장 뒤 확인 한 번이 이번 일의 절반이었다.