Developer with Cat
© 2021. All rights reserved.
#[🌎elasticsearch] Elasticsearch 설치하기 (Ubuntu 20.04)
Elasticsearch 가이드북 ✈
Elasticsearch 홈페이지 가기 ✈
다음과 같은 사항이 필요합니다.
원활한 실행을 위해 필요하며 필수는 아닙니다.
ElasticSearch는 자바로 만들어졌기 때문에 JDK 가 설치되어야 하지만 ElasticSearch를 설치하면서 JDK 가 같이 깔리게 됩니다. 자바 문제가 발생한다면 지원하는 JDK를 다시 깔고 JAVA_HOME 변수를 다시 설정해주세요. Elasticsearch JDK 버전 확인하기 ✈
설치과정은 ElasticSearch 7.x 버전을 기준으로 합니다. 버전이 다르면 수행이 다를 수 있습니다.
$ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo apt-key add -
$ echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt update
$ sudo apt install elasticsearch
두둔
$ sudo nano /etc/elasticsearch/elasticsearch.yml 내려 내려 내려 내려 (다음 과 같은 영역을 찾아라는 뜻) 그리고 바꿔 (: 이후에 내용을 원하는 값을 설정합니다.)
$ sudo nano /etc/elasticsearch/elasticsearch.yml
# ———————————- Network ———————————– # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: localhost . . .
주의 yml 파일은 포맷이 매우 중요합니다 ‘ : ‘ 다음에 반드시 뛰어쓰기를 해야합니다.
$ sudo systemctl start elasticsearch
$ service elasticsearch status
$ sudo systemctl enable elasticsearch
고생하셨습니다!!
기본적인 사용법에 대해서는 다음 포스트에서 ~
#[🌎elasticsearch] Elasticsearch이란?
네이버 및 구글에서 원하는 문서를 검색하면 잘 나옵니다. 어떻게 이런게 가능할까요 ???
전문검색(Full-Text-Search 이하 FTS)은 검색 단어를 입력하면 해당하는 문서와 “관련 깊은” 자료를 보여주게 됩니다.
단순한 문자열 일치 연산으로는 네이버나 구글의 검색과 같은 결과를 보여주기는 어렵습니다. 따라서 FTS 에서는 모든 문서의 단어와 문장을 검색하여 점수를 매기게됩니다. 이 과정에서는 머신러닝과 같은 자연어 처리 과정이 포함되게 됩니다.
당연히 모든 문서의 단어와 문장을 검색하고 점수를 매긴 후 점수 순서대로 보여주기 때문에 기존의 문자열 일치 연산보다 복잡한 연산을 하게 됩니다.
다시 말하자면 전문검색은 우리가 원하는 문서와 관련깊은 문서들을 보여주는 기술이라 생각하시면 됩니다.
FTS 기능은 분석 엔진으로 제공될 수도 있고 DBMS에 기능이 탑재될 수도 있습니다.
Lucene, Solr, ElasticSearch 등 다양한 분석 엔진이 있고 Mongodb, Postgresql, AzureSQLDatabase 등 다양한 DBMS에서도 지원하고 있으니 더 검색해보는 걸 추천드립니다.
그 중에 ElasticSearch 를 소개하려고 합니다.
ElasticSearch 는 FTS 를 지원하는 오픈소스 검색 및 분석 엔진입니다. Apache Lucene을 기반으로 구축되었으며 다음과 같은 사항들을 강조합니다.
ElasticSearch 는 또한 다음 언어를 위해서 클라이언트가 공식적으로 지원합니다.
프로젝트를 진행하면서 Full Text Search 기능이 필요하여 찾다가 ElasticSearch 를 찾게 되었고 ElasticSearch 에 흥미를 가지게 되었네요.
저보다 정리를 잘한 가이드북이 있으니 꼭 보시길 추천드립니다.
다음 시간에는 ElasticSearch 를 Ubuntu에 설치하는 방법으로 찾아뵙겠습니다.
#[프로그래머스✈][연습문제] 3 x N 타일링 풀이
유명한 DP 문제 2 x N 타일링의 업그레이드 버전
이젠 세로의 길이가 2가 아니라 3이다!!
DP 공식을 잘 유도하면 쉽게 풀 수 있다!!
자세한 문제 설명과 제한 사항은 프로그래머스 홈페이지 참고. 문제풀러가기
dp 공식을 유도해야하는데 순서대로 잘 그려보면 알 수 있다. 일단 n이 홀수면 타일링을 할 수 없으므로 답은 0 이다.
그려보면
n 이 4일 때를 생각해보자.
(ㅣ = ㅣ 이런식으로 가운데 가로 타일을 놓는 것)
n 이 6일 때를 생각해보자.
(3X4 에는 3X2와 3X2로 만들 수 있는 모든 경우의 수가 포함되어 있다.)
왜냐하면 3X4 타일링의 방법의 수 * 3X2 타일링의 방법의 수를 할 때 오른쪽 4칸을 포함하는 오직 3X4만이 만들 수 있는 2가지 경우의 수는 들어가있지 않기 때문이다.
n 이 8 일 때는
감이 오는가?? 3XN 을 타일링 할 때는
다시 말하면
프로그래머스 사이트가 아닌, visual studio 에서 코드를 작성해서 그대로 가져온 것 입니다. 일부 테스트 코드가 존재합니다.
#include <string> #include <vector> using namespace std; //풀이 //ex n = 8 //더해야할 것 //answer(6) * answer(2) //answer(2) * 2 (n 이 6일때만 존재하는 2개의 경우) //answer(4) * 2 (n 이 4일때만 존재하는 2개의 경우) //dp1의 인덱스는0 부터 시작되며 n이 2씩 증가할 때 마다의 값이 저장됨 n이 2,4,6,8 ....일 때 //dp2는 인덱스 0 부터 인덱스 n - 2 까지의 각각의 값 *2 의 합이 저장. long long dp1[4096]; long long dp2[4096]; int solution(int n); int main() { solution(16); } int solution(int n) { if (n % 2 == 1) return 0; dp1[0] = 3; dp1[1] = 11; dp2[1] = 6; for (int i = 2; i < n / 2; i++) { dp1[i] = (dp1[i - 1] * 3 + dp2[i - 1] + 2) % 1000000007; dp2[i] = (dp1[i - 1] * 2 + dp2[i - 1]) % 1000000007; } return dp1[n / 2 - 1]; }
디피는 어렵다. 단순한 문제 일 수록 더욱 어렵다.
생각을 많이하고 시간을 많이 소요하는 문제들도 생각보다 많다.
화이팅!
안녕하세요 만냥이의 하루 입니다.
저를 포함해서 많은 개발자 분들이 깃허브 블로그를 만드는데 지킬을 사용하고 계시는데 오늘은 그 방법에 대해서 글을 써보려고 합니다.
🚗지킬 사이트로 가보기 !!
지킬은 마크다운, 리퀴드, HTML & CSS 를 사용할 수 있는 정적인 웹페이지를 배포 할 수 있도록 도와주는 프레임워크라고 생각하시면 됩니다.
루비 언어로 만들어진 지킬은 복잡한 데이터베이스나 업데이트 구조가 필요 없고 이미 다른 누군가가 만들어 놓은 지킬 테마를 이용하면 자신만의 블로그를 배포할 수 있습니다.
어렵다구요?? 사용하면서 알아갑시다!!
테마를 고르실 때에는 원하는 디자인뿐만 아니라 그리고 원하는 기능의 제공 여부(카테고리, 태그 기능 등)를 체크하세요!! 🚗지킬 top 10 테마 추천!!🚗
저는 두 번째 사이트인 jekyllthemes.org 를 기준으로 말씀 드리겠습니다.
원하는 테마를 고른 후 누르시면 다음과 같은 페이지가 나옵니다.
저는 지금 제 블로그에서도 사용중이고 기본적인 기능에 충실한 Lanyon 테마를 선택했습니다. 테마를 선택하는 3가지 사이트 모두 테마를 선택하게 되면 깃허브로 이어지는 버튼이 있습니다. 위의 경우는 Hompage라고 되어 있군요. 클릭해줍니다.
Lanyon 테마는 자체적으로 카테고리, 태그 기능을 제공하지 않습니다. 후에 추가 설정 및 코드를 작성해야만 해당 기능을 사용하실 수 있습니다.
깃허브 페이지가 나오면 아래 README 문서를 잘 읽어보고 자신이 원하는 기능과 디자인에 적합한 테마인지 한번 더 훑어봅시다 !!
그리고 오른쪽 중간에 보면 fork 라는 버튼이 있습니다.(로그인 필요)
Fork 버튼을 누르게 되면 로그인 된 내 계정의 Repository 로 해당 깃허브 소스가 모두 복사가 됩니다.
(사진의 경우 제 깃허브에서 가져온 것이라 Repository 이름이 tocktock.github.io 보입니다.)
Fork를 하게 되면 자신의 계정에 Repository가 생성 됩니다. 위 사진에서 ”/” 왼쪽에 있는 것이 자신의 계정 닉네임이고 오른쪽이 Repository 이름 입니다.
Repository 는 자신이 Fork 한 Repository 의 이름으로 생성됩니다. 깃허브 블로그를 만들기 위해서는 이 Repository 를 (자신의 계정 닉네임).github.io 라는 형식으로 바꾸어 주어야 합니다.
화면의 중앙 즈음 보면 Settings 라는 태그가 보입니다. (누르고 들어가라는 뜻 입니다..)
Setting 페이지의 Repository name 을 (자신의 계정 닉네임).github.io 로 바꾸어줍니다. 🛑자신의 계정 닉네임을 반드시 소문자로 해주세요🛑
새로고침 하고 내리다 보면 Github Page 라는 문구가 보입니다.
위와 같이 Your site published at 어쩌구 저쩌구 라고 되어있으면 성공입니다.
깃허브 페이지 자체는 반드시 (자신의 계정 닉네임).github.io 일 필요는 없습니다. 원하면 바꿀 수 있습니다
해당 하는 Repository 는 깃허브 자체에서 파일을 작성하고 커밋해도 되지만 플러그인, 빌드 과정에서 필요한 소스가 설치가 안되어있는 경우도 있기도 하고 개별환경의 편의성을 위해서 이 Repository 를 자신의 컴퓨터에 Clone 해줍니다.
GitHub Clone 방법은 Github Desktop을 사용하는 방법과 커맨드 창에서 git clone “repository 주소” 를 입력하는 방법이 있습니다.
vscode를 기준으로
해당하는 폴더를 vscode 로 열고 좌측 상단의 Terminal 탭을 눌러 New Terminal 을 클릭해줍니다.
지킬과 번들러 gems를 설치하려고 합니다. 터미널에서 다음을 입력합니다.
gem install jekyll bundler
jekyll build
jekyll serve
모든 과정이 순탄하게 진행되었다면 http://localhost:4000 에서 빌드된 자신의 사이트를 볼 수 있다.
이 상태로 GitHub 로 push 하게 되면 깃허브 페이지에서 자신의 블로그를 볼 수 있다.
_posts 아래의 폴더에 다음과 같은 형식의 파일을 만든다. (년도)-(월)-(일)-페이지의주소가될곳.md
예시 : 2020-10-03-this-is-my-url.md
해당하는 파일에 아래와 같은 글을 적습니다.
터미널에서 jekyll serve 를 입력하여 로컬에서 정상적으로 작동하는지 확인합니다.
이미 jekyll serve 가 실해중이라면 저장하는 것만으로 해당 사이트에 반영됩니다.
정상적으로 포스트가 등록 되었다면 GitHub에 push를 해줍니다!.
와 첫글이다!!
원치 않은 오류가 발생하여 정상적으로 작동 안한다면 google 에 빌드 실패이유를 검색하시거나 파일명이 제대로 작성되었는지 확인해주세요!
지킬은 잘 만들어지고 사용하기 간편한 프레임워크이지만 자신의 블로그를 자신의 손맛대로 조금씩 변형하려면 조금 더 자세하게 알 필요가 있습니다.
다음 시간에는 config.yml 파일을 건드리는 것과 간단하게 카테고리를 생성하는 법을 알아 보도록 하겠습니다.
고생하셨습니다. ❤❤❤❤
#[프로그래머스✈][2019 kakao 겨울 인턴쉽] 징검다리 건너기 해설
“우리 돌다리는 약해유..”
니니즈 친구들이 라이언 선생님과 함께 가을 소풍을 가는 중에 징검다리를 만났다. 이 징검다리의 돌은 매우 연약하여 여러번 밟으면 부서지고 더이상 사용할 수 없다. 돌마다 내구도가 주어질 때 건널 수 있는 니니즈들의 최대 인원 수를 구하여라.
우선순위 큐를 잊어버릴 꺼 같아서 사용한다. 우선순위 큐에는 내구도가 가장 낮은 데이터를 top에 저장한다.
우선순위 큐에 대한 자세한 정보는 다음을 참고하라 우선순위큐 설명
top에 저장된 돌의 내구도 만큼 니니즈들이 건너갔다고 가정하고, 오른쪽과 왼쪽의 사용 가능한 돌의 거리를 계산하여 최대 건널 수 있는 거리를 넘어가면 더이상 건너지 못한다고 생각한다.
#include <string> #include <vector> #include <queue> using namespace std; struct STONE { int idx; int count; }; struct COMP { bool operator()(STONE& a, STONE& b) { return a.count > b.count; } }; priority_queue<STONE, deque<STONE>, COMP >myPQ; int solution(vector<int> stones, int k); int main() { vector<int> stones = { 5,5,5,5,200000000 }; solution(stones, 4); } int solution(vector<int> stones, int k) { for (int i = 0; i < stones.size(); i++) myPQ.push({ i, stones[i] }); int jumpCount = 0; bool donotJump = false; while (!myPQ.empty() && !donotJump) { STONE minStone = myPQ.top(); jumpCount = minStone.count; while (myPQ.top().count == jumpCount) { STONE tempStone = myPQ.top(); int rt = tempStone.idx + 1; int lt = tempStone.idx - 1; while (rt < stones.size() && stones[rt] < jumpCount) rt++; while (lt >= 0 && stones[lt] < jumpCount) lt--; if (rt - lt > k) { donotJump = true; break; } myPQ.pop(); if (myPQ.empty()) break; } } return jumpCount; }
이제 C++의 STL 없이는 알고리즘 코딩을 할 수 없을 것 같다.