본문 바로가기

Til4

[TIL] golang http server에 timeout handler 추가하기 Golang 서버에 timeout을 적용할 방법을 찾다가 나온 내용을 정리해둔다. 방법 1: http server에 timeout 설정 server := &http.Server{ Handler: h, ReadTimeout: 3 * time.Minute, WriteTimeout: 3 * time.Minute, } ReadTimeout: body를 포함한 전체 request를 읽기 위한 timeout. Handler가 request body의 허용 가능한 deadline이나 upload rate에 대한 request 별 decision을 내리지 않기 때문에 ReadHeaderTimeout을 사용하는 것이 권고된다. ReadHeaderTimeout: header를 읽는데 허용된 시간. Header를 다 읽으면.. 2023. 12. 25.
[TIL] golang buffer 복사 golang에서 buffer를 io.ReadSeeker 인터페이스로 복사해줄 일이 생겼다. buffer 내용은 이후에 읽고 수정하기 때문에 consume하면 안된다. 내부 데이터만 복사해서 넘겨줘야 했다. #fail 1: bytes로 reader 만들어주기 data := bytes.NewReader(rw.Buffer().Bytes()) bytes slice를 그대로 reader로 넘겨주었는데, 이 데이터를 수정하는 시점과 data를 읽는 시점에서 timing issue가 생겼다. data를 읽는 함수가 goroutine으로 async로 구현되어 있기 때문이다. Buffer의 bytes 설명을 보면 다음과 같이 적혀 있다. The slice aliases the buffer content at least .. 2023. 12. 21.
[TIL] mig 해제하기 nvidia a100 80GB gpu를 사용하다 mig를 해제하는 과정에서 생긴 이슈를 정리해 두고자 한다. MIG MIG(Multi-Instance GPU)는 NVIDIA H100, A100, A30 GPU에 적용된 기술이다. MIG는 GPU를 각각 자체 고대역폭 메모리, 캐시, 컴퓨팅 코어를 갖추고 완전히 격리된 최대 7개의 인스턴스로 파티셔닝할 수 있다. MIG를 이용하면 쿠버네티스에서 사용할 때 쓰루풋을 늘릴 수 있다. 기존에는 nvidia.com/gpu 하나당 하나의 모델을 할당할 수 있다. A100을 예로 들면, 80GB의 메모리에 하나의 모델로 이루어진 pod만 띄울 수 있다는 것이다. 이 80GB의 메모리를 모두 사용한다면 문제없지만, 5GB의 메모리만을 사용할 때에는 75GB의 메모리가 .. 2023. 12. 14.
[TIL] Postgresql에서 one-row size 구하기 Postgresql에서 하나의 row의 bytes를 다음 명령어로 구할 수 있다. SELECT sum(pg_column_size(t.*)) as filesize, count(*) as filerow FROM as t where id = ; 테이블 크기에 대해 알고 싶으면 where문을 빼면 된다. SELECT sum(pg_column_size(t.*)) as filesize, count(*) as filerow FROM as t; 2023. 12. 11.