Photo by Markus Spiske on Unsplash

Kubernetes Controller 구현해보기

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

Photo by Eduard Delputte on Unsplash

회고 — 일, 사람, 여유

한 달 전쯤부터 회고글을 쓰려고 생각을 했지만 이런 저런 일이 주위에서 생기고 다른 일들이 우선 순위가 높다보니 이제서야 쓰게 되었다. 글은 개인적으로 앞뒤로 시간적 여유를 두고 쓰는 것을 선호한다. 이런 저런 생각들이 떠오를 수 있는 시간이 필요하고 그것들이 얼기설기 엮여 글로 나타나기 때문이다. 하지만 지금은 더 늦어지면 몇 달 동안… 더 보기 »회고 — 일, 사람, 여유

Photo by Pranav Kumar Jain on Unsplash

HoneyBadgerBFT Protocol에 대해서

이 글은 BFT 기반 합의 알고리즘 중에 하나인 HoneyBadgerBFT에 대해서 어떤 특징을 가지고 어떤 식으로 동작하는지 설명하고자 한다. 과거에서부터 지속적인 오퍼레이션이 중요한 어플리케이션들은 BFT 계열의 프로토콜을 도입하여 fault-tolerant한 시스템을 만들고자 하였다. 분산 시스템에 대한 관심이 높아지면서 어떤 노드 혹은 컴포넌트가 제대로 동작하지 않는지 시스템 내부적으로 확인할 수 있는 failure-detection과 시스템… 더 보기 »HoneyBadgerBFT Protocol에 대해서

Photo by Juan Rojas on Unsplash

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… 더 보기 »Create New SmartContract Programming Language with Go — Parser Part

Photo by Juan Rojas on Unsplash

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… 더 보기 »Create New SmartContract Programming Language with Go — Lexer part

Photo by Juan Rojas on Unsplash

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… 더 보기 »Create New SmartContract Programming Language with Go — New Project Motivation, Concept

Photo by Pat Whelen on Unsplash

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

이번 포스팅은 Promise가 어떤 원리로 동작하는지 직접 구현해보면서 살펴보는 내용을 담고 있다. 그렇기 때문에 기본적으로 Promise를 몇 번 사용해본 경험이 있다는 전제하에 글을 작성하고 있다. 그래서 Promise에 대해서 처음 들어본다면 다음과 같은 글을 미리 읽고 읽는 것을 추천한다. Simple Promise 위와 같이 Promise는 간단히 보면 state machine으로 생각할 수 있다.… 더 보기 »Promise: 구현해보며 원리 살펴보기

어떤 사람이 되고 싶나?

