Go 서버 악마 퇴치기 2탄 - goroutine과 channel의 무서움
·
Error Handling
(최초 작성일: 2024.12 ...ㅎ...)프로젝트를 진행하면서 전체 코드 마무리를 내가 맡았는데, 데이터를 꼼꼼히 다시 재검토하면서 데이터가 기존과 상이한 것을 발견했다.대충 코드를 훑어보면 아무 문제가 없어 보였기 때문에 대체 왜!!! 왜!!! 데이터가 제대로 쌓이지 않는지 내 소중하 머리털을 쥐어 뜯으며 삽질에 삽질을 더했다.다른 이슈들도 병행했기 때문에 원인 발견에만 이틀 정도가 소요되었다!! 해결하지 못하면 어떡하지 싶은 아찔한 기분도 느꼈었다.원인을 알아내니 다행히 해결은 차근차근 빠르게 진행할 수 있었다. 나는 이 에러들을 'Go 서버의 악마들'이라고 감히 말하고 싶다!평소에는 Go 언어의 장점으로 개발자들에게 편의성을 제공하는걸로 알려져 있지만 잘못 사용하게 된다면 그야말로 악마로 탈변하..
[Go] 실시간 ohlcv 차트(캔들 차트) 데이터 적재 서버 개발 in 블록체인 플랫폼 - Part 2. 해결편
·
Error Handling
이 글을 3월 9일에 쓰기 시작했는데 현생이 바빠서 6월에 완성..ㅎ..~블록체인 플랫폼 실시간 ohlcv 차트 개발기 시리즈~[1] 실시간 ohlcv 차트(캔들 차트) 데이터 적재 서버 개발 in 블록체인 플랫폼 - Part 1. 문제편[2] 실시간 ohlcv 차트(캔들 차트) 데이터 적재 서버 개발 in 블록체인 플랫폼 - Part 2. 해결편[3] 블록체인 플랫폼 실시간 ohlcv 차트 적재 서버 후속편:Refactoring (1)[4] 블록체인 플랫폼 실시간 ohlcv 차트 적재 서버 후속편: Refactoring (2)[5] 블록체인 플랫폼에서 실시간 ohlcv 차트 적재 서버 후속편: RestructuringRestructuring🟧 얼기설기 끼워 맞추기QA 테스트 기간 전까지 남은 개발 기..
[Go] 실시간 ohlcv 차트(캔들 차트) 데이터 적재 서버 개발 in 블록체인 플랫폼 - Part 1. 문제편
·
Error Handling
블록체인 업계에서 핫했던 '밈 코인 발행 플랫폼'을 우리 회사에서도 개발하게 되었다.~블록체인 플랫폼 실시간 ohlcv 차트 개발기 시리즈~[1] 실시간 ohlcv 차트(캔들 차트) 데이터 적재 서버 개발 in 블록체인 플랫폼 - Part 1. 문제편[2] 실시간 ohlcv 차트(캔들 차트) 데이터 적재 서버 개발 in 블록체인 플랫폼 - Part 2. 해결편[3] 블록체인 플랫폼 실시간 ohlcv 차트 적재 서버 후속편:Refactoring (1)[4] 블록체인 플랫폼 실시간 ohlcv 차트 적재 서버 후속편: Refactoring (2)[5] 블록체인 플랫폼에서 실시간 ohlcv 차트 적재 서버 후속편: RestructuringRestructuring 🟧 개요 '밈 코인 발행 플랫폼'이란 사용자가..
Go 서버 악마 퇴치기 1탄 - 포인터와 슬라이스를 쓸 때 주의할 점
·
Error Handling
Go로 서버를 개발하다 보면, 포인터와 슬라이스를 사용했을 때 '말도 안되는' 버그를 마주치게 될 때가 있다.그 사건들을 차례대로 정리해보려고 한다.🟧 문제 상황아래와 같이 주기적으로 호출되어 데이터를 업데이트하는 코드가 있다.type Token struct { Symbol string ... IsListed bool PairIdentifier string}func (o *TokenManager) refreshTokenData(tokens []*Token) error { o.tokenMutex.Lock() defer o.tokenMutex.Unlock() updatedTokens := make(map[string]*Token) for _, token := range ..
[Go] field 이름을 기준으로 field 초기화하기 with reflect
·
Language/Go
상황 설명회사에서 MySQL로 DB를 바꾸면서 코드를 전반적으로 수정할 수 있는 기회가 있었다. 평소에 사소하지만 눈여겨 보고 있었던 리팩토링 희망사항(?)이 있었는데,바로 config에 입력된 수많은 db 테이블들을 go 코드에서 각각 객체로 만들기 위해 또 변수명으로 해당 이름을 재사용(!)한다는 점이다. 말보다는 코드로 보는게 설명이 편할 것 같아 냅다 예시 코드를 가져왔다. (그렇다 원래는 MongoDB를 사용했다.)// config.toml[SomeDB]collectionName1 = "collectionName1"collectionName2 = "collectionName2"collectionName3 = "collectionName3"// config.gotype SomeDB struct {..
[Go] util 함수 개발기 - klaytn 패키지의 unpack 함수에서 abi 의존성 제거하기
·
Project
이력서를 정리하면서 내가 많은걸 배웠던 버그 리폿팅 & 기능 개발에 대해서도 같이 정리하는 편이다.그 중 블로그에 올려도 괜찮겠다 싶은 사례가 있어서 가져왔다. 이것말고도 더 많지만 아직 글이 정리가 안되어서 다듬어지면 또 가져와보겠다..ㅎ 3문단으로 이 글을 요약하자면 아래와 같다. [Situation]- RPC 통신으로 받은 데이터를 바로 프로젝트 안에서 사용하는 변수에 할당해주는 unpack 함수 개발 필요(unpack 함수를 지원하던 패키지를 확장성 문제로 사용하지 않게됨)[Task]- 기존 사용하던 외부 패키지의 함수는 ABI 규격을 이용해 변수에 알아서 할당을 해주었음. 그러나, gateway 서버를 사용하는 현재 프로젝트 구조상 ABI를 참고할 수 없음- 현재 모든 서버가 공통적으로 RPC ..