본문 바로가기

전체 글

(236)
99클럽 코테 스터디 15일차 TIL: [프로그래머스] 주식가격 https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr dfs로 아주 간단하게 풀 수 있는 문제다. 이차원 배열을 순회한다. 이때 아직 방문하지 않았으면서 값이 1이면 dfs를 시작한다.dfs를 통해 이어진 모든 노드들을 방문한다.dfs를 수행한 횟수가 네트워크 개수가 된다.import java.util.*;class Solution { int answer = 0; int n; int[][] computers; boolean[..
서킷 브레이커 내결함성장애가 발생하지 않는 완벽한 시스템을 만드는 것은 불가능하다. 따라서 장애가 발생하더라도 견딜 수 있는 내결함성 시스템을 만드는 것이 중요하다. (* 내결함성(Fault Tolerance): 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능) 특히 MSA 환경에서 각 마이크로 서비스는 동기적 통신을 통해 서비스 간 의존관계가 생기게 된다. 이로 인해 하나의 서비스 장애가 다른 모든 서비스의 장애로 전파될 수 있다. 따라서 장애 전파를 막는 것이 중요한데 그 방법으로 서킷 브레이커가 있다.Resilience4j의 서킷 브레이커공식 문서에서는 Resilience4j를 다음과 같이 소개한다.Resilience4j is a fault tolerance library for Java™..
99클럽 코테 스터디 14일차 TIL: [프로그래머스] 단어 변환 https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 처음에는 익숙한 dfs로 풀었었는데, begin을 target으로 변환하는 가장 빠른 과정을 찾아야 하므로 bfs가 더 적합한 거 같다. 그런데 dfs로 풀더라도 가지치기를 하면 되니까 큰 차이는 없을 거 같다.  dfs로 푼 풀이는 다음과 같다.import java.util.*;class Solution { String begin; String target; String[] ..
99클럽 코테 스터디 13일차 TIL: [프로그래머스] 아이템 줍기 https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr bfs 문제인 건 딱 보고 알았는데 구현을 어떻게 해야할지 감이 안왔다. 주의할 점들은 다음과 같다.우선 내가 막힌 부분은 "테두리를 의미하는 꼭짓점을 이차원 배열로 구현하는 것이 올바른가?"였다. 그런데 다음을 보면, 테두리를 기준으로 해서 테두리 수를 셌을 때랑, 이차원 배열을 기준으로 해서 가장자리 칸들의 수를 셌을 때랑 차이가 없다는 것을 알 수 있다. 따라서 이차원 배열로 구현해도 된다!다음..
99클럽 코테 스터디 12일차 TIL: [프로그래머스] 여행경로 https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 처음에 푼 풀이는 다음과 같다. import java.util.*;class Solution { public String[] solution(String[][] tickets) { Map> map = new HashMap(); for (String[] ticket : tickets) { PriorityQueue que = map.getOrDefault..
센티널 로컬과 도커에 적용해보기 로컬에 적용이전 글에서 레디스의 복제와 센티널에 대해 알아봤다. 이번 글에서는 이들을 로컬 환경과 도커 환경에서 직접 적용해보자. 우선 로컬에 적용해보자. 레디스 서버는 다음과 같다.마스터: 6379 포트슬레이브: 6380 포트그리고 레디스 센티널 서버는 다음과 같다.센티널 서버 1: 26379 포트센티널 서버 2: 26380 포트센티널 서버 3: 26381 포트레디스 서버 띄우기(복제 환경)우선 복제 환경을 구성하기 위해 레디스 마스터와 슬레이브 서버를 띄워보자.  /etc/redis 경로에 다음 두 개의 파일을 만들어뒀다. sudo nano /etc/redis/master.confsudo nano /etc/redis/slave.confmaster.confport 6379masterauth 1234re..
레디스 복제(Replication)와 센티널(Sentinel) 고가용성가용성이란 일정 기간 동안 서비스를 정상적으로 사용할 수 있는 시간의 비율을 뜻하며, 이 값이 클수록 가용성이 높다고 한다. 서비스를 안정적으로 운영하기 위해서는 가용성을 높일 수 있는 방안을 도입해야 한다.  레디스는 고가용성을 확보하기 위해 다음 두 가지 기능을 제공한다.복제: 마스터 노드의 데이터를 복제본 노드로 실시간 복사하는 기능이다. 따라서 마스터 노드의 서버에 장애가 생겨 데이터가 유실된다고 해도 복제본 노드에서 데이터를 확인할 수 있다.자동 페일오버: 마스터 노드에서 발생한 장애를 감지해 레디스로 들어오는 클라이언트 연결을 자동으로 복제본 노드로 리다이렉션하는 기능이다. 따라서 마스터 노드의 서버에 장애가 발생했을 때 빠른 조치가 가능하다.복제(Replication)복제를 하는 이유..
99클럽 코테 스터디 11일차 TIL: [프로그래머스] 퍼즐 조각 채우기 https://school.programmers.co.kr/learn/courses/30/lessons/84021 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 예전에 풀다가 빡구현에 지쳐서 포기한 문제인데 이번엔 풀었다..! 아이디어 자체는 간단하다.bfs를 통해 퍼즐과 빈칸들을 찾는다. 그리고 나중에 빈칸에 퍼즐을 넣을 수 있는지 비교해야 하므로 퍼즐과 빈칸의 위치를 0, 0을 시작으로 하며, 딱 맞는 크기의 배열로 만들어야 한다.그리고 각 빈칸에 각 퍼즐들이 들어갈 수 있는지 확인한다. 빈칸과 퍼즐의 사이즈는 딱 맞아야 한다. 즉, 두 배열의 가로, 세..