'분류 전체보기' 카테고리의 글 목록 (4 Page)
본문 바로가기

분류 전체보기

(243)
[PS] 백준 가장 긴 바이토닉 부분 수열 java 풀이 11054번: 가장 긴 바이토닉 부분 수열 (acmicpc.net)처음 문제 접근DP 같이 생겼다.현재 값이 바이토닉 수열을 만족하면 dp = Math.max(dp[i - 1], dp[i]) + 1그런데 올라갔다가 내려오고, 다시 올라가려 하면 0부터 시작해야 하는데.. 이걸 어떻게..처음 대략 이렇게 코드를 짬 for (int i = 1; i arr[i]) { dp[i] = Math.max(dp[i - 1], dp[i]) + 1; } }문제 정답해결법은 올라갈 때와 내려갈 때를 따로 분리해서 DP 테이블을 만든다.근데 이게 왜 되는건지 몰랐는데, 123421 에서 가장 긴 부분은 1234 = 4이고 감소하는 부분은 421 3 이니까 결과적으로 답은 7 - 1(겹치는 부분인 4를 빼기 위함..
[Database] 캐시 압력(Cache Pressure) 캐시 압력(Cache Pressure)캐시 압력이란?캐시 압력은 캐시 메모리가 부족해지면서 발생하는 문제를 말한다.캐시가 가득 차서 더 이상 새로운 데이터를 저장할 수 없고, 이로 인해 기존 데이터를 삭제해야 하는 상황이 발생할 수 있다.캐시 압력이 증가하면, 캐시 항목을 삭제하거나 새 데이터를 캐시에 저장하는 동안 대기 상태가 발생할 수 있다.캐시 압력 예시Spring에서 사용자별 페이징 데이터를 캐시에 저장하는 경우, 특히 대규모 사용자와 많은 데이터를 처리하는 시스템에서는 캐시 메모리가 빠르게 소진될 수 있으며, 이는 “캐시 쓰로틀링(Cache Throttling)” 또는 “캐시 압력(Cache Pressure)” 상황을 초래할 수 있다.이러한 상황은 캐시가 가득 차서 새로운 데이터를 저장할 수 ..
[Diary][Spring] Spring Webflux의 WebFilter는 자동으로 등록됩니다. (Security Filter Chain에 등록하면 발생할 수 있는 문제) 이 글에서는 WebFilter를 구현하면서 겪었던 잘못된 사용에 대해 다루고자 합니다.문제 상황Spring Cloud Gateway에 JWT 인증 필터를 구현하였다.위와 같이 @Value 값을 주입받기 위해, WebFilter를 구현하고 @Component 어노테이션을 붙여서 Bean에 등록했다.그리고 Security FilterChain에 구현한 Filter를 추가했다. 필터 우선순위도 넣어줬다.자연스러운 흐름이겠지만, 이것은 잘못된 사용이다. 왜냐하면, 디버그 모드로 찍어보면 필터를 두 번 검사하게 될 것이다.문제 원인https://docs.spring.io/spring-boot/reference/web/reactive.html#web.reactive.webflux.web-filters 문서를 참고해..
[TIL][Spring] Spring Webflux의 Spring Security (@EnableWebFluxSecurity), ReactiveSecurityContextHolder *GPT4o 가 답변한 문서입니다.Spring WebFlux와 함께 사용하는 Spring Security, @EnableWebFluxSecurity, 그리고 ReactiveSecurityContextHolder는 리액티브(Non-blocking) 환경에서 보안을 처리하기 위한 핵심 구성 요소입니다. 이들 개념을 깊이 이해하려면, Spring MVC에서의 동작 방식과 비교하며 설명하는 것이 중요합니다.1. Spring Security in WebFluxSpring WebFlux에서의 Spring Security는 기존의 Spring MVC와는 달리 논블로킹(non-blocking) 방식으로 동작하는 보안 시스템입니다. WebFlux는 리액티브 스트림과 Publisher(예: Mono, Flux)를 사용하여..
[PS] 백준 1766 문제집 java 풀이 1766번: 문제집 (acmicpc.net)처음 틀린 풀이와 코드배열을 만들어서 각 인덱스에 먼저 풀어야되는 문제 값을 넣고그 배열을 순회하면서 먼저 풀어야하는 문제가 있으면 먼저 출력,나중에 먼저 풀었던 문제는 순회에서 넘어감 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int[] arr = new int[N + 1]; int numOfGood = Integer.parseInt(st.nextToken()); // 먼저풀어야함 나중..
[Reflection] ㄷㄷㄷ: Domain Driven Design과 적용 사례공유 / if(kakao)2022 ㄷㄷㄷ: Domain Driven Design과 적용 사례공유 / if(kakao)2022 (youtube.com)이 글에서는 위 동영상의 내용을 보고 공부한 내용을 기록합니다.Domain Driven Design도메인 드리븐 디자인(Domain Driven Desion)이란 소프트웨어 개발 방법론 중 하나로, 단순히 데이터나 기술적인 요소에 집중하는 것이 아닌 도메인 모델에 초점을 맞추어 설계를 진행하는 방식이다. 도메인이란 비즈니스의 핵심 개념과 규칙을 담고 있는 영역으로, 소프트웨어가 다루는 비즈니스의 실제 요구사항을 의미한다. DDD는 이러한 도메인을 정확하게 반영하는 소프트웨어를 설계하고 개발하는 데 중점을 둔다.Domain Driven Design의 특징 도메인의 모델과 로직에 집중: DDD는..
[Database] 분산 트랜잭션과 2PC, SAGA 패턴 분산 트랜잭션분산 트랜잭션은 여러 독립적인 시스템, 데이터베이스, 또는 서비스에 걸쳐 하나의 트랜잭션을 수행해야 할 때 발생한다.트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)을 보장한다(ACID 특성). 그러나 MSA 환경에서는 여러 마이크로서비스가 각기 다른 데이터베이스를 사용하거나, 다른 물리적 위치에 있을 수 있기 때문에, 이러한 ACID 특성을 분산 환경에서 보장하는 것은 매우 복잡하다.MSA에서의 분산 트랜잭션MSA에서는 각 마이크로서비스가 독립적으로 배포되고 운영되기 때문에, 여러 서비스 간의 데이터 일관성을 유지해야 하는 상황에서 자연스럽게 분산 트랜잭션의 필요성이 발생할 수 있다. 예를 들어, 한 서비스에서 ..
[Diary][Spring] N + 1 문제 해결을 위한 @EntityGraph를 사용할 때 주의할 점 N+1 문제 해결을 위해 적용하신 @EntityGraph의 경우, @EntityGraph를 설정할 때 필요 이상의 연관 엔티티들을 함께 로딩하게 되면 불필요한 데이터가 메모리에 적재되어 성능 저하를 유발할 수 있습니다.아래 글에서 N + 1 해결 방법으로 @EntityGraph를 사용하는 것을 선택했는데, 위와 같은 피드백을 받았습니다. [Diary] Spring ORM에서는 N + 1을 항상 신경쓰자. (tistory.com) [Diary] Spring ORM에서는 N + 1을 항상 신경쓰자.프로젝트를 진행하다가 드디어 N + 1을 마주치는 상황이 생겼습니다. 사실 이 문제가 정확히 언제 발생할 수 있는지 이해가 안 되었는데, 이렇게 쉽게 마주쳐서 기뻤습니다 후후문제 상황여기 장bezzang2.tist..