본문 바로가기

728x90

전체 글

[Go언어] for 루프에서 포인터 사용 시 동일 객체 참조 문제 문제 아래와 같이 for 루프를 사용했다. for _, data := range sampleDataSlice { GetStore().storeOne(&data) } 위 코드를 실행하면 저장된 모든 데이터가 동일한 값을 가지게 된다. 원인 위 코드에서 sampleDataSlice는 slice 이기 때문에 for 루프의 변수로 인덱스와 현 루프의 객체를 변수에 할당한다. 이 때, 인덱스를 사용하지 않고 그 뒤의 변수를 사용하게 될 경우 변수에는 슬라이스에 포함된 현재 요소가 지역 변수에 할당된다. 그러므로 변수에 할당되는 값은 계속 변경되지만 storeOne 함수로 전달되는 변수의 주소는 동일하기 때문에 storeOne 함수 안에서 사용한 변수는 결과적으로 제일 마지막에 지역변수에 할당했던 객체를 동일하게 .. 더보기
[k8s] ALB Ingress 사용 시 다수의 리스너 등록하기 목표 Amazon EKS ALB Ingress controller를 사용하여 ALB를 생성하였고, 하고자하는 목표는 아래와 같았다. Ingress 설정으로 Listen Port를 HTTPS(443) 포트로 지정하였고, Ingress의 rules에 정의되어 있는 대로 URL Path 에 따라 각각 정해진 서비스로 traffic routing 한다. (URL 기반 Routing) → 이 경우에는 정상동작 함을 확인하였다. ... alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}, {"HTTP": 9090}]' ... spec: rules: - http: paths: - path: /grafana* backend: serviceNam.. 더보기
[Docker] Secret 사용 해보기 Docker Secret을 사용하면 아래와 같은 민감한 데이터를 안전하게 관리할 수 있다. 사용자 패스워드 TLS 인증서 및 키 SSH 키 데이터베이스 접속 정보 일반 문자열 및 바이너리 (최대 500kb 크기) Docker Secret 사용 시 컨테이너 내에서는 평문으로 유지되고, 컨테이너가 중지되면 Secret도 함께 제거된다. Docker Secret은 create 명령을 사용하여 문자열 또는 파일로 생성할 수 있다. 먼저 문자열로 생성하는 경우 아래와 같이 Docker Secret을 생성한다. printf | docker secret create - printf 명령으로 문자열을 출력하고 파이프를 사용하여 오른편의 docker secret create 명령으로 해당 문자열을 전달하게 되면 문자열이.. 더보기
[nginx] 정규표현식으로 패턴 매치 후 proxy pass 시 쿼리 파라미터 포함하기 Nginx를 사용하면서 패턴에 매치하는 Request를 Proxy pass로 전달 할 때 쿼리 파라미터가 포함되지 않아 어플리케이션 레벨의 문제인 것으로 생각하고 한참을 고생했다. 여기서 쿼리 파라미터는 아래 예로 든 주소에서 물음표(?) 뒤에 오는 키-값들을 의미한다. https://yongho1037.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F 문제가 되었던 nginx 설정은 다음과 같다. location ~ /(api|login|auth)/(.*)$ { proxy_pass http://backend/$1/$2; proxy_set_header Host $host; proxy_set_header X-Forwarded-For .. 더보기
[쿠버네티스패턴] 7장 배치 잡 배치 잡이란? 짧은 수명을 가진 파드를 분산 환경에서 완료될 때까지 안정적으로 실행하는 기능이다. 독립된 원자 작업단위, 즉 더 이상 쪼갤 수 없을 정도의 작은 작업 단위를 관리하는데 적합하다. 문제 미리 정의된 일정 시간의 작업단위를 안정적으로 실행한 후 컨테이너를 종료하는 것이 필요한 경우가 있다. 쿠버네티스에서는 아래와 같이 파드를 생성하는 방법이 다양하다. 순수 파드 Kind: Pod의 형태로 선언한 파드이다. 파드를 수동으로 실행한다. 장애 발생 시 파드는 다시 실행되지 않는다. 개발이나 테스트 목적을 제외하고는 이런 방식의 파드 실행은 권장하지 않는다. 레플리카세트 레플리카세트로 파드를 생성하면 레플리카세트 컨트롤러에 의해 관리된다. 레플리카세트 컨트롤러는 지속적으로 실행되는 파드의 수명주기를.. 더보기
[리뷰] 데이터 과학을 위한 통계 소프트웨어 엔지니어로 일하고 있지만 수포자(수학포기자)로 살아왔기 때문에 수학 관련된 공부는 항상 기피를 했었다. 게다가 게임 개발자로 오랜 시간 업무를 해왔기 때문에 생각보다 전문적인 수학 지식이 필요로 하지는 않았었다. 그렇게 지금까지 수학과는 거리감을 유지하면서 지내왔는데 몇년 전 부터 조금씩 빅데이터와 관련된 업무나 스터디를 진행하면서 수학의 필요성을 느끼게 되었다. 가장 처음 필요성을 느꼈던 때는 스타트업에서 게임 서버 개발자로 근무할 당시였는데, 사업부에서 현재 게임에 대한 동접, 사용자 이탈률, 매출, 각 기능별 사용률 등등 통계가 필요한 요구사항들이 생기면서부터 였다. 당시에는 엘라스틱서치를 사용하여 잘 모르는 통계 지식들을 겉핥기 식으로 찾아가며 대응을 했었는데 개념 잡는데 꽤 오랜 시간.. 더보기
[k8s] Image Pull 실행 시 ECR 로그인 적용하기 여러 팀과 함께 서비스를 운영하다보면 현재 사용 중인 서버가 속한 AWS Account 외에 다른 Account의 ECR에 존재하는 컨테이너 이미지를 Pull 받아야하는 경우가 있다. 이 때 해당 Account에서 ECR의 read only 권한을 가진 IAM User의 Access Key를 사용하여 로그인을 수행한 후 컨테이너 이미지를 Pull 받을 수 있다. 먼저 ~/.aws/credentials 파일에 default 또는 별도 profile을 지정하여 Access Key를 등록한다. [ecr-readonly] aws_access_key_id = aws_secret_access_key = 다음 명령으로 ECR에 로그인 한다. aws ecr get-login-password --region ap-nor.. 더보기
[Go언어] embedded struct bson marshaling 시 struct 이름으로 키가 생성되는 문제 아래와 같이 Sample struct에서는 Inner struct를 embedded 하고 있다. type Inner struct { ID string `json:"id,omitempty" bson:"_id,omitempty" Name string `json:"name" bson:"name"` CreatedAt int64 `json:"created_at,omitempty" bson:"created_at,omitempty"` ModifiedAt int64 `json:"modified_at,omitempty" bson:"modified_at,omitempty"` } type Sample struct { Inner } 이 때 marshaling을 수행하면 json의 경우에는 아래와 같이 원하는 대로 변환 된다... 더보기

728x90