개요제이펍 IT 전문서 리뷰어 활동으로 “커맨드라인 러스트”를 리뷰한다.알라딘 링크: http://aladin.kr/p/Lqlxs리뷰 동기Go를 좋아하는 Gopher라면 Rust와 비교하는 글들을 넘쳐나게 보아왔을 것이다. 비교적 비슷한 시기에 만들어졌고, 컴파일 언어이며 높은 성능을 자랑하다보니 그런가보다. 재미있는 인연이라면 Rust를 만든 그레이든 호어(Graydon Hoare)와 고언어의 고루틴 개념의 뿌리가 되는 CSP(Communicating Sequential Processes)를 만든 토니 호어(Tony Hoare)가 같은 성이라는 것. 책에서도 언급되지만 둘은 아무 관계도 아니라 한다.아무튼, Go에 비해 좀더 메모리 안정성이 높고, 성능도 조금이나마 우월한 Rust는 시스템 프로그래밍과..
개요 2021년에도 관련글을 작성 하였었는데 최근에 이 부분을 한 번 더 읽게되어 정리해둔다. Timeout은 강건한(robust) 애플리케이션을 만드는데 핵심적인 역할을 한다. 우리가 제어할 수 없는 외부의 시스템, 서버와 소통을 하는데 무한정 기다릴 수가 없으니 일정 시간내에 원하는 응답을 받지 못하면 더 이상 기다리지 않는것이다. http.Client 에서는 다양한 Timeout을 설정할 수 있는데 http.Client의 Timeout 필드만 보자. http.Client의 Timeout 필드 type Client struct { Transport RoundTripper CheckRedirect func(req *Request, via []*Request) error Jar CookieJar Time..
개요 Golang 개발시에만 로그가 출력되었으면 하는 경우가 있다. 이럴때는 환경변수와 로그 설정을 활용할 수 있다. 단순한 내용이지만 기록해둔다. 코드 예시 환경변수 RUN_MODE를 읽어들여서 그 값이 dev 가 아니라면 log의 출력을 io.Discard로 내보낸다(== 버려버린다) dev 라면 discard 되지 않고 출력이 된다. 💡 Discard is an io.Writer on which all Write calls succeed without doing anything. // Go 1.20 package main import ( "io" "log" "os" ) func main() { runMode := os.Getenv("RUN_MODE") if runMode != "dev" { log...
개요 요청이 빈번하게 발생한다면 연결을 끊지않고 유지해두는 것이 낫다. 하지만 요청이 없는데도 연결을 유지하는 것은 또 다른 비용이다. 이번에는 연결을 언제까지 유지하여야 하는지에 대한 설정을 알아보자. IdleConnTimeout 이다. MaxIdleConns: 유지 가능한 최대 유휴 커넥션 수, default: 100 MaxIdleConnsPerHost: 호스트마다 유지 가능한 최대 유휴 커넥션 수, default: 2 IdleConnTimeout: 유휴 커넥션 타임아웃, default: 90초 MaxConnsPerHost: 호스트마다 사용 가능한 최대 활성/유휴 커넥션 수, default: 0 (무제한) 커넥션 풀에 무한정 연결을 유지할 수 없다. 클라이언트 코드 서버는 이전 포스팅에서와 같이 바로..
개요 지난 포스팅에서는 MaxConnsPerHost의 기본 설정이 무제한이라 에러가 발생한 경우를 보았다. 기본 설정을 보완하여 문제를 해결해보자. 기본 설정을 참고로 다시 보아두자. MaxConnsPerHost는 하나의 호스트(서버)에 연결할 수 있는 개수의 설정이다. MaxIdleConns: 유지 가능한 최대 유휴 커넥션 수, default: 100 MaxIdleConnsPerHost: 호스트마다 유지 가능한 최대 유휴 커넥션 수, default: 2 IdleConnTimeout: 유휴 커넥션 타임아웃, default: 90초 MaxConnsPerHost: 호스트마다 사용 가능한 최대 활성/유휴 커넥션 수, default: 0 (무제한) 호스트(서버)당 최대 연결개수의 제한 서버코드 서버는 요청을 받..
개요 Golang HTTP 클라이언트의 커넥션 풀(connection pool)에 대해서 명확히 정리하고 싶다는 욕심이 있었는데 좋은 블로그 포스팅을 찾아서 이참에 정리를 해본다. 내용의 대부분과 코드는 다음 링크에서 가져온 것이다. 링크: https://www.sobyte.net/post/2022-03/go-http-client-connection-control/ 버즈빌 기술 블로그의 글도 정성이 가득하여 큰 도움이 되었다. 링크: https://tech.buzzvil.com/blog/http-connection-pool-in-go-explained/ 개념 정리 서버와 클라이언트는 서로간의 원하는 작업을 위해 연결하고 일을 한다. 이를 다음과 같이 비유해본다. 전송 계층(Transport layer) ..
개요 1. 특정 파일 하나를 embed 하여 고객이 template으로 요구할 경우 다운로드 할 수 있도록 하고 싶다. 2. Golang echo framework 를 사용중이다. 내용 GitHub: https://github.com/nicewook/echo-serve-embedfile embed로 가져온 다음 ReadFile() 메서드로 파일을 읽어 바이트 슬라이스로 만든 다음 Content Disposition 헤더로 파일이름을 지정하고 ContentType을 명시한 다음 바이트 슬라이스를 회신한다. //go:embed static var static embed.FS func main() { e := echo.New() e.GET("/csv", func(c echo.Context) error { p,..
이 글은 Golang이라기 보다는 Postgres 이야기이다. 개요 Postgres는 timestamp, timestamptz 라는 데이터베이스 타입을 제공한다. 두 타입의 차이를 Golang과 bun 패키지를 이용해 확인해본다. TL;DR 두 타입은 저장시의 표현방법의 차이이지 담고있는 절대시간의 값은 같다. timestamptz 타입은 Postgres 서버 내부에 설정되어 있는 timezone 설정에 따라 저장이 된다. 나의 선택은 timestamp를 사용하여 항상 UTC 타임으로 저장하며, 사용자에게 이를 보여주는 애플리케이션에서 사용자의 컴퓨터 timezone에 맞게 변환하여 보여주도록 하는 것이다.(다른 분들의 선택, 모범 답안이 궁금하다.) 준비작업: macOS에 Postgres 설치하기 다양..
개요 별 생각없이 go get -u 옵션을 사용해왔었는데 회사에서 사용하는 패키지를 이용한 개발을 하다 그 의미를 이해하게 되었다. 어떤 상황이었나? go work를 이용해서 workspace 디렉토리 아래에 개발하는 애플리케이션과 패키지 디렉토리를 두고 개발한다. 이 경우 애플리케이션은 같은 workspace 아래의 패키지를 이용하기 때문에 패키지를 수정해가며 개발을 할 수 있다. 하지만, 이 경우 애플리케이션의 go.mod 에 명시한 패키지의 버전 정보가 맞지 않게 된다. 해법은 go get -u 옵션 이를 업데이트 시켜주려면 1. 패키지를 GitHub으로 git push 해 준 다음에 2. go get -u 옵션으로 다시 패키지를 가져오면 된다. 좀 더 정확히는 시멘틱 버저닝으로 보면 메이저 버전은..
Golang에서의 경량 ORM으로서의 bun package를 다루며 경험한 내용을 정리해둔다. Automatic timestamp 링크: https://bun.uptrace.dev/guide/models.html#automatic-timestamps INSERT 시에 생성한 시간을 자동으로 추가하도록 하는 기능이다. Example code with comment 아래 코드와 코멘트로 설명을 마무리 한다. 전체 GitHub Repo: https://github.com/nicewook/bun-orm-study Query Building Example: https://github.com/nicewook/bun-orm-study/blob/main/default-timestamp/main.go bun 태그의 의미..
- Total
- Today
- Yesterday
- solid
- 인텔리제이
- 영화
- 2023
- Gin
- 제이펍
- ChatGPT
- go
- notion
- API
- Bug
- strange
- agile
- intellij
- 클린 애자일
- websocket
- 독서후기
- bun
- clean agile
- github
- 티스토리챌린지
- 체호프
- folklore
- 노션
- 잡학툰
- 오블완
- golang
- 독서
- 엉클 밥
- OpenAI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |