목록Spring (20)
개발 공부 기록
이전에 아래 포스팅에서 이메일을 인증할 메일(이메일 인증 코드)을 발송하는 기능에 대해서 구현해보았습니다. https://jieeeuun.tistory.com/69 [SpringBoot] 이메일 발송 기능 구현하여 이메일 인증 코드 발송하기 Gmail을 이용하여 회원가입 시 사용자가 입력한 이메일로 이메일 인증 코드를 발송하는 기능을 구현해보겠습니다. ✔️ 발신 이메일 계정 설정하기 Google 계정 관리에 들어가 보안 탭을 누른 후 2 jieeeuun.tistory.com 그렇다면 이메일 인증 코드의 유효시간을 5분으로 설정하고, 5분이 지나면 해당 코드는 무효가 되도록 구현해보겠습니다. 또한 사용자가 입력한 인증 코드를 받아, 올바르게 입력했을 경우 이메일 인증이 완료되는 것까지 구현하도록 하겠습니다..

소셜 로그인이란 사용자가 자신의 소셜 미디어 계정(ex) 구글, 카카오, 페이스북 등)을 사용하여 웹 서비스에 로그인하는 방법입니다. 이를 통해 사용자는 새로운 계정을 만들 필요 없이, 소셜 미디어 플랫폼에서 제공되는 인증 정보를 사용하여 웹 서비스에 쉽게 로그인할 수 있습니다. 이번 포스팅에서는 Spring 프레임워크에서 지원하는 OAuth에 대해 알아보도록 하겠습니다. ✔️ OAuth란 ? OAuth는 Open Authorization의 약자로, 사용자가 데이터에 대한 권한을 안전하게 제어하고 인증할 수 있도록 도와주는 오픈 표준 인증 프로토콜입니다. 사용자는 자원의 소유자에게 비밀번호를 제공하지 않고도 애플리케이션 혹은 서비스가 사용자의 자원에 접근할 수 있도록 허용합니다. 과거에는 각 애플리케이션..

여기서는 SpringBoot에서 Redis를 적용하는 것을 기반으로, JWT 기반의 인증 시스템에서 refresh token을 저장하는데 Redis를 사용해보겠습니다. ✔️ Redis 설치하기 1. Docker 설치 https://hermeslog.tistory.com/497?category=302346 사이트를 참조하였습니다. 2. Docker를 통해 Redis 설치 docker run -d -p 6379:6379 redis cmd를 통해 위 명령으로 Redis Docker Image를 설치합니다. docker ps Redis의 CONTAINER ID를 확인합니다. docker exec -it {container id} /bin/bash Redis image 컨테이너를 실행시켜 Redis가 정상적으로 ..

