회원 서비스 개발하기우선 로그인은 이전에 개발해 두었기 때문에, 회원가입과 정보수정, 회원탈퇴, 정보조회를 구현하도록 하겠습니다. Show 현재 Member 클래스의 상태입니다.
다음 코드를 추가해주겠습니다.
그리고 현재 MemberRepository의 상태입니다.
이제 MemberService를 개발해보도록 하겠습니다. MemberService위치는 다음과 같습니다.
DTO사용할 DTO들은 다음 위치에 생성했습니다. MemberInfoDto
MemberSignUpDto
MemberUpdateDto
SecurityUtilSecurityContextHolder에서 username을 꺼내오는 코드를, 해당 클래스를 통해서 작성한 후, 편하게 사용하도록 하겠습니다.
MemberServiceImpl
설명 더보기 1. signUp() 회원가입을 진행하는 메서드입니다. 회원가입 시 컨트롤러 단에서 엔티티로 변환하여 받아오는 것이 아니라, 서비스 단에서 DTO를 엔티티로 변환하였습니다. 변환 후 USER라는 권한을 설정하였고, 이후 중복된 아이디가 있는지 체크합니다. 없다면 회원가입을 진행합니다. 2. update() 회원정보를 수정합니다. MemberUpdateDto는 Optional 필드들을 가지고 있으며, ifPresent를 통해 필드가 존재하는 경우에만 업데이트를 진행하도록 작성하였습니다. 3. updatePassword() 비밀번호를 변경하는 메서드입니다. 비밀번호는 다른 회원정보들과 다르게 무조건 따로 업데이트 해야 하며, 비밀번호 변경시에는 현재 비밀번호를 입력받아 보안을 강화합니다. Member 클래스에 matchPassword()라는 메서드를 만들어 비밀번호가 일치하는지 확인하는 메서드를 생성하였고, 일치한다면, 변경하고자 하는 비밀번호 (toBePassword)로 변경합니다 4. withdraw() 회원탈퇴를 진행하는 메서드입니다. 비밀번호를 재입력받아 비밀번호가 일치해야만 회원탈퇴를 진행합니다. 5. getInfo() id를 받아와서 해당 회원의 정보를 조회하는 메서드입니다. MemberInfoDto의 형태로 감싸서 반환하며 이는 이후에 비공개 계정과 공개 계정을 나누어 비공개 계정일 경우 정보조회를 할 수 없도록 만들고 싶습니다. 6. getMyInfo() 나의 정보를 가져오는 메서드입니다. 현재 나의 정보는 로그인 한 경우 SecurityContextHolder에 들어있기 때문에 따로 입력받지 않아도 인증만 되어있다면 정보 조회가 가능합니다. 테스트코드
3개의 메서드만 살펴보겠습니다.
MemberSignUpDto를 반환하는 메서드입니다. Http요청을 보내는 것이 아니기때문에 임의로 생성해 주었습니다.
회원가입을 진행한 후 SecurityContextHolder에 인증된 회원정보를 저장하는 메서드입니다. 반환은 회원가입 시 사용했던 MemberSignUpDto를 반환합니다.
테스트가 끝날 때 마다, SecurityContextHolder의 Authentication(인증)정보를 비워줍니다. 회원 서비스는 구현이 끝났습니다. 이제 Controller를 만들고, 테스트를 진행해보도록 하겠습니다. 전체 코드는 깃허브에서 확인하실 수 있습니다. https://github.com/ShinDongHun1/SpringBoot-Board-API GitHub - ShinDongHun1/SpringBoot-Board-API Contribute to ShinDongHun1/SpringBoot-Board-API development by creating an account on GitHub. github.com |