기본 콘텐츠로 건너뛰기

2019의 게시물 표시

Elastic 설치 및 사용기 with CentOS7

Elastic 설치 및 사용기 with CentOS7 Elasticsearch 의 설치는 간단하다. Elastic 공식 홈페이지의 설치 설명이 있으므로 참고하도록 하자. # yum update # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-x86_64.rpm # sudo rpm --install elasticsearch-7.2.0-x86_64.rpm # service elasticsearch status # service elasticsearch start 위의 과정이 끝났다면 설치는 완료된것이다. 설치가 완료되면 localhost:9200 으로 접근이 되지만 타 서버에서 접근하여 사용하기 위해서는 설정이 필요하다. Elasticsearch에는 세 가지 구성 파일이 있다. elasticsearch.yml : Elasticsearch 구성을위한 jvm.options : Elasticsearch JVM 설정 구성 log4j2.properties : Elasticsearch 로깅 구성 중요하게 봐야 할 설정파일은  elasticsearch.yml 으로 서버 PORT 구성, Bind 할 IP, 클러스터 구성시 클러스터 노드 설정 등의 환경설정을 할수 있다. Single-node 로 Elasticsearch 구동시  elasticsearch.yml  에 Config 추가해주어야 한다. --------------------------------------------- network.host: { 서버 IP } discovery.type: single-node --------------------------------------------- 해당 작업 후 웹페이지에서 {서버IP}:9200 에 접속하게 되면 아래의 이미지처럼 접속이 되는걸 확인 할 수 있다. 출처 https://www.elas

Message Queue 란 무엇인가

Message Queue 란 무엇인가?? 메시지 지향 미들웨어(Meesage Oriented Middleware: MOM)은 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송수신을 의미 MOM을 구현한 시스템을 메시지 큐(MessageQueue: MQ)라 함 Producer(sender) 가 메시지를 큐에 전송하면 Consumer(receiver) 가 처리하는 방식으로, producer 와 consumer 에 message 프로세스가 추가되는 것이 특징 메시지 큐의 장점 비동기(Asynchronous): Queue에 넣기 때문에 나중에 처리할 수 있습니다. 비동조(Decoupling): 애츨리케이션과 분리할 수 있습니다. 탄력성(Resilience): 일부가 실패 시 전체에 영향을 받지 않습니다. 과잉(Redundancy): 실패할 경우 재실행 가능합니다. 보증(Guarantees): 작업이 처리된걸 확인할 수 있습니다. 확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다. 메시지 큐 종류 Apache ActiveMQ, Apache Kafka, Apache Qpid, Apache RocketMQ, Beanstalkd, Enduro/X, HTTPSQS, JBoss Messaging, JORAM, RabbitMQ, Sun Open Message Queue, and Tarantool 등 Apache ActiveMQ Java Message Service (JMS)를 사용하는 오픈소스 MQ Java, C, C ++, C #, Ruby, Perl, Python, PHP 등 다양한 크로스 언어 클라이언트 및 프로토콜 지원 Spring 지원으로 Spring xml config 메커니즘 이용 가능 JDBC 지원으로 DB 높은 퍼포먼스 가능 높은 퍼포먼스를 위해 클러스터링 구성 가능 Restful API 제공 단 모니터링 도구제공하지 않음

서버리스란 무엇인가?

서버리스란 무엇인가? 말 그대로 서버가 없는것이 아니라 인프라 엔지니어나 개발자가 관리하는 서버가 없다는 뜻으로 해석을 하면 편함 사용자는 클라우드 서비스 공급자가 제공한 주소로 요청을 전송 클라우드 서비스는 메시지를 기반으로 요청에 응답하는 데 사용할 패키지를 찾음 패키지가 선택되면 패키지를 실행할 도커 컨테이너로 로드한다 도커 컨테이너가 실행되고 요청이 처리 생성된 응답을 요청한 사용자에게 전송 클라우드 서버리스 서비스로는 BaaS(Backend as a Service) , FaaS(Function as a Service) 등이 있고 대표적으로 Firebase, AWS Lamda , Azure Functions, Google Cloud Functions 등이 있음 해당 서비스들은 도커 컨테이너가 실행되고 해당 함수 안에 정의된 프로세스를 완료한 시간(초) 만큼 과금이 부여됨 기존 IaaS 등 유휴 서버에 대해서 비용을 지불하는 과금을 서버리스는 유휴 서버에 대해 과금을 지불 하지 않고 실제 함수가 실행된 시간, 리소스 비용만 지불하는 과금 형태 서버리스의 장점 확장성 고가용성 자원의 효율성 비용 절감 관리 서버의 인력 무 지속적인 배포 가능 서버리스의 단점 컨테이너 로드의 대기 시간 ( 기존 아키텍쳐보다 시간이 걸림 ) 클라우드 서비스 업체의 제약조건 클라우드 서비스 업체의 종속성 어려운 디버깅 각 함수마다 배포를 실행 ( 공수가 많이듬 ) 장시간 실행되는 CPU를 많이 사용하는 작업 불가 실시간 처리에 적합하지 않음 빈번한 서버 함수 호출에 적합하지 않음 참고자료 https://github.com/PacktPublishing/Building-Serverless-Web-Applications https://www.xenonstack.com/blog/serverless-openfaas-java/ https://velopert.com/3543

