RegistrationPage.tsx:
회원가입 페이지의 레이아웃과 UI 구성을 담당하는 리액트 컴포넌트입니다.
이메일 인증, 회원가입 폼 및 관련 이벤트 처리를 관리합니다.
useRegistration.ts:
회원가입 관련 로직을 담당하는 커스텀 훅입니다.
이메일 중복 검사, 이메일 인증, 회원가입 처리 등의 기능을 포함합니다.
RegistrationForm.tsx:
회원가입에 사용되는 폼을 구현한 컴포넌트입니다.
사용자 입력을 관리하고 유효성 검사를 수행합니다.
useModal.ts:
모달(팝업 창) 관련 상태와 로직을 관리하는 커스텀 훅입니다.
모달의 열기, 닫기 등의 기능을 제공합니다.
authService.ts:
프론트엔드에서 서버로의 인증 관련 API 요청을 관리하는 서비스 레이어입니다.
회원가입, 로그인, 이메일 인증 등의 요청을 처리합니다.
authRoutes.js:
인증 관련 엔드포인트(회원가입, 로그인, 이메일 인증 등)를 정의하는 라우팅 파일입니다.
각 경로에 대응하는 컨트롤러 함수를 연결합니다.
authController.js:
인증 관련 요청을 처리하는 컨트롤러 함수들을 포함하고 있습니다.
회원가입, 로그인, 이메일 인증 등의 로직을 처리합니다.
authService.js:
백엔드에서 인증 관련 비즈니스 로직을 담당하는 서비스 레이어 파일입니다.
데이터베이스 쿼리, 비밀번호 해싱, 토큰 생성 등의 기능을 제공합니다.
authUtils.js:
회원가입과 로그인 시 사용되는 유효성 검사 로직을 담고 있는 유틸리티 파일입니다.
입력된 데이터의 유효성을 검증하는 함수들을 포함합니다.
error.js:
애플리케이션에서 사용되는 다양한 종류의 에러 클래스를 정의하는 파일입니다.
데이터베이스 오류, 인증 오류 등 특정 에러 유형에 대한 처리를 제공합니다.
회원가입과 관련된 로직을 처리하기 위해 useRegistration이라는 커스텀 훅을 사용합니다. 이 훅은 이메일 중복 검사, 이메일 인증, 회원가입 등의 프로세스를 관리합니다. 커스텀 훅을 사용함으로써 코드의 재사용성과 가독성이 향상됩니다.
useModal 커스텀 훅을 통해 모달 창의 상태와 로직을 관리합니다. 이 훅은 모달의 열기, 닫기 및 상태 관리를 담당하여, 모달 관련 코드를 중앙에서 관리할 수 있게 해 줍니다.
RegistrationForm 컴포넌트에서 사용자 입력 폼의 유효성을 검증합니다. 이는 사용자가 올바른 데이터를 입력했는지 확인하는 중요한 과정입니다.
authService.ts에서는 백엔드 API와의 통신을 관리하는 로직을 별도로 분리하여 관리합니다. 이러한 구조는 프론트엔드의 네트워크 요청 관련 코드를 체계적으로 관리할 수 있게 합니다.
deleteTempUser 함수에서 데이터베이스 트랜잭션을 사용하여 임시 사용자 데이터 삭제 프로세스를 관리하고 있습니다. 이는 데이터베이스의 무결성을 유지하는 데 중요한 역할을 합니다. 여기서는 먼저 email_verification 테이블에서 관련 레코드를 삭제한 후, users 테이블에서 해당 이메일을 가진 사용자를 삭제합니다. 이 과정에서 발생할 수 있는 오류에 대비하여 트랜잭션을 사용하고 있으며, 오류 발생 시 롤백을 수행하여 데이터 일관성을 보장합니다.
사용자의 비밀번호는 bcrypt 라이브러리를 사용하여 해싱 처리됩니다. 이는 보안상 중요한 부분으로, 평문 비밀번호를 데이터베이스에 저장하지 않고 해시된 형태로 저장함으로써 사용자 정보의 보안을 강화합니다.
회원가입 시 입력된 이메일의 중복 여부와 유효성을 검사하는 로직이 구현되어 있습니다. 이메일 형식의 유효성을 정규식을 통해 검증하고, 중복 여부는 데이터베이스 쿼리를 통해 확인합니다.
다양한 종류의 에러를 정의하여, 발생하는 오류에 따라 적절한 HTTP 상태 코드와 메시지를 반환하는 구조가 마련되어 있습니다. 이를 통해 클라이언트 측에서 더 명확하게 오류를 처리할 수 있습니다.
현재 폼의 유효성 검사는 기본적인 수준에 머무르고 있습니다. 비밀번호 복잡성(대문자, 소문자, 숫자, 특수문자 포함 여부 등) 검사와 같은 보다 강화된 유효성 검사를 도입할 수 있습니다.
사용자에게 보다 명확한 피드백을 제공하기 위해 에러 메시지와 에러 핸들링을 개선할 필요가 있습니다. 네트워크 요청 실패 시나 서버로부터의 오류 응답에 대해 사용자가 이해하기 쉬운 안내 메시지를 제공해야 합니다.
비밀번호 저장 시 bcrypt를 사용하여 해시 처리하는 것은 좋은 점이지만, SQL 인젝션 공격이나 기타 보안 취약점에 대한 보호 조치도 고려해야 합니다. 예를 들어, 입력 데이터의 적절한 처리(예: SQL 쿼리 파라미터화)가 중요합니다.
현재는 일반적인 에러 유형에 대해 처리하고 있지만, 보다 상세한 에러 처리 로직을 추가하여 시스템의 안정성을 높일 필요가 있습니다. 로깅 시스템을 도입하여 예상치 못한 오류를 추적하고, 디버깅을 용이하게 하는 것도 고려할 수 있습니다.
서버 측에서도 입력 데이터의 유효성을 검증해야 합니다. 클라이언트 측 검증만으로는 충분하지 않으며, 서버 측에서도 데이터 검증을 통해 부적절한 데이터의 처리를 방지해야 합니다.