비츠(Beats)는 컴퓨터, 네트워크, 앱과 같은 데이터를 전송하는 경량 데이터 전달자이다. Beats인 이유는 비츠라는 어플리케이션 하나로 구성된 것이 아니라 상황에 맞게 다양한 비트(Beat)가 있기 때문이다. 로그스태시(Logstash)와 비교 엘라스틱서치에 데이터를 전달해주는 역할로는 로그스태시(Logstash)도 존재하는데 로그스태시는 다양한 소스에서 데이터를 수집하는 커다란 데이터 전송 솔루션이라 본다면 비츠는 로그스태시에 비해 차지하는 공간이 작고, 더 적은 리소스를 사용한다. 게다가 비츠는 수집해야 하는 서버에 에이전트를 설치하는 식이라 목적은 같지만 사용하는 방식이 완전 다르다 할 수 있다. 아래는 엘라스틱서치에서 설명하는 로그스태시와 비츠의 비교내용이다. Beats는 서버에 에이전트로 ..
MySQL(MariaDB 포함)에서 날짜값을 더하거나 뺄 때 사용하는 함수는 DATE_ADD와 DATE_SUB가 있다. 이 함수를 사용해서 현재일보다 7일 전, 한달 전과 같은 데이터를 가지고 오거나 시한이 있는 컨텐츠의 경우 마감일을 지정한다든지 하는 로직등을 구현할 수 있다. DATE_ADD 및 DATE_SUB 사용법 DATE_ADD(date, INTERVAL value interval_type) DATE_SUB(date, INTERVAL value interval_type) 날짜를 더하거나 빼는 방법은 메소드만 다를 뿐 사용 방법은 동일하다. 첫번째 인자인 date는 수정해야 할 대상 날짜값이다. 두번째 인자인 value는 더하거나 뺄 시간 값이고, interval_type는 시간 유형이다. 시간 ..
몽고DB(MongoDB)는 자체적으로 소멸 주기 혹은 생명주기라고 하는 TTL(Time to Live) 인덱스 기능이 내장되어 있습니다. 예를 들어 로그 데이터와 같이 일반적인 데이터와 달리 중요도가 적은 경우 Info, Warning, Error 처럼 중요도에 따라 데이터 자동 삭제 시기를 설정할 수 있고, 혹은 특정 주기마다 무조건 삭제를 할 수 있는 기능을 제공합니다. TTL의 구현방법 TTL은 날짜값에 Index를 걸고, expireAfter 속성을 추가적으로 걸면 됩니다. 데이터의 날짜값이 각각 아래와 같다고 가정을 해보겠습니다. A-> 2022년 9월 5일 오후 5시 40분 B-> 2022년 9월 6일 오전 10시 10분 C-> 2022년 9월 5일 오후 7시 20분 그리고 현재 시간이 202..
뷰(View)의 생성 목적 뷰(View)는 관리 측면과 사용성 편의, 유지 보수, 보안 등을 위해서 사용하는 기법이다. 쿼리(Query)가 복잡할 경우 이를 프로그램으로 구현하게 되면 유지보수가 잘 안될 수도 있고, 초급 개발자의 경우 실수를 범할 수 있다. 게다가 쿼리 및 테이블을 공개해야 할 경우 보안 측면에서 문제가 발생할 수 있다. 즉, 뷰는 어떤 하나의 목적으로 사용하는 것이 아니라, 편의성, 보안성, 유지 보수 등의 다양한 이유로 인해서 사용하는 것이라 생각하면 된다. 즉 위 내용을 간단히 정리하자면 아래와 같다. 편의성 : 복잡한 쿼리를 단축 시켜 놓기 때문에 개발을 보다 쉽게 진행할 수 있다 보안성 : 테이블 명칭과 컬럼 명칭을 숨길 수 있기 때문에 보안성이 뛰어나다 유지보수성 : 코드가 ..
포스팅에 앞서 MySQL과 MariaDB는 사실상 동일한 DB이기 때문에 본 포스팅은 MariaDB에서도 적용됩니다. UNION의 개념 우리가 하나의 쿼리안에 다양한 테이블의 정보를 담기 위해서는 서브쿼리와 조인(Join)등의 방식으로 데이터를 표현하곤 합니다. 하지만 다른 테이블이지만 각각의 테이블의 내용을 동일한 컬럼에 담아서 표현하고 싶을 경우 어떻게 해야 할까요? 바로 이럴때 사용하는 것이 유니온(UNION) 입니다. 데이터 예시 유니온의 사용법을 알려드리기 위해 비슷한 구조의 테이블을 2개 만들었습니다. 하나는 블로그의 정보를 넣으려고 하는 content_tbl이고, 다른 하나는 뉴스의 정보를 넣으려고 하는 news_tbl입니다. UNION 명령어 이 둘의 데이터를 한번에 하나의 쿼리로 표현하는..
레디스(Redis) 제품은 무료 버전인 커뮤니티(Community) 버전과 상용 버전인 엔터프라이즈(Enterprise) 버전이 존재합니다. 해당 포스팅은 무료 버전인 커뮤니티 버전을 다운로드 받고 설치한 후, 작동이 되는지 간단히 사용해보는 것까지 진행을 해보겠습니다. 레디스 다운로드 https://redis.io/download/ Download Redis You can download the last Redis source files here. For additional options, see the Redis downloads section below. Stable (7.0) Redis 7.0 includes several new user-facing features, significant per..
레디스(Redis)의 개요 레디스(Remote Directory System, Redis)는 비정형 데이터를 저장하고 관리하기 위한 키-밸류(Key-Value) 데이터베이스로 오픈소스 기반의 비관계형 데이터베이스 관리 시스템입니다. Key-Value 데이터베이스이기 때문에 NoSQL로 분류되며, 2015년부터는 RedisLab co.에서 만들어진 상용 버전과 누구나 무료로 사용할 수 있는 오픈소스 버전으로 나뉘어져 있습니다. 레디스의 역사는 2009년 Antirez라는 별명을 사용한 Salvatore Sanfilippo(2020년에 현재는 Redis에서 물러난 상태)에 의해서 처음 만들어졌습니다. 그는 이탈리아 스타트업의 확장성을 개선하기 위해서 실시간 웹 로그 분석기를 개발하게 되었고 Redis 프로젝..
MySQL에서는 date_format으로 날짜값을 문자열로 변경하는 포맷을 지원해 준다. 아마 DBMS로 개발을 하는 웹개발자라면 한번씩은 꼭 써보게 되는 기능일텐데, 오늘은 date_format의 포맷 설정값들과 예시에 대해서 포스팅을 해보도록 한다. 포맷 설명 포맷설정 포맷 설명 %a 영문 약칭 요일 (Sun to Sat) %b 영문 약칭 월 (Jan to Dec) %c 숫자로 표현하는 월 (0 to 12) %D 숫자 값으로 표시된 일, 뒤에 접미사가 붙음 (1st, 2nd, 3rd, ...) %d 숫자 값으로 표시된 일 (01 to 31) %e 숫자 값으로 표시된 일 (0 to 31) %f 마이크로초 (000000 to 999999) %H 시간 (00 to 23) %h 시간 (00 to 12) %I..
여러개의 Row로 되어 있는 데이터를 한개의 값으로 묶어서 가지고 오고 싶을 경우, MySQL(혹은 MariaDB)에서는 Group_Concat을 사용하여 처리할 수 있다. 실행 예시 테이블 생성 CREATE TABLE `stock` ( `stock_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'pk', `exchange` varchar(10) NOT NULL COMMENT '구분', `stock_nm` varchar(50) NOT NULL COMMENT '주식명', `ticker` varchar(10) NOT NULL COMMENT '티커', PRIMARY KEY (`stock_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; 데이터 삽..
자바(Java)로만 엘라스틱서치(Elastic Search)에 대해서 다뤄봤는데 이번에는 파이썬(Python)으로 엘라스틱 서치를 다뤄보도록 하겠습니다. 데이터는 추후 주가 분석을 등을 하기 위해서, 삼성전자의 주식 데이터를 저장해보는 것으로 해보겠습니다. 삼성전자 주식 데이터 야후의 Finance라는 사이트에 가시면, 종목을 입력할 수 있고 삼성전자의 종목(005930.KS)[1]를 입력하면 위와 같이 삼성전자 종목 정보로 넘어갑니다. 화면의 붉은색 네모박스로 체크한 곳을 보면, Download라고 되어 있는데 이 곳을 클릭하면, 삼성전자의 Historical Prices 데이터를 받을 수 있습니다. 귀찮은 분들을 위해서 아래의 파일을 받으셔도 됩니다. 삼성전자 주가 데이터 직접 위 사이트에서 받으시거..
엘라스틱서치(Elastic Search)에서 다양한 설정을 담는 config 파일은 {elasticsearch}/config 폴더에 있는 elasticsearch.yml 파일에 있다. 이 파일을 오픈하면 노드 및 샤드, 클러스터, 로그 위치, 접근 IP 등 다양한 설정을 할 수 있는데 당연히 엘라스틱서치를 운영할 계획이라면 필수 설정 정도는 알고 있어야 될 것이다. 다음의 옵션은 변경되어서 다른 방식 혹은 명칭이 바뀔수도 있고 삭제되었을 수도 있다. 엘라스틱버전에 따라 같은 속성값을 계속 유지하는 것이 아니기 때문에 매 버전에 따라 설정값이 변경되었는지 확인을 하는 것도 중요할 것이다. 설정 항목 cluster.name - 클러스터들은 같은 클러스터의 이름을 가진 경우 묶을 수 있는데 여기서 지정을 할 ..
카프카(Kafka)에서는 다양한 언어로 데이터를 주고 받는 기능을 제공하는데 본 포스팅은 파이썬(Python)으로 구현하는 프로듀서(producer)/컨슈머(consumer) 즉 데이터를 보내고 받는 방법을 설명한다. 파이썬으로 카프카를 호출하는 방법이 대표적으로 2가지 방법이 존재하는 것 같다. 하나는 카프카를 만든 제이 크렙스(Jay Kreps)가 만든 회사인 confluent가 제공하는 라이브러리이고, 다른 하나는 kafka-python이라는 라이브러리를 사용하는 방법이다. 후자인 kafka-python을 범용적으로 많이 사용하는데 성능은 컨플루언트의 라이브러리가 더 좋다. 후자를 사용하는 이유는 단하나 confluent는 c로 만든 라이브러리를 호출하여 사용하는 방식이라 별도의 설치과정이 존재하기..