Spring Boot + Security + JWT + JPA(Mysql)를 이용한 Restful Login 사용하기(2) - 회원가입 제작하기

600g (Kim Dong Geun)·2020년 4월 12일
2

뷰 제작하기


회원가입과 로그인에 사용될 뷰를 각각 제작해준다
소스는 여기서 확인할 수 있다.

회원가입 로직 제작하기

MemberRepository.java

package com.donggeun.springSecurity.repository;

import com.donggeun.springSecurity.model.Member;
import org.springframework.data.repository.CrudRepository;

public interface MemberRepository extends CrudRepository<Member, Long> {

    Member findByUsername(String username);

}

SpringBoot는 CurdRepository를 이용해서 기본적인 DB 명령을 수행할 수 있다.
또한 findBy[ColumnName]을 이용해서 쉽게 DB모델을 찾을 수 있다.

  • AuthService.java
public interface AuthService {
    void signUpUser(Member member);

    Member loginUser(String id, String password);
}
  • AuthServiceImpl.java
@Service
public class AuthServiceImpl implements AuthService {

    @Autowired
    private MemberRepository memberRepository;

    @Override
    public void signUpUser(Member member) {
        String password = member.getPassword();
        String salt = saltUtil.genSalt();
        member.setSalt(new Salt(salt));
        member.setPassword(saltUtil.encodePassword(salt,password));
        memberRepository.save(member);
    }

    @Override
    public Member loginUser(String id, String password) throws Exception{
        Member member = memberRepository.findByUsername(id);
        if(member==null) throw new Exception ("멤버가 조회되지 않음");
        String salt = member.getSalt().getSalt();
        password = saltUtil.encodePassword(salt,password);
        if(!member.getPassword().equals(password))
            throw new Exception ("비밀번호가 틀립니다.");
        return member;
    }

의존성 주입을 위한 Service Interface와 ServiceImpl
실제로 비즈니스 로직이 이루어지는 Service단, 데이터를 받으면 유저의 정보를 저장하게끔 설정했다. Salt와 관련된 부분은 여기를 참고하길 바란다.

  • MemberController.java
@RestController
@RequestMapping("/user")
public class MemberController {

    @Autowired
    private AuthService authService;


    @PostMapping("/signup")
    public Response signUpUser(@RequestBody Member member){
        Response response = new Response();

        try{
            authService.signUpUser(member);
            response.setResponse("success");
            response.setMessage("회원가입을 성공적으로 완료했습니다.");
        }
        catch(Exception e){
            response.setResponse("failed");
            response.setMessage("회원가입을 하는 도중 오류가 발생했습니다.");
            response.setData(e.toString());
        }

        return response;
    }

와 같이 Repository - Service - Controller 순으로 코드를 작성해준다.
각각의 코드는 Spring 기본 Architecture를 기반으로 구성했다.

테스트 해보기


Unit 테스트나 주어진 리액트와 연결해보거나, 혹은 Postman을 이용해서 DB에 직접 들어가는지 확인을 해보자

위 사진처럼 데이터가 DB에 정상적으로 들어갔다면 성공이다.

회원가입 부분은 여느 Logic과 다름없는 REST한 작업이기 때문에, 간략히 설명하고 넘어가겠다!.

profile
수동적인 과신과 행운이 아닌, 능동적인 노력과 치열함

1개의 댓글

comment-user-thumbnail
2020년 10월 14일

MemberController 부분에 Response 객체는 어떤걸 사용하시는지요 /.?
javax.xml.ws.response와 catialina/connector, coyote 이렇게 3개가 있는데 모두 보이지 않습니다
.setResponse, setMessage 부분이 없다고 나와 구현이 안되는데 어떤 걸 적용 시켜야 되는지요 ㅠ

답글 달기