분류 전체보기 72

golang convert []byte(byte array) to map[string]interface{}

모르는 json 형식이 들어왔을 때는 이전에 내가 쓴 글처럼 하면된다. https://togomi.tistory.com/48 golang convert json to interface go에서 json을 파싱할때 struct 구조를 모르거나, 키값 하나만 필요한데 struct는 너무 커서 곤란할 때가 있다. 그럴 땐 interface를 통해 파싱하면 간편하다. exampleJson이라는 변수에 json string이 담겨있다 togomi.tistory.com 하지만 위의 글에서는 인풋이 string이라는 전제가 깔려있다. 이런 전제가 만족되지 않는 경우가 있다. http post의 request body를 처리하다가 이 이슈를 겪었다. request를 처리하는 서버 쪽에서는 []byte 형식으로 들어올 ..

공부/Go 2022.06.22

코딩테스트 준비하기 좋은 사이트

프로그래머스 고득점 kit https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr leetcode top interview question (easy, medium, hard) https://leetcode.com/explore/featured/card/top-interview-questions-easy/ Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are..

공부/알고리즘 2022.06.21

프로그래머스 완전탐색 소수찾기 c++

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42839# 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 코드 #include #include #include #include using namespace std; map M; bool isPrime(string num){ int n = stoi(num); if(M[n]) return false; // 이미 확인한 수라면 중복이기 때문에 false 리턴 M[n] = true; if(n =..

공부/알고리즘 2022.03.31

Strimzi Kafka Operator의 kafka connect로 Mysql to Postgres migration

kafka connect란 일종의 api 서버로서, 카프카의 클라이언트를 대신하여 데이터를 브로커에게 pub/sub 한다. connect와 connector, schema registry에 관한 것은 스킵하겠다. 모르겠으면 구글링! 아니면 조만간 내가 글을 쓰고 여기에 링크를 걸든가.. 쉽게 생각하면 여러 개의 클라이언트가 난잡하게 카프카 브로커에 접근하는 것을 카프카 커넥트라는 api 서버가 통합 관리하는 것이라 생각하면 된다. 그리고 그 api 서버에 뚫려있는 api가 connector이다! ======= 이 글의 목적은 k8s 환경에서 strimzi kafka operator를 이용하여 kafka 및 kafka connect를 프로비저닝 한 뒤, 같은 k8s 환경에 존재하는 mysql로부터 post..

공부/Kafka 2022.03.18

Kubernetes Local PV

개념 rook-ceph 같은 모듈을 사용하지 않고, k8s 클러스터를 구성하는 노드들의 로컬 스토리지를 볼륨으로서 이용하는 방법이 있다. 바로 LocalPV이다. HostPath와 LocalPV를 헷갈릴 수 있는데, 둘의 가장 큰 차이점은 쿠버네티스 스케줄러가 PV가 어느 노드에 속한지를 알고있다는 것이다. HostPath의 경우에는 pod가 재기동 될 때, 다른 노드에 스케줄링이 될수 있기 때문에 정상 동작을 보장할 수 없다. 하지만 LocalPV는 쿠버네티스 스케줄러가 PV의 위치를 고려해서 pod의 스케줄링을 해준다. 역으로 생각하면 pod가 특정 노드에 뜨도록 강제할 수도 있다는 것이다. 물론 NodeSelector를 사용하는 방법도 있지만, statefulset 같이 pod를 개별적으로 설정하기..

공부/Kubernetes 2022.03.07

ingress nginx controller port(tcp) based routing

Ingress는 기본적으로 L7 레이어 즉, http기반의 라우팅을 해준다. 아래 yaml 예시 처럼 path 하나가 이미 특정 서비스의 "포트"까지 바인딩 되어있다. ... spec: rules: - http: paths: - path: /togomi/ backend: serviceName: my-service servicePort: 11037 ... 하지만 port를 직접 명시하길 원하는 경우가 있을 수도 있다. 나의 경우에는 redis-cli를 이용해 클러스터링을 하는데에 필요했다. 깊게 따져보면 redis-cli의 잘못이긴 하지만, 옵션으로 넘겨주는 호스트 형식이 반드시 {IP}:{PORT}여서 L7 라우팅으로는 할 수 없었다. 아무튼 port based routing을 해보자. TCP routi..

공부/Kubernetes 2022.02.24

k8s dockerhub imagePullSecrets 만들기 및 적용

아래와 같은 에러로 dockerhub에서 이미지를 받아오는데 실패하는 때가 있다. toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit dockerhub는 IP기반으로(정확하진 않음) pull limit을 제한 한다. 정책은 아래와 같다. 로그인하지 않거나 따로 결제를 하지 않은 계정은 6시간에 200회 제한이 있다. 어쨌든 지불한 계정이 있다고 가정하고, 로그인을 해보자. 단순하게 docker 자체만 이용하는거면 docker login 명령어를 통해서 하면 되지만, k8s의 ..

공부/Kubernetes 2022.02.08

ubuntu에 특정 k8s, crio 버전 설치하기

회사에서는 centOS를 사용하는데, 개인 서버에서는 우분투를 깔아놔서 설치법이 조금 달라서 애먹었다. 게다가 docker가 아닌 crio라서 조금 더 힘들었음 설치 버전 ubuntu 18.04 kubernetes 1.19.4 crio 1.19.2 아래 명령어를 통해 자신의 OS 버전 확인 가능 cat /etc/os-release 설치 순서(공통) swap 파티션 비활성화 sudo swapoff -a vi /etc/fstab /etc/fstab 파일의 swap 관련 부분을 주석처리 한다. /swapfile ~ 부분 # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier fo..

공부/Kubernetes 2022.01.03