일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- aspect
- 관점지향프로그래밍
- 트랜잭션
- 스프링부트
- 객체지향프로그래밍
- Redis
- RestControllerAdvice
- java
- 디자인패턴
- git
- Interceptor
- network
- request
- spring boot
- mybatis
- OOP
- SQL
- exception
- 인터셉터
- Spring
- aop
- proxy pattern
- Spring Security
- Filter
- http
- 스프링
- 스프링 시큐리티
- MYSQL
- response
- 자바
- Today
- Total
목록Spring Framework (36)
장쫄깃 기술블로그

CSRF(Cross-Site Request Forgery) 란?CSRF(크로스 사이트 요청 위조, Cross-Site Request Forgery)는 사용자가 신뢰하는 웹사이트를 대상으로 악의적인 요청을 보내도록 속이는 공격이다. 🔷 CSRF 공격 개념사용자가 사이트 A에 로그인하여 세션을 유지공격자가 사용자를 속여 사이트 A로 특정 요청을 보내도록 유도 (예: 계좌 이체, 비밀번호 변경)사용자의 인증 정보(세션, 쿠키 등)가 자동으로 포함되어 서버가 요청을 정상적인 사용자 요청으로 오인피해자가 원치 않는 작업이 실행됨 🔷 CSRF 방어 방법CSRF 토큰 사용: 요청마다 임의의 토큰을 포함해 서버에서 검증SameSite 속성 설정: 쿠키가 타 사이트 요청에서 전송되지 않도록 설정Referer / Or..

GraphQL이란?GraphQL은 API를 위한 쿼리 언어이자 이를 실행하기 위한 런타임으로, 클라이언트가 필요한 데이터만 명시적으로 요청하고 받을 수 있게 해 준다. REST API의 단점을 보완하고 유연한 데이터 요청 및 처리를 가능하게 한다. 주요 특징으로는 다음과 같다.1. 클라이언트 주도 데이터 요청클라이언트가 원하는 데이터의 구조를 지정하여 요청을 보내면, 서버는 정확히 그 구조에 맞는 데이터를 반환한다.query { user(id: 1) { id name email }} 2. 단일 엔드포인트REST API와 달리, GraphQL은 하나의 엔드포인트로 모든 데이터를 요청할 수 있습니다. (예: /grqphql) 3. Overfetching과 Un..

Redis Sorted Set을 사용한 이유대기열 시스템을 만들 때 Redis Sorted Set을 사용한 이유는 다음과 같다.우선순위 기반 작업 처리각 항목에 점수를 부여해 우선순위를 지정할 수 있으며, 점수에 따라 자동 정렬우선순위가 높은 작업을 먼저 처리하는 대기열 구현이 가능효율적인 데이터 조회 및 삭제ZRANGE, ZPOPMIN과 같은 명령어를 통해 O(log(N)) 시간 복잡도로 정렬된 데이터를 조회하거나 삭제시간 기반 작업 처리점수로 타임스탬프를 사용할 수 있어 예약 작업이나 시간 순서에 따른 작업 처리가 가능중복 방지Sorted Set은 동일한 키를 허용하지 않으므로 중복된 작업 추가를 방지하고 점수 업데이트로 대체 가능빠른 성능Redis는 메모리 기반 데이터베이스로 매우 빠른 읽기/쓰기 ..

분산락(Distributed Lock)의 필요성분산락(Distributed Lock)은 분산 시스템에서 여러 노드 또는 프로세스가 동시에 공유 자원에 접근하려 할 때, 충돌을 방지하고 자원의 일관성을 유지하기 위해 사용하는 기술이다. 이를 통해 여러 컴퓨터 또는 서버가 동시에 동일한 자원에 접근할 때 발생할 수 있는 문제를 해결할 수 있다. Redis는 기본적으로 싱글 스레드로 동작하므로, 단일 Redis 노드를 사용해도 동시성 문제는 발생하지 않는다. 따라서 리소스에 값을 설정하여, 값이 설정된 경우에는 다른 클라이언트의 접근을 차단할 수 있다. 필자는 분산 환경에서 선착순 신청 기능을 개발하면서, 처음에는 DB에 직접 락을 거는 비관적 락을 사용했다. 그러나 Deadlock이 자주 발생하자, 분산락으..

