전체 글 2514

[Spring Security] 전역 메서드 보안

전역 메서드 보안 (Global Method Security)클래스나 메서드 단위에서 특정 권한을 가진 사용자만 메서드를 실행하도록 제한할 수 있는 기능전역 메서드 보안에서 수행할 수 있는 두 가지 주요 작업은 다음과 같음호출 권한 부여필터링 기본적으로 스프링 시큐리티에서는 전역 메서드 보안이 비활성화 상태로 제공되기 때문에 해당 기능을 사용하기 위해서는 전역 메서드 보안을 우선 활성화해줘야 함Spring Security 6 버전에서는 @EnableMethodSecurity 하위 버전에서는 @EnableGlobalMethodSecurity 어노테이션 부여전역 메서드 보안을 활성화시키면 스프링의 Aspect(보안 Aspect)가 하나 활성화 됨해당 Aspect는 호출을 가로채어 권한 부여 규칙이 충족되지 ..

[Spring Security] CSRF & CORS

CSRF (Cross-Site Request Forgery)웹 애플리케이션의 취약점을 악용해 사용자의 권한을 도용하여 악의적인 요청을 보내는 공격을 방지하기 위한 보안 기능Spring Security는 CSRF 공격을 방지하는 기본적인 메커니즘을 제공하며 CSRF 보호는 Spring Security를 사용하는 대부분의 애플리케이션에서 기본적으로 활성화되어 있음  CSRF 공격사용자가 자신도 모르게 공격자의 의도된 작업을 수행하게 만드는 공격 기법사용자의 의지와는 무관하게 공격자가 의도한 행동을 수행해서 웹 페이지의 보안을 취약하게 하거나 수정/삭제 등의 작업을 하는 공격 방법ex) Man in the Middle 공격을 통해 인증된 세션을 탈취하고 해당 세션을 기반으로 서버에 악성 요청을 보냄 Sprin..

[Spring Security] 필터 체인과 커스텀 필터

HTTP 필터애플리케이션의 HTTP 요청이 처리되기 전에 다양한 보안 검사를 수행하여 인증 및 인가 등의 작업을 처리Spring Security는 다양한 필터들을 체인 형태로 연결하여 요청이 처리될 때 순차적으로 실행되도록 구성하며 각 필터는 특정 보안 작업을 수행하며, 그 결과를 다음 필터에 전달함전체 필터 체인은 SecurityFilterChain 인터페이스에 의해 관리됨기본 설정으로 되어 있는 필터와 커스텀하게 설정된 필터를 함께 사용하여 HTTP 요청을 필터링실무의 다양한 비즈니스 요구사항을 구현하기에는 기본 필터 구성만으로는 부족하기 때문에 커스텀하게 필터를 정의하는 케이스가 많음 필터 체인은 필터가 작동하는 순서가 정의된 필터의 모음을 나타내며 필터 구현체에는 각자의 순서가 존재함각 필터는 순..

[Spring WebFlux] Reactive Streaming 데이터 처리

개요Spring WebFlux는 SSE(Server-Sent Events)를 이용해 데이터를 Streaming 할 수 있습니다.SSE는 spring 4.2 버전부터 지원되었으며 Spring 5 버전부터 Reactor의 Publisher 타입인 Flux를 이용해 조금 더 편리한 방법으로 SSE를 사용할 수 있게 되었습니다. SSE서버가 클라이언트에게 단방향 스트리밍으로 데이터를 전송하는 방식WebSocket은 양방향 통신이 가능한 기술이지만 SSE는 단방향 클라이언트는 한 번 연결을 수립한 후 서버에서 발생하는 이벤트나 업데이트를 지속적으로 받아볼 수 있으며 주로 실시간 데이터 전송이 필요한 애플리케이션에서 사용됨SSE는 기존의 HTTP 프로토콜 위에서 동작하고 웹 브라우저에서 표준적으로 제공되며, tex..

[Spring WebFlux] WebClient

