본 강좌에서는 스프링 부트를 이용한 백엔드 개발에 관한 기본적인 내용을 다루고, 스프링 시큐리티를 통해 로그인, 로그아웃, 회원 가입 기능을 구현하는 방법에 대해 설명합니다.
1. 스프링 부트란?
스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 애플리케이션 프레임워크로, 스프링 애플리케이션을 더욱 쉽게 설정하고 실행할 수 있도록 도와줍니다. 복잡한 설정 과정을 최소화하고, 내장형 서버를 제공함으로써 개발자들이 빠르게 애플리케이션을 구축할 수 있도록 해줍니다. 주요 특징으로는:
- 자동 설정: 개발자는 설정 파일을 작성할 필요 없이 기본값을 사용하여 애플리케이션을 실행할 수 있습니다.
- 의존성 관리: Maven 또는 Gradle을 통해 필요한 라이브러리를 쉽게 추가할 수 있습니다.
- 그릇된 의존성 제어: 특정 버전의 라이브러리를 고정할 수 있습니다.
2. 프로젝트 생성
스프링 부트를 사용하여 새로운 프로젝트를 생성하는 방법에는 다양한 방법이 있지만, 가장 쉽게 시작할 수 있는 방법은 Spring Initializr를 사용하는 것입니다. 아래의 단계에 따라 프로젝트를 생성해 보겠습니다.
- Spring Initializr 접속
- Project: Maven Project 선택
- Language: Java 선택
- Spring Boot: 최신 버전 선택
- Group: com.example 입력
- Artifact: demo 입력
- Dependencies: Spring Web, Spring Security, Spring Data JPA, H2 Database 선택
- Generate 클릭하여 ZIP 파일 다운로드
3. 프로젝트 구조 이해하기
생성된 프로젝트를 열면 다음과 같은 주요 디렉토리 및 파일 구조를 확인할 수 있습니다.
├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── demo │ │ │ ├── DemoApplication.java │ │ │ └── configuration │ │ │ └── SecurityConfig.java │ │ └── resources │ │ ├── application.properties │ │ └── static │ └── test ├── pom.xml
여기서 DemoApplication.java
파일은 메인 애플리케이션 파일이며, application.properties
는 설정 파일입니다.
4. 의존성 추가하기
우리가 생성한 프로젝트에는 필요한 라이브러리들이 Maven 의존성으로 포함되어 있습니다. pom.xml
파일을 열어 추가된 의존성을 확인해보겠습니다.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies>
5. 회원 가입 기능 구현하기
회원 가입을 위해서는 사용자의 정보를 저장하고 관리할 수 있어야 합니다. 이를 위해 우리는 JPA를 사용하여 사용자 엔티티를 작성하고, 데이터베이스와의 연결을 설정하겠습니다.
5.1 User 엔티티 작성
먼저 User
라는 엔티티 클래스를 생성하겠습니다. 이 클래스는 사용자 정보를 담고 있습니다.
package com.example.demo.model; import javax.persistence.*; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String email; // Getters and Setters }
5.2 UserRepository 생성
이제 UserRepository
인터페이스를 생성하여 사용자 정보를 데이터베이스에 저장하고 조회할 수 있도록 합니다.
package com.example.demo.repository; import com.example.demo.model.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository{ User findByUsername(String username); }
5.3 회원 가입 서비스 작성
회원 가입 로직을 처리하는 서비스 클래스를 작성하겠습니다.
package com.example.demo.service; import com.example.demo.model.User; import com.example.demo.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserRepository userRepository; public User registerNewUser(User user) { return userRepository.save(user); } }
6. 스프링 시큐리티 설정하기
이제 스프링 시큐리티를 설정하여 로그인 및 로그아웃 기능을 구현하도록 하겠습니다.
6.1 SecurityConfig 클래스 생성
시큐리티 설정을 위한 클래스를 생성합니다.
package com.example.demo.configuration; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserService userService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/register", "/h2-console/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); } }
7. 회원 가입 및 로그인 컨트롤러 구현
회원 가입과 로그인 기능을 처리하는 컨트롤러를 작성하겠습니다.
7.1 AuthController 클래스 생성
package com.example.demo.controller; import com.example.demo.model.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class AuthController { @Autowired private UserService userService; @GetMapping("/register") public String showRegistrationForm(Model model) { model.addAttribute("user", new User()); return "register"; } @PostMapping("/register") public String registerUser(User user) { userService.registerNewUser(user); return "redirect:/login"; } @GetMapping("/login") public String login() { return "login"; } }
8. 로그인/로그아웃 페이지 생성
이제 로그인 및 회원 가입 페이지를 생성하겠습니다. src/main/resources/templates
폴더 아래에 login.html
와 register.html
파일을 생성합니다.
8.1 register.html
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>회원 가입</title> </head> <body> <h1>회원 가입</h1> <form action="/register" method="post"> <label>사용자 이름: </label><input type="text" name="username"><br> <label>비밀번호: </label><input type="password" name="password"><br> <label>이메일: </label><input type="email" name="email"><br> <input type="submit" value="회원 가입"> </form> </body> </html>
8.2 login.html
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>로그인</title> </head> <body> <h1>로그인</h1> <form action="/login" method="post"> <label>사용자 이름: </label><input type="text" name="username"><br> <label>비밀번호: </label><input type="password" name="password"><br> <input type="submit" value="로그인"> </form> </body> </html>
9. 애플리케이션 실행하기
이제 모든 설정이 완료되었습니다. 애플리케이션을 실행하기 위해 아래의 명령어를 터미널에 입력합니다.
mvn spring-boot:run
브라우저를 열고 http://localhost:8080/register
로 이동하여 회원 가입을 진행합니다. 이후 로그인을 통해 애플리케이션에 접근할 수 있습니다.
10. 마무리 및 다음 단계
이 강좌에서는 스프링 부트를 이용하여 백엔드 애플리케이션을 구축하고, 스프링 시큐리티를 활용하여 기본적인 로그인 및 회원 가입 기능을 구현하는 방법을 배웠습니다. 이제 여러분은 이 기본적인 구조를 바탕으로 더 나아가 API 토큰 기반 인증, OAuth2 연동 등 다양한 기능을 추가해 나갈 수 있습니다.
다음 단계 제안
- API REST 구현하기
- JWT(JSON Web Token) 기반 인증 추가하기
- OAuth2를 통한 인증 기능 추가하기
- 프론트엔드 연동을 통한 완전한 애플리케이션 만들기
이번 강좌에서 배운 내용을 잘 활용하여 멋진 작품을 만들어보세요!