본문 바로가기
Programming/Spring Boot

[실습] 스프링부트(Spring Boot)로 비밀번호 관리 기능 구현하기 - DB, API 기획/설계하기

by 돌방로그 2023. 2. 21.


오늘의 실습 목표는 "비밀번호 관리 기능 만들어보기!" 입니다.
본 게시글에서 다루는 사항은 비밀번호 관리 기능을 구현하기 위해 DB(Tables), API를 기획/설계하는 과정입니다.


DB

- Schema: web-app
- Table Name: admin_user_pw_history
- Table Objectives: 관리자포털 사용자/직원의 비밀번호 정보 변경 이력이 저장되는 공간
NAME NAME_KOR TYPE NOT NULL NOTES
employee_no 직원번호 VARCHAR(6) V * PK
no 순번 INT V * PK
register_employee_no
register_date_time
update_employee_no
update_date_time
등록직원번호
등록일시
수정직원번호
수정일시
VARCHAR(6)
DATETIME
VARCHAR(6)
DATETIME
V
V
V
V
 
current_pw 현재 비밀번호 TEXT (Crypt) V  
previous_pw_1 이전 비밀번호 (1번째) TEXT (Crypt)    
previous_pw_2 이전 비밀번호 (2번째) TEXT (Crypt)    
pw_trial_state 비밀번호 시도 상태 CHAR(1) V 0: 초기 상태
1-4: 시도 횟수
5: Lock
    > 초기화 필요
temporary_pw_state 임시 비밀번호 여부 CHAR(1) V N: No (Default)
Y: Yes

 

 


API

Summary

ACTION API PURPOSE
Create / POST /admin-web/user/password 관리자포털 사용자 비밀번호 변경
- 관리자포털 사용자 비밀번호 이력 테이블에 신규 행 추가
- 관리자포털 사용자 정보(admin_user_info) 테이블의 비밀번호 관련 컬럼 정보 수정
Read / GET /admin-web/user/password 관리자포털 사용자 비밀번호(현재, 1/2번째 전) 정보 조회

 

Detail

[POST] /admin-web/user/password

관리자 포털의 사용자가 비밀번호 변경시 본 API가 호출되며, 아래 로직을 순차적으로 수행합니다.

  • 관리자 포털 사용자 비밀번호 이력(admin_user_pw_history) 테이블에 아래 정보 추가
    • 현재 비밀번호(current_pw): 사용자가 입력한 변경할 비밀번호로 설정
    • 1번째 전 비밀번호(previous_pw_1): 직전 순번의 현재 비밀번호로 설정
    • 2번째 전 비밀번호(previous_pw_2): 직전 순번의 1번째 전 비밀번호로 설정
    • 비밀번호 시도 상태(pw_trial_state): 사용자가 로그인한 횟수로 설정
      • 5번 시도시 Lock 상태를 의미하며, 관리자에게 임시비밀번호 발급 요청하여 본 필드가 초기화되어야 함
    • 임시 비밀번호 발급 여부(temporary_pw_state): 디폴트로 설정된 N(o)로 설정
      • 관리자의 사용자 관리 화면에서 임시비밀번호 발급시 Y(es)로 설정
  • 관리자 포털 사용자 정보(admin_user_info) 테이블에 비밀번호 관련 필드 정보 수정
    • 직원 비밀번호(employee_pw): 사용자가 입력한 변경할 비밀번호로 설정
    • 직원 비밀번호 만료일(employee_pw_exp_date): 사용자가 비밀번호를 변경한 일자 기준으로 60일 이후로 지정 

 

[GET] /admin-web/user/password

관리자 포털의 사용자가 설정 화면으로 접근시 본 API가 호출되며, 아래 로직을 순차적으로 수행합니다.

  • 관리자 포털 사용자 비밀번호 이력(admin_user_pw_history) 테이블에서 최근 비밀번호 3종 획득
    • 현재 비밀번호(current_pw)
    • 1번째 전 비밀번호(previous_pw_1)
    • 2번째 전 비밀번호(previous_pw_2)

 


예정 사항

비밀번호 테이블과 관련하여 단순하게 GET/POST 기능 외에도 아래의 기능을 구현할 수 있습니다.

향후에 로그인 기능 구현시 추가할 API입니다. 

 

  1. 로그인할 때 사용자 정보 정합성을 확인하기 위해 아래 두 테이블의 비밀번호 필드의 값 일치 여부 기능
    • 관리자 포털 사용자 정보(admin_user_info)의 직원 비밀번호(employee_pw)
    • 관리자 포털 사용자 비밀번호 이력(admin_user_pw_history)의 현재 비밀번호(current_pw)
  2. 관리자 포털의 사용자 관리 화면에서 특정 사용자에게 임시 비밀번호 발급 기능
    • (발급) 기본적인 비밀번호 변경 로직([POST] /admin-web/user/password)과 동일하되, 아래 필드에 대해서만 값을 다르게 설정
      • 임시 비밀번호 여부(temporary_pw_state): Y
    • (사용) 로그인 시 임시 비밀번호 여부(temporary_pw_state)가 Y인 경우, 비밀번호 변경부터 진행하도록 팝업
      • 미 변경시 이후 과정 진행 불가
  3. 비밀번호 시도 상태(pw_trial_state) 값이 5이면, 로그인 시도 횟수를 초과한 경우로 로그인 불가하도록 Lock 처리

 

 


댓글