전체 글(40)
-
카카오톡 클론코딩(13) - 병목 원인 분석
지난번엔 병목을 찾고, 잘못된 테스트 방식도 찾았으니 이제 진짜 서버의 한계를 테스트 하고 병목을 해결해보자먼저 지난번에 가장 큰 문제였던 DB 이 문제를 해결하기 위해 헤로쿠 에드온인 jawsDB 에서 aws ec2에 도커를 올려 db를 교체해줬다.DB를 바꾸는 과정은 크게 어려운 과정은 아니었기에 이 부분은 생략하겠다. 자 이제 DB를 바꿨으니 다시 테스트를 진행해보자그래프를 보면 jawsDB를 사용할때와 동일하게 TPS가 들쑥날쑥 병목이 많이 생기는 부분은 변하지 않긴했다.하지만 적어도 db의 max_questions 문제로 서버가 다운되지는 않는다. 근데 여기서 문제점이 하나 발생했다. 바로 MTT 가 5100ms 까지 증가했다는 것이다. 느려져도 너무 느려졌다. 그 중에서도 응답시간이 큰 로그인..
2025.05.13 -
코테연습 - DP
오늘은 코딩테스트 dp 알고리즘에 대해 알아볼 것이다. DP(Dynamic Programming)은 주어진 문제를 해결하기 위해 큰 문제를 여러 개의 작은 하위 문제로 나누고, 그 하위 문제의 답을 재사용하여 최적의 결과를 도출하는 알고리즘이라 한다. 솔직히 말해서 dp는 크게 따로 설명할 부분이 없다. 많이 풀어보는 것이 정답일 것이다. 그럼에도 풀면서 깨달은 부분에 대해 정리해보자 한다. 일단 DP가 사용 될 수 있는 부분은 크게 두 가지다 1. 최적 부분 구조 :피보나치수열처럼 큰 문제의 최적해가 작은 문제의 최적해로 구성될 수 있는 구조다.EX) F(n) = F(n - 1) + F(n - 2)이렇게 아래부터 차근차근 답을 구하여 최종 결과를 얻는 방법이다. 2. 중복 부분 문제 : 동일한 하위 문..
2025.05.07 -
카카오톡 클론코딩(12) - prometheus, grafana
이번에는 프로메테우스 그라파나에 대해 알아보자 프로메테우스는 서버의 CPU 사용량, 메모리 사용량, HTTP 응답시간 등을 모니터링하기 위한 도구다.그라파나는 그러한 프로메테우스의 데이터들을 시각화하기 위한 도구다. 즉 프로메테우스는 데이터를 수집하고 저장하고 그것을 시각화한 게 그라파나이다. 프로메테우스는 pull 방식의 모니터링을 하는데 서버에서 제공하는 /metrics 엔드포인트를 주기적으로 가져가 데이터베이스에 저장한다. 프로메테우스를 사용할라면 일단 프로메테우스를 설치해야 한다.나는 맥북을 이용하기 때문에 Mac 기준으로 설명을 할 것이다.brew install prometheus프로메테우스를 설치해 주고 설치된 경로를 확인해야 한다./opt/homebrew/etc/prometheus.yml나 ..
2025.05.01 -
카카오톡 클론코딩(11) - nGrinder(3)
분명 지난번에 다음에는 프로메테우스에 대해 알아보자 했는데 왜 제목이 nGrinder인가 의아 할 수 도 있다. 그 이유는 nGrinder 성능부하 테스트를 잘못하고 있었기 때문이다... 웬지 분명 싸구려 서버인데 이게 이렇게 많은 인원이 돌아갈리가 없다고 의심했어야 했는데 너무 늦게 발견해 버렸다. 잘못된 지식을 알아서 고칠 수 있다는건 다행 인 점이긴 하다만.. 그래서 어디서 잘못됐나? 그건 우연히 프로메테우스에서 쿼리의 병목을 찾다가 발견했다. 분명 nGrinder 테스트에서는 에러가 없는데 프로메테우스, 그라파나에서는 로그인하는 api 에서 500 번대 에러가 터지고 있었다는 것이다. 그렇다 원효대사 해골물을 먹고 있었다. 자 이제 왜 이러한 현상이 일어났는지 더 자세히 조사해봐야한다. 원인은 의..
2025.05.01 -
코테 연습 - 이분탐색
오늘은 이분탐색에 대해 정리해볼것이다.우선 이분탐색이 뭔지 알아보자이분탐색 : 정렬된 데이터에서 탐색 범위를 절반씩 줄여가며 목표 값을 찾는 탐색 알고리즘일단 이분탐색을 하기 위해선 반드시 배열을 정렬시켜둬야 한다.그리고 보통 low를 첫번째 인덱스, high를 마지막 인덱스로 지정한다. 그 후 (low + high) / 2로 mid(중앙값) 값을 정한다.그리고 찾기위한 수 (이 그림에선 31) target을 정한다. 위의 글대로 진행하면 low = 0, high = 9, mid = 4, target = 31이 된다.이제 중앙값과 target을 비교해줄것이다. arr[mid] = 13, target = 31 arr[mid] 다시 위 과정을 반복하면 low = 8, high = 9, mid = 8, tar..
2025.04.29 -
코테연습 - 정렬
이번주는 코딩테스트 정렬 알고리즘에 대해 정리해볼것이다.우선 정렬의 종류에는 선택 정렬, 버블 정렬, 삽입 정렬, 병합 정렬 ,퀵 정렬, 힙 정렬, 계수 정렬 등 여러가지 종류가 존재한다.모든 정렬을 설명하는게 좋을 수 있지만 코딩테스트에서 사용되는건 퀵, 삽입, 병합 정렬 3종류가 주로 사용되기 때문에 3가지 정렬만 간단하게 정리하고 갈것이다. - 퀵 정렬 (Quick Sort)우선 퀵 정렬이다. 보통 퀵정렬은 기본타입들을 정렬할때 사용된다. ex) int[], double[], char[] 등등이제 퀵정렬의 메커니즘을 알아보자 step1 : 우선 pivot 선정한다. step2 : low 포인터를 pivot 이상의수가 나올때까지 이동시킨다(왼 -> 오). high 포인터는 pivot 이하의수가 나..
2025.04.22