WebClient비동기적이고 non-blocking 방식으로 HTTP 요청을 처리할 수 있는 클라이언트전통적인 Spring MVC의 RestTemplate의 대안으로 Spring 5부터 지원하는 non-blocking HTTP 요청을 위한 리액티브 웹 클라이언트로서 함수형 기반의 향상된 API 제공비동기적 호출 외에도 block() 메서드를 사용하여 동기적으로 데이터를 받을 수 있지만 WebFlux 환경에서는 가능한 비동기 방식으로 사용하는 것이 성능에 유리 WebFlux 환경에서의 고성능, 비동기적 애플리케이션 개발을 위해 설계됐으며 기본 HTTP 클라이언트 라이브러리는 Reactor NettyWebClient는 Mono와 Flux를 지원하여, 리액티브 스트림을 통해 데이터를 처리Mono는 하나의 요소..

[Spring Security] 액세스 제한과 권한

1. 스프링 시큐리티 인증, 인가 흐름인증(Authentication)은 사용자가 누구인지 확인하는 과정인가(Authorization)는 그 사용자가 어떤 리소스에 접근할 수 있는지 결정하는 과정 1.1 인증 흐름클라이언트가 ID와 비밀번호와 같은 자격 증명을 입력하여 로그인 요청을 보내고 이는 Authentication 객체로 변환됨AuthenticationManager가 인증 요청을 처리하는데 AuthenticationManager는 여러 개의 AuthenticationProvider에게 인증 처리를 위임각각의 AuthenticaitonProvider는 DB 기반 인증, LDAP 기반 인증 등과 같은 특정 인증 방식에 대해 인증 시도기본적으로 DaoAuthenticaitonProvider가 많이 사..

[Programmers] 수식 복원하기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/340210 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 가능한 진법은 2 ~ 9진법이기 때문에 단순 구현으로 풀 수 있었던 문제였습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Kotlin] CoroutineScope

CoroutineScopeCoroutine들에 대한 scope를 정의하며 scope에는 여러 Coroutine들 포함자식 Coroutine들에 대한 생명주기를 관리하며 자식 Coroutine들이 모두 완료되어야만 scope도 완료되었다고 처리CoroutineScope의 coroutineContext에는 꼭 Job을 포함해야 함  1. CoroutineScope 함수CoroutineScope 함수를 이용해 CoroutineScope 생성  부연 설명인자로 주어진 context에 Job이 포함되었는지 확인포함되어 있지 않다면 Job을 생성하여 추가하고 ContextScope에 전달여기서 ContextScope는 CoroutineScope의 단순한 구현체  부연 설명EmptyCoroutineContext를 통..

Kotlin 2024.10.03

[Kotlin] CoroutineContext

CoroutineContext코틀린에서 코루틴을 실행할 때 사용하는 컨텍스트를 나타내는 인터페이스Spring MVC와 같이 thread-per-request 모델에서는 ThreadLocal을 사용하지만 Reactor나 코루틴처럼 각 요청을 처리할 때마다 수행하는 쓰레드가 변경되기 때문에 특정 쓰레드에 종속되는 ThreadLocal에 접근 불가이에 따라 Reactor에서는 Context, 코루틴에서는 CoroutineContext를 사용하여 파이프라인 context를 저장CoroutineContext는 코루틴의 동작을 커스터마이징하고, 실행 쓰레드나 예외 처리, 디버깅 정보 등을 포함하는 요소들을 담고 있음 1. Continuationsuspend 함수는 다양한 쓰레드에서 실행되기 때문에 ThreadLoc..

Kotlin 2024.10.03

[Kotlin] 코루틴 (Coroutine) 기초

1. suspend 함수코틀린 코루틴에서 비동기적으로 실행할 수 있는 특수한 함수로코루틴 내에서 중단 가능(suspension) 한 작업을 처리할 수 있도록 설계됨실행 일시 중단 가능나중에 다시 실행 재개할 수 있는 특징 지님 코루틴 내에서 네트워크 요청이나 파일 읽기/쓰기와 같이 특정 작업을 대기해야 할 때 CPU 리소스를 낭비하지 않고, 효율적으로 다른 작업 처리 가능 1.1 suspend 함수 특징코루틴 내에서만 실행 가능: suspend 함수는 오직 코루틴 내에서만 호출될 수 있으며 코루틴 범위 밖에서는 직접 호출 불가중단 및 재개 가능: 앞서 언급했다시피 suspend 함수는 중간에 실행을 멈추고, 나중에 다시 이어서 실행 가능비동기 작업 처리: suspend 함수는 일반 함수와 달리 비동기 작..

Kotlin 2024.10.02