로그인을 만들때는 아이디가 있어야 하고 아이디를 만드려면 회원가입을 해야한다.
즉, 회원 가입을 먼저 만들겠다는 뜻이다.
우리는 메퍼로 DB에 사용자의 정보를 저장할것이다.
그렇다면 가장 먼저 해주어야 할 사용자의 정보를 저장하는 쿼리문을 짜고 그것을 자바에서 클래스로 사용할 수 있게 만들어야 한다.
1. 매퍼에 insert 쿼리문을 통해 사용자의 정보를 가입하기 위해 만들었다.
<include refid=""> 를 통해 멤버 컬럼들을 한번에 등록시키고 사용했다.
이런식으로 어떻게 저장할지 정했다.
1 - 1. 그후 이 singup 이라는 이름을 가진 매퍼와 자바 클래스에서 사용될 mapper 와 연결을 시켜주어야 한다.
그러면 이제 mapper 를 DI로 등록해서 사용할수 있는 상황이 된것이다. 그렇다면 우리는 서비스에서 이 메소드를 사용해야 한다.
2. Service 에 우리가 회원가입할 메소드를 만들어 주어야한다.
인터페이스이기때문에 선언부만 완성 시키면 된다. MemberSignup 이라는 추상메소드를 만들고 이 메소드는 인자로 RequsetDto를 받을 것이다. 그럼 ReqestDto는 무엇을 가지고 있을까??
이런식으로 객체를 구성하게 될것이다. MemberRequest 는 이렇게 인자를 가지고 있을것이다. 회원가입을 할때 우리가 받을 객체의 구성은 회원가입 할 때 필요한것들을 받았다.
내가 회원가입을 할때 받을 내용은 {아이디, 비밀번호, 전화번호, 이메일, 닉네임, 이름} 정도이다 물론 이 정보들은 멤버를 이루고 있는 모든 Entity가 아닌 회원가입을 할때 받을 데이터이다. 때문에 정확히 모든것을 만들어줄 필요는 없다.
※ 아쉬운 점 : 이때 당시에는 정확히 이해를 못한탓에 받지 않아도 되는 모든 인자를 받았다. Request 는 회원가입을 통해 입력받을 정보를 얻고 그 정보를 Entity에 Builder를 통해 넘겨줄때 조정하면 되는것이다.
3. ServiceImpl에 정확히 회원가입에 대한 로직을 작성한다.
가장 위의 hashedPassword 는 들어온 DTO의 객체의 인자들 중 password를 암호화해서 DB에 저장하는것이다. 로그인에서 중요한것은 개인정보를 최대한감추고 숨겨야한다. 특히 비밀번호는 굉장히 중요하다는것을 알수 있다. 때문에 저장을 할때도 순수 문자 그대로가 아닌 암호화를 사용한다.
내가 사용한 암호화 클래스는 BCryptPasswordEncoder 이다. 해당 암호화는 BCypt 해싱 함수를 사용하는 인코딩 메소드와 제출된 비밀번호롸 저장소에 저장되어 잇는 비밀번호의 일치 여부까지 확인하는 메소드를 제공한다.
if 문은 내가 회원가입을 만들때 아이디와 닉네임에 중복 검사를 걸어두었다. 때문에 중복 검사를 진행하지 않고 회원가입을 하는 경우를 막기위해 만들었다. 그 후 모든것이 조건이 맞다면 나는 해당 DTO를 Entity 객체로 이동시킨후에 DB에 직접적으로 저장한다.
toMemberEntity는 빌더를 통한 메소드이지 setter가 아니다. 그리고 회원가입에 입력은 되지 않지만 DB에 저장되는 데이터의 경우 내가 빌더 자체내에서 채워준다. 다른것들은 아마 이름을 보면 알것이다. isWithDraw 는 탈퇴여부 확인을 위해 만들었다. Social은 추후 OAuth 2.0 을 설명하며 진행할 예정이다.
4. 그럼 이렇게 로직을 살펴보았다. 그럼 회원가입을 하는 엔드포인트를 다루는 컨트롤러를 살펴 보자.
?? 왜 두개야?? 왜냐하면 우리는 배달어플을 만든다고 기획했고 그것은 사장님의 페이지와 손님이 보는 페이지를 만들기 위해서였다. 때문에 나는 사장님버전의 로그인과 회원 버전의 회원가입을 만들고자했다.
두개의 메소드는 이름만 다를뿐 로직이 같다. 그래서 한개를 기준으로 설명하자면 우리는 POST 형태로 넘어온 요청을 @RequestBody로 받아 RequestDto 객체로 받았다. 그리고 그것을 요리하는 서비스단에 보내준다.
이렇게 하면 회원가입이 완료된다.
포스트맨을 통한 테스트
현재는 이렇게 아무것도 없이 비어있지만
이렇게 회원가입에 필요한 데이터를 넣어주면 성공했다는 결과값을 보내주고
이렇게 저장되는것을 확인할수 있다. 물론 BCryt 암호화를 사용하면서 생긴 비밀번호 암호화로 인해 1234 가 저렇게 바뀐것이다.
'프로젝트 > 팀 프로젝트' 카테고리의 다른 글
babpool 5. SecurityFilterChain 설정 (0) | 2023.07.11 |
---|---|
babpool 6 . JWT Filter 만들기 전에 부품만들기 (0) | 2023.07.11 |
BabPool 3. 파일 관리 (0) | 2023.07.11 |
BabPool 2. 사용한 도구들 (0) | 2023.07.11 |
Babpool 1. 아이디어 회의와 ERD 생성 (0) | 2023.07.11 |