나는 원래 return 값을 원하는 값만 송출해내게 하기 위해 Dto를 많이 활용하며 과제를 진행했었다.

이번에는 미니 프로젝트를 하며 팀원분들과 함께 프로젝트를 진행하다보니 서로의 로직성향?과 풀어나가는 방식이 다르다보니 더 효율적인 것과 깔끔한 것으로 협의해가며 진행을 하려고 하기 위해 노력했던 것같다.

그래서 이번에는 Dto를 많이 만들어서 return 값을 내보내는 것이 아닌

BasicResponseDto를 활용하여 최대한 Dto를 만들지 않고 한 Dto를 이용하여 해보는 것으로 했다!

 

예전에 ResponseEntity를 사용해본 적은 있어도 BasicResponseDto 는 처음이었다.

ResponseEntity는 satatusCode를 좀 더 섬세하게 다룰 수 있는 반면 BasicResponse는 data값을 이용하는 것 같았다.

 

 

 

@Getter
@AllArgsConstructor
public class BasicResponseDto<T> {

    private boolean success;

    private String message;

    private T data;

    public static <T> BasicResponseDto<T> setSuccess(String message, T data) {
        return new BasicResponseDto<>(true, message, data);
    }

    public static <T> BasicResponseDto<T> setFailed(String message) {
        return new BasicResponseDto<>(false, message, null);
    }
}

위와 같이 기본 Dto를 만들어서 형성해주고

success : true인지 false인지

message : 상태 설명

data : 게시글 담을 리스트

 

<UserService>

    public BasicResponseDto<?> signup(SignupRequestDto signupRequestDto) {
        String userId = signupRequestDto.getUserId();
        String password = passwordEncoder.encode(signupRequestDto.getPassword());
        Optional<User> found = userRepository.findByUserId(signupRequestDto.getUserId());

        if (found.isPresent()) {
            return BasicResponseDto.setFailed("아이디 중복");
        }

        User user = new User(userId, password);
        userRepository.save(user);
        return BasicResponseDto.setSuccess("회원 가입 완료!", null);
    }

이렇게 사용하였다.

 

+ Recent posts