개발 slecs

관리자 로그인 화면 2FA 안내

목차

admin 로그인 화면에서 작은 버그 하나를 잡았다. 비밀번호 찾기 링크 제거, 2FA 안내 문구 수정. 변경 파일은 뷰 하나, 스타일 하나. 커밋 diff로만 보면 별것 없어 보이는데, 이게 왜 필요했는지 남겨두는 게 나중에 도움이 돼서 정리해둠.

왜 비밀번호 찾기 링크를 지웠나

admin 전용 로그인 화면은 일반 사용자 화면과 성격이 다르다. 일반 로그인에서 "비밀번호 잊었어요?" 흐름은 자연스럽고 당연하다. 하지만 admin 계정에서는 그 링크 자체가 공격 표면이 될 수 있음.

2FA가 붙어 있는 관리자 계정이라면 비밀번호 리셋 흐름에도 동일한 인증 레벨이 적용돼야 한다. 이게 제대로 연결되지 않은 상태에서 링크만 노출되면 오히려 더 위험해진다. "있는데 안 된다"는 상태도 문제고, "있는데 2FA 없이 우회된다"는 상태는 더 큰 문제다. 기능이 없거나 반쪽짜리 상태라면 UI에서 먼저 지우는 게 맞다고 봤음.

보안 UI에서 자주 나오는 원칙 중 하나가 "사용자에게 보이는 것 = 실제로 동작하는 것"이다. 비밀번호 찾기 링크처럼 보이는데 클릭하면 아무 일도 안 일어나거나 2FA 없는 우회 경로로 빠지면, 사용자 혼란과 보안 구멍 두 개를 동시에 만드는 셈이다. "일단 지운다"는 결정이 오히려 더 올바른 방향이었음.

2FA 안내 문구, 왜 그냥 넘기면 안 되나

2FA 화면에서 문구는 생각보다 중요하다. 이 화면에서 사용자가 막히는 엣지 케이스가 꽤 다양하기 때문임.

OTP 앱 기반 2FA라면 실제로 이런 상황들이 발생함:

상황 안내가 없을 때 명확한 안내가 있을 때
OTP 앱이 없거나 삭제된 경우 로그인 막힘, 원인 모름 "앱 재설치 후 복구 코드 사용" 경로 안내
코드 만료 타이밍 이슈 "왜 안 되지?" 혼란 "유효 시간 30초, 갱신 후 시도" 명시
여러 계정 OTP 혼동 잘못된 코드 연속 입력, 락아웃 어떤 계정의 코드인지 힌트 제공
기기 분실 완전 락아웃, 복구 방법 모름 복구 코드 경로 명시

특히 admin은 일반 사용자보다 훨씬 낮은 빈도로 로그인한다. 매일 쓰는 사람은 흐름을 몸으로 외우지만, 한 달에 한두 번 들어오는 사람은 "OTP가 뭐였지?"부터 시작하는 경우도 있음. 문구 하나가 지원 문의 수를 줄여주고, 락아웃 상황에서 당황하는 사람을 줄여준다.

기존 문구가 틀렸다기보다 특정 상황에서 잘못 읽힐 수 있는 표현이 있었고 그걸 고쳤음. 뷰 파일 몇 줄 수정이지만 배경이 그렇다.

수정 과정과 검증

뷰/스타일 두 파일 변경이었지만, 수정 전에 먼저 화면을 실제로 띄워서 버그를 재현했다. 코드만 보고 "이거 문제일 것 같다"고 추측하고 고치면 나중에 "그게 진짜 버그였나?" 확인이 안 됨. 재현 없이 수정한 건 증명이 없는 주장이다.

수정 후 체크한 항목들:

  • 비밀번호 찾기 링크 제거 후 레이아웃 깨짐 없는지 - 스타일 파일 함께 수정한 이유가 이거다
  • 2FA 안내 문구가 올바른 맥락에서 노출되는지
  • 로그인 성공/실패/OTP 오류 각 케이스 확인
  • 같은 뷰 컴포넌트를 재사용하는 경로가 있는지 탐색

회귀 확인을 자주 빠뜨리는데, 수정이 멀쩡하던 케이스를 망가뜨리는 일이 생각보다 많다. 뷰/스타일처럼 공유 컴포넌트가 얽혀 있는 파일은 한 곳 바꿨더니 다른 화면이 어긋나는 경우가 있어서, 연관 화면도 같이 확인하는 습관을 유지 중.

버그 수정 시 내가 주로 따르는 순서:

1. 버그 재현 (재현  되면 수정도 검증도 불가)
2. 원인 파악 - 증상이 아닌 뿌리
3. 같은 패턴이 다른 곳에도 있는지 탐색
4. 수정
5. 원래 버그 케이스로 재확인
6. 연관 케이스 회귀 확인

3번이 귀찮은 단계인데, 이걸 빠뜨리면 같은 버그가 다른 파일 이름으로 한 달 뒤에 돌아옴. 특히 뷰/템플릿 계층은 복붙으로 비슷한 구조가 여러 곳에 퍼져 있는 경우가 많아서, 하나 고쳤다고 끝난 게 아닌 경우가 종종 있었다.

admin 로그인처럼 접근 통제가 목적인 화면은 "동작하는 것처럼 보이는" 것과 "실제로 올바르게 동작하는" 것 사이의 간극이 특히 위험하다. 이번처럼 작은 수정이라도 맥락을 알고 고치는 것과 모르고 고치는 것은 다음 번 수정 때 차이가 남. 단순히 화면에서 링크 하나 지우고 문구 바꾼 게 아니라, 왜 지워야 하는지 왜 그 문구여야 하는지를 이해하고 커밋하면 나중에 "이거 왜 이렇게 돼 있지?"라는 물음에 답할 수 있다.

사내 서비스일수록 이런 로그인 화면 관리가 느슨해지기 쉽다. "어차피 내부 사람만 쓰는데"라는 생각이 깔리면 UX도 보안도 조금씩 허술해짐. 발견할 때마다 잡아두는 게 맞다고 생각해서, 이번에도 지나치지 않고 정리했다. 작은 커밋이지만 이유가 있는 커밋이다.

댓글 0

첫 댓글 달아줘.