CS16 Redis Replication 적용하기 들어가며레디스는 Stateliss의 특성을 가지므로 휘발성이 존재한다. 잘못하면 저장해둔 데이터가 다 날아가버리는 불상사가 생길 수 있다. 그래서 이를 방지하기 위해 master-slave 관계를 가진 서버를 추가로 미리 만들어 놓는다.개인 프로젝트를 진행하면서 레디스 서버 장애를 대비하기 위해 Replication 방식을 도입했다. 오늘은 스프링 부트를 통해 어떻게 적용을 했고, 테스트 결과에 대해 포스팅하려고 한다.적용 방법docker-compose.yml 우선 master 레디스 서버 1개, replica 서버 2개를 도커로 띄웠다. 기존에는 1개의 서버만 동작했으나 총 3개로 늘어났다.여기서 주의해야하는 부분은 slave 서버 컨테이너의 command 이다.command: redis-server .. CS/DB 2024. 5. 18. [Caching] 상품 주문 성능 개선 들어가며현재 진행하고 있는 프로젝트에서 레디스 캐시를 사용해 재고 관리를 하고 있다. 처음에는 write-throgh 전략을 사용했다. 데이터 정합성을 맞추는 게 가장 중요하다고 생각했다. 사용자에게 재고를 보여줄 때 정확해야하기 때문이다. 그러나 데이터베이스에 자주 접근하기 때문에 성능도 조금 떨어질 수 있다는 점이 trade-off로 존재한다.그래서 우선 가장 먼저 사용했던 전략에 대해 테스트를 수행했다. 그 다음에는 write-back 전략을 사용해서 테스트를 해보았다. 사실 write-through 방식을 사용하면서 캐시의 확실한 장점을 제대로 사용하지 못한다는 느낌이 들었다. 계속 데이터베이스에 들어갔다 나올거면 간김에 재고도 감소시키면 될텐데... 라는 생각이 들었다.캐시의 장점을 좀 더 활용.. CS/DB 2024. 5. 11. [백준] 2373번 세 용액 들어가며두 용액을 이분탐색으로 풀어서 이 문제도 이분탐색으로 풀어야하나? 라는 생각이 당연하게 들었다. 근데 보통 left, right로 나눠서 3개의 포인터(?)를 가지고 답을 구해나가야하는데 이건 세가지인데? 이런 혼란이 생겼다. 그래서 아 그럼 2개씩 뽑아서 구한 조합의 합을 먼저 구하고 원본 배열 (nC2 + n) 합쳐서 이분탐색을 돌리면 3개의 합이 나오지 않을까? 라고 생각했다. 근데 3개의 원소를 어떻게 기록하지...이처럼 생각이 많았던 문제이다. 브루트포스, 조합을 거쳐갔지만 결국 이분탐색으로 풀었다. 문제 풀이우선 이분탐색이지만 주의할 점은 3개의 용액의 합을 비교해서 풀어야한다는 것이다. 그래서 2중으로 반복문이 돌아가겠지만 이분 탐색이므로 O(nlgn)이 될것으로 예상된다.1. 먼저.. CS/자료구조&알고리즘 2024. 5. 7. 동시성 이슈를 해결하기 위한 Redisson 적용기 들어가며현재 개인프로젝트로 예약 구매 이커머스 프로젝트를 진행하고 있다. 특정 시간에 구매 버튼이 활성화되는 예약 구매 시스템이다. 해당 시간에는 많은 트래픽이 몰리는 상황을 조건으로 걸 예정이다. 이를 구현하기 위해 동시성 이슈를 학습하고 이를 해결하는 방법에 대해 알아보았다. 다양한 방법이 존재했지만 그중에서도 Redis의 Redisson을 사용하기로 했다. 그래서 여러가지 방법과 그중에서도 Redisson을 선택한 이유에 대해서 이야기 해보려고 한다. 동시성 이슈란?쉽게 말하면 공유된 자원에 동시에 접근해 발생하는 문제를 말한다.결국 Race Condition(경쟁 상태)가 발생하게 되는 것인다. Race Codition 란?둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 .. CS/DB 2024. 5. 5. [백준] 9252번: LCS2 https://www.acmicpc.net/problem/9252 9252번: LCS 2LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.www.acmicpc.net 들어가며LCS 문제를 DP로 풀어야한다는 것은 알고 있었지만 길이가 아닌 LCS 문자열을 구하는 과정에서 어려움이 있었습니다. 우선 LCS가 뭔지 간단하게 보고 예제의 결과가 어떻게 나왔는지 과정을 보고 문제 풀이 방식에 대해 설명하겠습니다! LCS(Longest Common Subsequence)란?최장 공통 부분 수열이라는 의미로, 주어진 여러 .. CS/자료구조&알고리즘 2024. 4. 26. [프로그래머스]모음 사전 (level 2, 완전 탐색) from itertools import product def solution(word): answer = 0 word_list = generate_words() word_list.sort() # 사전순 정렬 for i, w in enumerate(word_list): if w == word : answer = i + 1 return answer def generate_words(): char_list = ['A', 'E', 'I', 'O', 'U'] words = [] for length in range(1, 6): # 1부터 5까지 길이의 문자를 만들 것임 for p in product(char_list, repeat=length): # repeat: 반복 횟수 -> 길이가 length인 조합을 생성함.. CS/자료구조&알고리즘 2024. 3. 11. 메모리 관리 기법 및 단편화 메모리 관리 기법 연속 메모리 기법 프로그램 전체가 메모리에 연속적으로 할당되어야 하는 관리 기법 고정 분할 기법: 메모리가 고정된 파티션(길이)로 분할 필요한 용량보다 더 큰 메모리를 받으면 메모리 낭비 내부 단편화 발생 동적 분할 기법: 파티션들이 동적으로 생성 자신의 크기과 같은 파티션에 적재 메모리를 적재/해제 반복하면서 외부 단편화 발생 불연속 메모리 기법 프로그램 일부가 서로 다른 주소 공간에 할당될 수 있는 기법 Page: 프로세스를 고정된 크기의 작은 블록들로 나눴을 때, 그 블록들을 페이지라 함 Frame: 페이지 크기와 같은 주 기억장치 메모리 블록 Segment: 서로 다른 크기의 논리적 단위 가상 메모리 가상 메모리란 실제 메모리 크기와 관계없이 메모리를 사용할 수 있도록 가상 메모.. CS/OS 2024. 2. 18. [백준] 20310번: 타노스 (25점 반례) https://www.acmicpc.net/problem/20310 20310번: 타노스 어느 날, 타노스는 0과 1로 이루어진 문자열 $S$를 보았다. 신기하게도, $S$가 포함하는 0의 개수와 $S$가 포함하는 1의 개수는 모두 짝수라고 한다. 갑자기 심술이 난 타노스는 $S$를 구성하는 문자 www.acmicpc.net 1차 시도: 25점 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Buffere.. CS/자료구조&알고리즘 2024. 2. 15. 최단 경로 알고리즘 비교 다익스트라 알고리즘 (Dijkstra's Algorithm): 특징: 다익스트라 알고리즘은 하나의 출발점에서 다른 모든 정점까지의 최단 경로를 찾는 알고리즘입니다. 음의 가중치가 없는 그래프에서 사용됩니다. 알고리즘 사용하는 상황: 음의 가중치가 없는 그래프에서 사용되며, 최단 경로를 찾아야 하는 경우에 활용됩니다. 알고리즘 동작 과정: 출발 정점을 기준으로 초기화합니다. 출발 정점에서부터 각 정점까지의 최단 경로를 갱신합니다. 방문하지 않은 정점 중에서 최단 거리가 가장 짧은 정점을 선택하여 방문합니다. 해당 정점을 경유로하여 인접한 정점까지의 거리를 갱신합니다. 위 과정을 모든 정점을 방문할 때까지 반복합니다. 벨만-포드 알고리즘 (Bellman-Ford Algorithm): 특징: 벨만-포드 알고리.. CS/자료구조&알고리즘 2024. 2. 11. [백준] 8979번: 올림픽 문제 유형은 구현, 정렬 문제 풀이 방법 나라, 금/은/동메달 개수, 순위 등을 저장할 클래스 (Medal)를 생성한다. 이때 동점자를 계산하기 위해 score 변수를 Medal 클래스 내에 정의한다. 금메달은 10점씩 은메달은 5점씩 동메달은 1점씩 부여해 총점을 계산한다. 우선 금/은/동메달을 기준으로 정렬한다. 금메달 수가 더 많은 나라 금메달 수가 같으면, 은메달 수가 더 많은 나라 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라 순위를 계산한다. - 각 나라의 score를 비교해서 동일한 경우 동점 국가와 동일한 등수가 되고, 그렇지 않다면 (자신보다 더 잘한 나라 수) + 1 이 등수가 된다. 결과를 알고 싶은 국가의 등수를 출력한다. package 구현; import java.io.. CS/자료구조&알고리즘 2024. 2. 4. [백준] 2870번: 수학문제 풀이 방법 정규식을 통해 숫자를 걸러낸다. 숫자가 아닌 문자는 " "으로 바꾼다. 빈칸을 제거한다. 이 과정에서 split(" "), isBlank()를 사용했는데 ... 먼저 공백을 기준으로 문자열을 나누기 위해 split()을 사용했다. 내가 예상한 결과는 숫자만 배열에 저장되는 것인데 예상치 못하게 빈 문자("")도 같이 저장되었다. 그래서 isBlank를 사용해서 추가 검증을 해주었다. 숫자만 골라내 리스트에 저장하고 이를 정렬한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.ArrayList;.. CS/자료구조&알고리즘 2024. 1. 24. MVC, MVP, MVVM 비교 1. MVC MVC 패턴은 Model + View + Controller를 합친 용어 1) 구조 Model: 애플리케이션에서 사용되는 데이터와 비즈니스 로직을 처리하는 부분 View: 사용자에게 보여지는 UI 부분 Controller: 사용자의 입력(Action)을 받고 처리하는 부분 2) 동작 사용자의 Action들은 Controller에 들어온다. Controller는 사용자의 Action을 확인하고, Model을 업데이트 한다. Controller는 Model을 나타내줄 View를 선택한다. View는 Model을 이용하여 화면을 나타낸다. 참고 - MVC에서 View가 업데이트 되는 방법 - View가 Model을 이용해 직접 업데이트 하는 방법 - Model에서 View에게 Notify 하여 업.. CS/디자인 패턴 2024. 1. 18. 이전 1 2 다음 728x90 반응형