Elastic Logstash 사용기

Elastic Logstash 실시간 파이프 라이닝 기능이있는 오픈 소스 데이터 수집 엔진 서로 다른 소스의 데이터를 동적으로 통합하고 원하는 대상으로 데이터를 정규화 할수 있음 다양한 입력, 필터 및 출력 플러그인을 통해 모든 유형의 이벤트를 보강하고 변환 할 수 있음 Elastic Kibana 와 연동하여 사용가능 서버 데이터의 로그수집 HTTP 통신을 통한 데이터수집 기존 NoSQL, Database 간 데이터 동기화 Kafka, RabbitMQ, AmazonSQS, ZeroMQ 등과 연동 가능한 유틸 Logstash SQL Import 맛보기 예전 시스템을 사용하여 5.4 버전을 사용 ( 현 7.3버전 : 2019/08/29 기준 ) Text 형태로 Data Import 하는 기본 형태 bin / logstash - e 'input { stdin { } } output { stdout {} }' 쿼리 있는 File을 실행하는 형태도 있음 bin / logstash -f ./mysqlImport.conf input { jdbc { jdbc_driver_library => "/mnt/logstash-2.3.2/lib/mysql-connector-java-5.1.34.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/Educations” jdbc_user => “유저” jdbc_password => “패스워드” statement => " SELECT * FROM checkout WHERE checkout_no > 5 ORDER BY checkout_no ASC "

ElasticSearch 7.2 맛보기

ElasticSearch 7.2 검색 서비스 > 검색시스템 > 검색엔진 ElasticSearch는 검색엔진에 속함 많은사용자들이 ELK (ElasticSearch, Logstash, Kibana) 라 부름 최소 3개 이상의 물리적 노드로 클러스터를 구축하는것이 좋음 역색인을 통한 검색 Apache Lucene 을 사용 트랜잭션과 롤백기능을 제공하지 않음 실시간 검색이 아닌 준 실시간 Elasticsearch 맛보기 Restful API를 사용하기 때문에 CRUD를 PUT(C),GET(R),POST(U,R),DELETE(D) 를 이용 Index : Database , Document : Table , Field : Column , ex) Type 은 7.0버전부터 없어짐 Shard(샤드) : 물리적인 노드 공간에 여러개의 파티션으로 나뉘어 구성, 파티션이 샤드 Index : 데이터 저장공간, 물리적 노드 하나에 논리적인 인덱스를 다수 생성가능, 생성시 소문자로만 구성 가능 Indices API : 인덱스관리 Document : 데이터가 저장되는 최소 단위, 다수의 Field로 구성 Field : 하나의 필드에 다수의 필드부여 가능 Document API : 문서의 추가/ 수정/ 삭제 Search API : 문서 조회 HTTP URI 방식의 문서 조회 ( Parameter ) Request Body 방식의 검색 질의 ( JSON 형식 ) Aggregation API : 문서 통계 Bucket Aggregation Metric Aggregation Matrix Aggregation Pipeline Aggregation 엘라스틱서치 분석기 문장을 특정한 규칙에 의해 수정 수정한 문장을 개별 토큰으로 분리 개별 토큰을 특정한 규칙에 의해 변경 분석기를 사용하기 위해서는 Analayzer 필드 수정 대표적으로 Standard , Whitespace, Keyword

신경망 with [개발자를 위한 머신러닝] (2/2)

신경망 2. 단층 및 다층 퍼셉트론 네트워크는 입력층, 은닉층, 출력층 방향으로 연결되어 있음 각 층내의 연결과 출력층에서 입력층으로의 직접적인 연결은 존재하지 않는 전방향 ( Feedforward ) 네트워크 역전파 방법을 사용해 가중치를 조정 전방향(Feedforward) 신경망 일반적으로 인공신경망은 다층 퍼셉트론을 의미 피드포워드 신경망(FNN: Feedforward Neural Network)이라고도 함 은닉층이 늘어날수록 계산량이 증가 일반적으로 역전파 알고리즘을 사용하여 학습 역전파 예측된 결과와 실제값의 차이인 에러의 역전파를 통해 가중치를 구함 피드포워드 과정 실행 에러의 역전파 계산 가중치 조정  역전파 구조의 순서도 신경망에서 다룰수 있는 문제의 유형 회귀 문제와 분류 문제에 모두 사용 가능 회귀/함수 근사 문제 분류 문제(2개의 클래스, 1개의 출력) 분류 문제(다중 클래스, 클래스당 하나의 출력) 단층 퍼셉트론 예제 코드 시그모이드 예제 코드 :  https://github.com/Limdh3325/Machine-Learning-for-Developers/blob/master/Chapter05/Ch5.ipynb 참고 http://www.aistudy.com/neural/multilayer_perceptron.htm https://wikidocs.net/30

신경망 with [개발자를 위한 머신러닝] (1/2)

신경망 일반적인 분류, 군집의 블로그 설명은 넘어가기로 한다 l   신경망 모델 역사 l   신경망과 해결 가능한 문제 l   다층 퍼셉트론 l   이진 함수 모델링을 위한 간단한 신경 계층 구현 1.  신경망 모델 역사 맥클러치와 피츠 모델 1940년대 중반 인간 두뇌의 학습 기능을 표현하는 최초의 수학적 방법은  Warren McCulloch 와 Walter Pitts 가 1943년 발표한 [A Logical calculus of ideas immanent in nervous activity]에 맥클러치와 피츠 모델이다 맥클러치와 피츠 모델 모델에서 조정할 파라미터를 나타내기 위해 일반적으로 w 문자를 사용한다. 퍼셉트론 모델 인공 뉴런을 구현하는 가장 간단한 방법중 하나 임의 분포로 가중치를 초기화 입력 벡터를 선택하고 네트워크에 사용 지정한 입력 벡터와 가중치 값에 대한 네트워크의 출력 y'를 계산 y' != y 일때 error 를 추가해 모든 가중치(w)를 수정 2단계로 돌아감 y'=y일때까지 반복 퍼셉트론 모델 퍼셉트론(Perceptron) 은 맥클러치와 피츠 모델을 바탕으로 만들어 졌지만, 오차 계산하는 학습 메커니즘이 추가 됐다는 점이다 퍼셉트론 모델  에 대해 자세히 설명한 블로그이다 예측 값 개선: ADALINE(Adaptive Linear Neuron) 알고리즘 퍼셉트론 모델에 비해 한층 진화된 알고리즘 오차 계산할때 그랜디언트 디센트 방식을 사용하고 활성화 출력이 가중치의 합계에 적용되기 전에 오차가 측정된 지점을 변경하는 과정이 추가됨 임의 분포로 가중치를 초기화 입력 벡터를 선택하고 네트워크에 사용 지정한 입력 벡터와 가중치 값에 대한 네트워크의 출력 y'를 계산 사용할 출력 값을 합계 후의 출력 값 모델 출력을 올바른 레이블 O 와 비교해 오차를 계산 if y' != y, 반복적인 그래디언트 디

머신러닝 학습과정 with [개발자를 위한 머신러닝] (2/2)

머신 러닝 학습 과정 (2/2) 5. 모델 정의 사용할 모델을 선택하는 작업 수행하려는 작업 유형과 입력 데이터 유형에 따라 모델을 선택 이 과정에서 올바른 모델 정의란 없음, 하지만 어느정도의 가이드 라인은 있다 특성을 기반으로 정보를 그룹화 하여 데이터의 특징을 파악하려 하는가? 비 지도학습 기반의 클러스터링 ( k-means ,   k-medoids, DBSCAN , ...) 데이터가 순차적이거나 순서를 고려해야하는가? 순환신경망 사용 변수에 대해 결과를 예측하거나, 데이터에 태그를 저장하기 위해 그룹으로 분류 하려 하는가? 지도학습 기반의 분류 및 회귀 ( KNN, SVM, 나이브베이즈 분류, 의사결정 나무, 로지스틱 , ...) 데이터 또는 패턴이 공간적으로 발견되는가? 합성곱 신경망 사용 많은 차원이 있는 데이터 인가? 덜 중요한 특징은 제외하고 가장 유용한 특징들을 추출하기 원하는가? 차원축소기법을 사용 (주성분분석등 ) 목표에 도달하는 일련의 단계를 만드는 전략? 강화학습 분야   위에서 정의한 가이드라인이 정답은 아니다. 더 좋은 모델과 그렇지 않은 모델만 있을 뿐이다. 6. 손실 함수( Loss Function) 정의 머신러닝 에서 손실 함수를 정의하는 작업은 중요하다. 손실 함수란 모델의 예상 값에서 실제 예상 값 까지의 거리를 측정하는 함수 손실 함수의 결과값을 가장 작게 만드는것이 머신러닝의 학습 목표 기본적으로 평균제곱오차(Mean Squared Error, MSE) , 교차 엔트로피 오차(Cross Entroypy Error , CEE) 가 사용됨 최근 머신러닝이 발전함에 따라 경사하강법( Gradient descent )을 사용 7. 모델 피팅 및 평가 모델과 데이터가 필요하며, 모델을 훈련하고 검증하는 단계 데이터셋 분할 일반적으로 n-fold cross validation 을 사용 데이터셋에서 Training Data와 Test Data를

머신러닝 학습과정 with [개발자를 위한 머신러닝] (1/2)

머신 러닝 학습 과정 (1/2) 1. 문제이해 문제를 풀 때 데이터와 가능한 작업량을 미리 분석하는 것  문제의 정의 데이터 수집과정 데이터 수집의 시간 전처리의 유무 2. 데이터셋 정의 및 획득 ETL 프로세스 ETL( Extract, transform, load)은 단어대로 추출, 변환, 적재를 하는 프로세스 빅데이터를 분석하기 위해서 필요한 전처리 과정   데이터를 추출 후 분석할수 있게 변환하여 적재하는 과정  전통적인 ETL 다이어그램 SciPy 및 pandas 를 사용한 데이터셋 로드 및 탐색 분석 예제 코드 :  https://github.com/Limdh3325/Machine-Learning-for-Developers/blob/master/Chapter02/Code/Dataset_IO.ipynb 3. 피처 엔지니어링 가공전 데이터를 가져와서 모델이 일반화 하기 쉬운 형태로 변환하는 과정 예측 모델의 정밀도를 향상시키기 위해 학습용 원시 데이터를 기반으로 피처를 변환, 추출, 선택하거나 새로운 피처를 생성하는 작업 누릭된 데이터 다루기 불완전한 데이터셋이 있을때 누락된 부분은 모델에 도움이 되지 않는다. 따라 결측치를 처리하는 방법이 필요함 기본적으로 아래의 방법을 행함 해당 결측치행을 제거하여 학습에 사용하지 않는것 데이터의 평균을 사용하여 결측치에 넣는것 해당 열의 중앙값 사용 해당 열의 빈번한 값을 사용 하지만 위의 방법으로 학습이 안될 가능성이 있기 때문에 적중률을 높이기 위해 좀더 고급기술을 사용한다.  누락된 값(결측치)에 대한 상세한 처리 방법은 결측치 처리 블로그  에서 확인해주시기 바랍니다. 원핫 인코딩 (One-Hot Encoding) 하나의 값만 True(1)이고 나머지는 모두 False(0)인 인코딩 머신러닝에서는 수치로된 데이터만 이해할수 있기 때문 보통 자연어 처리 부분에서 사용함 결측치

머신러닝 소개 및 통계 과학 with [개발자를 위한 머신러닝]

예제 코드 다운 로드  https://github.com/PacktPublishing/Machine-Learning-for-Developers 사용할 도구 Anaconda3 - jupyter notebook , Mac OS X 사용 언어 Python3 라이브러리 pandas (데이터처리 ) , NumPy(행렬과 같은 데이터), matplotlib (플로팅 라이브러리, 그래프) 기본적인 수학개념 기술통계학 : 주요 연산 ( 샘플코드는 넘어감 ) 평균 : 모든 원소의 합을 그 원소의 개수로 나눈 값 분산 : 평균으로 부터 모든 원소간 거리를 평균 한 값 표준 편차 : √분산 확률 및 확률 변수 ( 샘플코드는 넘어감 ) 확률에 대해 더 상세한 설명은 확률의 이해 사건(event) : 한 실험에서 나타날 수 있는 모든 결과의 일부 세트 확률 : 사건의 발생 가능성, 0 ~ 1 사이의 실수 베르누이 분포 : 발생할 수가 0 과 1로 이루어 지는 단일 사건일때 사용 균일 분포(Uniform Distribution) : 확률변수가 구간 [a,b] 내의 모든 영역에서 일정한 확률을 가질때 사용 정규 분포 : 가우스 함수라고 불리며 연속적인 랜덤 함수 로지스틱 분포 : 정규 분포와 비슷하지만 정규 분포 보다 더 긴 꼬리를 가지고있음, 누적 분포함수(CDF)가 중요, CDF를 계산하면 시그모이드 곡선을 볼수있음. 확률 함수에 대한 통계적 측정 기준 비대칭도(Skewness) 첨도(Kurtosis) 이외 필요한 수학적 지식 미분 적분 연쇄 법칙 편미분 참고 https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-developers https://m.blog.naver.com/PostView.nhn?blogId=mykepzzang&