문제
- 최근 3번안에 사용한 비밀번호는 사용할 수 없도록 제한하는 기능을 만들고자 한다.
- 해당 엔티티부터 새롭게 설계를 해서 하나하나 차근차근 만들어보자
시도
- 우선은 해당 Entity를 만드는 것부터 시작하였다.
- PrevPassword라는 이름으로 이전에 사용했던 password라는 느낌의 이름으로 만들었고, @JoinColumn을 통해서 User 엔티티와 연관관계를 맵핑해두었다. (@ManyToOne)
- 해당 부분을 설계하면서 가장 고민했던 부분은 비밀번호를 최근 3개까지 저장하면서, 새롭게 비밀번호를 저장할 때에 가장 예전 비밀번호를 없애는지에 대한 방법이었다.
- 이 부분을 Spring Data Jpa를 통해서 findAllByUserIdOrderByCreatedAtDesc라는 쿼리메서드를 만들어서 유저아이디로 전부 받아오되, 생성된 날짜를 기준으로 최근순으로 정렬했다.
- 또한 여기에서 for문을 만들어서 입력한 새 비밀번호가 기존의 것과 일치한다면 Exception을 throw하도록 하였고, 해당 List의 size가 3 이상이라면 remove(prevPasswords.size() - 1);를 해주어서 마지막 인덱스의 값 (가장 먼저 생성되어 저장된 비밀번호)를 지우도록 하였다.
해결
- 일단 작동을 제대로 하는 거 같기는 한데... 나중에 조금 더 테스트를 진행해보아야 할 것으로 보인다.
잘 봤습니다. 좋은 글 감사합니다.