본문 바로가기

분류 전체보기

(8)
golang 오픈소스 컨트리뷰트 하고싶었던 이야기 오픈소스 컨트리뷰트가 하고싶다. 오픈소스 컨트리뷰트를 하게 된다면 그 분야에 대해서 어느정도 알 수준이 될거라 생각하기 때문에 오픈소스 컨트리뷰트로 나를 증명하고 싶었다. 불편한 함수의 발견 go언어를 사용하던중에 os.Getenv()를 발견했는데 python과 다르게 default값을 정할 수 없었다. 함수의 정의는 이러하다. key값을 name으로 갖고있는 환경변수를 갖고있다. name이 비어있으면 empty값을 reuturn한다. name이 비어있는지 확인하고 싶으면 LookupEnv를 사용하면 된다. python은 default값을 정할 수 있는데 go는 안되나? func Getenv(key string) string { testlog.Getenv(key) v, _ := syscall.Getenv..
[Docker] Golang으로 도커 이미지 만들기 기본적으로 golang은 컴파일 언어이기 때문에 go build 명령어를 통해서 하나의 파일을 만들어냅니다. 이 build하는 과정까지 docker image에 포함한다면 이미지의 크기가 커질 수 있기 때문에 멀티 스테이지를 이용한 빌드 방법으로 빌드 된 파일 하나만을 가지고 도커 이미지를 만드는 방법이 있습니다. 빌드 할 예시 파일 gin의 예시코드를 실행시키는 dockerfile을 예시로 build연습을 해보겠습니다! package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H..
[깃랩] gitlab 설치형 오류 모음 gitlab push 401 에러 remote: GitLab: Internal API error (401) To https://gitlab.깃랩주소.git ! [remote rejected] master -> master (pre-receive hook declined) gitlab_rails['internal_api_url'] = 'https://git.깃주소' → 주석 처리 후 해결 Can't verify CSRF token authenticity. 422 에러 Can't verify CSRF token authenticity. Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocatio..
[레디스] key값 갯수 제한 레디스는 키 갯수가 몇개가 제한일까? Redis can handle up to 2^32 or 4,294,967,296 keys per instance. 4,294,967,296개 까지 가능하지만 이론적인 limit이고 컴퓨터의 사양에 따라 달라진다고 생각하면 될거 같다. https://www.quora.com/How-many-keys-can-Redis-handle
[레디스] 클러스터링을 구성하면서 생긴 오류 모음 error: got 4 elements in cluster info address, expected 2 or 3 7.0 버전에서 나는 오류. 6.대로 레디스 버전을 변경하면 해결된다. https://github.com/go-redis/redis/issues/2085 Address updated for node Redis 계속해서 로그가 엄청 많이 쌓이는 문제 Address updated for node 34192c4b802580dd7eaf39700d2fa9ec8d3a172b, now 127.0.0.1:5004 위와 같은 로그는 클러스터링이 제대로 안되어 있을때 다시 클러스터링을 해주려고 나오는 로그이다. redis-cli로 접속하여 cluster nodes를 확인해 보면 클러스터링이 제대로 연결이 되어있..
[레디스] 클러스터링 적용하기 - predixy 레디스 클러스터링 적용하기 predixy란 predixy는 haproxy와 같은 프록시 서버로서 클러스터링 되어있는 레디스의 키값을 클라이언트단에서 분산처리 해줄 필요 없이 predixy서버로 요청을 보내면 알아서 분산처리를 해줍니다. predixy에서 알아서 key값에 맞는 레디스에 접근하기 때문에 따로 설정을 해줄 필요가 없습니다. 설치 git clone https://github.com/joyieldInc/predixy.git cd predixy apt-get update apt-get -y install make apt-get -y install g++ make cp src/predixy /usr/local/bin predixy -h predixy를 설치한 후 predixy -h 명령어가 정상 동..
[레디스] 클러스터링 적용하기 레디스 클러스터링의 필요성 레디스는 In-Memory DB로서 한번 장애가 발생한다면 데이터가 유실이 될 수도 있으므로 고가용성 유지를 위한 방법이 있어야 합니다. Redis는 Replication(Master-Slave) 구조를 지원하며, 추가적으로 Sentinel, Cluster 구성 방법을 제공합니다. Replication은 단순하게 Master노드를 복제하여 Slave에서도 쓸 수 있도록 구성하는 방식입니다. Sentinel은 Master노드가 장애시 복제된 Slave가 Master로 자동으로 승격되도록 구성하는 방식입니다. Cluster는 이러한 고가용성 뿐만 아니라 Sharding을 제공하여 데이터를 분산하여 저장할 수 있도록 합니다. 이중에서 클러스터링을 선택한 이유는 다음과 같습니다. Se..
[파이썬] 가비지 컬렉션 가비지 컬렉션이란? 모든 언어에서 변수를 등록하면 변수에 메모리가 메모리의 주소값이 할당된다. 그리고 변수의 크기만큼 메모리를 쓰게되는데 이 메모리는 우리가 알고있는 RAM을 의미한다. RAM은 휘발성 저장공간이다. 용량이 적지만 컴퓨터를 끄면 사라지는 데이터 공간이다. 대신에 빠르다. 만약 이 메모리 공간을 비효율적으로 사용하여 사용자의 메모리를 많이 잡아먹는다면 흔히 렉이 걸린다고 하듯 프로그램이 느려질 수 있다. 따라서 이 공간을 효율적으로 관리하는것이 프로그램을 빠르게 돌리는데에 있어서 중요하다. 가비지 컬렉션은 쓰지않는 값을 모아서 소멸시킨다. 레퍼런스 카운트 레퍼런스(reference) = 참조 파이썬은 변수의 레퍼런스 카운트가 0이 되었을때 그 변수는 소멸 되상이 되고 일정 규칙에 의해 가비..