Task 03 Task 03 회원 기능 점검하기 실습 가이드
📥 실습 입력 (Input)
- •
day8_user_service.js
💾 실습 출력 (Output)
- •
day8_robust_user_service.js
1. 스토리 및 실습 배경
회원가입과 로그인 버튼 동작 테스트를 마친 기뻐하는 개발자가 '동작이 아주 깔끔하게 완료되었습니다!'라고 선언했습니다. 하지만 다음 날 치명적인 데이터 정합성 사고가 발생했습니다. 한 사용자가 '이중 클릭'을 하면서 서버에 가입 쿼리가 연달아 전송되어 동일한 이메일 주소를 가진 두 개의 회원 계정이 나란히 데이터베이스에 생성된 것입니다. 이로 인해 마이페이지의 예약 내역 조회가 완전히 꼬여버렸고, 가입 이메일 형식 유효성 체크 및 임시 패스워드 폐기 세션 장치가 미흡해 계정 도용 위협에 노출되었습니다.
2. 학습 목표
- 동일 이메일에 대한 다중 가입 시 정합성이 깨지는 가입 스토리지 취약점을 진사하고 가드를 세울 수 있다.
- 올바르지 않은 이메일 패턴 주입을 필터링하는 정규식(Regex) 유효 가드를 자바스크립트 스크립트에 탑재할 수 있다.
- AI 오디팅을 통해 계정 보안을 확보하고 에러 처리 및 중복 검사가 적용된 견고한 개선 코드를 획득할 수 있다.
3. 실습 기초 코드 다운로드
아래 자바스크립트 뼈대 소스를 복사하거나 다운로드받아 로컬 실습 경로(day8_user_service.js)에 저장하세요.
javascript// day8_user_service.js (취약한 회원 관리 뼈대 스크립트)
const userDatabase = [];
function registerUser(email, password, nickname) {
// TODO: 중복 가입 방지 가드 및 이메일 정규식 유효성 가드를 추가해 계정 무결성을 지켜야 합니다.
const newUser = {
email: email,
password: password,
nickname: nickname,
status: 'active'
};
userDatabase.push(newUser);
return { success: true, user: newUser };
}
function loginUser(email, password) {
const user = userDatabase.find(u => u.email === email);
if (!user) {
return { success: false, message: "아이디가 존재하지 않습니다." };
}
if (user.password !== password) {
return { success: false, message: "비밀번호가 불일치합니다." };
}
return { success: true, message: "로그인 성공", user };
}
4. Codex AI 프롬프트 카드
아래의 프롬프트를 복사하여 Codex Client의 AI 질의 응답 창에 붙여넣고 가이드를 받으세요.
제공된 `day8_user_service.js` 회원 가입 및 로그인 스크립트를 감사하여 1) 중복 가입 체크 누락 위험, 2) 비밀번호 분실 시 기존 패스워드 즉시 폐기 등의 결함을 도출하고, 서비스 안정성을 높이기 위한 유효 가드가 보강된 최종 자바스크립트 개선본을 제안해 주세요.