하루 휴가를 내고 하루 종일 카페에서 멍하니 있으면서 ‘어떤 사람이 되고 싶나?’라는 질문을 던졌을 때 답답한 마음이 들었다. 답이 바로 떠오르지 않았고 뭘 해야될지 몰라서 터덜터덜 집으로 돌아왔다. 집으로 와서도 한 시간 정도 멍하니 있었다. 그랬을 때 오후에 했던 질문에 대해서 답에 대한 몇 개의 후보군이 우후죽순 떠올랐고 (사실 답이란… 더 보기 »어떤 사람이 되고 싶나?

ORL#1

‘결정을 한다’는 것에 대해 최근에 생각을 많이 하고 있다. 결정을 내리는 것에는 여러 카테고리가 있을 수 있는데 예를 들어 어떤 제품을 만들 때 어떤 기능을 이 제품에 담을지에 관한 결정이라든지 혹은 소프트웨어를 만들면서 왜 이런 구조로 설계를 했는지 등이 있을 수 있다. 그런데 중요한 것은 ‘왜 이런 결정을 내렸는가?’에 대해서… 더 보기 »ORL#1

Photo by Clay Banks on Unsplash

Query Service 성능 개선기 두 번째 이야기

두 번째 Query Service 성능 개선기를 작성하게 되었다. 첫 번째에서 문제가 다 해결된게 아니냐 싶을 수도 있지만 슬프게도 다 해결된 것은 아니었다. 여전히 DB의 사용률에 따라 조회 시간의 차이가 롤러코스터급으로 들쭉날쭉 했고 이를 반드시 해결해야 서비스 릴리즈를 할 수 있었다. 또한 DB에 엄청난 속도로 데이터가 쌓이고 있었기 때문에 이런 상황에도… 더 보기 »Query Service 성능 개선기 두 번째 이야기

Photo by Annie Spratt on Unsplash

Query Service 성능 개선기 첫 번째 이야기

작년 4분기부터 올해 초까지 현재 근무하고 있는 회사에서 제공하고 있는 Saas 솔루션의 대시보드 개발을 맡았다. Spring Boot와 JPA를 이용하였고 현재는 베타버전이 거의 완성되었다. 개발 막바지에 Query Service의 성능과 관련된 이슈를 경험하여 글로 남기려고 한다. 이번 포스팅에서는 성능을 개선해야하는 Query Service가 어떤 서비스인지 컨텍스트에서 간단히 설명하고 어떤 문제가 있었으며 그것을 소프트웨어… 더 보기 »Query Service 성능 개선기 첫 번째 이야기

Photo by Museums Victoria on Unsplash

EBI 아키텍쳐에 대해서

Entity-Boundary-Interactor(EBI) 아키텍쳐는 Robert C. Martin의 Clean Architecture에서 언급되었다. 그런데 사실 EBI 아키텍쳐는 1992년 Ivar Jacobson의 Object-Oriented Software Engineering: A use case driven approach에서 먼저 등장하였다.

EBI 아키텍쳐의 목표는 결국 서로 다른 타입의 객체들이 각자의 책임을 캡슐화를 함으로써 시스템에 변화가 필요할 때 그 변화가 시스템 전체에서 일어나지 않고 특정 부분에서만 바꿈으로써 문제가 해결될 수 있도록 하는 것이다.

개발 회고: 테스트와 코드 리뷰에 대해서

프로덕트 사이클이 한 번 끝나면서 이번 사이클에서 부족했던 부분을 회고해보려고 한다. 그리고 어떻게 하면 개선할 수 있을지 대해서 정리해보려고 한다. 테스트 다양한 상황 테스트 여기서 말하는 테스트란 코드로 작성된 유닛테스트, 통합테스트를 말하는 것이 아니다. 유닛테스트와 통합테스트는 당연하게 작성해야한다고 마인드를 가져야한다. 그런데 시간 문제 때문에 모든 상황에 대해서 테스트 코드를 짜는… 더 보기 »개발 회고: 테스트와 코드 리뷰에 대해서

Photo by Walter Lee Olivares de la Cruz on Unsplash

왜 JSON-RPC를 사용할까?

Intro 최근에 web3.js 코드를 살펴볼 일이 있었는데 이 때 JSON-RPC를 처음 접했다. 그리고 JSON-RPC 공식 홈페이지에서 JSON-RPC 2.0 스펙을 보았는데 가장 먼저 든 생각은 ‘왜 이걸 쓸까?’ 였다. 그래서 이번 포스트에서는 JSON-RPC가 어떤 것이고 어떤 장점이 있는지 정리하려고 한다. 우선 JSON-RPC가 등장한 시기를 살펴보면 2000년을 시작으로 REST 방식이 등장하고 2000년대… 더 보기 »왜 JSON-RPC를 사용할까?

Photo by Spencer Davis on Unsplash

Kubernetes CRD와 Operator에 대해서

최근에 Kubernetes를 통해서 프로젝트를 진행했었다. Kubernetes의 기본적인 사용법과 어떻게 쓰는지는 시간이 지나면서 자연스레 익혀지지만 Kubernetes의 전체적인 철학이나 어떻게 Kubernetes가 동작하는지 원리에 대해서 개념이 머리에 명확하지 않은 것 같아서 시간을 내어 따로 정리해보려고 한다. 그 중에서도 CRD와 Operator 위주로 정리해보려고 하는데 이 두 개의 개념이 Kubernetes의 전반적인 개념과 동작 원리를 가장… 더 보기 »Kubernetes CRD와 Operator에 대해서

Photo by Hayden Scott on Unsplash

What is gRPC?

Intro grpc를 이용하여 몇 개의 프로젝트를 했음에도 불구하고 아직 gRPC가 어떤 것인지 명확하게 머리 속에 자리잡지 않은 것 같아서 gRPC 개념에 대해서 정리해보려고한다. gRPC의 개념에 대해서 한 문장으로 정리하자면 HTTP/2 기반의 RPC 프로토콜이라고 할 수 있다. 그래서 이 개념에 대해서 이해하기 위해서는 RPC와 HTTP/2 프로토콜 대해서 먼저 알아야한다. RPC RPC는… 더 보기 »What is gRPC?

About RSA Algorithm

Overview RSA는 기본적으로 public key cryptosystem이다. 1977년 Rivest, Shamir 그리고 Adleman에 의해서 만들어졌다. 다른 public key cryptosystem과 마찬가지로 RSA도 trapdoor function에 크게 의존하고 있는데 RSA도 마찬가지로 trapdoor function 중의 하나인 integer factorization problem을 이용해서 안전성을 확보하고 있다. trapdoor function은 간단히 말하면 위의 그림과 같이 x를 가지고 f(x)를 구하는 것은 쉽지만… 더 보기 »About RSA Algorithm

AES algorithm overview

AES? — Step by Step 정리

이번 포스트에서는 AES 알고리즘이 어떤 방식으로 진행되는지 살펴보고 python AES 모듈을 이용해서 어떻게 메세지를 암호화하고 복호화 할 수 있는지에 대해서 알아보려고 합니다. Background AES의 등장 배경에는 DES가 있습니다. Data Encryption Standard(DES)를 간단하게 소개하자면 1970년 초 IBM에서 Horst Feistel의 디자인을 기초로 고안되었습니다. 그래서 DES는 Feistel-structure라고 불리기도 합니다. AES와 마찬가지로 대칭키 암호화… 더 보기 »AES? — Step by Step 정리

fabric-logo

Hyperledger Fabric Add New Org to Network- eyfn 뜯어보기

이번 포스팅에서는 네트워크 확장과 관련된 eyfn 튜토리얼에 대해서 살펴보려고한다. 이전 byfn 튜토리얼 뜯어보기 포스팅에서는 최초로 organization들이 모여서 네트워크를 구성하는 것에 대해서 살펴보았다면 eyfn에서는 이미 구성된 네트워크에 새로운 organization을 추가하기 위해서 어떻게 하는지를 알려준다. 그래서 이번 포스팅에서는 Hyperledger Fabric 네트워크에서 어떻게 새로운 organization을 추가할 수 있는지를 위주로 작성해보려고 한다. Generate Crypto… 더 보기 »Hyperledger Fabric Add New Org to Network- eyfn 뜯어보기

Filecoin: A Decentralized Storage Network Protocol Overview

최근 SWIM에 발을 들이면서 같이 틈틈히 공부하고 있는 Decentralized Storage Network이다. 개인적으로 생각하기에 현재 작업 중에 있는 SWIM 네트워크 프로젝트를 마무리하고 이 위에 올렸을 때 효용성이 있는 서비스들 중에 하나가 아닐까하고 생각하고 있다. 무엇보다 재미있어보인다. 현재는 작업 시간 중 7-8할을 SWIM에 쏟고 있지만 이 프로젝트가 얼추 마무리되면 좀 더 관심을… 더 보기 »Filecoin: A Decentralized Storage Network Protocol Overview

How DDD Concept can be applied to Project

I’ve translated blog post (korean version) which is about 7 important concepts which is about DDD(Domain-Driven Design). Ubiquitous language Layers Bounded contexts Anti-Corruption Layer Shared Kernal Generic subdomain After translating post I’ve done projects which apply DDD concepts. One is blockchain engine project, it-chain. You can see the codes on… 더 보기 »How DDD Concept can be applied to Project

Hyperledger Fabric: Transaction Flow

이번 포스팅에서는 Hyperledger Fabric의 transaction이 어떻게 생성되고 ledger에 최종적으로 commit되는지 이해가 잘 되도록 예시를 들어 설명되어 있는 글을 Hyperledger Fabric doc에서 발견해서 번역해보았다. 원본 링크: https://hyperledger-fabric.readthedocs.io/en/release-1.2/txflow.html Scenario 상품 거래를 하는 시나리오를 가지고 어떻게 transaction이 발생하고 ledger에 commit되는지 그 과정에 대해서 설명하려고 한다. 예시로 사용할 시나리오에서는 A, B라는 두 명의 client가… 더 보기 »Hyperledger Fabric: Transaction Flow

Ports & Adapters Architecture

Hexagonal Architecture로 알려져있는 Ports & Adapters Architecture는 2005년에 Alistair Cockburn 블로그에 소개되었다. 거기서 그는 Ports & Architecture의 목표를 한 문장으로 정리했다.: Allow an application to equally be driven by users, programs, automated test or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and… 더 보기 »Ports & Adapters Architecture

DDD – Entities, Value Objects, Aggregates

Domain-Driven Design 모델링을 할 때 알아야할 가장 기본적인 요소들에 대해서 포스팅해보려고 한다. DDD의 전체적인 개념은 여기에 소개되어있다. 이번 포스팅에서는 세 가지 개념을 설명하려고 한다: Entities Value Objects Aggregates and Roots Entities Eric Evan의 Domain-Driven Design 책에서: Many objects are not fundamentally defined by their attributes, but rather by a thread… 더 보기 »DDD – Entities, Value Objects, Aggregates

Domain-Driven Design Key Concepts

현재 오픈소스로 활동하고 있는 it-chain-Engine에서 적용 중인 아키텍쳐, 디자인에 대해서 조금 더 자세하게 알아보고 개념에 대해서 포스팅해보려고 한다. 그 중에 첫 번째가 DDD(Domain-Driven-Design)이다. 본 글은 원작자의 허가를 받고 번역한 글입니다. 의역과 오역이 있을 수 있습니다. 원본 링크: https://herbertograca.com/2017/09/07/domain-driven-design/ Domain-Driven Design과 관련해서 엄청나게 많은 중요한 컨셉들이 있지만 여기서 그것들에 대해서 모두… 더 보기 »Domain-Driven Design Key Concepts

How to Write Go Testing

Intro In making your application with code, it is strongly recommended to write test cases. Because it can make sure that your whole bunch of codes work correctly and for your mind health. Recently I have a chance to work in great project named it-chain-Engine with golang. In shortly this… 더 보기 »How to Write Go Testing

fabric-logo

Hyperledger Fabric Configure Network – byfn 뜯어보기

Intro Hyperledger Fabric docs를 읽다보면 가장 처음 접하게 되는 것이 byfn 튜토리얼이다. 처음에 개념적인 부분과 실제 네트워크의 흐름을 맞춰보는데 정말 도움이 되는 것 같다. 그런데 정말 찬찬히 뜯어봐야한다. 하나씩 ‘이건 왜 이렇게 동작하는거지?’, ‘이건 왜 안되는거지?’ 하면서 Fabric의 개념적인 부분하고 연결시키면서 생각하면 어느순간 전체적인 그림이 그려지게 된다. 처음에 sample을 받고,… 더 보기 »Hyperledger Fabric Configure Network – byfn 뜯어보기

Hyperledger Fabric Configure Network – Network Overview

Hyperledger Fabric 네트워크 구축을 자유롭게 할 필요가 있어서 한 주간 찾으면서 공부했다. 공부해본 결과, 자료가 정말 없다. 이론적인 문서는 많은데 그것을 바탕으로 실제 네트워크를 구성하는데 레퍼런스가 될만한 것들이 정말 없었다. 그래도 고생하고 고생하며 노력한 끝에 이제 왠만큼 네트워크를 꾸릴 수 있게 되었다. 배운 것들을 정리한다는 생각으로 글을 써보기로 했다. 누군가에게… 더 보기 »Hyperledger Fabric Configure Network – Network Overview

How Java Pass Arguments

프로그래밍을 하면서 항상 method를 사용하고 거기에 관련된 arguments를 넘긴다. 그런데 어떻게 다른 method에 값들이 넘어가는지 메커니즘을 정확히 알지 못하면 가끔씩 미묘한 버그가 발생하기도 한다. 오늘 할 이야기는 Java에서 어떻게 arguments를 method로 넘기는지에 대해서다. Java를 공부해봤다면 한번 쯤 들어봤을 것 같다. 그리고 그것을 공부하면서 ‘음.. 그렇구나. 이해했으니 넘어가자’ 그러고 넘어갔다. 그리고… 더 보기 »How Java Pass Arguments