목록전체 글 (81)
개발 공부 기록

여기서는 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은 사용자가 웹사이트에 접속하여 작업을 수행하는 동안 일시적으로 유지되는 상태를 말합니다. 이러한..
Question https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 💡 Solution HashMap을 key나 value에 따라 정렬할 수 있다면, 쉽게 해결할 수 있는 문제였습니다. 💻 Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util..
Question https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 💡 Solution 1. 문자열의 각 문자를 탐색합니다. 2. 현재 문자와 다음 문자가 다르다면, visited[다음 문자]가 true인지 확인합니다. → true라면 이전에 이미 나타난 문자라는 의미이므로 해당 문자열은 그룹 단어가 아닙니다. → false라면 이전에 나타나지 않은 문자이므로, 다음 탐색으로 넘어갑니다. 3. 현재 문자와 다음 문자..