rsync 사용법 Linux/Unix/OSX의 툴들 중, 파일관리/동기화/백업에 유용한 툴로 rsync를 뺴놓을 수 없을 것이다. GUI 기반의 상용 툴들도 많지만, rsync만으로도 개인 데이터 로컬/리모트 백업 등의 작업을 수행하는데는 어느 정도 충분하다고 생각한다. rsync rsync(remote sync)는 이름이 나타내는 바와 같이 원격 시스템과의 데이터 동기화를 지원하는 프로그램이다. 변경이 있는 파일만 선별적으로 복사하기 때문에, 전체 디렉토리들을 백업/복사할 경우 일반적인 복사 방법보다 효율적이고 빠르게 동작한다. 뿐만 아니라, 데이터를 압축하여 송/수신하므로 적은 대역폭이 사용된다. 대부분의 리눅스 계열 및 OSX에는 기본적으로 설치가 되어 있지만, 만약 설치를 해야 한다면 아래와 같이..
Redis pub/sub 소개 일반적인 pub/sub의 개념에서 알 수 있듯이, 메시지를 보내는 publish와 그 메시지를 수신할 수 있는 subscribe를 말한다. Kafka와는 달리, Redis에서는 subscribe가 된 상태의 클라이언트만 publish되는 메시지를 받을 수 있다. 쉽게 생각하면, Youtube 채널 구독과 비슷하다. 구독과 좋아요를 누르면, 나중에 새로운 글이 올라오면 노티가 올텐데, 구독중인 상태의 채널에 신규 콘텐츠가 올라오면 노티를 받을 수 있는 것과 같다. 명령어 Redis 서버를 매개로, Redis 클라이언트간 통신을 도와줌 Redis 클라이언트는 Redis 서버내 "채널"을 생성함 메시지를 수신하고 싶은 클라이언트는 사전에 해당 채널을 subscribe 함 메시지를..
윈도우즈에는 기본적으로 텔넷 클라이언트 설치가 되어 있지 않다. 따라서, 만약 텔넷을 사용하고 싶으면 별도의 3rd party 앱을 사용하거나, 윈도우즈에 설정을 해야 한다. 본 포스트에서는 윈도우즈10 기준으로 텔넷 클라이언트를 설치하는 방법을 정리한다. 명령어 버전도 있지만, UI 방식을 소개한다. UI 기반 설치 제어판을 클릭하면, 다음과 같은 창이 뜬다. 검색 창에서, "windows 기능"이라고 검색한다. '윈도우즈 기능'이라고 하면 검색이 안된다. 영어로 'windows' 한글로 '기능'이라고 입력해야 뜬다. 검색하고 나면, 아래와 같은 Windows 기능 창이 뜬다. 거의 제일 아래로 스크롤하면, 텔넷 클라이언트 설치 관련 항목이 보인다. 이 항목을 클릭한다. 설치가 완료되면, 기존 커맨드 ..
개요 지리정보 관련 기능의 일부를 Redis에서도 간단하게나마 쓸 수 있다. 명령어 GEO 계열의 명령어도 있지만, 내부적으로 ZSet(Sorted Set)을 사용하기에 ZSet 계열 명령어도 일부 혼용 가능하다. GEOADD 127.0.0.1:6379> help geoadd GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...] summary: Add one or more geospatial items in the geospatial index represented using a sorted set since: 3.2.0 group: geo 한 개 혹은 동시에 여러 개의 정보를 추가할 수 있다. 127.0.0.1..
개요 이름에서 유추할 수 있듯이, Redis(레디스)에서 제공하는 자료 구조 중, Set과 비슷하면서도 차이점이 있는 자료 구조다. 값 자체의 중복을 허용하지 않지만, 정렬을 해주는 자료 구조이다. 정렬의 기준을 score라고 한다. 명령어 Redis - Hash에서의 예와 같이, 사용자들의 데이터를 Redis 상에서 정렬하거나 업데이트 하는 예제로 접근해 보자. 앞서 다뤘던 것과 비슷하게 해볼텐데, 이번에는 사용자의 점수(포인트)로 순위를 관리하는 예로 접근해 보고자 한다. user[0].point = 100 user[1].point = 200 user[2].point = 50 등과 같이 사용자별로 포인트가 관리되는 상황을 가정해볼 수 있을 것이다. User들의 point를 모아서 순위를 매긴다면 프로..
2038년 버그란? 도대체 2038년에 어떤 일이 생기길래 2038년 버그라는 말이 있고, Y2K38이라는 단어까지 존재하는 것일까? 예전에 1999년에서 2000년으로 넘어갈 무렵에 전산상 표기할 수 있는 자릿수가 변경되면서 발생하는 문제를 통칭하여 Y2K 문제라고 불렀었다. 90년대 후반까지는 년도를 두자리로 부르는 것이 관례적이었는데, (마치 우리가 학번을 부르면 끝에 두 자리만 부르고, 주민등록 번호상으로도 년도는 뒤의 두 자리만 주로 쓰듯이) 1999년에서 2000년도로 넘어가면서 99->00으로 바뀌는 과정에서 00을 2000으로 인식하느냐, 1900으로 인식하느냐의 문제가 발생했었다. 그리고, 이름으로도 유추할 수 있듯이 유사한 문제가 2038년에 발생하려고 한다. 왜 그럴까? 2038년 버..
개요 마치 RDBMS에서의 테이블과 같은 형태를 저장하는데 유용한 구조이다. RDBMS의 테이블은 PK외 Secondary Index로도 조회를 하지만, PK 기준으로 데이터를 액세스 해야 한다는 점이 다르다. 또한, 스키마가 RDBMS의 경우는 고정형이지만, Redis의 Hash는 비고정형이며 이를 schemaless라고 한다. 따라서, RDBMS의 테이블 alter는 굉장히 무거운 작업이지만, Redis의 Hash는 그렇지 않다. 따라서, User 데이터를 저장한다 하더라도, RDBMS 테이블과 달리 데이터마다 설정된 필드들의 수가 다를 수도 있다. 명령어 Redis가 지원하는 Hash 관련 기능은 아래와 같다. RDBMS 테이블의 값을 설정하는 방식과 비교하면서 상상해 보자. 어떤 온라인 쇼핑몰의 ..
날짜와 시간을 표현하는 데이터타입 비교 - datetime vs. timestamp MySQL에서 YYYY-MM-DD HH:MM:SS (년-월-일 시:분:초)로 날짜를 표현하는데 사용되는 데이터 타입으로, datetime과 timestamp 두 가지가 있다. 기본적으로 시간을 표현한다는 점에서는 유사해 보이지만, 저장되는 값의 형태와 동작하는 방식의 차이점, 그리고 제약사항을 인지하고 사용해야 한다. DATETIME과 TIMESTAMP 비교 시간 정보를 DATETIME과 TIMESTAMP로 표현할 때 어떤 차이가 있는지 살펴보자. DATETIME 표현가능 범위: 1000-01-01 00:00:00~9999 - 12:31 23:59:59 타임존에 대한 변환 없이, 저장할 때 값 그대로 저장이 된다. 타임존..
Mac에서 현재 Time Zone이 어떻게 설정되어 있는지 확인하려면 다음과 같이 확인할 수 있다. $ date + "%Z %z" KST +0900 혹은 다음 명령어로도 확인 가능하다. sudo systemsetup -gettimezone Password: Time Zone: Asia/Seoul 그러나, 위의 명령어는 password를 한번 입력해 줘야 한다.
개요 글로벌 서비스를 하면서 Time Zone 설정은 신경써야 할 부분이 된다. 본 포스트에서는 MySQL의 Time Zone을 설정하는 방법에 대해 정리한다. 테스트의 편의상 Docker를 기반으로 테스트하였다. 현재 설정 확인 mysql> select @@global.time_zone, @session.time_zone; +--------------------+----------------------------------------+ | @@global.time_zone | @session.time_zone | +--------------------+----------------------------------------+ | SYSTEM | 0x | +--------------------+-----..
개요 프로그래밍 언어에서 어떨 때 set을 사용할까? 주로 중복을 제거하거나, 말 그대로 집합 연산(포함여부 및 합집합/교집합 등)을 해야할 경우에 사용할 것이다. Redis에서도 이러한 연산을 지원한다. 명령어 Redis가 지원하는 집합 연산 기능은 아래와 같다. SADD 127.0.0.1:6379> help sadd SADD key member [member ...] summary: Add one or more members to a set since: 1.0.0 group: set set에 아이템을 추가한다. // 여러 아이템을 set에 추가 127.0.0.1:6379> sadd s1 e1 e2 e3 (integer) 3 127.0.0.1:6379> smembers s1 1) "e2" 2) "e3"..
개요 Redis에서 List는 여러 개의 데이터를 저장하기 위한 자료구조이다. 쉽게 생각해서 Linked List를 생각하게 될텐데, 지원하는 기능을 바탕으로 보면, 오히려 Dequee(Double Ended Queue)에 가깝다. Qeueue의 인터페페이스와 Stack의 인터페이스를 동시에 지원하기 때문이다. Stack 혹은 Queue의 말단 연산은 비용이 닞지만, 중간 데이터를 처리하는 연산은 비용이 상대적으로 높다. 따라서, 내가 수행해야 하는 오퍼레이션의 종류 및 데이터 성격이 어떤지 알고 쓰면 좋을 것이다. 명령어 List가 제공하는 전체 명령어 중 주요 기능은 아래와 같다. LRANGE 127.0.0.1:6379> help lrange LRANGE key start stop summary: G..