Kubernetes Controller 구현해보기

이전에 다른 포스팅에서 Kubernetes CRD와 Controller에 대해서 개념적인 글을 작성하였다. 이번 포스팅은 시간이 꽤 지났지만 코드 레벨에서 어떤 식으로 CRD와 Controller를 만들 수 있는지에 대해서 작성해보려고 한다. Requirements & Decisions 앞으로 다룰 이야기가 수월하게 흘러가고 현실감있게 받아들여질 수 있도록 가상의 요구사항을 하나 만들어보자. 시스템 장애 상황에 대비해서 주기적으로 유저 활동 로그를 찍어서 파일로 저장하는 Logger를 만들 것이다. Kubernetes 클러스터를 호스팅하고 있는 클라우드 서비스가 죽지않는 이상 적어도 하나 이상의 Logger는 살아남아서 계속 유저들의 활동 로그들을 찍어서 저장해야한다. 이 정도 요구사항이라면 로깅… 더 보기 »Kubernetes Controller 구현해보기

회고 — 일, 사람, 여유

  • 회고

한 달 전쯤부터 회고글을 쓰려고 생각을 했지만 이런 저런 일이 주위에서 생기고 다른 일들이 우선 순위가 높다보니 이제서야 쓰게 되었다. 글은 개인적으로 앞뒤로 시간적 여유를 두고 쓰는 것을 선호한다. 이런 저런 생각들이 떠오를 수 있는 시간이 필요하고 그것들이 얼기설기 엮여 글로 나타나기 때문이다. 하지만 지금은 더 늦어지면 몇 달 동안 느꼈던 것들이 바래질 거 같아서 더 미루면 안될 거 같다고 생각했고 조금은 희미해졌지만 몇 달 동안 느끼고 생각한 것들에 대해서 정리해보려고 한다. 여유, 휴식 이상의 의미가 있다. 어느 순간 또… 더 보기 »회고 — 일, 사람, 여유

HoneyBadgerBFT Protocol에 대해서

이 글은 BFT 기반 합의 알고리즘 중에 하나인 HoneyBadgerBFT에 대해서 어떤 특징을 가지고 어떤 식으로 동작하는지 설명하고자 한다. 과거에서부터 지속적인 오퍼레이션이 중요한 어플리케이션들은 BFT 계열의 프로토콜을 도입하여 fault-tolerant한 시스템을 만들고자 하였다. 분산 시스템에 대한 관심이 높아지면서 어떤 노드 혹은 컴포넌트가 제대로 동작하지 않는지 시스템 내부적으로 확인할 수 있는 failure-detection과 시스템 내부에서 어떤 컴포넌트가 제대로 동작하지 않더라도 전체 시스템 입장에서는 여전히 정상적으로 동작할 수 있도록 도와주는 fault-tolerant 프로토콜의 중요성이 커졌다. 블록체인 또한 잠깐이라도 시스템이 멈춘다면 네트워크에 참여한 구성원들에게 경제적인 피해를 줄… 더 보기 »HoneyBadgerBFT Protocol에 대해서

Diffie-Hellman Key Exchange

One disadvantage of symmetric cryptosystems which require private key like AES is that the private key must be exchanged. And Diffie-Hellman key exchange algorithm enables exchange private keys over a public channel. So it can solves following dilemma. Alice and Bob want to share a secret key which is going to be used in a symmetric cipher, but all of their communication channel are insecure, furthermore every infomation that is exchanged over channel is observed by their adversary. In this situation how… 더 보기 »Diffie-Hellman Key Exchange

Create New SmartContract Programming Language with Go — Parser Part

This is the third post about project which creates new Smart Contract programming language with go. In the previous post, we’ve introduced you the motivation of this project, why we decided to built new Smart Contract language and brief architecture, and how we implement the first component lexer. The project still WIP and open source so you can visit github.com/DE-labtory/koa and feel free to contribute to our project. Part 1 — Motivation to make new Smart Contract programming language Part 2 — How can we make our… 더 보기 »Create New SmartContract Programming Language with Go — Parser Part

