목록DevOps (180)
devops
Cosmos 체인의 아키텍처를 이해하기 위해선 상태머신과 텐더민트 그리고 인터페이스인 ABCI를 알아야한다. 하나씩 짚어보자 State Machine 블록체인은 'replicated deterministic state machine'이라고 부른다. 즉, 복제되는 결정론적인 상태머신이다. 상태머신은 컴퓨터 사이언스의 개념으로 머신이 다양한 상태를 가질 수 있으나, 특정 시점엔 하나의 상태만 가진다. 여기서 현재 시스템의 상태를 말하는 'state'와 상태를 변화시키는 트리거 역할을 하는 'transaction'이 있다. +--------+ +--------+ | | | | | S +---------------->+ S' | | | apply(T) | | +--------+ +--------+ 위를 보면 상..
Application Specific blockchain을 앱체인(App-chain)이라고 부르기도 한다. 즉 특정 어플리케이션만을 위해서 구축된 블록체인이다. 그래서 어플리케이션의 최적화를 위해서 코어부터 커스터마이징을 통해 원하는 체인 스펙을 설정한다. Cosmos SDK는 이런 앱체인에 특화된 프레임워크로 많은 블록체인 프로젝트에서 사용하고 있다. 아마 우리가 들어본 웬만한 프로젝트는 Cosmos SDK를 썼다고봐도 무방하다. 아래 레포는 cosmos sdk 기반의 체인들 리스트다. akash, cronos, evmos, ehos, kava, osmosis, terra, terra2 등 아주 유명한 프로젝트들이 cosmos sdk를 통해서 탄생했다. https://github.com/cosmos/c..
Cosmos SDK Cosmos는 흔히아는 ATOM 코인의 블록체인이다. 생각보다 높은 시총을 유지하고 있고, 매스컴에서도 많이 회자되는 체인인데, 그 이유는 이 SDK를 통해 생성된 체인들이 모두 연결되는 Cosmos IBC 덕분이라고 생각한다. 이 Cosmos SDK는 PoS 기반의 퍼블릭 블록체인을 쉽게 구축할 수 있는 오픈소스 프레임 워크로, 구축된 체인을 Application-specific blockchain이라 부르기도 한다. Cosmos SDK의 목표는 개발자가 쉽게 커스터마이징한 블록체인을 구축하고 Cosmos 기반 체인들과 연결하는 것에 있다. 최근들어 모듈식 블록체인이 뜨고 있는데, Cosmos SDK 또한 모듈들의 조합으로 구성된다. 그래서 누구나 모듈을 만들 수 있고, 이미 만들어..
리눅스의 기본 에디터인 vim을 다루기 위해선 단축키를 숙지하는 것이 아주 중요하다. 워낙 많아서 다 외우는 것은 거의 불가능하고, 주로 사용할 단축키만 간단히 정리해보려 한다.기본 이동h, j, k, l : 상하 좌우 이동gg : 줄 맨 위로 이동shift + g : 줄 맨 아래로 이동단어, 문장 이동b : 단어의 시작위치로 이동(backward)e : 단어의 마지막 위치로 이동(forward)^ : 문장 맨 앞으로 이동$ : 문장 맨 뒤로 이동줄번호 이동[: + set number] : 줄번호 설정[esc] + [:] + [줄번호] : 원하는 줄번호로 이동편집i : 현재 커서가 위치한 문자 앞에 insertdd : 커서가 위치한 줄 삭제dw : 커서의 위치부터 단어의 마지막까지 삭제x : 커서가 위치..
Application ## 먼저 엔드포인트 확인 $ curl endpoint ## 서비스 상태 확인 (Selector와 Endpoint 체크) $ kubectl describe service web-service ## 파드 확인 $ kubectl get pod $ kubectl describe pod web $ kubectl logs web -f --previous Control Plane ## Node & Pod 확인 $ kubectl get nodes $ kubectl get pods ## Controlplane Pod & Service 확인 $ kubectl get pods -n kube-system ## Controlplane Service 확인 $ service kube-apiserver sta..
블록체인 증명 알고리즘은 블록의 생성은 어려우나 검증은 쉽도록 구성하는 것이 중요하다. 블록의 파라미터 중 Nonce는 유일하게 채굴자들이 변경할 수 있는 값이다. 블록을 생성하기 위해서는 Nonce값을 수정해서 원하는 hash값을 찾아야한다. hash 함수는 결정론적이기 때문에 Nonce값을 반복적으로 대입할 수 밖에 없다. 물론, 블록 생성의 댓가는 코인이기 때문에, 보상을 받기위해 기어이 nonce에 대입하는 컴퓨팅 파워를 사용한다. package main import ( "crypto/sha256" "fmt" "strings" ) func main() { diff := 3 nonce := 1 target := strings.Repeat("1", diff) for { hash := fmt.Sprin..
멀티 컨테이너 파드는 아주 유용하다. 대체로 파드에 하나의 컨테이너만 생성하는 편이지만, 파드에 여러 컨테이너를 추가하면서 얻을 수 있는 장점이 많다. 컨테이너를 동일한 노드에서 관리해야하는 프로세스가 필요하거나, 파드의 컨테이너간 통신이 필요한 경우 멀티컨테이너의 역할이 요구된다. 여기서 멀티컨테이너는 3가지 패턴이 있는데 아래와 같다. 사이드카 패턴(Sidecar) 사이드가 패턴은 어플리케이션에 필수적이지만, 어플리케이션의 일부일 필요가 없는 컨테이너로 구성된다. 대체로 Logging이나 Sync를 맞추거나 혹은 monitoring이 필요한 경우에 많이 사용하는 패턴이다. 이 패턴은 로깅 코드에 결함이 생길 경우에 격리된 컨테이너기 때문에 어플리케이션에 영향을 주지 않는다는 장점이 있다. 어댑터 패턴..
도커를 실행할 때, ENTRYPOINT와 CMD를 활용해서 명령어의 인자값을 컨테이너 실행시에 전달하고 수정할 수 있다. 쿠버네티스에서도 Pod 정의에서 활용이가능하다. Kubernetes Command & args 왼쪽은 Dockerfile에서 선언된 ENTRYPOINT와 CMD다. 오른쪽 POD 정의에서 command는 ENTRYPOINT의 필수 실행 명령을, args를 통해서 인자값을 전달할 수 있게된다. Configmap 환경변수를 미리 선언하고 관리할 수 있는 Kubernetes Configmap을 이용하면 많은 인자값 관리가 편리해진다. 위처럼 ConfigMap을 Key:Vaule 식으로 먼저 정의를 한다. 적용할 Pod에서 spec.containers.envFrom.configMapRef.n..
내가 구현한 블록체인과 통신할 수 있는 CLI를 구현해본다. flag를 사용해서 port와 사용할 mode를 설정한다. package cli import ( "flag" "fmt" "os" ) func usage() { fmt.Printf("This is vatacoin\n\n") fmt.Printf("Please use the following flags:\n\n") fmt.Printf("-port:Set the PORT of the server\n") fmt.Printf("-mode:Choose between 'html' and 'rest'\n\n") os.Exit(0) } func Start() { if len(os.Args) == 1 { usage() } port := flag.Int("port"..
REST API를 GO로 구현해서 blockchain부터 특정 block을 확인하고, 추가할 수 있도록 해본다. package rest import ( "encoding/json" "fmt" "log" "net/http" "strconv" "github.com/gorilla/mux" ) var port string type url string func (u url) MarshalText() ([]byte, error) { url := fmt.Sprintf("http://localhost%s%s", port, u) return []byte(url), nil } type urlDescription struct { URL url `json:"url"` Method string `json:"method"` De..