본문 바로가기

전체 글74

[TIL] Redis Scan 개선 Primary Database로 in-memory db, 그 중에서도 redis를 사용하고 있다. Redis를 사용하는 이유는 disk io가 많이 발생하지 않고, 적재하는 데이터의 양이 크지 않기 때문에 in-memory state로도 충분하기 때문이다. 하지만 관계형 데이터베이스만 쓰다가 처음 in-memory database를 사용하니 rdb에서는 매우 간단하게 했던 select, join하는 작업이 쉽지 않았다. select를 잘못 구현해서 문제가 발생하고 해결한 과정에 대해서 적어보고자 한다. Context 다음 sql을 redis에서 수행하려고 한다. select * from ; 이를 위해 Scan method와 HScan method을 사용했다. Redis에는 다음과 같이 저장되어 있다. :.. 2023. 10. 21.
[TIL] npm ci vs npm install 우연히 다른 동료분이 사용해서 알게된 npm ci에 대해 정리해보고 기존에 사용하던 npm install과 비교해 보았다. 참고 문서: https://docs.npmjs.com/cli/v10/commands/npm-ci Description clean-install의 줄임말이다. test platform, continuous integration, deployment같은 자동화된 환경에서 사용하는 것을 목적으로 한다. npm install과의 차이점 project는 무조건 package-lock.json이 이미 존재해야 한다. package-lock.json과 package.json이 일치하지 않는 경우 업데이트하는 것이 아닌, error를 리턴한다. individual dependency가 추가되지는 .. 2023. 10. 17.
Go convention 정리 Golang으로 코드를 작성할 때 알아두면 좋은 convention을 정리해두고자 한다. 참고 자료 https://github.com/golang/go/wiki/CodeReviewComments Comment 주석은 full sentence로 달도록 하자. // Request represents a request to run a command. type Request struct { ... // Encode writes the JSON encoding of req to w. func Encode(w io.Writer, req *Request) { ... Contexts context는 security credential, deadline, cancelation 등을 담을 수 있다. 함수의 첫 번째 인자로.. 2023. 10. 3.
golang에서 for loop scoping go 1.22버전에서 for loop 내의 변수 범위에 대한 업데이트가 있어서 공식 블로그에 올라온 글을 번역하면서 정리해보고자 한다. 관련 문서 https://go.dev/blog/loopvar-preview https://go.googlesource.com/proposal/+/master/design/60078-loopvar.md 문제 go로 코드를 짜면 다음과 같이 실수를 저지르는 경우가 많을 것이다. func main() { done := make(chan bool) values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done 2023. 10. 2.