본문 바로가기

전체 글333

Go - reflection - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/reflection - 개요 reflect package에 대해 알아본다. struct x을 받고 fn을 호출해서 재귀적으로 내부의 string field들을 모두 순회하는 함수 walk(x interface{}, fn func(string))를 작성해보자. 이번 챕터에서는 이 요구사항을 구현하기위해 reflection을 사용해볼것이다. - interface 여태까지는 string, int 형 처럼 Go에서 제공하거나, BankAccount와 같이 형을 정의한 type-safety만 다루었다. 그래서 참조할 문서를 쉽게 찾을 수 있었고, 만약 잘못된 형을 함수에 넘기면 컴파일러가 이를 미.. 2022. 1. 15.
Go - select - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/select - 개요 http 요청 test를 작성하는법을 알아본다. goroutine 사용시 동기화를 위해 select를 이용해본다. - WebsiteRace example 두 URL을 받아서 HTTP GET 요청을 날렸을 때 먼저 응답한 URL을 반환하는 WebsiteRace 함수를 작성해보자. 만약 두 URL 모두 10초내로 답변이 없으면 error를 반환한다. 우선 요구사항에 맞게 간단하게 test 코드를 작성해보자. func TestRacer(t *testing.T) { slowURL := "http://www.facebook.com" fastURL := "http://www.q.. 2022. 1. 12.
Prometheus - 살펴보기(first steps) - 출처: https://prometheus.io/docs/introduction/first_steps/ - 개요 Prometheus는 monitor 대상의 metric HTTP endpoint를 통해 정보를 긁어모아서 지표를 수집하는 모니터링 플랫폼이다. 이번 글에서는 prometheus 설치 방법과 환경설정 그리고 모니터에 대해 간단하게 살펴본다. prometheus를 다운받아서 설치하고 실행시켜보고 host와 서비스에서 시계열 데이터를 노출하는 exporter를 다운받고 설치해본다. 우선 prometheus 자체적으로 제공하는 host 수준의 다양한 지표들(ex - 메모리 사용, GC 등)을 이용하여 exporter를 별도 연동하지 않고 prometheus 자체적인 exporter로 사용해본다. -.. 2022. 1. 6.
Go - Concurrency - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/concurrency - 개요 Go의 병렬 프로그래밍인 concurrency(go 문법)에 대해 알아보자. goroutine과 channel을 사용해본다. - CheckWebsites 예제 아래와 같이 URL 들의 응답 상태를 확인하는 CheckWebsites 함수가 있다고 하자. package concurrency type WebsiteChecker func(string) bool func CheckWebsites(wc WebsiteChecker, urls []string) map[string]bool { results := make(map[string]bool) for _, url :.. 2022. 1. 4.
Prometheus - 개요 - 출처: https://prometheus.io/docs/introduction/overview/ - Prometheus란 Prometheus는 원래 SoundCloud(https://soundcloud.com/)에서 구축되었던 모니터링 & 알람 오픈소스 시스템이다. Prometheus는 label이라고 불리는 key-value 쌍들과 timestamp 정보와 함께 지표 데이터를 시계열(time series) 데이터형태로 저장하고 수집한다. - 주요 특징 프로메테우스의 주요 특징은 아래와 같다. metric명과 key-value 쌍들에 의해 식별되는 시계열 데이터 형테의 다차원 모델 이런 차원을 활용하는 유용한 Query 언어인 PromQL 제공 분산 저장소에 의존하지 않으므로 각 서버의 자율성 보장 .. 2022. 1. 2.
Go - mocking - 출처: https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/mocking - 개요 mocking에 대해 알아보고 mocking를 사용할 때 장점에 대해 알아본다. - Countdown 프로그램 3부터 하나씩 줄어드는 숫자를 출력하는 프로그램을 만들어보자. 단 각 숫자를 출력하기전에 1초를 멈추고 나서 출력한다. 0에 도달할 때는 0대신 Go!를 출력한다. package main func main() { Countdown() } 사실 프로그램이 맞나 싶을 정도로 보잘 것 없는 요구사항이지만 언제나 작은 단계의 성공적인 소프트웨어를 구축한 후, 이를 점차 반복적인 테스트 접근법을 통해 구축해야 한다. 이렇게 하려면 요구사항을 가능한 잘게 쪼갠 후 동.. 2022. 1. 2.