Showing

[스프링부트] 요구사항에 따른 회원가입 api 작성 본문

JAVA, SPRING/Spring boot, React

[스프링부트] 요구사항에 따른 회원가입 api 작성

RabbitCode 2023. 6. 7. 19:44

DTO, Controller, 순으로 작성하도록 한다. 

1. 회원가입 요구사항 확인

회원가입
로그인
로그인 후 메인화면 이동

2. 회원가입 api 작성 (DTO)

회원가입이란, 데이터베이스에 사용자를 등록하는 행위이다. 이제 회원가입에 대한 api를 작성해보도록 한다. http POST 메소드를 사용해서 통신을 할 것이다. POST 메소드는 데이터를 리퀘스트 바디에 담아서 전달해준다. 즉, 데이터를 숨겨서 보내기 때문에 GET보다 보안에 조금 더 유리한 부분이 있다. 회원가입을 할 때에는 사용자가 이메일 주소와 비밀번호, 비밀번호 확인, 닉네임, 핸드폰번호, 주소, 상세 주소를 입력해서 회원가입을 진행한다.

(1) 3000번 포트 POST 리퀘스트 매핑은  /api/auth/signUp

(2) 리퀘스트 바디에 데이터를 담기 ( userEmail, userPassword, userNickname, userPhoneNumber, userAddress, userAddressDetail ) <- 이렇게 리퀘스트 바디에 담아 보낼 것

다만 아래 그림을 참고하여 DTO를 만들어주어야 한다.

(3) result, message, data {token, exprTime} : 앞으로 모든 리스폰스가 이 형태로 자를 것이다. data는 명확하지 않기 때문에 Generic으로 하도록 한다.

result(불린타입), message(문자열 타입의 메시지), data 이 각각의 포맷을 만들도록 한다.

package com.example.board.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor(staticName = "set" )
public class ResponseDto<D> {
    private boolean result;
    private String message;
    private D data;

    public static <D> ResponseDto<D> setSuccess(String message, D data){
        return ResponseDto.set(true, message, data);
    }

    public static <D> ResponseDto<D> setFailed(String message){
        return ResponseDto.set(false, message, null);
    }
}

 

data {token, exprTime} 반환해주는데, token같은 경우는 추후 문자열로 jwt를 사용하게 될 것이다. exprTime은 jwt의 만료 기간을 알려주기 위해서 반환을 해주도록 할 것이다.

 

리스폰스도 컨트롤러 레이어에서 뷰 레이어로 이동하므로 아래 그림과 같이 데이터를 전송하므로 DTO로 작성해준다.

package com.example.board.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SignUpResponseDto {
    private String token;
    private int exprTime;
}

3. 회원가입 api 작성 (Controller)

3000번 포트 POST 리퀘스트 매핑은  /api/auth/signUp

을 구현해야하므로 우선 /api/auth 컨트롤러를 하나 작성해주도록 한다.

컨트롤러 패키지 아래에다가 AuthController를 작성한다. 

package com.example.board.controller;

import com.example.board.dto.ResponseDto;
import com.example.board.dto.SignUpDto;
import com.example.board.dto.SignUpResponseDto;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/auth")
public class AuthController {
    @PostMapping("/signUp")
    public ResponseDto<SignUpResponseDto> signUp(@RequestBody SignUpDto requestBody){
        return null;
    }
}