본문 바로가기
Projects/스프링부트 블로그 프로젝트

[Spring Boot]스프링부트 블로그 만들기 - 회원가입 구현

by Hoseok 2023. 2. 15.
728x90
반응형

스프링부트 블로그 만들기는

mvc패턴에서 view를 제외한 model과 controller 부분만 포스팅할 예정이니,

view 구현을 원하시는 분들은 프론트엔드 기초 강의를 들으시기를 권합니다.

 

 

컨트롤러 구현

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private HttpSession session;

    @GetMapping("/joinForm")
    public String joinForm() {
        return "/user/joinForm";
    }

    @PostMapping("/join")
    public String join(JoinReqDto joinReqDto) {
        if (joinReqDto.getUsername() == null || joinReqDto.getUsername().isEmpty()) {
            throw new CustomException("아이디를 작성해주세요");
        }
        if (joinReqDto.getPassword() == null || joinReqDto.getPassword().isEmpty()) {
            throw new CustomException("비밀번호를 작성해주세요");
        }
        if (joinReqDto.getEmail() == null || joinReqDto.getEmail().isEmpty()) {
            throw new CustomException("이메일을 작성해주세요");
        }

        userService.가입하기(joinReqDto);

        return "redirect:/loginForm";
    }

}

 

GetMapping은 get 요청을 할 때 사용합니다.

PostMapping은 post 요청을 할 때 사용합니다.

 

@Autowired 는 ioc컨테이너에 필드 주입을 하는 annotation입니다.

 

"/"는 url 주소를 의미합니다.

 

회원가입 정보를 받을 때, dto로 받으시는 것이 좋습니다.

 

Exception 처리에 대한 코드는 다음 편에 따로 정리하겠습니다.

 

지금은 간단하게

아이디, 비밀번호, 이메일 작성을 체크하고 데이터가 들어왔을 시, insert한다고

이해하시면 좋습니다.

 

db에 접근하는 부분은 service단에서 처리하도록 합시다.

 

 

Dto 구현

package abc.abc.blog.dto.user;

import lombok.Getter;
import lombok.Setter;

public class UserReqDto {

    @Setter
    @Getter
    public static class JoinReqDto {
        private String username;
        private String password;
        private String email;
    }
}

 

JoinReqDto로 회원가입 시 필요한 데이터를 받아줍니다.

 

Service 구현

@Service
public class UserService {
    @Autowired
    private HttpSession session;

    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void 가입하기(JoinReqDto joinReqDto) {
        // 1. 유저 유효성 검사
        User sameuser = userRepository.findByName(joinReqDto.getUsername());

        if (sameuser != null) {
            throw new CustomException("동일한 아이디가 존재합니다");
        }
        // 1. db에 insert하기
        int result = userRepository.insert(joinReqDto.getUsername(), joinReqDto.getPassword(), joinReqDto.getEmail());

        if (result != 1) {
            throw new CustomException("회원가입이 실패하였습니다");
        }
    }
}

 

@Transactional을 걸어주면, select를 제외한 모든 db 접근을 락을 걸어줍니다.

그리고 모든 Service 코드가 끝나면 commit, 중간에 exception이 터질 시, rollback합니다.

 

모델 구현 

@Getter
@Setter
public class User {
    private int id;
    private String username;
    private String password;
    private String email;
    private Timestamp createdAt;
}

 

Repository 구현

@Mapper
public interface UserRepository {
        public int insert(@Param("username") String username, @Param("password") String password,
                        @Param("email") String email);
}

매개변수가 하나 이상일 시에는 @Param을 붙여줘야 합니다.

 

(User 객체로 바로 받는 것도 가능합니다.)

 

이렇게 회원가입이 끝났습니다.

 

다음 편에는 Exception 처리에 대해 포스팅하겠습니다.

728x90
반응형