목록[Golang] (19)
쿼카러버의 기술 블로그
앞 글에서 profiling이 무엇인지에 대해서 알아보았다. profiling이 어떤건지 감이 아직 안잡힌 독자는 아래 글을 읽어보고 오는 것을 추천한다. https://etloveguitar.tistory.com/147 [golang] profile 간단 이해(profiling, 프로파일링에 대하여) golang은 성능이 매우 중요한 경우 사용되는 언어 중 하나다. 따라서 코드가 최적화 된 것을 직접 확인하기 전에 그냥 가정만으로 최적화하는 방식으로는 사실 부족하다. 코드의 성능과 bottleneck에 etloveguitar.tistory.com 특정 코드를 정해두고 프로파일링을 진행하는 경우도 있지만, 실제로 동작하고 있는 웹서버에 대한 프로파일링이 필요할 때가 있다. 따라서 본 글에서는 프로파일링이..
앞 글에서 profiling에 대해 알아보며 간단하게 benchmark와의 차이에 대해 다루었다. 사실 성능 개선을 하거나 리팩토링을 하기 위해서는 프로파일링 뿐 아니라, benchmark도 매우 중요하다. 이 알고리즘을 사용하면 진짜 성능이 좋아질지, 자주 호출되는 로직을 수정했는데 성능적으로 괜찮을지 등의 증거를 확보할 수 있기 때문이다. 벤치마크를 해본 적이 없다면 이 기회에 배워서 그냥 추측만으로 할게 아니라 실제로 측정해보자. 예상했겠지만 본 글은 간단하게 벤치마크가 무엇인지 그리고 go에서 benchmark 하는 방법에 대해 간단하게 살펴보려고 한다. 벤치마크란? benchmark란 특정 코드 segment를 여러번 반복 실행하고 해당 코드의 성능을 측정하는 함수를 의미한다. 스포일러로 아래 ..
golang은 성능이 매우 중요한 경우 사용되는 언어 중 하나다. 따라서 코드가 최적화 된 것을 직접 확인하기 전에 그냥 가정만으로 최적화하는 방식으로는 사실 부족하다. 코드의 성능과 bottleneck에 대한 insight를 가지고 있어야 좀 더 효율적으로 최적화할 수 있는데, 이 때 활용하는 것이 바로 profiler다. 필자는 최근 맡고 있는 서비스의 성능테스트를 진행하면서 성능 개선을 위해 profiling을 진행해보았고 나름 성과도냈다(후후), 그리고 이왕 하는김에 내용을 좀 정리해보았다. 제목은 간단 이해라 했는데 사실 분량이 상당히 길다. 죄송.. 본 글의 목적은 다음과 같다. (1) profiling 기본 개념 이해 (긴글 주의) (2) SVG 그래프 기본 개념 이해 이 글에선 이정도만 다..
오랜 만에 채널과 관련된 글을 쓴다. 이전에 go에서 concurrency programming을 위해 필수로 알아두어야 할 개념으로 channel을 꼽으며 작성한 글이 있다. 일단 channel이 무엇인지 모르는 분들은 글을 먼저 읽고 오는 것을 추천한다. https://etloveguitar.tistory.com/40?category=902018 [golang] 채널 (channel)이란? - 1탄 간단한 소개 채널에 대한 설명을 읽기 전에 이전 포스팅인 고루틴 (go routine)에 대한 간단한 이해를 하길 바란다. 링크 : https://etloveguitar.tistory.com/39 [golang] 고루틴(go routine)이란? - 1탄 간단한 소개 공식 도.. etloveguitar.t..
Go httpclient connection pool 필자는 현재 Go언어로 MSA 아키텍쳐의 API 서비스를 개발하고 있다. 서비스 내부에서는 gRPC, jRPC, REST 등 다양한 HTTP기반 프로토콜을 사용해보고 있지만, 외부에 배포되는 서비스로는 HTTP를 기반으로 XML 또는 JSON을 이용하여 서버-클라이언트가 데이터를 주고받는 통신 방식인 REST API를 개발하고 있다. 트래픽이 적은 토이 프로젝트를 개발할 때는 성능 문제를 다룰 필요성을 못느꼈었는데, 회사에 와서 대용량 트래픽을 경험하다보니 connection explosion이 발생하면서 내가 알고있지 못했던 부분들을 많이 배우게 됐는데 그 중 하나가 httpclient의 connection pool관리였다. DBCP는 많이 들어봤지..
Golang으로 프로그래밍을 하다보면 가장 많이 사용하고, 사용되고 있는 타입이 struct다. Json, XML, Yaml파일을 마샬/언마샬(Marshal / Unmarshal) 하든, 웹서버 개발을 한다면 http request / response를 사전 정의 해두든, 프로그래머가 원하는 객체를 만들든, 굉장히 다양한 용도로 사용된다. 본 글에서는 struct중에서도 유용하게 쓰이는 feature중 하나인 Field tag에 대해 알아보려고 한다. Field tag란 아래 예시처럼 struct를 정의할 때, type User struct { Id int `json:"id"` Name string `json:"name"` Bio string `json:"about,omitempty"` Active bo..
Writing is easy, but reading is painful. 개발자로 살다보면, 코드의 가독성을 높이고 협업하기 좋은 코드를 작성하고자 하는 욕심이 있을 것이다. 특정 프로그래밍 언어를 잘 사용할 수 있다고 하려면 복잡한 문제를 해결해내는 코드 작성뿐 아니라 누군가와 협업을 하고, 서로 이해 가능한 코드를 짤 수 있어야 하는데, 이를 위해서는 규칙과 convention이 필요하다. Go에서는 이를 “Go를 Go답게 쓴다"라고 표현하는데 이와 관련해서 잘 정리된 글들과, Go Effective의 글들을 참고해서 “Go를 Go답게” 쓰는 방법에 대한 시리즈를 다루고자 한다. 다른 시리즈로는 Go의 Naming 컨벤셩에 대해 정리한 글이 있는데 참고 바란다. 본 글은 https://go.dev/d..
Writing is easy, but reading is painful. 개발자로 살다보면, 코드의 가독성을 높이고 협업하기 좋은 코드를 작성하고자 하는 욕심이 있을 것이다. 특정 프로그래밍 언어를 잘 사용할 수 있다고 하려면 복잡한 문제를 해결해내는 코드 작성뿐 아니라 누군가와 협업을 하고, 서로 이해 가능한 코드를 짤 수 있어야 하는데, 이를 위해서는 규칙과 convention이 필요하다. Go에서는 이를 “Go를 Go답게 쓴다"라고 표현하는데 이와 관련해서 잘 정리된 글들과, Go Effective의 글들을 참고해서 “Go를 Go답게” 쓰는 방법에 대한 시리즈를 다루고자 한다. 다른 시리즈로는 Go의 주석(Comment) 컨벤션에 대해 정리한 글이 있는데 참고 바란다. 본 글에서는 go의 Namin..