개인프로젝트/[스프링] SJBoard 개발일지

[개인 프로젝트] SJBoard (댓글 및 파일 업로드 게시판) 12일차 개발 일지

Seojoo21 2022. 3. 23. 00:01

2022.03.22.화요일 12일차 

 

오늘은 아이디 찾기 및 비밀번호 찾기 기능을 추가했다.

 

0. 제작 설계 

아이디 찾기: 회원 가입 시 입력했던 이메일 주소를 확인하여 이메일 주소가 일치할 시에 아이디를 알려준다.

 

비밀번호 찾기: 사실 비밀번호는 찾는 것이 아니라 재설정하는 것이다. 왜냐하면 회원 가입 시 BCryptPasswordEncoder로 모든 비밀번호가 인코딩 되기 때문에 서버에서도 사용자의 비밀번호를 전혀 알 수 없기 때문이다. 따라서 아이디를 아는 경우에 한해 (아이디를 모르면 아이디 먼저 찾아야 함) 회원 가입 시 입력했던 이메일 주소를 확인하여 서버에서 인증 번호를 메일로 보내고 사용자가 해당 인증 번호를 알맞게 입력한 경우에만 다시 비밀번호를 설정할 수 있도록 구현해야 한다. 

 

1.  제작 과정 

- 아이디 찾기, 비밀번호 찾기, 비밀번호 재설정 기능 구현 

https://seojoo21.tistory.com/150

 

[혼자서도 잘해요] 스프링 회원가입 기능 만들기 5 : 아이디 찾기 & 비밀번호 찾기(재설정)

이제 아이디 찾기 & 비밀번호 찾기 기능을 추가해보자. 아이디 찾기는 회원 가입 시 입력했던 이메일 주소를 확인하여 이메일 주소가 일치할 시에 아이디를 알려준다. 비밀번호 찾기는 사실 비

seojoo21.tistory.com

 

2. 발생 에러 및 해결 방법

Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

https://seojoo21.tistory.com/152

 

[스프링] Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by sel

1. 에러 개인 프로젝트인 SJBoard에서 회원 아이디 찾기 기능을 구현하고자 하였다. 그래서 비즈니스 계층에서 사용자가 입력한 email 주소를 가지고 아이디를 찾는 메서드를 선언 및 구현한 후 테

seojoo21.tistory.com

 

3.  오늘 프로젝트 진행하면서 추가로 배운 내용

1) List에 저장된 MemeberVO 객체값 내에 있는 인덱스 요소 값을 뽑아내기 위해 HashSet을 활용하였다. 

화면에서 사용자가 입력한 이메일 주소가 postFindId()의 파라미터 String email로 들어오면 service.findUserId(email) 메소드로 해당 이메일 주소로 가입한 아이디를 검색한다. 그리고 검색한 결과는 userIdList라는 변수에 저장한다.

 

해당 이메일로 가입된 아이디가 없을 경우, List 타입을 가지는 userIdList의 List Size는 0 이거나 아니면 null 값이 된다. 

 

해당 이메일로 가입한 아이디가 있을 경우, userIdList에 있는 사용자의 아이디 값(userid)만 가지고 와야한다. 이를 위해 반복문(for문)을 이용하여 MemberVO 타입의 객체들을 가지고 있던 userIdList의 요소들을 모두 MemberVO 타입의 memberList로 변환해준다. 그리고나서 MemberVO 반환 타입을 가지는 memberList의 getUserid 메서드를 이용해 실제 사용자의 아이디 값만 뽑아낸다. 

 

그 다음 뽑아낸 아이디 값들을 HashSet 타입의 regIdSet (등록된 아이디 모음)에 저장한다. 해당 이메일 주소로 가입한 아이디를 모두 가져와야하므로 이 작업을 userIdList의 size만큼 반복해준다. 컬렉션 타입 중 List 타입이 아닌 Set 타입을 이용하는 것은 반복문 작업 중 컬렉션에 아이디가 중복으로 들어가는 것을 방지하기 위함이다. 

 

자바 컬렉션 프레임워크의 기본 개념은 알고 있지만 실제로 많이 사용해보지 않아 위의 코드를 작성하는데 매우 낯설었다. 그래도 오랜만에 자바의 정석 교재도 다시 읽어보는 좋은 기회가 되었다. 컬렉션에서 원하는 값을 뽑아내는 것이 개발자의 기본이고 실제로 스프링에서 컬렉션 프레임워크가 많이 활용되는데도 불구하고 나는 아직 컬렉션 프레임워크를 다루는데 매우 부족하다. 꼭 시간을 내서 자바 컬렉션 프레임워크를 다시 공부해야겠다. 

 

 

2) 비밀 번호 재설정 JSP 페이지에 스크립트릿으로 이전 페이지에서 세션에 저장해놓았던 사용자 아이디값을 가져와 비밀 번호를 수정 후 서버에 업데이트 하는데 활용하였다. JSP 스크립트릿은 개념만 알고 있고 실제로 사용해본 적은 이번이 처음이었는데 첫 시도치고 큰 에러 없이 한 번에 사용하여 뿌듯했다. 회원 가입 기능을 구현하고 확장하는데 있어서 세션이 계속 사용되는만큼 JSP 페이지에서도 세션을 사용하는데 더욱 익숙해져야겠다.

 

- 회원 비밀번호 찾기 페이지에서 세션을 저장 

 - 저장된 세션값을 그 다음 페이지인 회원 비밀번호 재설정 jsp 페이지에 불러와 사용