GORM+MySQL Connection Pool
GORM 의 Connection pool회사에서 마주친 에러$ [mysql] 2024/03/11 18:37:09 packets.go:122: closing bad idle connection: unexpected read from socket $ [mysql] 2024/03/11 18:37:09 packets.go:122: closing bad idle connection: unexpected read from socket Batch 처리를 요하는 작업들이 모여있는 인스턴스에서 발생했다. 비즈니스 로직 자체에는 문제가 없었고, 커넥션 관련 설정도 디폴트로 되어있는 상황이었다. 사실 서비스 전체적으로 보면 MySQL 자체를 많이 쓰는 상황은 아니었고, 동시에 실행되는 job 이 MySQL 기반이었어서 커넥션 관련 문제로 좁혀놓고 디버깅을 시작했다. 이 과정에서 새롭게 알게된 사실에 대한 기록.MaxLifeTimegorm 은 sql 패키지의 DB 객체를 wrapping 하고 있다....
GORM+MySQL Connection Pool
GORM 의 Connection pool회사에서 마주친 에러$ [mysql] 2024/03/11 18:37:09 packets.go:122: closing bad idle connection: unexpected read from socket $ [mysql] 2024/03/11 18:37:09 packets.go:122: closing bad idle connection: unexpected read from socket Batch 처리를 요하는 작업들이 모여있는 인스턴스에서 발생했다. 비즈니스 로직 자체에는 문제가 없었고, 커넥션 관련 설정도 디폴트로 되어있는 상황이었다. 사실 서비스 전체적으로 보면 MySQL 자체를 많이 쓰는 상황은 아니었고, 동시에 실행되는 job 이 MySQL 기반이었어서 커넥션 관련 문제로 좁혀놓고 디버깅을 시작했다. 이 과정에서 새롭게 알게된 사실에 대한 기록.MaxLifeTimegorm 은 sql 패키지의 DB 객체를 wrapping 하고 있다....
Ethereum Cancun Upgrade Explained
Ethereum Cancun Upgrade ExplainedEthereum Cancun-Deneb(Dencun) 업그레이드는 2024년 3월 13일에 적용된다. 무엇을 위한 업그레이드인지 살펴보자.… Ethereum 네트워크의 확장성, 보안 및 유용성을 향상시키기 위한 중요한 하드 포크 업그레이드 세트입니다. 이 업그레이드는 상하이 업그레이드와 같은 이전 업그레이드의 성공을 기반으로 하는 이더리움의 지속적인 발전의 일부입니다. Dencun 업그레이드는 실행 계층(Cancun)과 합의 계층(Deneb) 모두에 대한 변경으로 구성되며 네트워크 기능 최적화를 목표로 하는 일련의 Ethereum 개선 제안(EIP)을 도입합니다.요지는 확장성 + 보안 및 유용성의 향상이라고 볼 수 있겠다. 어떻게 해서 이 목표를 달성했을까?proto-dankshardingproto-danksharding 기술(EIP-4844)을 활용해 체인을 더 작은 Blob 으로 분할하는 것이라고 한다. 이를 통해 ...
Ethereum Cancun Upgrade Explained
Ethereum Cancun Upgrade ExplainedEthereum Cancun-Deneb(Dencun) 업그레이드는 2024년 3월 13일에 적용된다. 무엇을 위한 업그레이드인지 살펴보자.… Ethereum 네트워크의 확장성, 보안 및 유용성을 향상시키기 위한 중요한 하드 포크 업그레이드 세트입니다. 이 업그레이드는 상하이 업그레이드와 같은 이전 업그레이드의 성공을 기반으로 하는 이더리움의 지속적인 발전의 일부입니다. Dencun 업그레이드는 실행 계층(Cancun)과 합의 계층(Deneb) 모두에 대한 변경으로 구성되며 네트워크 기능 최적화를 목표로 하는 일련의 Ethereum 개선 제안(EIP)을 도입합니다.요지는 확장성 + 보안 및 유용성의 향상이라고 볼 수 있겠다. 어떻게 해서 이 목표를 달성했을까?proto-dankshardingproto-danksharding 기술(EIP-4844)을 활용해 체인을 더 작은 Blob 으로 분할하는 것이라고 한다. 이를 통해 ...
Ethereum Beacon chain
Beacon chain이더리움은 확장성 문제를 해결하기 위해 샤딩과 POS를 도입하기로 했다. 샤딩이란, 데이터베이스를 분할해서 데이터베이스의 부하와 체인의 지나친 중앙화를 막는 전략이다. POS란 지분 증명으로, 기존 POW와는 다르게 속도면에서 빠르다. POW는 컴퓨팅 자원을 소모해야만 합의 과정에 참여할 수 있지만, POS는 가지고 있는 ETH로 합의 과정에 참여할 수 있기 때문이다. 이더리움의 비콘 체인은 POS가 적용된 블록체인이다. 기존의 POW 가 아닌 이더리움 2.0을 위한 POS 가 적용된 블록체인이다. 비콘체인은 참여자들을 관리하는데, 어떤 검증자가 블록을 제안해야 할지, 위원회가 되어 블록을 증명해야 하는지 등의 역할을 한다.그림처럼 POW로 블록을 생성하는 메인 체인과 평행하게, POS 로 블록을 생성한다. 그러다 The Merge 업그레이드로 POW 가 아닌 POS 로 Mainnet 의 TX 처리를 시작하면서 블록 전파 및 합의 로직까지 담당하게 되었다....
Ethereum Beacon chain
Beacon chain이더리움은 확장성 문제를 해결하기 위해 샤딩과 POS를 도입하기로 했다. 샤딩이란, 데이터베이스를 분할해서 데이터베이스의 부하와 체인의 지나친 중앙화를 막는 전략이다. POS란 지분 증명으로, 기존 POW와는 다르게 속도면에서 빠르다. POW는 컴퓨팅 자원을 소모해야만 합의 과정에 참여할 수 있지만, POS는 가지고 있는 ETH로 합의 과정에 참여할 수 있기 때문이다. 이더리움의 비콘 체인은 POS가 적용된 블록체인이다. 기존의 POW 가 아닌 이더리움 2.0을 위한 POS 가 적용된 블록체인이다. 비콘체인은 참여자들을 관리하는데, 어떤 검증자가 블록을 제안해야 할지, 위원회가 되어 블록을 증명해야 하는지 등의 역할을 한다.그림처럼 POW로 블록을 생성하는 메인 체인과 평행하게, POS 로 블록을 생성한다. 그러다 The Merge 업그레이드로 POW 가 아닌 POS 로 Mainnet 의 TX 처리를 시작하면서 블록 전파 및 합의 로직까지 담당하게 되었다....
Socket programming
Socket"소켓(Socket)"은 사전적으로 "구멍", "연결", "콘센트" 등의 의미를 가진다. 네트워크 프로그래밍에서의 소켓(Socket)에 대한 의미도, 사전적 의미를 크게 벗어나지 않는다. 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, "네트워크 환경에 연결할 수 있게 만들어진 연결부"가 바로 "네트워크 소켓(Socket)"이다.https://recipes4dev.tistory.com/153하지만 엄밀히 따지자면, "네트워크 소켓"이라는 용어가 정확한 표현은 아니다. 전기 소켓이 전기를 공급받기 위해 정해진 규격(110V, 220V 등)에 맞게 만들어져야 하듯, 네트워크에 연결하기 위한 소켓 또한 정해진 규약, 즉, 통신을 위한 프로토콜(Protocol)에 맞게 만들어져야 한다. 보통 OSI 7 Layer(Open System Interconnection 7 Layer)의 네 번째 계층인 TCP(Transport Control Protocol) 상에서 동작하는 ...
Socket programming
Socket"소켓(Socket)"은 사전적으로 "구멍", "연결", "콘센트" 등의 의미를 가진다. 네트워크 프로그래밍에서의 소켓(Socket)에 대한 의미도, 사전적 의미를 크게 벗어나지 않는다. 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, "네트워크 환경에 연결할 수 있게 만들어진 연결부"가 바로 "네트워크 소켓(Socket)"이다.https://recipes4dev.tistory.com/153하지만 엄밀히 따지자면, "네트워크 소켓"이라는 용어가 정확한 표현은 아니다. 전기 소켓이 전기를 공급받기 위해 정해진 규격(110V, 220V 등)에 맞게 만들어져야 하듯, 네트워크에 연결하기 위한 소켓 또한 정해진 규약, 즉, 통신을 위한 프로토콜(Protocol)에 맞게 만들어져야 한다. 보통 OSI 7 Layer(Open System Interconnection 7 Layer)의 네 번째 계층인 TCP(Transport Control Protocol) 상에서 동작하는 ...
K8S SIGTERM
Graceful Shutdown대부분의 서버/엔진을 구현할 때, 무중단 배포시 혹은 임의 종료시에 정상적으로 종료되도록 하는 것이 좋다. Graceful shutdown 은 프로그램이 종료될 때 최대한 Side effect 가 없도록 로직들을 잘 갈무리하고 종료하도록 하는 것을 뜻한다. 로직이 진행되고 있는 와중에 프로세스가 종료되어버리면 처리중인 데이터가 증발할 수도 있고, 어디까지 처리중에 멈추었는지 추적하기 힘들어지는 경우도 있다. 보통 SIGTERM 을 이용해서 구현한다. 아래는 graceful shutdown 을 위해 Go 에서 주로 사용하는 방법이다.func main() { stop := make(chan os.Signal, 1) signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM) <-stop // ... } 위와 같이 구현하면, SIGINT 와 SIGTERM 신호가 왔을때 바로 종료되는 것이 아니라 Catch 해서...
K8S SIGTERM
Graceful Shutdown대부분의 서버/엔진을 구현할 때, 무중단 배포시 혹은 임의 종료시에 정상적으로 종료되도록 하는 것이 좋다. Graceful shutdown 은 프로그램이 종료될 때 최대한 Side effect 가 없도록 로직들을 잘 갈무리하고 종료하도록 하는 것을 뜻한다. 로직이 진행되고 있는 와중에 프로세스가 종료되어버리면 처리중인 데이터가 증발할 수도 있고, 어디까지 처리중에 멈추었는지 추적하기 힘들어지는 경우도 있다. 보통 SIGTERM 을 이용해서 구현한다. 아래는 graceful shutdown 을 위해 Go 에서 주로 사용하는 방법이다.func main() { stop := make(chan os.Signal, 1) signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM) <-stop // ... } 위와 같이 구현하면, SIGINT 와 SIGTERM 신호가 왔을때 바로 종료되는 것이 아니라 Catch 해서...