피드로 돌아가기
Test Password Strength and Password History with TypeScript and MongoDB
Dev.toDev.to
Security

MongoDB Document 기반 Password History 추적으로 재사용 방지 구조 설계

Test Password Strength and Password History with TypeScript and MongoDB

Nic Raboy2026년 5월 15일30beginner

Context

사용자 계정 보안 강화를 위해 단순 비밀번호 변경을 넘어 과거 사용 이력을 추적하는 Compliance 요구사항 발생. 관계형 데이터베이스의 경우 이력 관리를 위해 별도의 Join Table 생성 및 데이터 마이그레이션 비용이 발생하는 구조적 한계 존재.

Technical Solution

  • MongoDB의 Document 모델을 활용하여 root 레벨에 현재 Hash와 password_history Array를 함께 저장하는 Single Record 구조 설계
  • 별도의 Join 연산 없이 단일 문서 내에서 과거 Hash 리스트를 즉시 조회하여 쿼리 효율성 극대화
  • Zod 스키마를 Express Middleware에 통합하여 API 진입 단계에서 비밀번호 강도 검증 로직을 강제하는 가드 레일 구축
  • bcrypt.compare 함수를 통해 Salt가 포함된 개별 Hash 값을 대조함으로써 동일 비밀번호 재사용 여부를 논리적으로 판별
  • MongoDB Unique Index를 활용해 애플리케이션 레어어가 아닌 DB 계층에서 Username 중복을 원천 차단하는 무결성 보장

1. Password History 저장 시 무제한 성장을 방지하기 위해 Array 크기 제한(Capping) 전략 검토

2. Brute-force 공격 방지를 위한 Endpoint별 Rate Limiting 도입 여부 확인

3. 보안 진단 시 Hash 리스트가 노출되는 API 엔드포인트의 접근 권한 및 삭제 여부 점검

원문 읽기