본문 바로가기

분류 전체보기847

Spring DataSource/TransactionManager 정리 개요 Spring Batch 5 버전을 통해 배치를 생성하고 관리하고 있는데, 멀티 모듈로 구성된 상황에서 DataSource 설정 관련 동작이 원활하지 않아 Spring DataSource와 Transaction Manager에 대한 내용에 대해 정리한다. 본 포스팅의 내용은 인프런 김영한님의 데이터 접근 핵심 원리 강의에 기반한다. DataSource 일반적으로 커넥션을 얻는 방법으로 JDBC DriverManager를 직접 사용하거나 HikariCP등의 커넥션 풀을 사용하는 방법이 존재한다. DriverManager를 통해 커넥션을 획득하는 경우 항상 신규 커넥션을 획득하게 되는데 이를 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야할까? 어플리케이션 로직에서 DriverManager를 사용하.. 2023. 7. 19.
광고 시스템 퍼포먼스 튜닝 회고록 요기요 기술블로그에 작성한 글입니다.개요2022년 12월부터 CPS(Cost Per Sale)기반 신규 광고 시스템이 도입되었는데, 서비스를 운영하는 과정에서 발생한 퍼포먼스 이슈와 그에 대한 해결 사례를 간단하게 소개해 드리고자 합니다.배경 지식사례를 소개해 드리기 전 배경지식을 먼저 말씀드리겠습니다. 실제로는 아래에 설명드리는 로직 외에도 추가적인 복잡한 로직이 존재하지만, 설명을 위해 본 포스팅의 주제에 부합하는 핵심 로직들만 설명드린 점 감안해 주시길 바랍니다.신규 광고 시스템의 경우 헥사고날 아키텍처를 기반으로 이루어져 있고, 각 애그리거트(Aggregate)에 속해있는 유즈케이스는 저마다의 역할에 충실하도록 구현되어 있는 상태였습니다.예를 들어 광고/레스토랑/캠페인이라는 3개의 애그리거트가 존.. 2023. 7. 19.
스프링 시큐리티 MVC 통합 @EnableWebMvcSecurity 스프링 4.0부터 @EnableWebMvcSecurity는 deprecated됐다. 대안으로 @EnableWebSecurity를 사용하자. 스프링 시큐리티와 스프링 MVC를 통합하려면 @Configuration 어노테이션이 붙은 클래스에 @EnableWebSecurity를 추가해주면 된다. 스프링 시큐리티는 MVC의 WebMvcConfigurer를 사용한 구성 방법도 제공한다. 이는 WebMvcConfigurationSupport와 직접 통합하는것과 같이 좀 더 세밀한 설정이 필요할 때 수동으로 설정하기 위해 사용된다. MvcRequestMatcher 스프링 시큐리티는 MVC가 MvcRequestMatcher를 사용하여 URL을 매칭시키는 방법에 대해 통합하는 방법.. 2023. 6. 19.
스프링 시큐리티 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.