✔️ Redis란? Redis는 Remote Dictionary Server의 약자로, Key-Value 형태로 데이터를 관리하는 오픈 소스 기반의 In-Memory Data Strucutre Store입니다. 캐싱, 세션 관리, 데이터베이스 등의 용도로 사용되며, 데이터를 서버의 주 메모리에 저장하므로 빠른 읽기/쓰기 속도를 제공합니다. Redis는 아래와 같은 다양한 자구조를 지원합니다. Strings (문자열): 가장 기본적인 key-value 구조로서 간단한 문자열이나 이진 데이터를 안전하게 저장합니다. Lists (리스트): 순서가 있는 문자열 요소들의 모음이며, 삽입된 순서를 유지합니다. Linked List 형태로 구현되어 있어 리스트의 양 끝에 요소를 추가하거나 제거하는 작업이 빠르게 처리..
✔️ 인터셉터(Interceptor)란? '가로챈다'라는 의미를 가진 인터셉터는 사용자의 요청을 가로채는 역할을 합니다. Spring 프레임워크에서 제공하는 기능 중 하나인 이 인터셉터는 Controller가 요청을 처리하기 전, 그리고 처리한 후에 추가적인 로직을 수행할 수 있도록 도와줍니다. 예를 들어 인터셉터가 요청에 대한 인증 및 권한 검사를 수행함으로써, 특정 요청이 처리되기 전에 사용자의 인증 상태를 확인할 수 있습니다. ✔️ 인터셉터 구현하기 HandlerInterceptor 인터페이스를 구현하며, 아래는 이 인터페이스를 구현하는데 사용될 수 있는 메서드입니다. preHandle() : 컨트롤러(핸들러)가 실행되기 전에 호출됩니다. 이 메서드에서는 true를 반환하여 컨트롤러 실행을 계속하거..
컨트롤러에서 어노테이션이 달린 파라미터를 통해 로그인한 사용자의 정보를 쉽게 가져오려고 합니다. 이때 어노테이션을 직접 만들어, 컨트롤러의 메서드 파리미터에서 로그인한(인증된) 유저의 정보를 가져오도록 하겠습니다. ✔️ Annotation 만들기 @Target(value = ElementType.PARAMETER) @Retention(value = RetentionPolicy.RUNTIME) public @interface LoginUser { } @Target : 어노테이션이 적용될 수 있는 대상을 지정합니다. 여기서는 우리가 만든 어노테이션이 메서드의 파라미터에 적용될 수 있음을 의미합니다. @Retention : 어노테이션의 유지 기간을 나타냅니다. 'RetentionPolicy.RUNTIME'을 ..
Security Security에서는 인증 및 인가 과정의 예외 상황에서 AccessDeniedHandler과 AuthenticationEntryPoint로 예외를 전달합니다. AccessDeniedHandler는 사용자가 권한이 없는 리소스에 접근하려고 할 때 AccessDeniedException을 처리하고, AuthenticationEntryPoint는 사용자가 인증되지 않은 상태로 리소스에 접근하려고 할 때 발생하는 AuthenticationException을 처리합니다. 이때 각 인터페이스의 구현체 클래스를 작성해 보겠습니다. @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http ..

🚨 문제 발생 JWT를 발급 및 검증하는 JwtTokenizer을 구현하던 중 위와 같은 에러가 발생하였습니다. 🔨 문제 해결 //수정 전 import lombok.Value; 상단의 Value의 import문을 확인하여 위와 같이 되어있다면 아래처럼 수정합니다. //수정 후 import org.springframework.beans.factory.annotation.Value;
https://jieeeuun.tistory.com/72 [Spring] Session 기반과 JWT 기반의 인증 개인 프로젝트에서 인증 기능을 구현해야 하는데, 이때 SpringBoot에서 인증을 구현하는 주요 방식으로 Session 기반과 JWT(JSON Web Token) 기반이 있습니다. 구현을 하기 전에 두 방식에 대해 어느 정도 jieeeuun.tistory.com 이전 포스팅에서 JWT의 단점을 보완하기 위해 토큰 두 개를 함께 사용한다고 했었는데요, 그 부분에 대해 자세히 알아봅시다. ✔️ Access Token과 Refresh Token 토큰 두 개는 각각 access token과 refresh token으로 구성됩니다. Access Token : 인증된 사용자에게 제공되는 짧은 유효기간..

개인 프로젝트에서 인증 기능을 구현해야 하는데, 이때 SpringBoot에서 인증을 구현하는 주요 방식으로 Session 기반과 JWT(JSON Web Token) 기반이 있습니다. 구현을 하기 전에 두 방식에 대해 어느 정도 짚고 가고 싶었기에 이렇게 포스팅을 하게 되었습니다. ✔️ Session 방식이란 ? 우선 session이란, 사용자나 시스템 간의 상호 작용이나 작업을 수행하는 동안 유지되는 일련의 상태를 의미합니다. 보통 이러한 session은 사용자가 어떠한 프로그램에 로그인하거나 접속하여 작업을 시작할 때 시작되고, 사용자가 로그아웃하거나 접속을 종료할 때 끝납니다. 즉, 웹에서의 session은 사용자가 웹사이트에 접속하여 작업을 수행하는 동안 일시적으로 유지되는 상태를 말합니다. 이러한..