개발(89)
-
[Spring Security] Architecture
아래의 문서를 번역 했다. 오역 다수 예상. 괄호안에 있는 문장은 나의 생각 또는 추가 정보를 의미한다. Architecture :: Spring Security Spring Security’s Servlet support is based on Servlet Filters, so it is helpful to look at the role of Filters generally first. The picture below shows the typical layering of the handlers for a single HTTP request. The client sends a request to the appl docs.spring.io A Review of Filters Spring Security의 ..
2022.08.15 -
[Resilience4j] Circuit Breaker With Spring Boot 2
Resilience4j의 Circuit Breaker에 대한 개념을 정리하고 이를 Spring 프로젝트에 적용해본다. 1.기본 개념 1.1 Circuit breaker State 서킷 브레이커는 CLOSED, OPEN, HALF_OPEN 3가지의 상태를 가진다 CLOSED는 요청 집계값이 threshold 미만인 상태를 유지하며 정상적으로 요청이 가능한 상태. OPEN은 요청 집계값이 threshold를 초과해서 서비스간 요청이 불가능한 상태. HALF_OPEN는 OPEN 상태에서 특정 대기시간이 경과하면 발생하는 상태이며, 추가적인 요청 집계값이 threshold 보다 낮으면 CLOSED로 전환되고, 반대의 경우 다시 OPEN으로 복귀된다. 여기에 2개의 특수한 상태인 DISABLED, FORCED_O..
2022.07.10 -
디자인 패턴을 활용한 로그 추적기 만들기 - 1
김영한님의 [Spring 핵심 원리-고급편]은 AOP로 가기위한 여정을 약 16시간동안 풀어낸다. 그 과정에서 다양한 디자인 패턴을 학습하게 되는데 Notion으로만 정리해뒀던 자료를 복습하며 블로그에도 한번 옮겨보려고 한다. 스프링 핵심 원리 - 고급편 - 인프런 | 강의 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 작성된 코드는 실제 강의와 코드와 조금 다릅니다. 복습을 위해 스스로 만든 부분도 있고, 코드의 단순화를 위해 비즈니스 로직을 간소화하기도 했습니다. 정확한 코드는 강의를 통해 확인해주세요 :^) 목표는 Rest API 요청에 대한 메소드 콜 Stack과 메소드별 시간을 로그로 ..
2022.06.12 -
[LeetCode] 문제 복기(322번, 491번, 1372번, 1253번)
322. Coin Change 동전의 목록인 coins가 주어진다. coins로 만들어야하는 amount가 주어진다. coins로 amount를 만들때 가장 적은수를 사용하는 케이스를 출력해야한다. class Solution { public int coinChange(int[] coins, int amount) { // amount가 0이면 만들수 없다 if(amount == 0) return 0; int[] dp = new int[amount+1]; // dp 구현을 위한 공간 할당 Arrays.fill(dp, Integer.MAX_VALUE); // 각 dp 원소에는 Integer의 최대값으로 초기화 Arrays.sort(coins); // coins를 오름차순으로 sorting List coinLi..
2022.04.27 -
[LeetCode] 문제 복기(886번, 390번,684번,1685번,983번)
LeetCode를 풀면서 고생했던(?) 문제와 재밌게 풀었던 문제들을 돌아보는 시간. 886. Possible Bipartition 서로 함께할 수 없는 번호들이 주어지고 return으로 2개의 그룹을 만들 수 있는지를 넘겨줘야하는 문제다. 탐색으로 풀어야겠다고 생각하고 접근까지는 했으나 상태를 3개로 구분하지 못해서 헤맸다. (돌아보면 진짜 아무것도 아닌데) 방문, 미방문이 아니라 미방문, 그룹1, 그룹2 이런식으로 3가지의 상태를 통해 문제를 풀었어야했다. class Solution { public static boolean possibleBipartition(int N, int[][] dislikes) { int[] peopleGroup = new int[N+1]; Map graph = new Ha..
2022.04.17 -
[Kafka] Consumer의 3가지 수신 방법 + Segment 삭제
지난 시간에 이어 이번엔 Consumer를 Java로 구현해본다. Segment 삭제 peter-basic01을 Consume하면 Topic에 존재하는 모든 레코드가 출력된다. 이전 포스트에서 peter-basic01로 3건의 Record를 보냈기 때문에 새로운 Consumer가 Partition의 0번째 offset부터 모두 읽어오는 모습이다. 원할한 테스트를 위해서 Partition에 있는 레코드를 모두 지워보도록 하자. Topic에 있는 Partition으로 레코드가 들어오면 Segment라는 파일에 저장된다. Segment 확인을 위해서 /data/kafka-logs 경로로 이동한다. 이전에 peter-basic01 Topic을 생성했기 때문에 peter-basic01-0 디렉토리가 존재하는것을 ..
2022.03.28