Create New SmartContract Programming Language with Go — Lexer part

This is the second post about project which creates new smart contract language with go. In the last post, introduced about project concept, why we decided to built new smart contract language and brief architecture. The project is WIP and open source so you can visit github and feel free to contribute to our project. Prev Post: New language concept, purpose, architecture Project consists of four components: Lexer, Parser, Compiler, VM. And in this post we’re deeply talking about first component; Lexer. Lexer? Before… 더 보기 »Create New SmartContract Programming Language with Go — Lexer part

Create New SmartContract Programming Language with Go — New Project Motivation, Concept

This post is about why we started to create new programming language for smart contract (with go). Motivation There are two well known blockchain these days, bitcoin and ethereum. and bitcoin has bitcoin script and ethereum has solidity for programming its own smart contract. Both have pros and cons: In the case of bitcoin, it has no state concept and bitcoin script is basically low-level language and has little operation so the capability what it can do is restricted. On the other hand, because of its simplicity… 더 보기 »Create New SmartContract Programming Language with Go — New Project Motivation, Concept

Promise: 구현해보며 원리 살펴보기

이번 포스팅은 Promise가 어떤 원리로 동작하는지 직접 구현해보면서 살펴보는 내용을 담고 있다. 그렇기 때문에 기본적으로 Promise를 몇 번 사용해본 경험이 있다는 전제하에 글을 작성하고 있다. 그래서 Promise에 대해서 처음 들어본다면 다음과 같은 글을 미리 읽고 읽는 것을 추천한다. Simple Promise 위와 같이 Promise는 간단히 보면 state machine으로 생각할 수 있다. 최초로 Promise가 생성되었을 때는 ‘pending’ 상태에 있다가 Promise가 resolve가 되면 ‘fulfilled’ 상태가 되고 reject되면 ‘rejected’ 상태가 된다. 더욱 복잡한 상태 변화가 존재하지만 우선은 이와 같은 상태 변화에 대해서만 살펴보자. Promise는… 더 보기 »Promise: 구현해보며 원리 살펴보기

어떤 사람이 되고 싶나?

  • 회고

하루 휴가를 내고 하루 종일 카페에서 멍하니 있으면서 ‘어떤 사람이 되고 싶나?’라는 질문을 던졌을 때 답답한 마음이 들었다. 답이 바로 떠오르지 않았고 뭘 해야될지 몰라서 터덜터덜 집으로 돌아왔다. 집으로 와서도 한 시간 정도 멍하니 있었다. 그랬을 때 오후에 했던 질문에 대해서 답에 대한 몇 개의 후보군이 우후죽순 떠올랐고 (사실 답이란 건 없지만…) 그것들을 정리해보았다. 계속 그렇겠지만 모든 것이 임시적인 것이다. 사실 아직 내가 어떤 것을 좋아하는지 확신이 서지 않은 상황에서 이렇게 정리하는 것이 이상하기도 하다. 좋은 품질의 소프트웨어를 만들 수… 더 보기 »어떤 사람이 되고 싶나?

ORL#1

  • 회고

‘결정을 한다’는 것에 대해 최근에 생각을 많이 하고 있다. 결정을 내리는 것에는 여러 카테고리가 있을 수 있는데 예를 들어 어떤 제품을 만들 때 어떤 기능을 이 제품에 담을지에 관한 결정이라든지 혹은 소프트웨어를 만들면서 왜 이런 구조로 설계를 했는지 등이 있을 수 있다. 그런데 중요한 것은 ‘왜 이런 결정을 내렸는가?’에 대해서 깊게, 그리고 여러가지 측면에서 생각하지 않고 판단을 내리고 행동에 옮길 때가 많다. 이러한 사고 패턴은 문제라고 생각하고 이러한 패턴은 타고나는 것이 아니라 하나의 습관이라고 생각한다. 그래서 어떠한 결정을 내릴 때… 더 보기 »ORL#1