본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
안녕하세요 :)
오늘은 챌린지 24일차로, 벌써 한 달이 다 되어가네요 시간 짱빨라요...
오늘 배울 내용은,
Part A. 로그인, 로그아웃, 회원가입으로 배워보는 스프링 시큐리티 기초
Ch 6. 실전: 로그인, 로그아웃, 회원가입 만들어보기
"05. 회원가입 만들기" 입니다.

이번 시간에는 회원가입하는 로직에 대해 살펴보았다. 이전에 강사님께서 프로젝트 설명을 해주실 때 회원가입 로직은 별도의 화면에서 구현하는게 아니라 API 호출을 통해서 엔드포인트 기반으로 구현하겠다고 말씀해주셨었는데, 먼저 그 부분을 살펴보는 시간을 가졌다.
먼저 컨트롤러 패키지 아래에 유저 컨트롤러를 보면 된다.register라고 하는 엔드포인트가 만들어져 있다. 회원가입을 하는 어떤 액션이 일어나는 엔드포인트이기 때문에 @PostMapping으로 설정했다.
회원가입을 하는 API의 엔드포인트가 호출이 될 때는 UserRegisterRequestBody 라고 하는 클래스가 필요하다. Post 형식이기 때문에 RequestBody로 받아두게끔 설정했고, UserRegisterRequestBody에 드어가면 두 개의 필드를 받게끔 되어 있다. 첫번째는 username과 password가 있다. 두 개의 필드를 전달 받아서 회원가입을 가장 간단하게 하도록 했다.
그래서 패스워드가 입력될 때는 평문으로 사용자가 입력한 평문 그 자체로 인입이 된다. 두번째로 userService의register 메소드를 호출을 하는데 호출할 때는 UserRegisterRequestBody를 그대로 전달하는게 아니라 CreateUser라고 하는 다른 객체로 다른 DTO로 변환을 해서 전달을 하게 된다. CreateUser 라고 하는 것을 왜 분리했냐면, 전달받은 RequestBody에서는 클라이언트가 입력한 패스워드 그대로 입력이 되기 때문에 내부적으로는 이걸 암호화해서 처리를 해야한다고 생각했다.그래서 별도의 객체를 가지고 있는 것이 맞다고 생각했기 때문에 CreateUser 라는 객체를 만들었고, 이 객체를 만들 때는 전달 받은 RequestBody에 getUserName은 그대로 전달하고, 패스워드는 bCryptPasswordEncoder를 통해서 인코드를 한 다음에 CreateUser를 만들어서 전달하게끔 했다. 전달을 해서 돌아온 결과값을 반환받은 결과값은 result의 수정이 되게 되고 그거를 resultResponse의 ok를 통해서 반환하게 했다.
response의 경우에는 공통 response 라고 보면 된다. 그래서 record를 활용해서 success 여부, 코드값, 메세지값, 데이터 자체를 전달하게 했다. 그리고 ok를 활용하고 있기 때문에 여기서는 success는 true이고, code success 다음에 메세지는 없고 데이터는 그 데이터 자체를 리턴하게 했다.
다음으로 유저 서비스의 register를 살펴보면, 서비스 패키지 아래에 위치하고 있고, 여기는 CreateUser를 전달받아 하나의 스트링 값을 리턴한다. 이 스트링 값은 유저 이름이 반환되게끔 한다. 그래서 이 register 메소드는 로직이 간단하다. 먼저 유저 레파지토리를 통해 해당 유저가 등록이 되어 있는지 체크한 다음에 등록이 되어 있다면 RuntimeException을 발생시켜 해당 유저가 이미 존재한다는 에러를 던지게 설정을 했다. 유저가 존재하지 않는다면 회원가입을 해도 되는 상황이라고 판단할 수 있기 때문에 유저 레파지토리에 create 메소드를 호출하고 전달 받은 값의 유저 네임을 반환하게 했다.
이렇게 이번 시간에는 REST 엔드포인트를 하나 만들어서 API를 기반으로 회원가입을 하고 회원가입을 한 내용으로 로그인을 하는 것까지 시도해보는 시간을 가졌다.