Backend
-
WriteConflict 해결 노트Backend/MongoDB 2025. 2. 16. 17:36
원인 발생특정 서비스에서 MongoDB를 사용하고 있고, 테스트중에 WriteConflict가 발견되었다. 원인은 다음과 같다.A 기능에서 k document를 조회 및 업데이트B 기능에서도 k document를 조회 및 업데이트 각 A,B 기능이 독립적으로 또는 순차적으로 흐를것이라고 판단했었는데, 다음과 같은 상황을 고려하지 못했다. Kafka를 통해 타 서비스의 이벤트를 받고 A,B의 기능이 실행되는데, 서버가 재시작 또는 배포로 인해 시작되는 순간 Kafka에 연결되면서 Rebalancing이 된다. 이때 각 Topic의 Partition에 A,B의 기능이 실행되는 Topic A, Topic B가 같이 쌓였다면, Rebalancing이 완료되고, Polling을 해오는 순간 2개가 연달아 서비스에..
-
TestFixture를 잘 사용해보기Backend/Test 2024. 12. 27. 23:31
TestFixture ?TestFixture는 Test에 사용되는 Mocking되어지는 객체입니다. Wikipedia - 테스트 실행에 필요한 시스템 상태와 입력 데이터를 설정하는데 사용됨 기존에 사용했던 방법Spring boot project에서는 /src/java, /src/test 두 개의 폴더가 존재해 test와 관련된 내용은 /src/test 에 모아놨다. 그리고 TestFixture 또한 여기 폴더에 두었다. 그렇다 보니 test폴더에는 테스트 코드와 테스트를 위한 테스트 픽스처가 한 곳에 있어 보기가 안 좋았고, 이를 다른 모듈에서 (멀티 모듈로 사용하고 있었다.) 공유가 된다면, 테스트 코드까지 공유가 되어 "더 좋은 방법이 없을까?" 라는 고민이 있었다. 찾다보니 Gradle에서 Test..
-
AsyncStorage 활용하기Backend/Nodejs 2022. 12. 24. 00:41
안녕하세요. 오늘은 Nodejs의 AsyncStorage를 소개하고, 어떻게 활용하였는지에 대해 얘기해보려고합니다. 1. AsyncStorage 소개 nodejs 공식 홈페이지에는 다음과 같이 설명을 하고 있습니다. AsyncStorage는 state(상태)를 연결하고 callback과 promise chain에 state를 전파하는데 사용됩니다. 웹 request, 기타 비동기 작업의 lifetime에 데이터를 저장할 수 있습니다. 다른 언어의 thread local storage와 유사합니다. nodejs의 비동기 작업에서 일관성이 유지되는 저장소(AsyncStorage)를 생성하여 독립적인 storage context 가질 수 있습니다. 여러 인스턴스에서 서로의 데이터를 접근할 수 없습니다. 이 뜻..
-
[go] " ... " 에 대해Backend/GO 2019. 12. 13. 14:48
Discord github을 보다가 golang에서 제공하는 net/http 라이브러리를 튜닝하여 fasthttp를 만들어서 사용한다는 것을 봤다. 어떻게 fasthttp를 만들었으며, 어떤 특징이 있나 보던 중 Tricks with []byte buffers discordapp/fasthttp Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http - discordapp/fasthttp github.com 이 부분에서 dst = append(src, "foobar"...) 인 부분을 보고 ...에 대해 자세히 조사가 하고 싶어져 이 글을 작..
-
[go] practice : web crawlBackend/GO 2016. 8. 10. 11:42
A Tour of go 의 연습문제 중연습 : 웹 크롤러 (#71) 부분이 있다. 여기서는 go의 동시성 기능을 이용해 웹 크롤러를 병렬화해 보는 것이 목적이다. 이 예제를 해보면서 복잡했던 부분이 있다 crawl() 함수를 병렬로 처리하기 위해 go routine을 이용했다 go routine은 golang에서 지원하는 경량 쓰레드이다. 병렬로 처리하려면 공유하는 자원을 동기화 해야한다. 이 부분에 channel이라는 것을 이용을 했는데, channel은 golang에서 지원하는 파이프라인으로ch
-
[go] slice 연습문제Backend/GO 2016. 7. 20. 18:39
A Tour of Go에서 연습 : 슬라이스 장이 있다. 여기서는 2차원 슬라이스를 만들어서 '어떤' 그림을 만드는 것이다. 그림을 만들때에는 여러분이 원하는 것으로 선택을 할 수 있다. 예를 들면... 1) x ^ y 2) (x + y) / 2 3) x * y 등이 있다. pic 라이브러리에서 show라는 메서드가 있는데 이 메서드는 [][]uint8인 슬라이스의 값을 흑백(사실은 파란색이라 한다)을 나타내는 값으로 해석하여 그림으로 보여준다. GO에서 make함수는 슬라이스를 만들어 주는 함수로써 document를 보면 func make(Type, size IntegerType) Type make([]int, 0, 10)을 하게 되면 Integer타입의 length는 0, capacity가 10인 S..
-
[go] go-tour중 import문제Backend/GO 2016. 7. 20. 18:20
A Tour of Go에서 연습 : 슬라이스장을 해보던 중 import "code.google.com/p/go-tour/pic" package를 import하는 부분이 있었다. 설치를 제대로 했다면 go get 명령을 이용해서 해당 package를 다운받으면 된다. >go get code.google.com/p/go-tour/pic 그러면 이런 메시지가 나오는데 소스가 옮겨져서 찾을 수 없다고 한다. code.google.com/p/go-tour/pic로 가면 옮겨진 URL이 나오는데 그 URL로 go get을 하면... >go get github.com/golang/tour/pic 실행하게 되면 "golang.org/x/tour/pic"로 import를 하면 된다고 나온다그래서 해보게 되면 Packag..