스프링 부트 백엔드 개발 강좌, 스프링 시큐리티로 로그인 로그아웃, 회원 가입 구현, 엔티티 만들기

1. 개요

본 강좌에서는 스프링 부트를 활용한 백엔드 개발 과정과 스프링 시큐리티를 이용한 로그인 및 로그아웃 구현, 회원 가입 기능 구현에 대해 상세히 다룹니다. 또한 데이터베이스와의 상호작용을 위한 엔티티 클래스를 만드는 방법도 배우게 됩니다.

2. 스프링 부트란?

스프링 부트(Spring Boot)는 자바 기반의 웹 애플리케이션을 개발하기 위한 프레임워크로, 스프링 프레임워크를 기반으로 합니다. 스프링 부트는 설정을 최소화하고, 개발자가 비즈니스 로직에만 집중할 수 있도록 돕는 다양한 기능을 제공합니다. 특히, 자동 설정(autoconfiguration) 기능이 강력하여, 복잡한 설정 없이도 비즈니스 로직을 쉽게 구현할 수 있습니다.

3. 스프링 시큐리티란?

스프링 시큐리티(Spring Security)는 스프링 기반 애플리케이션의 보안을 담당하는 프레임워크입니다. 인증(Authentication)과 권한 부여(Authorization) 기능을 제공하며, 애플리케이션의 보안을 간편하게 설정할 수 있도록 해줍니다. 이 강좌에서는 스프링 시큐리티를 사용하여 사용자 인증 및 권한을 관리하는 방법을 배웁니다.

4. 프로젝트 설정

본 강좌에서는 IDE로 IntelliJ IDEA를 사용하며, Maven을 프로젝트 관리 도구로 사용합니다. 시작하기에 앞서 아래의 단계를 따라 프로젝트를 설정합니다.

  1. IntelliJ IDEA를 열고 새 프로젝트를 생성합니다.
  2. Maven을 선택하고, Group ID 및 Artifact ID를 설정합니다. (예: com.example, spring-security-demo)
  3. Dependencies에 ‘Spring Web’, ‘Spring Security’, ‘Spring Data JPA’, ‘H2 Database’를 추가합니다.
  4. 프로젝트를 생성한 후, src/main/resources/application.properties 파일을 열어 데이터베이스 설정을 추가합니다.

5. 데이터베이스 설정

아래와 같이 application.properties 파일을 설정하여 H2 데이터베이스를 사용합니다.


spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=create

6. 엔티티 생성

이제 데이터베이스와 상호작용하기 위한 엔티티 클래스를 생성합니다. 사용자 정보를 저장할 User 엔티티 클래스를 생성하겠습니다.


import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String role;

    // Getters and Setters
}

7. 회원 가입 기능 구현

회원 가입을 위한 REST API를 구현합니다. 회원 가입 요청이 오면 유효성을 검사하고, 사용자를 데이터베이스에 추가합니다.


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void register(User user) {
        // 비밀번호 암호화 로직 (BCryptPasswordEncoder 이용)
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        userRepository.save(user);
    }
}

8. 로그인 및 로그아웃 구현

스프링 시큐리티를 설정하여 로그인과 로그아웃 기능을 구현합니다. 사용자가 입력한 정보를 기반으로 인증을 수행합니다.


import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user")
            .password("{noop}password")
            .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/register").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

9. REST API 구현

우리는 이제 REST API를 구현하여, 사용자가 웹 애플리케이션에서 회원 가입 및 로그인 할 수 있도록 합니다.


import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/register")
    public ResponseEntity register(@RequestBody User user) {
        userService.register(user);
        return ResponseEntity.ok("User registered successfully");
    }

    @GetMapping("/login")
    public String login() {
        return "Login Page";
    }
}

10. 테스트 및 검증

구현된 기능을 테스트하기 위해 Postman과 같은 툴을 활용하여 아래의 API를 호출합니다.

  1. 회원 가입: POST 요청을 /api/register에 보내고, JSON 형식으로 사용자 정보를 포함합니다.
  2. 로그인: 사용자 인증 후, /login 페이지에 접근할 수 있습니다.

11. 결론

이번 강좌에서는 스프링 부트와 스프링 시큐리티를 활용한 백엔드 개발의 기초부터 회원 가입 및 로그인 기능을 구현하는 과정까지 심도 있게 살펴보았습니다. 본 강좌를 통해 백엔드 개발에 대한 이해를 돕고, 나아가 실무에서 활용할 수 있는 기반을 마련할 수 있길 바랍니다.

12. 다음 단계

이제 여러분은 기본적인 백엔드 애플리케이션을 구축할 수 있는 능력을 갖추었습니다. 다음 단계로는 JWT(JSON Web Token)를 이용한 인증, RESTful API 설계 및 더 다양한 기능을 구현해보는 것을 추천드립니다.

참고 자료 및 추천 리소스