2.Hello Node Kubernetes

2번째 과정에서는 Kubernetes의 기본적인 동작 방식에 대해서 알아 볼 수 있었다. Kubernetes의 클러스터를 생성하는 과정은 Google Cloud Platform에서 기능을 제공하고 있어서 아주 간편했다. 책을 보면서 Kubernetes 공부를 처음 시작하는 과정에서 가장 시간을 많이 소비하게 되는 부분이었는데, 플랫폼에서 제공되는 기능을 glcoud를 이용해서 node와 각 node의 기본적인 설정을 지정후 cluster를 생성하는 명령 하나로 모든 과정이 생략될 수 있게 되었다. 그리고 Registry Server에 등록해 놓았던 Image를 이용해서 직접 “Pod"를 만들어보고, “Pod"의 개념과 “Deployment"의 개념이 무엇인지에 대해서 대략적으로 알아 볼 수 있었다.

1.Introduction to Docker

구글에서 지원해주는 “2019 클라우드 스터디잼 입문반” 스터디에 참여하기 시작했다. 이 스터디는 어떠한 형태로든 모인 멤버들이 일정 기간(1/7~1/27) 동안에 실습이 겸해진 과정(QWIKLABS - Kubernetes in the Google Cloud)을 완수하는 방식이다. 첫번째 과정으로 “Introduction to Docker” 을 진행 했다. 다음은 과정을 진행하면서 학습할 수 있었던 내용의 요약이다. 처음 해보는 과정이라서 그런지 익숙해지기 위한 시간이 약간 필요했지만 그다지 어렵지는 않았다. Docker의 Image와 Container 그리고 Dockerfile의 이해를 위한 몇 가지의 실습이 진행되었다. 실습들을 통해서 Image와 Container를 어떻게 구분지어서 생각해야 하는지를 학습할 수 있었다.

cscope 사용(Go)

Go언어 개발 환경(추가) Go언어로 작성한 코드를 분석하기 위해서 cscope가 필요할 때가 있다. vim에서 cscope를 사용하기 위한 과정을 정리해 보려고 한다. cscope를 설치한다. $ sudo apt-get install cscope mkscope.sh 파일을 만든다. mkscope.sh의 내용은 다음과 같다. 이 스크립트는 https://www.cnblogs.com/shaohef/p/7358111.html 의 내용을 수정해서 사용했다. #!/bin/bash # 기존에 존재하던 files와 out 파일을 제거한다 rm cscope.files cscope.out # $GOROOT가 존재하지 않으면 설정한다. if ["$GOROOT" = ""]; then echo "GOROOT is not set" GOROOT=`go env | grep "GOROOT" | cut -d "=" -f2` GOROOT=${GOROOT#\"} GOROOT=${GOROOT%\"} fi echo $GOROOT # Go 표준 패키지 go_src=$GOROOT/src # Go언어 표준 패키지로 제공되는 go 파일의 경로를 cscope.

git push된 내용을 특정한 commit으로 되돌리기

“iss-123” 브랜치에서 작업하던 내용을 실수로 “iss-133” 브랜치로 push 하는 어이없는 실수를 했을때 “iss-133"에 push 된 내용을 이전으로 되돌려 놓아야 한다. git log로 이전 commit의 id를 확인한다. (ex, d50fd96d2d7e5e5cf689b0943f2b2d20d4c2dda4) [iss-133] $ git reset --hard d50fd96d2d7e5e5cf689b0943f2b2d20d4c2dda4 이제 변경된 내용을 push 한다. [iss-13] $ git push --force origin prj

map에 key가 존재하는지 확인

map을 사용할때 해당하는 키가 map에 존재하는지 확인이 필요할 때가 있다. var target[string]*item ... target["apple"] = itm1 target["orange"] = itm2 ... value, ok := target["kiwi"]

Go언어 프로젝트에서 테스트 코드 작성 경험

