everydayminder
개요 본 포스트에서는 Heroku 플랫폼을 통해 소개된 개념인 12-Factor 애플리케이션 요소에 대해 정리한다. SaaS(Software As A Service) 개발 방법론 관점에서 고안해 낸 개념인데, 어떤 애플리케이션이 Cloud 환경에서 잘 동작할 수 있으려면 아래의 12가지 규칙을 잘 준수해야 한다고 하는 것이다. 12요소 (twelve factors) 코드베이스(codebase) 의존성(dependencies) 설정(config) 백엔드 서비스(backing services) 빌드, 릴리즈, 실행(build, release, run) 프로세스(processes) 포트 바인딩(port binding) 동시성(concurrency) 폐기가능(disposability) 개발/프로덕션 환경 동일화..
무려 1967년에 맬빈 콘웨이(Melvin Conway)가 발표한 논문에서 소개한 내용이 요새에도 쓰이고 있다. Any organization that designs a system will inevitably produce a design whose structure is a copy of the organization's communication structure." 소프트웨어 구조는 그 소프트웨어를 개발한 조직의 커뮤니케이션 구조를 따라간다는 말이지만, 문장의 앞뒤를 바꾸면 우리 나라사람들에게 직관적인 문장이 된다. 즉, 조직 구조/ 조직의 커뮤니케이션 구조가 소프트웨어 구조를 결정한다. 콘웨이 박사의 실험 코볼과 ALGOL 컴파일러를 제작하는 연구팀 여덟 명과 함께 수행한 콘웨이 박사의 실험 결과..
playbook? runbook? 회의를 하다보면 은근히 많이 듣는 단어가 playbook과 runbook인 것 같다. 심지어 혼용되기도 한다. 같은 사람이 어떤 날에는 playbook이라고 했다가 다음에는 runbook이라고 하기도 하던데, 두 단어의 뜻은 무엇이고 왜 혼용하는지 찾아서 정리해 보자. 요약 배경은 다를지라도 두 단어는 서로 유사한 뜻을 지니고 있고, 서로 혼용하여 쓸 수 있다. "중요한 프로세스를 문서화한다"는 점에서 두 문서의 목적은 거의 같다고 볼 수 있다. 미묘한 차이 playbook: 일반적으로 비즈니스 전문가들이 많이 사용하는 용어 runbook: IT 스탭들이 많이 사용하는 용어 runbook 주로 IT와 관련된 배경지식 및 실질적인 업무 프로세스 등을 기술한다. 표준화된 프..
내가 사용하는 맥북은 32bit인가? 64비트인가? 인텔 계열인지, ARM 계열인지 어디에서 확인할 수 있을까? 메뉴에서 확인하기 메뉴 바의 사과 아이콘 > 이 Mac에 관하여 > 시스템 리포트 > 하드웨어 > 하드웨어 개요 > 프로세서 이름의 내용을 확인한다. 출력되는 내용은 아래의 내용 중 하나가 될 것이다. 이 분류에 따라 본인의 하드웨어 사양을 확인할 수 있다. Intel Core Solo: 32비트 Intel Core Duo: 32바트 Intel Core 2 Duo: 64비트 Intel Quad-Core Xeon: 64비트 Dual-Core Intel Xeon: 64비트 Quad-Core Intel Xeon: 64비트 Core i3: 64비트 Core i5: 64비트 Core i7: 64비트 커..
작성한 YAML 파일이 문제가 없는지 검사해 보려면 어떻게 하면 좋을까? 일단은, 작성한 yml 파일에 문법적으로 결함이 없어야 할 것이다. 그 다음으로는 실제 그 값이 의도한 대로(기록된 대로) 제대로 읽히는지 확인하는 절차가 필요할 것이다. YAML validation 지난 포스트에서는 YAML을 JSON으로 변환시켜주는 사이트를 활용하여, 내가 작성한 YAML 파일이 제대로 의미 전달이 잘 되었는지 검사하였다면, 이미 작성된 파일들을 하나하나 JSON으로 검사하기도 곤란할 것이다. 이럴 때, 다음의 사이트를 활용하여 문법체크를 해보자. http://www.yamllint.com/ 앞서, 사용했던 YAML 예제는 아래와 같다. artist: artist-alias1: &MK name: Mika alb..
YAML 기존에는 XML과 JSON으로 어떤 값들을 저장하고 사용했다. 그러나, XML과 JSON은 사용하기가 복잡하다는 점 때문에 2001년에 Clark Evans에 의해 최초 제안되었다. 원래 이름은 'YAML은 Markup 언어가 아니다(YAML Ain't Markup Language)'라는 뜻으로 불렸으며, 동시에 또 다른 마크업 언어(Yet Another Markup Language)라는 뜻으로도 불리기도 한다. K8S, Ansible, Spring Boot 등의 환경설정에도 쓰이면서 개발자들에게도 많이 친숙한 편이다. (사실 모르면 안되는 축으로 바뀌고 있다.) 파일 확장자는 .yaml 혹은 .yml로 사용하며, 많은 사람들이 발음하는 바로는 /야믈/이라고 주로 읽는다. 주요 문법 공백 문자들..
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를 한번 입력해 줘야 한다.