본문 바로가기

전체 글

728x90
(53)
검색 엔진 원리 / Elastic Search vs Solr Search :: DANIDANI 검색 엔진(search engine) 이란? 웹에 존재하는 많은 양의 정보 중에서 사용자가 원하는 정보만을 여러 웹 사이트나 웹 페이지 등에서 검색해 주는 시스템이나 프로그램 등을 통틀어 말한다. 검색 엔진 원리(로봇 검색 엔진) 1. Crwaling: 정보 찾기 크롤러(또는 스파이더)란 웹상의 문서나 이미지, 영상 등을 주기적으로 검색하고 취합하여, 자동으로 데이터베이스화시키는 프로그램으로 봇(Bot)이라고도 부릅니다. google의 크롤러 이름은 Goolgebot, naver의 크롤러 이름은 Yeti 크롤러가 웹사이트를 옮겨 다니면서 정보를 수집한다. 새로운 웹페이지나 기존의 웹페이지지만 업데이트된 정보가 있으면 방문을 하게 된다. 이때, 공개된 사이트의 정보만 수집하는데 이는 크롤러가 robots...
병합정렬(Merge Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI 알고리즘 개념 분할 정복 방법을 통해 구현한다. 안정 정렬에 속한다. 레코드 리스트를 반으로 나누어 2개의 서브 리스트로 분할하고, 각 서브 리스트에 이 과정을 재귀적으로 적용하여 더 이상 분할이 불가능할 때까지 반복한다. 분할이 완료된 이후에는 이웃하는 두 개의 파티션을 서로 병합하여 정렬을 완료한다. 과정 분할: 배열을 같은 크기의 2개의 부분 배열로 분할한다. 정복: 부분 배열을 정렬한다. 결합: 정렬된 부분 배열들을 하나의 배열에 병합한다. 2개의 리스트의 값들을 처음부터 하나씩 비교하여 더 작은 값을 새로운 리스트로 옮긴다. 둘 중 하나가 끝날 때까지 반복한다. 둘 중 하나가 먼저 끝나면 나머지 리스트의 값들을 전부 넣는다. 새로운 리스트를 원래 리스트로 옮긴다. 코드 int arr[100000..
퀵정렬(Quick Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI 알고리즘 개념 분할 정복 방법을 통해 큰 문제를 작은 문제 단위로 쪼개면서 해결된다. 불안정 정렬에 속한다. 보통 프로그래밍 언어에서 sort의 내부적으로 사용된다. 임의의 기준 수 pivot을 선택하여 정렬 대상 수들을 pivot 값보다 작은 그룹과 큰 그룹으로 분할한다. pivot은 작은 그룹과 큰 그룹 사이로 이동시킨다. 분할된 각 그룹에 대해서 재귀적으로 또다시 pivot을 정하고 동일한 과정을 반복한다. 원소가 1개가 되어 더 이상 분할이 불가능할 때까지 반복한다. 알고리즘 배열 내부에서의 분할 과정 i는 왼쪽 끝, j는 오른 쪽 끝 위치로 둔다. pivot을 첫번째 항목으로 선택하고(때에 따라 랜덤이나 중간 값을 선택할 수도 있음) pivot보다 큰 값을 만날 때까지 i값을 1씩 증가시키고, ..
삽입정렬(Insertion Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI 알고리즘 개념 이미 정렬되어 있는 리스트에서 새로운 수를 추가하는 과정이다. 비교 대상인 수가 자신의 자리를 찾을 때까지 왼쪽으로 이동한다. 과정 첫 번째에 위치한 수(인덱스 0번 위치의 수)는 이미 정렬이 완료되었다고 가정한다. 정렬 리스트의 오른쪽에 있는 정렬되지 않은 수(인덱스 1번 위치의 수)는 자신의 앞에 있는 수와 크기를 비교하여 앞쪽 수가 더 크면 자리를 바꾼다. 인덱스 2번 위치의 수도 왼쪽으로 전진 하면서 자기 자리를 찾는다. 더 이상 정렬된 대상 원소가 없을 때까지 반복한다. 코드 int j, temp; for (int i = 1; i = 0 && temp < arr[j]; j-..
거품정렬(Bubble Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI 알고리즘 개념 항목의 키 값을 풍선에 비유한 것으로 값이 클수록 더 높이 올라가도록 한다. 가장 큰 값의 키가 오른쪽 끝으로 이동하고, 그다음 큰 값이 그 옆으로 이동하는 과정을 반복한다. 과정 첫번째 수와 두 번째 수를 비교해서 큰 수가 오른쪽에 위치하게 교체한다. 두 번째 수와 세 번째 수를 비교해서 큰 수가 오른쪽에 위치하게 교체한다. 가장 오른쪽에 도달할 때까지 1,2번을 반복한다 오른쪽 끝에 최대값이 도달하였음으로 이 수를 제외하고 나머지 수에 대해서 수가 1개가 남을 때까지 1~3번 과정을 반복한다. 코드 int temp; for(int i = 0; i arr[j+1]){ temp = ar..
선택정렬(Selection Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI 알고리즘 개념 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘 첫 번째 자리에는 첫 번째~마지막 원소 중 가장 작은 원소를, 두 번째 자리에는 두 번째~마지막 원소 중 가장 작은 원소를... 과정 주어진 배열에서 최솟값을 찾는다. 그 최솟값과 맨 앞에 위치한 값을 교체한다.(swap) 맨 앞에 위치한 값을 제외한 나머지 배열에 대해서 같은 방법으로 교체한다. 코드 for (int i = 0; i < n; i++){ int minIdx = i; for (int j = i + 1; j < n; j++){ if (arr[j] < arr[minIdx]) minIdx = j; } int temp = arr[i]; arr[i] = arr[minIdx]; arr[minIdx]..
nGrinder - 서버 부하 테스트 :: DANIDANI 이번에는 nGrinder를 이용하여 서버 부하 테스트를 진행해보겠습니다. 서버는 AWS ec2 t2.medium을 사용했고 docker를 이용하였습니다. 가상 유저 수를 늘려가며 테스트를 했습니다. what is nGrinder? 네이버에서 The Grinder 오픈소스에 기반하여 자바로 개발한 성능 측정 오픈소스 nGrinder Architecture Controller 부하 테스트를 위한 GUI 제공 부하 테스트 모니터링 Agent 부하를 발생시키는 대상 Controller의 명령을 받아 부하 발생 Target Server 테스트할 대상 서버 Controller 실행 방법 tomcat을 이용 직접 실행 docker에 설치 이번 예제에서는 3번인 docker에 설치하여 진행하겠습니다. 서버 사양 AWS..
무료 도메인으로 AWS Elastic Beanstalk와 연결(AWS Route53) | AWS Certificate Manager로 SSL 인증서 발급 | HPPTS 리다이렉트 :: DANIDANI 1. 무료 도메인 가져오기 AWS에서 도메인을 얻을 수 있지만 연간 최소 9 USD부터 시작하는 유료이니 무료 도메인을 사용해보겠습니다. freenom 사이트 이용 Freenom - A Name for Everyone 로그인 - Services - Register a New Domain으로 접속 후 원하는 도메인을 검색하여 사용 가능한 도메인을 get it now! 합니다. 등록한 도메인은 Services - MyDomains에서 확인 가능합니다. 2. DNS 구성 AWS Route53에서 호스팅 영역 부분을 열고 호스팅 영역 생성! 상황에 맞는 라우팅 정책을 선택합니다. (저는 단순 라우팅으로 진행하였습니다.) 레코드 이름 앞에 www를 붙여줍니다. 값/트래픽 라우팅 대상에 Elastic Beansta..