Coding343 스프링 시큐리티 Authentication 아키텍처 Servlet Authentication Architecture 본 섹션에서는 서블릿 인증에 사용되는 스프링 시큐리티의 주요 아키텍처 요소에 대해 설명한다. 이러한 요소들이 어떻게 결합되는지 설명하는 구체적인 흐름은 인증 섹션을 통해 설명한다. 아래의 요소들은 인증 관련한 주요 요소들에 대한 간략한 설명이다. - SecurityContextHolder: 인증 정보를 저장하는 공간이다. - SecutiryContext: SecurityContextHolder를 통해 획득되며 현재 인증된 유저의 Authentication 정보를 담고 있다. - Authentication: 인증을 위해 사용자가 제공한 정보 또는 SecutiryContext의 현재 사용자 정보를 제공하기 위해 AuthenticationMana.. 2023. 6. 19. 스프링 시큐리티 아키텍처 Architecture 이번 섹션에서는 서블릿 기반의 어플리케이션에서 동작하는 스프링 시큐리티의 아키텍처에 대해 다룬다. A Review of Filters 스프링 시큐리티는 서블릿 필터를 기반으로 한다. 따라서 일반적인 필터의 역할에 대해 먼저 알아보자. 아래의 그림은 단일 HTTP 요청을 처리할 때의 구조이다. 클라이언트가 요청을 보내면 컨테이너는 FilterChain을 생성한다. 해당 클래스는 요청 URI기반으로 HttpServletRequest를 다루는 Filter와 Servlet인스턴스를 포함하고 있다. 스프링 MVC에서 Servlet은 DispatcherServlet의 인스턴스이다. 적어도 한개 이상의 서블릿이 단일 HttpServletRequest 및 HttpServletResponse를 처.. 2023. 6. 19. Datadog Span, Tag 관련 이슈 개요 데이터독에는 일종의 작업 단위를 나타내는 Span이라는 개념이 존재한다. 그리고 Span에 사용자가 원하는 정보를 Tag라는 개념으로 붙여서 표시해줄 수 있다. 본 포스팅에서는 파이썬 httpx 클라이언트를 사용하는 span에 custom tag를 붙여주는 도중 발생한 이슈에 대해 설명하고 해결 방법에 대해 기술한다. Span Tag 외부와 통신을 할 때 로깅하는 내용을 생각해보면 기본적으로 Header, Request Body, Response Body, Response Status code, Query String 등이 있을 것 같다. ddtrace 라이브러리에서는 Header, Response Status Code, Query String은 아래와 같은 방법으로 Span의 Tag를 통해 추가해.. 2022. 12. 26. Block IO/Non-Block IO 개념 정리 I/O Input/Output의 약자로써 데이터의 입출력을 의미한다. 네트워크(소켓), File, Pipe, Device와 관련된 IO가 존재한다. Socket 네트워크 통신은 소켓을 통해 데이터가 입출력된다. 컴퓨터의 각 프로세스에서 서로 데이터를 주고 받을때는 반드시 소켓을 열고 데이터를 주고 받을 수 있다. 예를 들어 백엔드 서버의 경우 여러 클라이언트들과 각각 소켓을 열고 통신하며 요청을 처리한다고 볼 수 있다. Block I/O IO작업을 요청한 프로세스/스레드는 요청이 완료될 때까지 블락된다. 아래 그림을 통해 대략적으로 설명해보자면, - 스레드가 실행되다가 read라는 시스템 콜을 호출한다. - 만약 호출한 시스템 콜이 Blocking 시스템 콜이라면 호출한 스레드는 블락 상태가 된다. 그리.. 2022. 12. 13. ASGI에서 HTTP Request 다루는 방법 ASGI with HTTP Reqeust 이전 글(https://www.hides.kr/1111)에서 ASGI 인터페이스의 기초에 대해 설명했다. 이제 HTTP Request의 메시지 구조에 대해 좀 더 자세히 살펴보고 ASGI에서 HTTP Request를 다루기 위해 Starlette 라이브러리에서 제공하는 data structure를 어떻게 사용할 수 있는지에 대해 알아본다. ASGI 어플리케이션에서 발생하는 첫 번째 일은 Request가 들어올 때 초기 정보들을 담은 Scope 딕셔너리가 인스턴스화 된다는 것이다. 아래 예제는 간단한 HTTP Request에 대해 Scope가 어떠한 형태로 구성되는지를 나타낸다. >>> scope = { "type": "http", "http_version": "1.. 2022. 11. 24. ASGI와 HTTP ASGI Callable interface ASGI는 callable interface들로 구성되어있다. 첫 번째 API요청은 새로운 상태를 가진 컨텍스트를 설정하기 위해 수행되는 동기 함수 호출이다. 두 번째는 비동기 함수 호출인데, 이는 서버와 클라이언트간 통신을 위해 사용된다. 대략적인 기본 구조는 아래와 같다. def asgi_app(scope): async def asgi_instance(receive, send): ... return asgi_instance Scope Scope는 어플리케이션의 상태를 세팅하는 인자로 딕셔너리 형태로 구성되어있다. ASGI는 HTTP뿐만 아니라 다양한 인터페이스에서 사용할 수 있는데, 이 때문에 type이라는 중요한 키가 scope 딕셔너리 내부에 포함되어있다.. 2022. 11. 24. 이전 1 ··· 3 4 5 6 7 8 9 ··· 58 다음