목록전체 글 (270)
전공공부
카카오페이와 일맥상통하는 Redisson 기반의 분산 락 적용기운영 중인 서비스에 분산 락 시스템을 적용하면서, 위의 카카오페이의 적용 사례를 참고 할 수 있을 것 같아 아래 사례 내역을 공유드립니다. Redisson 기반의 분산 락은 여러 서비스가 동시에 접근할 때, Redis를 통해 임계 영역의 데이터가 서로 침범되지 않도록 제어하는 데 사용됩니다. 분산 시스템에서는 이러한 충돌이 의도치 않은 결과를 초래할 수 있기 때문에, 정확하고 일관된 데이터 처리를 위해 필수적입니다. 기존 AOP 방식 코드아래는 기존에 사용하던 Aspect를 활용한 분산 락 코드입니다.// Aspect 정의@Aspect@Componentpublic class LockAspect { @Autowired private ..
설명이번에도 일반적인 분리 집합 문제입니다. 이제는 연결되는 것에 대해서 검증하는 문제들은 거의 다 유니온 파인드를 사용해서 풀 수 있는데요. 웰노운 알고리즘이다 보니 연습용으로 풀기에 좋은 문제입니다. 풀이는 간단합니다. 문제에서 요구하는 연결을 한 후 추후에 연결 검증을 진행하면 됩니다. 이제 부터는 disjoint_set은 그만 풀고 다른 웰노운 알고리즘을 파봐야 겠습니다.코드package BOJ.disjoint_set;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.StringTokenize..
설명다리 두개를 단순히 연결해서 N - 2개의 다리 상태에서 N - 1의 다리 상태로 모두 이어 질 수 있는 방안을 출력하면 되는 문제입니다. 단순히 분리집합을 이용해서 합집합끼리 묶고 남은 root 위치의 위치 값은 나눠진 것이니 이것을 연결 해줍니다. 위 설명이 바로 이해가 되지 않는다면 disjoint_set 자체에 대해서 조금 더 공부하시면 바로 이해 하기가 쉽습니다. 코드 package BOJ.disjoint_set;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BOJ_17352 { static int[] parent; public s..
설명분리집합 문제 였습니다. BOJ_18116과 같은 방식의 풀이로 진행하였으며 이때 문제 함정이 F 코드package BOJ.disjoint_set;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import java.util.StringTokenizer;public class BOJ_4195 { static int[] parent; static int[] size; static Map friendMap; public static void main(String[] args) throws Exception{ BufferedR..
설명우선 코드 자체는 Union-find를 활용하였다. 그 이유는 문제 설명 중 ( 부품 11과 부품 22가 로봇 A의 부품이라고 알고 있는 경우, robot(11)은 로봇 A를 의미하고, robot(22)도 로봇 A를 의미한다. ) 이와 같이 같은 집합의 로봇끼리는 같은 로봇으로 참고 하기 때문이고 그렇다고 해서 전체 집합의 로봇 부품들이 모든 같은 로봇을 참조하지는 않기 때문에 합집합 끼리 묶어 줄 수 있는 것이 필요하였기 때문이다. 다만, 10^6으로 parent 배열이 N + 1개를 의미하지 않기 때문에 root에 따른 동일한 부품 탐색 시 꽤나 탐색 범위가 커질 수 있다. 10^6 * 10^6과 같은 최악의 경우의 수가 나올 수 있기 때문에 단순히 for문으로 짜면 처음부터 끝까지 모두 탐색해서..
설명단순히 분리집합을 구현하여서 해당 위치가 같은 합집합에 속하는지 판단하는 것인데 이를 플로이드 와셜과 개념적으로 흔들리면 플로이드 와셜로 접근 할 수 있습니다. 다만, 해당 문제는 분리집합을 사용하여 N개 이상의 위치에 대해서 해당 위치가 처음 골라진 root 위치와 같아야 같은 곳을 통해서 지나 갈 수 있으므로 이를 모든 케이스에 대해서 다 점검하기에 단순히 1 -> N 어디로 간다의 로직을 짜는 플로이드 와셜과는 확실하게 다른 문제입니다. 코드package BOJ.disjoint_set;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;impor..
클라우드 네이티브 서비스는 확장에 따른 비용 증가와 문제를 겪지 않으면서 여러 프로세스를 효율적으로 조정하고 높은 수준의 부하를 견뎌 낼 수 있도록 요청이 됩니다. 따라서, 고도의 동시성을 제공해야 하고 다수의 사용자로부터 유입되는 요청을 관리하여야 합니다. Fan-In - 다수의 입력 채널을 하나의 출력 채널로 다중화 하는 것 적용성 - 출력을 만들어 내는 워커를 가진 서비스는 워커의 출력을 하나의 단일화된 스트림으로 합치는 것이 유용할 수 있습니다. *워커더보기워커 : 특정 작업을 수행하는 고루틴 함수의 단위로 보고 이해 할 수 있습니다. 아래 코드를 통해서 설명드리겠습니다. 우선 dest는 목적지이며 출력 채널이고 이는 하나의 단일화된 스트림입니다. Funnel은 소스로 부터 받은 값을 수신하여 목..
설명말 그대로 1사분면 2사분면 3사분면 4사분면을 나눠서 정복하는 방법입니다. 재귀 함수를 사용하기 때문에 적절히 리턴 코드를 의식해서 코드를 짜면 되고 사각형 탐색 시 모든 컬러가 같은 경우가 아닌 사각형을 탐색 했을때는 그 사각형의 내부를 탐색하는 식으로 코드를 작성하면 됩니다. 코드package BOJ.Divide;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BOJ_2630 { static int black = 0; static int white = 0; static int[][] map; public static void ma..