전체 글 70

Go 테스트 코드 깔끔하게 작성하기

go에서 테스트 코드를 작성하는 방법은 여러가지가 있다.개인적인 취향으로는 이런 테스트 코드가 가독성도 높고, 결과를 보기도 쉬웠다. 먼저 main 코드다// main.gopackage mainimport "fmt"func main() { fmt.Println("Hello World!")}// 테스트할 함수의 결과 값 유형을 정의type BodyType int const ( normal BodyType = 1 small BodyType = 2 tall BodyType = 3 none BodyType = 4)// 테스트할 함수의 input 구조체type Person struct { Name string Age int Body *Body}type Body struct { height int weigh..

공부/Go 2024.08.28

나에게 큰 영향을 준 책들

최근 데일 카네기의 『인간관계론』을 읽다 보니, 내가 지금까지 읽었던 책들의 주제와 이어져 있는 느낌이 들었다.『미움받을 용기』와 『번뇌 리셋』이다.마치, [인간 행동의 원리] - [원리를 이용한 타인 컨트롤] - [원리에 휘둘리지 않도록 자신 컨트롤] 시리즈 같다.1. 『미움받을 용기』 『미움받을 용기』부터 얘기하자면, 이 책은 3대 심리학자로 유명한 알프레드 아들러의 심리학 이론을 대화형으로 쉽게 풀어낸 책이다.이 책에서는 사람이 행복을 느끼는 근원이 무엇인지 한 문장으로 알려준다."행복은 공헌감" 이다. 사람은 누군가에게 자신이 도움이 된다는 것에 행복을 느끼고, 그 행복을 채우려는 욕구를 느낀다.그리고 그 욕구에 따라 행동하게 된다.여기서 공헌감은 그 사람의 가치관에 따라 천차만별이다. 물론 다른..

일상/취미 2024.05.20

IDE로 코드 리뷰할때 개인적인 팁

일단 git 웹 뷰로는 솔직히 코드 리뷰 하기가 힘들다. 딱 바뀐 부분만 나오기 때문이다. 그래서 git clone 하여 개인 IDE로 열어서 해당 브랜치로 checkout 하여 보는데 막상 그렇게하면 어디가 바뀌었는지 알기가 쉽지 않다. vscode에서는 unstage 상태의 변경사항(add가 되지 않은 변경사항)은 표시해준다. 그러면 commit된 것들을 unstage로 되돌리면 된다. 먼저 git log 명령어로 어디까지 되롤릴지 확인한다 > git log commit a9d21cb2bebc66cdb811693ae61f8dd0b45703cf (HEAD -> https) Author: Seungwon Lee Date: Tue Jul 26 16:41:51 2022 +0900 Add TLS option ..

공부/Linux 2024.04.18

Go에서 배열 구조체를 포함한 구조체의 값 변경할 때 주의사항

Go에서 이미 값이 할당된 다중 구조체(nested structure)의 내부 배열 구조체에 어떤 값을 변경할 때는 for 문에서 인덱스를 사용해서 직접 접근해야한다. 가끔 습관적으로 for k, v := range S 를 하며 v를 통해 값을 할당하는 실수를 저지르게 된다. type Outer struct { name string inner []Inner } type Inner struct { A int B int } func changeInner() { outer := Outer{ name: "togomi", inner: []Inner{ { A: 5, B: 6, }, }, } for k, v := range outer.inner { // 잘못된 방법 v.A = 1 v.B = 2 // 옳은 방법 out..

공부/Go 2023.12.14

golang http connection(socket) 재사용하기

회사에서 부하테스트를 하던 도중 겪은 일이다. 부하를 주는 클라이언트가 할당된 리소스도 다 사용하지 못하고, 기대하던 RPS도 나오지 않는 현상이 있었다. netstat 명령어로 확인 결과 상당 수의 소켓의 status가 TIME_WAIT 인 것을 발견했다. TIME_WAIT은 연결은 종료된 상태지만, 바로 소켓을 반납하지 않고 혹시나 송신측에서 데이터를 보낼 수 있는 것을 기다리는 상태이다. 내가 기대했던 바는 소켓을 종료하지도, 반납하지도 않고 다음 통신에 재사용하는 것이다. 사실 해결법은 정말 간단하다. go http 패키지는 기본적으로 소켓 재사용 정책이 적용되어있기 때문에, 아래 사항만 모두 지켜주면 된다. response body를 전부 읽는다. body를 close한다. 중요해서 볼드체로 했..

공부/Go 2023.06.22

Kubernetes 사용을 편리하게 해주는 툴

k9s 원래는 일일히 kubectl 명령어 치는 것을, 한 번의 키입력으로 가능하게끔 해주는 툴 정말 편하다 설치 방법 K9S_VERSION=v0.26.7 curl -sL https://github.com/derailed/k9s/releases/download/${K9S_VERSION}/k9s_Linux_x86_64.tar.gz | sudo tar xfz - -C /usr/local/bin k9s 사용법 k9s kubectx 다루는 k8s 클러스터가 많을 때 컨텍스트 변경을 쉽게 해주는 툴 ~/.kube/config에 여러 클러스터를 기술하고, kubectx로 변경한다. 설치 방법 wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubec..

공부/Kubernetes 2023.02.20

k8s client-go leader election 코드 메커니즘 분석

개념 leader election이란 말 그대로 리더를 선출하는 것으로, CS에서 자주 쓰이는 개념이다. kubernetes go client에서는 이러한 leader election 기능을 제공한다. 아래는 k8s go client가 사용하는 leader election 방식에 대한 간단한 그림이다. 특정 리소스(그림 상에서 Lock)에 대해서 소유권이 자신에게 있다고 작성하는 사람이 leader이다. 일단 leader가 되면 leader는 주기적으로(그림 상에서 leaseDuration) 자신이 아직도 리더임을 갱신한다.(그림 상에서 lastObservedTime) leader가 되지 못한 나머지는 주기적으로 그 리소스를 확인하다가, 한 주기가 지났는데도 리더가 갱신을 못했을 시 소유권이 자신에게 있..

공부/Kubernetes 2022.11.09