개발자 취업준비/springboot

스프링 시큐리티 실전 적용하기2 회원가입 구현하기

naspeciallist 2025. 3. 25. 23:13


이 글은 스프링부트3 백엔드 개발자 되기 책을 바탕으로 공부한 내용을 정리한 게시글 입니다.

 

이전 게시물에서 스프링 시큐리티를 설정하였습니다. 이제 설정한 시큐리티를 바탕으로 회원가입을 구현하겠습니다. 회원정보를 추가하는 서비스 메서드를 작성한 뒤 회원가입 컨트롤러를 구현하겠습니다.

 

 

1. 서비스 메서드 코드 작성하기


 

가장 먼저 사용자의 정보를 담기 위한 dto객체를 생성하겠습니다. AddUserRequest.java 파일을 추가하여 dto 객체를 작성하겠습니다.

 

@Setter
@Getter
public class AddUserRequest {
    private String email;
    private String password;
}

 

이어서 AddUserRequest 객체를 인수로 받는 회원 정보 추가 메서드를 작성하겠습니다. UserService.java 파일을 만든 뒤 서비스 로직을 구현하겠습니다.

 

public class UserService {

    private final UserRepository userRepository;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    public Long save(AddUserRequest dto) {
        return userRepository.save(User.builder()
                .email(dto.getEmail())
                .password(bCryptPasswordEncoder.encode(dto.getPassword()))
                .build()).getId();
    }
}

 

 

 

2. 컨트롤러 작성하기


 

이제 회원가입 폼에서 회원가입 요청을 받으면 서비스 메서드를 사용해 사용자를 저장한 뒤 로그인 페이지로 이동하는 signup()메서드를 작성해보겠습니다. 

 

UserApiController.java 파일을 만들어 다음과 같이 코드를 작성하겠습니다. 

 

@RequiredArgsConstructor
@Controller
public class UserApiController {

    private final UserService userService;

    @PostMapping("/user")
    public String signup(AddUserRequest request) {
        userService.save(request);
        return "redirect:/login";
    }

    @GetMapping("/logout")
    public String logout(HttpServletRequest request, HttpServletResponse response) {
        new SecurityContextLogoutHandler().logout(request, response, SecurityContextHolder.getContext().getAuthentication());
        return "redirect:/login";
    }

}

 

redirect: 를 통해 회원가입 처리가 된 다음 바로 로그인 페이지로 이동 할 수 있도록 설정하였습니다 .이렇게 하면 회원가입처리가 끝나면 강제로 /login URL에 해당하는 화면으로 이동합니다. 

 

또한 추가적으로 로그아웃 기능도 구현하기 위해 logout메핑을 처리해줄 logout메서드 컨트롤러를 작성해 줍니다.

 

이렇게 하면 스프링시큐리티를 통한 회원가입,로그인,로그아웃 기능은 모두 완성이 되었습니다. 스프링 시큐리티를 사용한 덕분에 인증 및 인가를 간편하게 구현 할 수 있었습니다. 지금까지 스프링 하위 프레임 워크인 스프링 시큐리티를 이용하여 폼 로그인을 구현해 보았습니다.

 

 

3. 스프링 시큐리티 정리


 

인증은 보호된 리소스에 접근하는 것을 허용하기 이전에 등록된 사용자의 신원을 입증하는 과정입니다.

인가는 특정부분에 접근 할 수 있는지에 대해 확인하는 작업입니다.

스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증,인가)을 담당하는 스프링 하위 프레임 워크입니다. 스프링 시큐리티는 필터기반으로 동작합니다. 각필터에서 인증, 인가와 관련된 작업을 처리합니다. 기본적으로 세션&쿠키 방식으로 인증을 처리합니다.

스프링 시큐리티에서 사용자의 인증, 인가 정보를 UserDetails 객체에 담습니다. 이 클래스를 상속받은 뒤 메서드를 오버라이드 해 사용자의 인증 인가 정보를 다루게 됩니다.

스프링 시큐리티에서 사용자의 정보를 가져오기 위해 UserDetailService를 사용합니다. 이 클래스를 상속받은 뒤 loadUserByUsername()을 오버라이드 하면 스프링 시큐리티에서 사용자의 정보를 가져올 때 오버라이드 된 메서드를 사용합니다.