목록분류 전체보기 (181)
Lewis's Tech Keep
링크https://school.programmers.co.kr/learn/courses/30/lessons/178870# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이처음에는 완전탐색으로 풀었지만 실패했다. 투포인터로 변경 후 적용으로 완료하였다. 자세한 설명은 이 분 블로그에 친절하게 잘 되어 있어서 링크를 남긴다. 더보기class Solution { public int[] solution(int[] sequence, int k) { for (int i=0; i endIndex-1 - startIndex) { ..
해시 키 재배치(rehash) 문제부하를 균등하게 나누려면 해시 함수를 이용하면 좋음serverIndex = hash(key) % N (N은 서버의 개수) 기존 키가 삭제되거나 추가되면 이슈가 발생할 수 있음삭제 될 경우 엉뚱한 서버에 접속 -> 대규모 캐시 미스 발생 가능안정 해시안정 해시는 해시 테이블 크기가 조정될 때 오직 k(키 개수)/n(슬롯 개수)개의 키만 재배치하는 기술서버와 키를 균등 분포(uniform distribution) 해시 함수를 사용 해 해시 링에 배치키의 위치에서 링을 시계 방향으로 탐색하다 만나는 최초의 서버가 키가 저장될 서버다파티션 (해시 공간)의 불균형 문제가 생김 -> 가상 노드가 들어옴가상 노드하나의 서버가 링 위에 여러 개의 가상 노드를 가지는 것시계방향으로 링을..
처리율 제한 장치(rate limiter)란?클아이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치 특징특정 기간 내에 전송되는 클라이언트의 요청 횟수를 제한요청 횟수가 임계치를 넘어가면 추가로 도달한 모든 호출은 처리가 중단(block) 이점DoS 자원 고갈 방지비용 절감추가 요청을 block 하기 때문에 더 많은 서버 자원이 필요하지 않게 됨서버 과부하 방지bot에서 오는 트래픽이나 사용자의 잘못된 이용패턴으로 유발된 트래픽을 걸러내는데 활용 요구되는 사항들낮은 응답시간가능한 적은 메모리분산형 처리율 제한여러 서버나 프로세스에서 공유예외 처리 - 발생한 경우에 사용자에게 분명히 보여주기높은 fault tolerance : 제한 장치에 장애가 생기더라도 전체 시스템에 영향을 주..
문제https://school.programmers.co.kr/learn/courses/30/lessons/258711?language=java 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정리어떻게 풀어야 할 지 감도 잡히지 않아서 다른 분들 풀이를 많이 참고했다. 정식 풀이 링크갯수를 구해야 하는 그래프 모양은 3개다.막대 / 8자 / 도넛 모양이다. 막대나가는 간선은 2개 이상 존재하고 들어오는 간선은 존재하지 않는다. (도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프의 수의 합은 2이상 이라는 조건이 있음) 8자나가는 간선이 2개 이상 존재..
링크https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정리 실패 코드 dfs 로 하려고 시도했으나 실패하였다.각 열 기준으로 하나씩 검사하면서 있는 것은 visited 체크를 해주면서 합계를 구한다.하나의 열을 다 돌면 합계를 구한다. 정확성은 성공했으나 효율성에서 실패. 중간부터 실패할 것이라 감은 왔으나 다른 방법이 딱히 생각나지 않았기에 진행하였음. 성공 코드 bfs로 처리한 다음 어떻게 효율적으로 처리할 것인지가 중요했다. 각 칸 기준으로..
java 21 로 버전업하면서 Spring kafka consumer도 virtual threads 로 사용하고 싶었기에 ListenerContainerFactory 빈을 등록할 때 링크 를 참고해서 AsyncTaskExecutor와 virtualThread 옵션을 활성화 시켜봤다.그러나 운영 배포 후 rebalancing 이 계속 발생하면서 파드가 떨어지기 시작했다.왜 그런가 했더니 설정 시 asyncTaskExecutor.setConcurrencyLimit(SimpleAsyncTaskExecutor.UNBOUNDED_CONCURRENCY);아래와 같이 TaskExecutor ConcurrenyLimit 정책을 UNBOUNDED_CONCURRENCY로 가져갔더니 쓰레드를 무한히 생성하였고 이로 인하여..
Spring Hibernate Envers 사용 시 아무것도 설정하지 않고 사용 시 revisionId와 revision timestamp를 저장하는 revinfo라는 테이블이 있는데, 해당 테이블의 revisionId 값은 integer로 저장된다.Dev 환경이라면 괜찮지만 Production 환경에서 Envers를 사용하고 있고 자주 기록하는 서버라면 Integer MAX값인 21억을 넘는 것은 현실이 될 수도 있다.이런 경우 테이블이 이미 생성되어 있는 경우 마이그레이션과 함께아래와 같이 CustomRevisionEntity를 준비해서 변경해주는 것이 좋다.-- table seq type 변경ALTER TABLE revinfo ALTER COLUMN rev TYPE BIGINT USING rev::..
배경설명어느 날이었다.저녁 시간 대 쯤 갑자기 모니터링 보드에서 급격한 hps 증가를 보았다.예제 그림너무 급격하게 오른 요청 수로 인하여 요청들이 쓰레드를 모두 차지하여 혼잡 상태에 들어가게 되고,이로 인해 파드가 무한 재시작하는 상황이 발생했다.판단증가 폭이 빨라도 너무 빨랐다.재배포나 일반적 플로우에서의 일시적 혼잡 상태라면 어느정도 피크를 달성한 이후에 정상화되어야 하고 유저의 일반적 재요청일 경우의 그래프라고 하기 어려울 만큼 해당 그래프는 급격한 증가세에 있었다.진행이로 인하여 플로우 상 진행되지 않는 서버가 존재하자 비즈니스적 타격을 받게 되었다.기존에 RateLimiter가 존재했지만 해당 RateLimiter는 결국 어플리케이션 레벨에 있는 라이브러리였기 때문에 쓰레드 워커가 일을 할 수..