멱등성(Idempotent)이란?첫 번째 수행을 한 뒤 여러 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성 멱등한 작업이란, 한 번 수행하든 여러 번 수행하든 결과가 동일한 작업을 의미한다. 멱등성이 보장되면 메소드가 여러 번 실행되어도 결과가 동일하기 때문에 안전하게 사용할 수 있다. 반면, 멱등성이 보장되지 않으면 동일한 요청을 중복해서 실행할 위험이 있다. 예를 들어, 동일한 등록 요청을 중복해서 실행한다면 중복되는 여러 개의 데이터가 생성될 수 있다. HTTP 메소드의 멱등성HTTP 메소드에도 멱등성이 있다. 메소드멱등성GETOPOSTXPUTOPATCHXDELEETEOHEADOOPTIONSOTRACEOCONNECTX GET, PUT은 리소스를 조회하거나 대체하는 메소드이기 때문에..

들어가며Spring Security 6.1부터 기존에 사용하던 and()와 non-Lambda DSL Method가 Deprecated 되고, 필수적으로 Lambda DSL을 사용하도록 변경되었다. 변경된 내용으로 스프링 시큐리티 JWT 로그인을 구현해보려 한다. 다만, 본 게시글은 스프링 시큐리티 위주의 내용만 작성하려고 한다. 로그인, 회원가입 등의 별도 비즈니스 로직 코드는 게시글 하단의 깃허브를 참고하길 바란다. 기술스택- Spring Boot 3.3.1- Spring Security 6.3.1- JPA- JWT(Access Token, Refresh Token) 구현- Spring Security 6.1 이후 lambda 문법을 이용한 코드 적용 JWT에 대한 설명이나 이전에 작성한 내용에 대해..

들어가며Spring Security 6.1부터 기존에 사용하던 and()와 non-Lambda DSL Method가 Deprecated 되고, 필수적으로 Lambda DSL을 사용하도록 변경되었다. 변경된 내용으로 스프링 시큐리티 세션 로그인을 구현해보려 한다. 다만, 본 게시글은 스프링 시큐리티 위주의 내용만 작성하려고 한다. 로그인, 회원가입 등의 별도 비즈니스 로직 코드는 게시글 하단의 깃허브를 참고하길 바란다. 기술스택- Spring Boot 3.3.1- Spring Security 6.3.1- JPA- Session, Form Login 구현- Spring Security 6.1 이후 lambda 문법을 이용한 코드 적용 스프링 시큐리티에 대한 설명은 해당 글을 참고하면 된다.링크 : https..

log4j2.xml {%5p}{FATAL=red blink, ERROR=red bold, WARN=yellow bold, INFO=green bold, DEBUG=blue bold, TRACE=blue} ... 결과 로그별 색상이 다르게 출력되는 것을 볼 수 있다.

CustomHighlightConverter 구현ForegroundCompositeConverterBase 상속 객체를 구현한다.import ch.qos.logback.classic.spi.ILoggingEvent;import ch.qos.logback.core.pattern.color.ANSIConstants;import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase;/** * logback-spring 로그 레벨별 색상 지정 Custom Converter Class */public class CustomHighlightConverter extends ForegroundCompositeConverterBase { @Overr..

Scheduling (스케줄링) 스케줄링은 어떤 작업 (job)에 대해서 지정된 기간 혹은 시간에 동작하도록 하는 것이다. Spring에서 스케줄 작업을 처리하기 위해서는 Quartz Scheduler와 같은 외부 라이브러리를 이용하거나 Spring Boot에서 제공하는 @Scheduled 어노테이션을 이용하여 간단하게 동작시킬 수 있다. Quartz Scheduler 라이브러리는 보다 정교하게 job 스케줄링을 다룰 수 있다. 하지만 설정과 사용에 번거로운 단점이 있다. 반대로 @Scheduled는 사용하기 매우 쉽다. 때문에, 만약 단순히 특정 시간 혹은 특정 간격으로 job을 수행해야 하는 정도이면 @Scheduled를 사용해도 좋을 것 같다. @Scheduled 사용법 1. @EnableSched..