전체 글(37)
-
카카오톡 클론코딩 - 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 -
카카오톡 클론코딩(10) - nGrinder(2)
지난 글에이어서 nGrinder의 내용을 추가적으로 적어볼라한다.이번 글에서는 프로젝트에서 주로 사용되는 시나리오를 테스트 해볼것이다.로그인 -> 친구목록 조회 -> 채팅방 목록 조회 -> 채팅방의 채팅 메시지 조회 순으로 진행 될것이다.물론 채팅방 목록을 조회하고 채팅을 치는 과정까지 테스트하면 더 좋겠지만 nGrinder는 웹소켓 테스트는 지원하지 않기 때문에 해당 부분은 생략하고 진행할것이다. import groovy.json.JsonOutputimport groovy.json.JsonSlurperimport static net.grinder.script.Grinder.grinderimport net.grinder.script.GTestimport net.grinder.scriptengine.gro..
2025.04.11 -
카카오톡 클론코딩(9) - nGrinder
이번에는 ngrinder 에 대해 다뤄볼것이다.우선 ngrinder에 대해 알아보자ngrinder 는 네이버에서 개발한 오픈소스 성능 테스트 도구이다. 주로 서버의 성능을 테스트하기 위한 서버의 성능부하 테스트 도구다.스크립트를 통해서 시나리오를 작성해 해당 시나리오의 성능부하를 테스트 해볼 수 있다. 우선 nGrinder를 사용하기 위해서는 Controller 와 Agent 두가지가 필요하다.Controller는 부하테스트를 위한 스크립트 관리를 하는 역할이고Agent는 스크립트를 실행하고 가상의 사용자(Vuser)를 통해 부하를 발생시키는 주체 역할을 한다. 먼저 컨트롤러를 설치해야 하는데 컨트롤러는https://github.com/naver/ngrinder 해당 gitHub에서 .war 파일을 다운..
2025.04.10 -
코테연습 - 백트래킹
오늘은 코딩테스트 백트래킹에 대해 정리해 볼 것이다. 백트래킹은 가능한 모든 경우의 수를 탐색하면서 조건에 맞지 않는 경우에는 탐색을 중단하고 이전으로 돌아가는 방식의 알고리즘이다.이러한 방식을 가지치기라고 한다. (이러한 가지치기가 모든 경우를 탐색하는 dfs 와의 차이점이라고도 볼 수 있다) 백트래킹도 일종의 재귀함수이기 때문에 지난번의 재귀함수와 마찬가지로 기저 조건이 중요하다.일단은 코드로 간단한 백트래킹의 기본 구조를 알아보자void backtrack(int depth) { if (depth == 목표깊이) { // 정답처리 return; } for (int i = 시작값; i 백트래킹의 기저 조건은 가지치기를 하는 거라 볼 수 있을 것이다. 그런데 ..
2025.04.01