주의, 아래의 내용은 학습을 하면서 이해한 정도에서의 정리라서 틀린 내용이 많이 있을 수 있습니다. 이제 테스트 코드 작성을 시도해보기 시작하는 뉴비라서… 잘못된 부분은 지적을 해주시면 감사한 마음으로 배우겠습니다. 테스트 코드는 왜? 현재 프로젝트를 진행 중 코딩을 할 때면 계속해서 의심과 두려움이 들었다. “내가 제대로 작성하고 있는 게 맞나?” “이렇게 작성하면 다른 데에서 문제가 생기는 건 아닌가?” 그리고 이런 걱정들은 다음의 2가지 원인 때문이지 않을까 라고 생각하게 되었다. 첫 번째, 코드 작성 후 실행해서 결과를 확인하기 위해서 개인 개발 환경을 MessageQueue와 내가 보낸 요청에 대해 기대하는 응답을 전달해줄 MessageQueue 반대편의 모듈을 구성하기가 쉽지 않다는 것이었다.

KVM 스터디(with go)

kvm
주의, 이 글은 KVM이 뭔지도 제대로 모르면서 학습한 내용을 정리한거라서, 정확하지 않은 내용이 다수 포함되어 있을 수 있습니다. 틀린 내용은 지적해 주시면 수정해서 반영하도록 하겠습니다. 준비물 노트북(우분투 16.04) KVM이 뭔가요? 하이퍼바이저? 위키백과에 나와 있는 정의( https://ko.wikipedia.org/wiki/%ED%95%98%EC%9D%B4%ED%8D%BC%EB%B0%94%EC%9D%B4%EC%A0%80 ) 를 보면 이렇게 나와 있다. “다수의 운영 체제를 동시에 실행하기 위한 논리적 플랫폼” 여기에 우리가 잘 알고 있는 VmWare, VirtualBox와 같은것도 있고, Xen, KVM 같이 좀 낯선 것들도 있다. 내용을 읽다보면, 왠지 중요해 보이는 단어 Type1, Type2, 전가상화, 반가상화 뭐 이런 단어들이 나온다.

core파일 만들기

Go언어에서도 core dump를 떨구는 방법이 있었다. 데이브체니님이 정리해 놓은 무려 2015년도의 글이다. https://dave.cheney.net/2015/11/29/a-whirlwind-tour-of-gos-runtime-environment-variables 환경변수로 GOTRACEBACK 을 crash로 설정만 해주면 된다. 이런것도 모르고 Go언어에서는 dump를 생성할 수 없다고 말하고 다녔다…; 근데 위에 처럼 환경변수 설정하고도 core 파일이 안생긴다면, 다음 블로그의 글을 참고해 보면 좋을것 같다. http://lapan.tistory.com/68 블로그의 내용처럼 ulimit -a 로 확인 해보니 core file size가 0으로 되어 있다. ulimit -c unlimited 로 해주었다. 이제 panic을 발생시켜 보면 core 파일이 잘 만들어져 있는걸 확인 할 수 있다.

docker 시작하기

docker ce 설치 오래된 버전 제거 $ sudo apt-get remove docker docker-engine docker.io 패키지 인덱스 업데이트 $ sudo apt-get update apt가 https를 통해서 저장소를 사용할 수 있도록 패키지를 설치 $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common docker의 공식 GPG 키를 추가 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - fingerprint를 확인 $ sudo apt-key fingerprint 0EBFCD88 안정화 버전의 저장소를 추가 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.

delve를 사용한 Go언어 디버깅

소개 delve는 Go언어를 위한 debugger 이다. delve설치 설치를 하기위해서는 Go 1.5 이상의 버전이 필요하다. 지금 시점에 Go 1.5를 사용하지 않을테니… 다음의 명령으로 설치한다. $ go get github.com/derekparker/delve/cmd/dlv 이제 설치 끝! (Windows랑 MAC은 모르겠다.) delve사용 프로세스 실행 제어, 변수, 스레드/goroutine 상태, CPU 레지스터 상태 등을 확인 할 수 있다. Commands attach: 실행중인 프로세스에 연결해서 디버깅을 한다. $ dlv attach pid [executable] 실행중인 프로세스에 디버그 세션을 연결해서 프로세스를 제어한다.