안녕하세요, 이번 강좌에서는 스프링 부트를 이용하여 백엔드 개발을 하고, 특히 스프링 시큐리티를 활용한 로그인 및 회원 가입 기능을 구현하는 방법에 대해 자세히 알아보겠습니다. 이 강좌는 초급자와 중급자 모두를 위한 내용으로 구성되어 있으며, 실습을 통해 이해를 돕고자 합니다.
1. 스프링 부트란?
스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 피쳐로, 복잡한 설정 없이 빠르게 애플리케이션을 개발할 수 있도록 돕습니다. 기본적으로 설정을 자동으로 해주고, 그 덕분에 생산성을 높이고 배포를 쉽게 할 수 있습니다.
1.1 스프링 부트의 특징
- 자동 설정: 개발자가 직접 설정하지 않아도 필요한 설정을 자동으로 제공합니다.
- 의존성 관리: Maven 또는 Gradle을 통해 필요한 라이브러리를 손쉽게 관리할 수 있습니다.
- 외부 설정: 프로퍼티 파일을 외부에 두고 관리할 수 있어 환경에 따라 설정을 쉽게 바꿀 수 있습니다.
- 독립 실행형: 내장 서버를 제공하므로, 별도의 서버에 배포하지 않고도 애플리케이션을 실행할 수 있습니다.
2. 스프링 시큐리티란?
스프링 시큐리티(Spring Security)는 스프링 애플리케이션을 위한 인증과 권한 부여 기능을 제공하는 강력한 프레임워크입니다. 이 라이브러리를 사용하면 로그인 기능, 사용자 권한 관리, 보안 필터링 등을 쉽게 구현할 수 있습니다.
2.1 스프링 시큐리티의 주요 개념
- Authentication: 사용자의 신원 확인 (로그인).
- Authorization: 인증된 사용자에게 특정 자원에 대한 접근 권한 부여.
- Security Filter Chain: 요청을 가로채고, 보안 정책을 적용하기 위한 필터 체인.
3. 개발 환경 설정
스프링 부트 애플리케이션을 개발하기 위해 기본적인 개발 환경을 설정해야 합니다. 아래는 필요한 도구들입니다:
- Java Development Kit (JDK) 11 이상
- IDE: IntelliJ IDEA, Eclipse 등
- Maven 또는 Gradle
- Git (선택 사항)
3.1 프로젝트 구조
my-spring-boot-app
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── demo
│ │ │ ├── DemoApplication.java
│ │ │ └── security
│ │ │ └── SecurityConfig.java
│ │ ├── resources
│ │ │ ├── application.properties
│ └── test
└── pom.xml
4. 스프링 부트 애플리케이션 만들기
아래 단계에 따라 스프링 부트 애플리케이션을 생성하세요.
4.1 Spring Initializr 활용하기
Spring Initializr에 접속하여 아래와 같은 설정으로 프로젝트를 생성합니다:
- Project: Maven Project
- Language: Java
- Spring Boot: 2.5.4 (또는 최신 버전)
- Group: com.example
- Artifact: demo
- Dependencies: Spring Web, Spring Security, Spring Data JPA, H2 Database
4.2 생성된 프로젝트 다운로드 후 IDE에서 열기
생성된 프로젝트 zip 파일을 다운로드 받고, IDE에서 엽니다. 그러면 기본적인 스프링 부트 애플리케이션 구조가 설정된 것을 볼 수 있습니다.
5. 회원 가입 기능 구현하기
이제 회원 가입 기능을 구현해 보겠습니다. 사용자가 회원가입을 할 수 있도록 등록 양식과 로그인을 위한 엔드포인트를 설정합니다.
5.1 회원 가입 DTO 만들기
package com.example.demo.dto;
public class SignUpDto {
private String username;
private String password;
private String email;
// Getters and Setters
}
5.2 회원 가입 서비스 만들기
package com.example.demo.service;
import com.example.demo.dto.SignUpDto;
import com.example.demo.entity.User;
public interface UserService {
User registerNewUserAccount(SignUpDto signUpDto);
}
5.3 User Entity 생성하기
package com.example.demo.entity;
import javax.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
@Column(unique = true)
private String email;
// Getters and Setters
}
6. 스프링 시큐리티 설정하기
스프링 시큐리티를 설정하여 사용자 인증 및 권한 관리를 구현합니다.
6.1 SecurityConfig 클래스 생성하기
package com.example.demo.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/signup", "/").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
6.2 로그인, 로그아웃 엔드포인트 구현하기
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class AuthController {
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/signup")
public String signup() {
return "signup";
}
}
7. 결론
이번 강좌에서는 스프링 부트를 활용하여 간단한 백엔드 애플리케이션을 개발하고, 스프링 시큐리티를 통하여 사용자 인증 및 회원 가입 기능을 구현하는 방법을 배웠습니다. 실제로 프로젝트에 적용하고, 실습을 통해 더 나아가볼 수 있습니다.