-
Spring Boot 기반 REST API 개발: 회원가입/로그인 기능 구현하기, ( Spring Boot, Spring Security, JWT 활용 )☕Java 2024. 12. 29. 20:00728x90
1. 준비하며,
최근 웹 서비스 개발에서 REST API는 필수적인 요소가 되었습니다. 특히 사용자 인증과 인가를 위한 API는 보안과 사용자 경험에 직접적인 영향을 미치기 때문에 더욱 중요합니다. 이번 글에서는 Spring Boot, Spring Security, JWT를 활용하여 안전하고 효율적인 회원가입 및 로그인 API를 구현하는 방법을 자세히 알아보겠습니다.
2. Spring Boot 프로젝트 설정
Spring Boot는 웹 애플리케이션 개발을 간소화하는 데 도움을 주는 강력한 프레임워크입니다. Spring Initializr (start.spring.io)를 사용하여 Spring Boot 프로젝트를 생성하고, Spring Web, Spring Security, Spring Data JPA, JWT 관련 의존성을 추가합니다.
- Spring Initializr에서 프로젝트 생성 및 의존성 추가 화면
3. 데이터베이스 연동
Spring Data JPA를 사용하여 데이터베이스 연동을 간편하게 처리합니다. User 엔티티 클래스를 정의하고, UserRepository 인터페이스를 통해 데이터베이스 CRUD 작업을 수행합니다.
4. Spring Security 설정
Spring Security는 강력한 보안 기능을 제공하는 프레임워크입니다. SecurityConfig 클래스를 생성하고, WebSecurityConfigurerAdapter를 상속하여 보안 설정을 구성합니다.
- HTTP 요청에 대한 인증 및 인가 규칙을 정의합니다.
- 비밀번호 인코더를 설정합니다.
- JWT를 사용한 인증 필터를 추가합니다.
5. JWT (JSON Web Token)
JWT는 인증 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식입니다. JWT는 Header, Payload, Signature 세 부분으로 구성되며, JSON 형식으로 정보를 담고 있습니다.
- Header: 토큰 유형, 해싱 알고리즘 정보 등을 포함합니다.
- Payload: 사용자 정보, 만료 시간 등 인증에 필요한 정보를 포함합니다.
- Signature: 위변조 방지를 위한 서명입니다.
6. 회원가입 API 구현
UserService 클래스에서 회원가입 로직을 구현합니다.
- signUp 메서드는 UserRequest DTO를 입력으로 받아 사용자 정보를 검증하고, 비밀번호를 암호화하여 데이터베이스에 저장합니다.
- 이메일, 비밀번호, 닉네임 유효성 검증 로직을 추가하여 데이터 무결성을 확보합니다.
UserService 클래스의 signUp 메서드 코드 화면
7. 로그인 API 구현
UserService 클래스에서 로그인 로직을 구현합니다.
- login 메서드는 이메일과 비밀번호를 입력으로 받아 사용자 정보를 조회하고, 비밀번호 일치 여부를 확인합니다.
- 비밀번호가 일치하면 JWT 토큰을 발급하고 반환합니다.
UserService 클래스의 login 메서드 코드 화면
8. 컨트롤러 구현
UserController 클래스에서 회원가입 및 로그인 API를 위한 컨트롤러 메서드를 구현합니다.
- @PostMapping 어노테이션을 사용하여 POST 요청을 처리합니다.
- @RequestBody 어노테이션을 사용하여 요청 본문에서 JSON 데이터를 받아옵니다.
- UserService의 signUp 및 login 메서드를 호출하여 비즈니스 로직을 처리합니다.
UserController 클래스의 컨트롤러 메서드 코드 화면
9. API 테스트
Postman을 사용하여 API를 테스트합니다. 회원가입 및 로그인 API에 대한 요청을 보내고, 응답 코드 및 데이터를 확인합니다.
Postman을 사용한 API 테스트 화면
728x90'☕Java' 카테고리의 다른 글
컨트롤러: 웹 서비스의 친절한 안내자 ( Controller 클래스 Java 개발 ) (0) 2024.12.29 Java [ ArrayList 와 HashMap ] (0) 2024.12.17 Java에서 문자열과 숫자 간 변환: 쉽게 이해하기(부록 문자열 함수소개) (0) 2024.12.16 Java 추상(Abstract) 클래스와 인터페이스(Interface): 개념 잡고 활용하기 (0) 2024.12.16 Java 상속이란? + 문제풀이 (1) 2024.12.15