목록전체 글 (30)
JinHee's Board
개요ElasticSearch 에 연도별로 나눠놓은 인덱스들에 대하여 특정 Alias 로 지정 후 검색할 때 검색 결과 정렬 순서가 적절하지 않은 문제가 발생하여해당 문제 해결 후 관련 내용을 기록하고자 한다. 참고한 링크 엘라스틱서치 데이터 다루기 part 3 검색3. 검색 API이번 포스트에서는 주요 검색 쿼리, 쿼리 문맥과 필터 문맥, 검색 결과 정렬, 페이지네이션에 대해 작성한다.3.1 검색 대상 지정GET [인덱스 이름]/_searchPOST [인덱스 이름]/_searchGET _searchPOSsaltfn.tistory.com Understanding "Query Then Fetch" vs "DFS Query Then Fetch"In our last article on starts-with ..
Nifi 에서는 내부 zookeeper 설정을 통해 클러스터링을 설정할 수 있습니다.그러나 클러스터링 설정 시 해당 Nifi 노드에 보안 설정 (https)이 되어 있는 경우에는 각 노드 간 통신이 막혀 클러스터 설정이 되지 않습니다.여기서는 해당 상태에서 클러스터링 설정하는 방법에 대해 공유하려 합니다.각 서버마다 키를 생성하고 인증서 추출 및 등록하는 과정이 있어 다소 복잡합니다.(nifi 1.28.1 버전, 서버 3대에 대한 클러스터 설정 기준) 0. 사전준비nifi 1.28.1 → https://www.apache.org/dyn/closer.lua?path=/nifi/1.28.1/nifi-1.28.1-bin.zipnifi-toolkit 1.28.1 → https://www.apache.org/dy..
개요 Nifi에서 특정 기능을 활용해야 하는 일이 생겼으나 해당 기능은 Nifi에서 Processor로 제공하지 않는것 같다 Custom Processor를 직접 만들어 해당 기능을 구현하고 내용을 기록하고자 한다 참고한 링크 GitHub - apache/nifi: Apache NiFi Apache NiFi. Contribute to apache/nifi development by creating an account on GitHub. github.com Nifi Processor 프로젝트 생성 및 배포 (feat. Maven) Maven Archetype으로 NiFi Processor 프로젝트 생성하기 Maven Archetype은 Maven 프로젝트 템플릿을 생성하는 tookit입니다. 이 툴킷으로 ..
Project - Socket과 ElasticSearch 를 활용한 채팅 사이트 개발일지 [3] 구현 결과 로그인시 현재 참여중인 채팅방 목록 표시 사용자간의 채팅 구현 채팅방 목록 표시 Elastic Index 생성 ( 채팅방 목록 ) 채팅방 구분에 필요한 키와 그 외의 데이터를 담을 인덱스를 생성한다. 인덱스 생성에 필요한 매핑을 설정한다. ( 필드 타입 지정 등.. ) PUT chat_room { "mappings" : { "properties" : { "room_date" : { "type" : "date", "ignore_malformed" : true }, "room_id" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword" ..
Project - Socket과 ElasticSearch 를 활용한 채팅 사이트 개발일지 [2] 구현 결과 메인 화면 및 로그인 , 회원 가입 기능 구현 프로젝트 개발 ( Front ) React App(Front) 에 Router를 적용하는 작업 수행 - React Router 설치 npm i react-router-dom@5.3.0 - App.js 파일 수정 import React from 'react'; import io from "socket.io-client"; import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom"; import Login from "./routes/Login" function App() {..
Project - Socket과 ElasticSearch 를 활용한 채팅 사이트 개발일지 [1] 구현 결과 메인 화면 및 로그인 , 회원 가입 기능 구현 채팅방 하나를 임시로 만들고 두 사용자 간의 채팅 구현 (우선 Node로 구현 예정) React 프로젝트와 Node 프로젝트 연동 기존의 Node 프로젝트 하나에 Back단과 Front단이 모두 하나의 프로젝트에 있었지만 이번 프로젝트에서 React 프로젝트를 생성하면서, Back단과 Front단을 분리했다. 프로젝트 개발 - React 프로젝트 생성 및 NPM 설치 ( Front ) npx create-react-app eschat-react-project(프로젝트명) npm install socket.io npm install socket.io-cl..
개요 교육받는 기간에 파이널 프로젝트로 제출했던 그룹웨어 프로젝트에서 개발한 채팅 기능을 좀더 정리하여 기록한다. 프로젝트 변경 목표 - Node.js 로 개발된 채팅기능을 React.js로 새로 개발한다. - Oracle DB와 연동하여 활용했던 채팅기능을 ElasticSearch로 변경하여 적용한다. - 개발완료된 부분은 git command로 항상 commit 한다. 프로젝트 생성 및 준비 NPM 설치 npm init npm install express npm install http npm install fs npm install elasticsearch npm install socket.io npm install app-root-path GIT remote git init git add * git..
문제 Merge Two Sorted Lists - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이과정 public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } - 문제에서 주어진 ListNode 클래스는 단방향..
문제 Word Subsets - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이과정 - words1의 각 문자열에서 words2의 각 문자열들을 모두 포함하고 있는 문자열을 찾는 문제 - words2에서 동일한 문자가 연속으로 나온 경우 ('oo', 'pp' 등..) 연속된 형태의 문자열을 포함해야 한다. - 문제에서 조건으로 주어진 문자열은 모두 '소문자' 라 한다. 결과 import java.util.ArrayList; import java.util.Li..
문제 Evaluate the Bracket Pairs of a String - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이과정 - s 문자열 에 있는 괄호로 묶인 문자열들을 knowledge 에 있는 문자열로 대체하는 문제 a. 문자열을 하나씩 보면서 '(' 가 나온 이후의 문자열은 따로 기억한다 b. ')' 가 나오면 기억한 문자를 보고 knowledge에 그 문자가 있는지 비교한다. c. 있는 경우 해당 문자로 대체하고 없는 경우는 '?'로 대체한다...
개요 Apache Spark와 OpenSearch 자바로 연동시 발생하는 문제를 해결하는 과정을 기록하고자 한다. 문제확인 Opensearch는 엘라스틱에서 서비스하는 Elasticsearch 오픈소스를 포크(코드를 복사)하여 만든 AWS판 ElasticSearch 다. Spark와 Elasticsearch를 Java를 통해 연동하는 과정에 있어 사용하던 Elasticsearch를 Opensearch로 교체해야 할 일이 생겨 교체했는데 이후 잘만 실행되었던 Spark가 실행되지 않는 문제가 생겼다. 오류메시지 Elasticsearch를 연동하고 있었을때는 오류가 없었으나 Opensearch로 연동한 다음 이와 같은 오류가 발생했다. 눈여겨볼점은 (No search type for [scan]) 이라는 메..
개요 대용량의 CSV 파일을 Elasticsearch에 적재하고자 할때 Logstash를 사용하여 적재작업을 했는데 이때 CSV 파일의 데이터를 일부 변환하는 Logstash의 ruby플러그인에 사용되는 키워드들을 기록한다. 준비 - ELK Stack (Elasticsearch, Logstash, Kibana) 설치 - 적재할 데이터 (csv) 사용된 데이터 링크 한국교통안전공단_사업용차량 Trip단위 위험운전운행데이터(샘플)_20191227 한국교통안전공단에서 수집관리하고 있는 트립단위의 위험운전행동데이터 샘플입니다. (운행일자, 운수회사코드 등) 운행기록과 관련된 데이터는 대용량데이터로 샘플데이터만 업로드 www.data.go.kr 과정 Logstash 정상 작동 테스트 1. Elasticsearch..
개요 서버에서 작업을 할때 해당 포트에 접근이 가능한지 확인할 일이 생겼다. 목적지 서버에서 포트를 열고 그 포트에 접근이 가능한지 확인하는 과정을 기록한다. 원리 - 목적지 서버(우측)에서 ServerSocket을 사용하여 원하는 Port 번호로 오픈한다. - 출발지(좌측)에서 Socket을 사용하여 목적지 서버의 ip와 Port번호를 통해 목적지 서버로 접근 시도 한다. - 접근 가능 여부를 통해 방화벽에서 해당 Port번호를 허용했거나 허용하지 않았는지 확인 한다. 과정 1. 목적지 서버에서 포트 오픈 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class MultiPortRun { p..
개요 OpenApi를 사용하여 데이터들을 추출하고 추출한 데이터를 파싱 및 데이터베이스에 삽입해야 할 일이 생겼다. Nifi에서 OpenApi를 어떤식으로 사용해야 데이터를 추출할수 있는지 등을 알아보고 그 내용들을 기록하고자 한다. 참고한 링크 Apache Nifi HTTP/HTTPS 연결. SSL 연결하기 | Apache Nifi로 작업을 하다보면 웹 사이트에서 컨텐츠를 가져 오거나 다양한 REST API를 통해서 JSON, XML, TXT 형태로 데이터를 가져와야 하는 일이 있다. 이러한 방법에 대해서 알아 보며 brunch.co.kr Nifi에서 OpenApi를 활용하는 방법들을 설명한 위 링크를 참고했다. Nifi에서 Api 호출하여 데이터 불러오기 - 사전준비 호출하고자 하는 OpenApi의 ..
개요 nifi를 서버에 올려서 사용할 때 http://아이피:포트/nifi 만으로 접속이 가능한데 이 접속을 조금더 까다롭게 하기 위해 nginx를 사용하여 접속링크를 바꾸는 방법을 기록한다. 사전준비 - NGINX 설치 [CentOS 7] CentOS 7 - NGINX 설치 방법 CentOS 7 버전에 Nginx 설치 방법 정리 요약 yum 외부 저장소 추가 yum install 방화벽 포트 개방 nginx 포트 설정 nginx 데몬 실행 실행 1. yum 외부 저장소 추가 yum 저장소에는 nginx가 없기 때문에 외부 저장.. holjjack.tistory.com 더보기 yum 저장소에는 nginx가 없으므로 직접 추가 필요 # cd etc/yum.repos.d/ # vi nginx.repo ngi..
*정보처리기사 시험이 바뀌기 전에 기출문제로 나왔던 알고리즘 문제를 푸는 글 입니다. 따라서 현재 바뀐 정보처리기사 시험에는 나오는지 안나오는지 알수 없습니다. [문제] 5개의 숫자를 배열에 저장하고 저장된 숫자를 오름차순으로 정렬되도록 구현하시오. 정렬방식은 버블정렬 입니다. [풀기] 버블정렬 : 첫번째 자료와 두번째 자료를 비교하여 작은 값이 앞으로 위치하도록 정렬한 다음, 두번째 자료와 세번째 자료, 세번째 자료와 네번째 자료.. 이와 같은 방식으로 정렬하는 것 버블정렬은 뒤에서부터 정렬된다. class bubbleClass{ public void sortArray(int[] paramArray) { int temp; // 값 정렬을위한 임시변수 for(int i = 1; i < paramArray..
11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net [풀기] 조건1. 3개의 기둥이 있고 하나의 기둥에 원판이 큰 순서대로 아래부터 깔려있다. 조건2. 첫번째 기둥에서 세번째 기둥까지 원판을 모두 옮겨야 하고 큰 원판이 작은원판 위에 올라갈 수 없다. 조건3. 원판은 한번에 한개씩만 이동한다. 처음에는 Stack을 사용하여 Stack의 push() pop()을 이용해 풀어보려 했지만 원판을 옮기는 회수가 최소 값이어야 하고, 옮기는 과정을 모두 출력해야 한다는 것에서 막혔다. 책과 검색으로 찾아본 결과..
프로세스(Process) 프로그램을 실행시켜서 출력시키는 과정 운영체제로부터 시스템 자원을 할당받는 작업의 단위 멀티 프로세스 : 여러 프로그램들을 독립적으로 실행시켜 작업 쓰레드(Thread) 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업단위 프로세스가 발생했을 때 main 안의 실행문이 하나의 쓰레드 프로세스가 할당받은 자원을 이용하는 작업의 단위 멀티 쓰레드 : 하나의 프로세스 에서 여러 쓰레드를 실행시켜 작업 쓰레드의 생성 방법 Thread 클래스 상속 Runnable 인터페이스 상속 Thread와 Runnable 차이점 객체 생성 가능성의 여부에 차이가 있다. Thread는 클래스라 인스턴스화(객체화) 가 가능하다. Runnable는 인터페이스 이기 때문에 인스턴스화가 불가능하다. 쓰..
오버로딩 하나의 클래스 안에서 메소드 이름은 같지만 매개변수를 다르게 선언하여 메소드를 정의하는 것 오버로딩의 성립요건 메소드의 이름이 같아야 한다. 매개변수가 달라야 한다. 리턴(반환)타입은 관계없다. 오버로딩의 예시 더보기 class minExample { public void method() { System.out.println("아무것도 없는 메소드"); } public void method(int a) { System.out.println(a + "값이 매개변수인 메소드"); } public int method(int b, int c) { System.out.println("숫자를 반환한다."); return b + c; } } public class example{ public static v..
OOP(객체지향 프로그래밍)의 3가지 특징 캡슐화 데이터와 데이터를 처리하는 메소드의 형태를 하나의 단위로 묶는 것 캡슐화로 인해 클래스의 외부에서 클래스 멤버변수에게 직접 접근하여 값을 변경할수 없음 외부에서 접근할 수 있도록 정의된 getter, setter을 통해서만 접근이 가능하다. 캡슐화의 결과로 정보은닉이 가능해진다. (프로그램 변경시에 발생하는 오류를 줄일 수 있다.) 상속 상위 클래스의 멤버 메소드들을 하위 클래스가 사용할수 있는 특징 부모 클래스의 생성자, 초기화 블럭은 상속되지 않는다. 모든 클래스는 Object 클래스의 후손 클래스다. 반복되는 코드를 줄여서 개발시간을 줄일 수 있고 확장성이 용이해진다. 다형성 한번의 명령으로 여러 객체가 명령에 맞는 각각의 역할을 수행할수 있는 특징..
*정보처리기사 시험이 바뀌기 전에 기출문제로 나왔던 알고리즘 문제를 푸는 글 입니다. 따라서 현재 바뀐 정보처리기사 시험에는 나오는지 안나오는지 알수 없습니다. [문제] 10개의 숫자를 배열에 저장하고 저장된 숫자를 오름차순으로 정렬되도록 구현하시오. 정렬방식은 선택정렬 입니다. [풀기] 선택정렬 : 첫번째 숫자를 두번째 숫자부터 마지막 숫자까지 차례대로 비교하여 가장 작은 값은 첫번째로 놓고, 두번째 숫자를 세번재 숫자부터 다시 차례대로 비교하여 정렬하는 방식 8, 5, 2, 6, 4 -(8과 5비교)-> 5, 8, 2, 6, 4 -(5와 2 비교)-> 2, 8, 5, 6, 4 -(2와 6비교)-> 2, 8, 5, 6, 4 -(2와 4비교)-> 2, 8, 5, 6, 4 ....(비교반복) 마지막 숫자를..
*정보처리기사 시험이 바뀌기 전에 기출문제로 나왔던 알고리즘 문제를 푸는 글 입니다. 따라서 현재 바뀐 정보처리기사 시험에는 나오는지 안나오는지 알수 없습니다. [문제] 어떤 정수의 약수중 자신을 제외한 약수를 모두 합하면 자신과 같아지는 수가 있다. 예를 들어 6의 약수 1, 2, 3, 6 중 6을 제외한 1, 2, 3 을 더하면 6이 되어 자신과 같아진다. 4부터 1000까지 정수중 이러한 약수를 갖는 수를 찾아 출력하는 알고리즘을 완성하시오. [풀기] 문제에서 친절하게도 핵심 키워드를 알려준다. * 최대의 약수의미 설명 : 어떤수의 모든 약수중 자신을 제외하면 그 절반값이 최대의 약수가 된다. 예를들어 20의 모든 약수는 1, 2, 4, 5, 10, 20 인데 자신(20)을 제외하면 20의 절반값인..
2018년도 겨울에 개발했던 졸업작품 포트폴리오 동영상 입니다. Unity엔진과 C#을 활용하여 개발한 2D모바일 게임이고 구글 플레이 스토어에 업로드 되어 있습니다. 던전옆 약국 - Google Play 앱 몬스터가 하나도 없는 평화로운 던전과 그 옆에 세워진 망해가는 약국 돈을 빌려서 겨우겨우 약국을 운영해오던 '라임'에게 좋은소식과 나쁜소식이 들리게 되는데... - 던전옆 약국은 포션을 만� play.google.com
--2018.11.25년도에 작성되었던 글을 옮겨왔습니다-- 학교에서 보안수업을 듣는데 얼마전에 RSA 암호화를 파이썬으로 직접 코딩해보고 간단하게 예시를 통해 암호화 과정을 설명하라는 과제가 나왔습니다. RSA 암호화는 암호화 하는데 사용하는 키와 복호화하는데 사용하는 키가 서로 다른 비대칭 암호화 방식이라 합니다. 즉 공개키로 암호화한 문서는 공개키로 복호화 할 수 없고, 대신 개인키로만 복호화 가능한 암호화 방식입니다. 먼저 암호화 과정에서 쓰이는 알고리즘들을 정의해 보았습니다. def encrypt(pk, text): key, n = pk cipher = [(ord(char) ** key) % n for char in text] return cipher (암호화(encrypt) ..
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한 사항 scoville의 길이..
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 numbersreturn [6, 10, 2] 6210..
객체 작성해 놓은 클래스를 new연산자를 통해 heap 메모리 영역에 할당되는 것 클래스 생성하고자 하는 객체들에게 공통적으로 필요한 요소들을 추려내어(추상화) 정의한 것들 클래스를 만드는 과정: 추상화 캡슐화 데이터와 데이터를 처리하는 함수를 하나로 묶은 것 연관 있는 변수와 함수를 클래스로 묶는 작업 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것 객체가 보유하고 있는 속성들을 외부에서 직접 참조하여 변경되는 일이 발생하는 것을 방지하기 위해서 캡슐화의 이점 - 데이터가 변경되어도 다른 객체에 영향을주지 않아 독립성이 유지된다. - 클래스의 결합도가 낮아져 재사용이 용이하다. - 캡슐화된 클래스는 사용하기 쉽고 프로그램의 복잡성을 줄여준다. 상속 이미 정의된 상위 클래스의 모..
객체지향 언어란? - 사전적의미 : 객체 지향 프로그래밍에서 사용하는 언어로, 객체를 만들고, 조작하며 객체끼리의 관계를 통해 다수의 객체가 함께 수행될수 있게 하는 것 - 객체를 만들고 객체를 사용하는 프로그래밍 방법: 프로그램을 다수의 객체로 만들고, 이들의 상호자용을 통해 완성되어지는 방식 객체지향 언어의 특징 - 캡슐화 : 데이터와 코드의 형태를 외부로부터 알 수 없게 하고 데이터의 구조와 역할 기능을 하나의 캡슐형태로 만드는 방법 - 상속 : 상위 클래스의 모든 걸 하위 클래스가 이어 받는 것, 상위 클래스의 특징을 하위 클래스가 모두 물려받는다. - 다형성: 한 객체가 다른 여러 형태의 객체로 재구성 되는 것 / 동일 부모에서 물려받은 자식 객체지만 각각의 자식객체는 다르다. - 추상화 객체지..
Spring에서 사용하는 MVC 구조는 위와 같이 두가지 MODEL2 방식으로 처리되는 스프링 MVC(XML 설정) 1. 사용자의 Request 를 DispatcherServlet에서 처리한다. Web.xml파일에서 모든 Request를 DispatcherServlet이 받도록 처리하고 있다. 더보기 member org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/config/member-servlet.xml 1 member *.me 2, 3. HandlerMapping에서 @RequestMapping 어노테이션이 적용된 것을 기준으로 판단하여 알맞는 컨트롤러를 찾아 동작시킨다. 4. 개발자가 작성하는 클래스 C..
디자인 패턴 소프트웨어의 개발 방법을 공식화 한 것, 규칙, 구현자들 간의 커뮤니케이션 효율성을 높이는 기법 MVC(Model - View - Controller) 웹 어플리케이션을 개발할때 각각의 역할 별 작업이 가능하도록 분담하는 설계 패턴을 의미 MVC MODEL1, 2의 차이와 요청처리 과정 MODEL1 View와 데이터 처리과정이 모두 JSP파일 하나에서 실행됨 장점: 구조가 단순하여 익히기 쉽다. 단점: 화면 출력과 데이터 처리가 모두 한 페이지에 담겨있어 코드가 복잡해진다 MODEL2 사용자가 Controller를 조작하면 Controller는 Model을 통해서 테이터를 가져오고 그 정보를 바탕으로 View에서 시각정보로 처리한다 요청이 들어오면 요청에 대한 로직처리는 Model의 Serv..