해당 포스트는
Kubernates
플랫폼의etcd
의 원리에 대해 설명해 주고 있습니다.
Kubernates
와etcd
모두 처음 들어본 기술이였고, 이제 막Java
와서버
를 공부하기 시작한 제가 이 글을 이해하기는 힘들었습니다.
그래도 끝까지 글을 정독했고, 기술적인 지식을 습득하지는 못했지만 다른 관점에서 많은 걸 느낄 수 있었습니다.
Kubernetes
를 가장 많이 사용하고 있습니다.Kubernetes
는 데이터 저장 방법으로etcd
를 사용하고 있습니다. (모든 데이터를 etcd에 보관한다)DKOS
라는 Kubernetes
클라우드 플랫폼을 개발해 사내 서비스에 이용하고 있으며, API로도 이를 제공하고 있습니다.Safety
,Available
,Independent from timing
,Reactivity
를 만족하는 것입니다.Raft
알고리즘을 사용했습니다.쿼럼(Quorum)
: 의사결정에 필요한 최소한의 서버 수상태(State)
: Etcd 서버의 State는 Leader, Follower, Candidate 중 하나 입니다.타이머(Timer)
: Leader는 주기적으로 heatbeat을 날려 Leader가 존재한다는 걸 알립니다. heatbeat을 일정 시간 받지 못하면 Leader가 없어졌다는 걸 알게 되고, 그에 맞는 행동을 진행합니다.사용자로부터 요청을 받은 Leader는 이를 수행합니다.
그리고 follower에게 heatbeat을 보낼 때 해당 데이터를 같이 보냅니다.
이렇게 follower에게 데이터를 보내다가 쿼럼 숫자만큼의 log 복제가 일어나면 commit을 진행합니다.
follower는 commit이 일어났다는 사실을 알게 되면 자신이 보관하던 log를 commit 합니다.
만약 리더가 다운되면?
runtime reconfiguration
이라고 합니다.snapshot
: 서버가 현재까지 받아들인 모든 log를 파일시스템에 백업해 놓는 것로그복제
의 방식을 그대로 활용합니다.snapshot
을 보내줘 추가된 멤버가 최대한 빨리 동일한 log를 보유할 수 있도록 돕습니다.leader
,candidate
,follower
외에 learner
상태가 존재합니다.restriction
로그복제
방식으로 진행됩니다.개발의 모든 분야를 알고 있을 수는 없다
새로운 기술을 끊임 없이 공부하고 적용하려고 해야 한다
는 말이 이런걸까? 라는 생각이 들었습니다.
'이건 기존에 하던거와 달라서 나는 못하겠어'
라는 말은 개발자에게 허용되지 않습니다. 처음 보는 기술이라도 그것이 우리에게 도움이 된다면 이를 공부해서 적용해야 하는 것이 바로 개발자의 역할인 거 같습니다.
그렇기 때문에 한 분야에 대한 깊이 있는 이해
와 CS기초 지식
이 중요한 것 같습니다. 지금의 제가 Kubernetes
와 etcd
를 봐도 이해하지 못하는 것처럼 기본지식이 없으면 새로운 기술은 그림의 떡
과 같은 허상에 불과할 겁니다.
동시에 오랜기간 이유 없이 얕은 지식의Python
'만' 고집했던 이전의 자신이 매우 어리석었음을 깨달았고, 지금이라도 Java
를 시작하고 다른 기술들을 써보려고 해서 다행이라고 생각합니다.
이론적인 지식은 필수
라는 생각이 들었습니다.
저는 개발을 혼자 공부했던 시간이 길었고, 만들었던 시스템도 대부분 혼자서 사용하는 시스템이 대부분이었습니다. 그러한 과정에서 완벽히 설계하고 작업하기 보다는 대충 만들어보고 원하는 결과를 위해 끼워맞추는
방식으로 코드를 많이 설계했었습니다. Tensorflow
를 사용하기 위해 Tensorflow
의 구성 방법이나 작동법을 이해하려 하지 않고, 예시를 가져와서 적당히 입력과 출력 Dimension만 바꿔서
쓰곤 했습니다.
좋게 말해 Agile
하다고 포장할 수 있겠지만 이는 명백히 잘못된 작업 방식입니다. 자신의 코드를 이해하지 못하는 순간 확장
과 유지보수
는 꿈도 꿀 수 없게 됩니다. Agile
도 이해를 바탕으로 작업을 유동적으로 가져갈 수 있을 때 적용되는 용어라고 생각합니다.
최근 Java
를 공부하면서 코드 설계의 중요성을 계속 느끼고 있습니다. 처음 자바를 공부하면서 했던 불편하게 변수의 타입을 왜 정하고 쓰는거지
라는 생각이 타입을 정하는 것도 나쁘지 않구나
로 변한 것에 스스로 만족하고 있으며, 계속해서 이전의 나쁜 코딩습관
을 없애려고 노력중입니다.