Category
[ELK] Elasticsearch 활용과 Rest API
[ELK] Elasticsearch 활용과 Rest API
2021.07.14REST API 이번에는 elasticsearch의 활용방법을 소개하겠습니다. 그 전에 elasticsearch의 노드와 통신을 하는 방식을 설명하겠습니다. elasticsearch는 REST API를 제공하여 클러스터와 통신을 합니다. 간단히 REST API를 소개하고 데이터를 다뤄보겠습니다. REST API는 2000년도에 로이 필딩 (Roy Fielding)의 논문에서 공개되었습니다. 웹을 관통하는 HTTP의 주요 저자였던 필딩은 웹의 설계에 비해 제대로 활용되지 못하는 점을 보완하고 최대한 활용하기위해 공개하였습니다. 웹페이지 제작이나 API개발을 해보신 분들은 REST API에 대해 알 것이라 생각합니다. 현재 우리가 사용하는 많은 수의 웹페이지는 REST API를 통한 페이지간의 통신을 활용하..
[ELK] Elasticsearch의 구조
[ELK] Elasticsearch의 구조
2021.07.09Elasticsearch 구조 지난번에 기본적인 ELK stack의 설치와 실행을 확인했습니다. 이번에는 엘라스틱서치의 기본 구조부터 알아봅시다. 이번 내용은 이론적인 내용이 강해서 재미가 없을 수도 있습니다. 기본적으로 엘라스틱서치는 논리적 구조와 물리적 구조로 구분할 수 있습니다. 논리적 구조 우선 논리적 구조로는 도큐먼트(document), 타입(type), 필드(field), 인덱스(index), 매핑(mapping)로 구성됩니다. 1. 도큐먼트 (Document) - 도큐먼트는 엘라스틱서치의 데이터 최소 단위입니다. JSON 오브젝트 하나를 일컫습니다. 이 형태는 MongoDB와 같은 NoSQL에서도 사용을 하고 있습니다. 도큐먼트는 내부에 여러가지 필드로 구성되어 있습니다. 특이한 점이라면 도..
[ELK] WSL을 통한 ELK 설치 및 실행
[ELK] WSL을 통한 ELK 설치 및 실행
2021.07.08들어가며... 오늘부터 본격적으로 ElasticSearch와 Kibana, Logstash를 활용한 Bigdata processing과 visualization을 설명하겠습니다. 블로그 메인에도 있고 전체적인 포스팅의 분포를 보시면 알 수 있듯이 저는 Bigdata와 DataScience에 관심이 많습니다. 그래서 관련 공부도 많이 하고 있죠. 상당히 힘듭니다...ㅠㅠ 사실 작년 초부터 카카오 인재영입을 SNS로 팔로우하며 정보를 모으고 있던 와중 카카오 데이터 사이언티스트/플랫폼 개발자 채용 공고를 보았습니다. (취직을위해 알아봤다기보단 뭐가 필요한지 알기 위해서 입니다.) 해당 공고에서 요구했던 사항은 통계 지식, python등 많이 있었고 그 중에도 elasticsearch가 있었습니다. 물론 그때..
[AI Rush] Naver AI Rush 2021 Round 1 / 2 후기
[AI Rush] Naver AI Rush 2021 Round 1 / 2 후기
2021.07.07AI Rush 2021 지난 5얼 18일부터 6월 4일까지 AI Rush 2021 라운드 1이 진행되었습니다. 시험기간이 겹치지 않아서 많은 시간을 투자할 수 있었습니다. 우선 기본적으로 기밀 유지 서약을 했기 때문에 자세한 내용을 구체적으로 설명드리기는 어려운 점을 미리 알려드립니다. 우선 대회의 진행은 정해진 경로를 통해 접근이 가능한 깃허브 리포지토리와 네이버 자체의 NSML 플랫폼을 통해 진행되었습니다. 대회 진행은 네이버 AI lab의 전폭적인 지원을 통해 진행되었습니다. Naver의 Tesla V100 그래픽 카드를 인당 4장 정도까지 지원해주었습니다. (더 지원해줬을 수도 있지만 제 기술부족으로 4장까지만 동시에 진행해본 것 같습니다.) 전체적인 방식은 코드를 작성하여 네이버 서버로 보내면 ..
[Data Structure] BFS (너비 우선 탐색)
[Data Structure] BFS (너비 우선 탐색)
2021.06.25Bredth-First-Search (너비 우선 탐색)란? BFS의 원리는 간단하게 말하면 퍼지는 물결파 이다. 잔잔한 호수에 돌을 던져 생기는 물결파를 떠올려 보자. 동그란 원형의 파원을 일으키며 퍼져나간다. 이렇게 동일한 거리의 지점들은 동시에 탐색을 하는 방법이다. 핵심은 1번의 탐색 루틴에서 하나의 level에 있는 모든 정점을 탐색한다는 것이다. 저번 DFS처럼 BFS방식을 그래프를 통해 설명해보겠다. 앞서 DFS에서 사용한 그래프와 동일한 형태의 그래프다. DFS와 마찬가지로 1번 정점부터 탐색을 시작해보자. 1번 정점을 탐색 완료했다면 현재 정점의 인접하는 정점들을 확인한다. BFS는 다음에 탐색할 위치를 인접한 모든 정점으로 선택한다. 따라서 다음 탐색은 2, 3번 정점으로 이동한다. 원리..
[Data Structure] DFS (깊이 우선 탐색)
[Data Structure] DFS (깊이 우선 탐색)
2021.06.24그래프 탐색 (Graph Search) 앞서서 그래프를 배웠다. 트리에 트리를 탐색하는 트리 순회가 있었다면, 그래프는 그래프 탐색이 존재한다. 그래프 탐색 방법에는 DFS와 BFS가 존재한다. 이번 글에서는 DFS에 대해서 이야기할 예정이다. 그래프 탐색을 배우는 이유는 그래프의 이동 경로나 생김새를 파악하기 위해서 사용한다. 탐색을 통해서 그래프에 사이클이 몇개고, 전체적인 묶음이 몇개인지 알 수 있기때문이다. DFS VS BFS DFS는 깊이 우선 탐색(Depth-First-Search)의 약자이고 BFS는 너비 우선 탐색(Bredth- First-Search)의 약자이다. 이름에 탐색 방식이 들어가 있다. DFS는 깊게 들어가는 것을 우선으로 하는 탐색방식이고 BFS는 넓은 분포, 즉 한 leve..
[Data Structure] Graph (그래프)
[Data Structure] Graph (그래프)
2021.06.24Graph (그래프) 그래프란 정점과 간선으로 구성된 자료구조이다. 일반적으로 G = (V,E)로 나타내는데, V는 vertices로 정점을 말하고, E는 edges인 간선을 의미한다. |V|는 정점의 개수를 의미하고 |E|는 간선의 개수를 의미한다. 그래프는 간선의 종류에 따라 2가지로 구분할 수 있다. 그리고 그 종류에서도 그래프의 특징으로 종류를 더 세분화할 수 있다. 그래프의 종류 그래프는 간선의 종류로 크게 2가지로 나눠지게 된다. 무향 그래프 (undirected graph) 유향 그래프 (directed graph) 명칭에서 보이듯이 그래프의 간선에 방향성이 있고 없고의 차이를 보여준다. 무향 그래프 (undirected graph) 그래프의 이름 그대로 간선에 방향성이 존재하지 않는다. 그..
[Data Structure] Binary Search Tree (이진 탐색 트리)
[Data Structure] Binary Search Tree (이진 탐색 트리)
2021.06.24Binary Search Tree (이진 탐색 트리) 이진 탐색 트리는 앞서서 배운 트리의 확장적인 형태라고 보면 편하다. 일반적인 이진 트리는 탐색의 기준이 없어서 특정 데이터를 찾으려면 모든 노드를 탐색해야한다. 하지만 이진 탐색 트리에서는 평균적으로 훨씬 빠른 시간에 탐색이 가능해진다. Binary Search (이진 탐색) 우선 이진 탐색과 이진 탐색 트리를 구분해야 한다. 전자는 알고리즘의 일종이고 후자는 자료구조의 일종이다. 이진 탐색 트리의 원리를 알기 이전에 이진탐색의 원리를 알아야 한다. 이진 탐색은 간단하게 말하면 탐색 범위를 절반으로 줄여나가는 탐색이다. 바로 이전 포스트에서 말한 search table과 같다. 굳이 자세한 설명을 더 하진 않겠다. 이런 이진 탐색을 트리 형태로 구조..
[Data Structure] Hash (해시)
[Data Structure] Hash (해시)
2021.06.24Dictionary (딕셔너리) 딕셔너리는 사실 C++보다는 파이썬에서 더 익숙할 것이라 생각된다. 실제로 딕셔너리라고 아예 명확하게 말을 하기도 하니까... 자료구조에서 딕셔너리는 key와 value를 함께 저장하는 entry 저장 자료구조이다. 대신 key의 중복을 허용한다. 시간 복잡도 딕셔너리의 시간복잡도는 딕셔너리를 리스트 구현을 기준으로 얘기를 해보겠다. 딕셔너리의 ADT는 우선적으로 put, find, erase정도각 대표적이다. put 함수는 리스트에서 바로 맨 뒤나 맨 앞에 저장하는 방식을 활용한다. 당연히 이 함수는 \(O(1)\)의 시간복잡도를 갖는다. 보통 doubly-linked list나 배열로 구현을 한다. find와 erase는 doubly linked list를 기준으로 우..
[Data Structure] Priority Queue (우선순위 큐)
[Data Structure] Priority Queue (우선순위 큐)
2021.06.24Priority Queue (우선순위 큐) 이전에 큐에 대해서 배운 적이 있다. 이렇게 일반적인 큐를 FIFO Queue라고 한다. FIFO원리를 갖고 있는 큐이기 때문이다. 이번 시간에는 다른 성질을 갖는 우선순위 큐에 대해서 이야기해보겠다. 우선순위 큐는 이름에 특징이 잘 나와있는데, 큐의 pop 연산수행을 진행할 때, 프로그래머가 정해놓은 우선순위에 맞춰서 제거 연산을 진행한다. 일반적으로는 우선순위 기준은 2가지인데, 크기가 큰 값을 우선순위로 두는 Max-Priority-Queue 크키가 작은 값을 우선순위로 두는 Min-Priority-Queue 가 있다. 우선순위 큐와 큐는 잘 알아둘 필요가 있는 이유가 있다. 이전 글에서 트리의 탐색 방식은 향후 그래프 탐색방법인 DFS와 일맥상통한다고 했..
[Data Structure] Binary Tree (이진트리) & Tree 구현
[Data Structure] Binary Tree (이진트리) & Tree 구현
2021.06.24Binary Tree (이진트리) 이진트리 개념 이진트리는 우리가 이전에 배운 트리의 특수한 형태이다. 일반 트리가 자식 수에 제한이 없다면, 이진트리는 1부모에 최대 2개의 자식 노드가 존재한다. 보통 왼쪽 노드, 오른쪽 노드라고 부르며 왼쪽 노드가 오른쪽 노드보다 우선하는 성질을 가진다. 일반 트리에서 설명하지 않았지만 트리는 자식간에 순서가 있는 ordered pair이다. 이진트리의 쓰임새는 아래와 같은 것들이 있다. 수식의 표현 트리 수식의 계산 트리 결정트리 우선 결정트리부터 설명해보면 internal node는 결정요소를 갖고있고 external node는 해당 결정요소에대한 결정 값들을 갖고있다. 후에 서술할 중위순회를 이용하면 수식을 표현할 수 있다. 완전 이진트리의 성질 완전 이진트리는..
[Data Structure] Tree (트리)
[Data Structure] Tree (트리)
2021.06.24Tree (트리) 트리 개념 트리는 non linear data structure이다. 앞서서 배운 리스트, 배열, 벡터는 모두 linear data structure이고 이런 선형 자료구조들은 원소들 간에 전/후 관계가 있다. 그러나 non linear data structure, 즉 비선형 자료구조는 원소들 간에 상/하 관계를 가지고 있다. 이런 것을 계층적 관계라고한다. 일반 트리 (General Tree) 트리는 보통 general tree와 binary tree로 구분하는데, general tree는 자식노드의 수가 제한이 없는 트리를 말한다. binary tree는 말 그대로 이진트리로, 자식 노드가 딱 2개만 제한이 되는 트리이다. 굳이 말하면 이진트리도 일반트리에 포함되어있다. 트리는 노드..