목록분류 전체보기 (145)
쿼카러버의 기술 블로그
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..
파이썬 기본 라이브러리인 itertools에는 groupby라는 함수가 있다. 알고리즘 문제풀 때나 개발 할 때, groupby를 활용한 사고가 익숙해지기만 하면 정말 유용하게 쓰일 수 있어서 개인적으로 좋아하는 함수다. 본 글에서는 itertools패키지의 groupby가 무엇인지 설명하고, 이를 활용한 몇 가지 알고리즘 문제를 풀어보려고 한다. itertools란? 매개변수로 입력된 iterable안에 있는 키를 확인 후, 분류하여 동일한 키를 가진 element 들을 해당 키를 기준으로 그룹지어 리턴한다. itertools.groupby 예제 이런건 사실 예제로 봐야 이해가 된다. from itertools import groupby d = [('Europe','Manchester'), ('Amer..
Protocol Buffers 구글에서 개발한 직렬화 데이터 구조다. 인터페이스 정의용 언어(IDL Interface Definition Language)를 사용해 데이터를 저장하기 위해 proto라는 형태로 정의하고, protoc(proto compile)을 이용해 컴파일을 하면 언어에 맞는 코드를 생성해준다. grpc에서는 unary, stream이라는 용어를 사용하는데, unary는 http와 유사하게 stateless한 통신방식으로 request와 response를 1회 받을 때만 TCP커넥션을 맺고 처리한다. (REST의 HTTP통신보다 훨씬 성능이 좋다) stream은 이름에서 유추할 수 있지만, 지속적으로 데이터를 주고받을 수 있는 소켓 통신과 같이 사용할 수 있는 통신 방식이다. 필자가 작..
본 글은 튜토리얼 성 글으로, 정말 간단하게 gRPC가 무엇인지 맛보고, 바로 구현에 들어간다. 참고로 웹상에 있는 튜토리얼은 막상 해보면 안되는 경우가 많은데, 필자는 직접 다 실행해보고, 세팅까지 본 글에 적어두었으니, 본 글에 적힌대로 따라오기만 하면 gRPC 서버와 클라이언트를 쉽게 구현하고 실행해볼 수 있다. (생색) 자세한 내용은 추후 포스팅에서 다룰 예정이다. (노션엔 정리해뒀는 쓰다보니 너무 길고 복잡..) Prerequisites 본 글의 내용을 직접 실습해보려면 아래 내용들이 충족돼야한다. (1) protocol buffer 설치 go get -u github.com/golang/protobuf/protoc-gen-go #맥북이면 brew install protobuf (2) go en..
몽고디비의 특징은, application specific한 schema를 짤 수 있다는 점이다. 정해진 룰이 없기 때문에, 내 어플리케이션이 어떻게 데이터를 쿼리할 것인지에 대해서만 고민하면 된다. 이 말은 즉, 특정 스키마가 어떤 어플리케이션에선 효율적이지만 또 어떤 어플리케이션에서는 비효율적이 될 수 있음을 의미한다. 본 글에서는 Mongo DB에 잘 정리된 글이 있어, 해당 문서에서 제안하는 다음의 룰을 기본으로, 스키마를 어떻게 짜면 좋을지에 대해 매우 간단한 초 예약본이다. 그냥 내가 나중에 보려고 작성한 부분이라 자세한 설명들은 생략돼있다. 사실 이거만 읽고, 예제만 보더라도 DB에 대한 개념이 있는 독자라면 바로 이해할 것이라 생각한다. 참고로 자세한 내용은 Mongo DB문서를 직접 읽어보..
Locust로 테스트를 하다가, 컴퓨터 성능에 비해 부하가 잘 안먹는 것 같아서 Jmeter로 해봤는데 확실히 부하가 더 잘들어가는 것 같다. 본 글에서는 다음에 대해 다룬다. - Jmeter를 Mac에서 설치하는 법 - JMeter를 사용하는데 필요한 기본 개념, - 분산환경에서의 JMeter 실행에(더 많은 부하 넣기 위해) 필요한 기본적인 세팅 (Mac에서도 가능하겠지만 Linux서버에서의 활용을 추천) 그냥 간단한 테스트를 원하는 경우에는 필자는 stress test를 위해 5개의 worker노드를 구성해서 해야했지만 간단한 부하테스트는 Mac에 설치해서 진행하는 것을 추천한다. Mac에 JMeter설치 Jmeter에서 Controller는 Master서버로, 테스트에 필요한 세팅 및, Worke..
개발을 하다보면 프로그래밍 언어마다 네이밍 컨벤션이 제각각이다. 내가 주로 사용하는 언어들만 비교하더라도 변수명에 대한 표기법이 다음과 같이 다르다. python : snake_case go : mixedCaps(lower/upper mixed camel case) nodejs : lower camel case 대표적으로 소개할 네 가지 표기법을 요약하자면 아래 그림만 보면되고, 상세한 설명을 보고 싶음 전체 글을 읽으면 되겠다. 이렇게 다양한 종류의 표기법들이 있는데, 각각이 무엇인지, 그리고 예시를 들어 설명하겠다. camelCase (lower camel case) 직관적인 예시 : phoneNumber, createdAt, updatedAt 단어를 표기할 때 첫 문자는 소문자로 시작하고, 띄어쓰기..
Writing is easy, but reading is painful. 개발자로 살다보면, 코드의 가독성을 높이고 협업하기 좋은 코드를 작성하고자 하는 욕심이 있을 것이다. 특정 프로그래밍 언어를 잘 사용할 수 있다고 하려면 복잡한 문제를 해결해내는 코드 작성뿐 아니라 누군가와 협업을 하고, 서로 이해 가능한 코드를 짤 수 있어야 하는데, 이를 위해서는 규칙과 convention이 필요하다. Go에서는 이를 “Go를 Go답게 쓴다"라고 표현하는데 이와 관련해서 잘 정리된 글들과, Go Effective의 글들을 참고해서 “Go를 Go답게” 쓰는 방법에 대한 시리즈를 다루고자 한다. 다른 시리즈로는 Go의 Naming 컨벤셩에 대해 정리한 글이 있는데 참고 바란다. 본 글은 https://go.dev/d..