분류 전체보기 70

docker image 경량화 build 하기

지금도 도커/쿠버네티스의 초보지만 더 초보였던 시절, 이미지도 그저 생각없이 아래 비스무리하게 했다. COPY . . RUN go build 그러다보니 이미지의 크기가 정말 상상도 못하게 컸다. 1.19 기가가 말이 되는가? 이유는 쓸데없는 바이너리나 파일들이 이미지에 포함되어있기 때문이다. 어떻게하면 실행에만 필요한 파일들을 포함시킬 수 있을까? operator-sdk에서 기본적으로 만들어주는 dockerfile에서 그 해답을 찾을 수 있었다. 핵심은 빌드와 실행을 분리하는 것이다 전체 dockerfile은 아래와 같다. # 1. 빌드전용 이미지 FROM golang:1.15 as builder WORKDIR /go/src # 2. 필요한 패키지 다운로드 COPY go.mod go.mod COPY go..

공부/Kubernetes 2021.09.10

일본어 공부/독학 추천 및 후기

일본어 공부를 시작한 지 약 1년이 됐다. 솔직히 말이 1년이지 중간중간 쉰 텀이 좀 길기도 해서 실제로는 1년이 되지 않는다. 일본어를 공부할 때 독학과 수업 두 가지 방법이 있는데, 나는 둘 다 동시에 진행하고 있다. 서두에 적지만 하테나 일본어 광고 아니다. 나도 광고받아보고 싶다. 1. 독학 (하테나 일본어) 회사 선배분의 추천으로 알게 된 일본어 독학 강의다. 하테나 선생님이 진행하시는 하테나 일본어이다. 유튜브에 무료로 강의 영상이 공개돼있다!! 궁금하면 맛보기를 해보자. 책 없이도 공부가 가능하지만 나는 책 구매를 추천한다. 책 구매를 하면 하테나 일본어 사이트에서 체계적으로 정리된 순서로 공부할 수 있기 때문이다. 그리고 개인적으로 책에다 필기하며 공부해야 기억에 더 잘 남기도 한다. 또 ..

일상/취미 2021.09.09

2021 카카오 코딩테스트 신규 아이디 추천 c++ solution

#include #include #include using namespace std; string solution(string new_id) { string answer = ""; // 1. 소문자로 for(auto n : new_id) answer += tolower(n); // 2. 잘못된 문자 제거 int size = answer.size(); for(int i=0; i 'z') && (a '9') && a != '-' && a != '_' && a != '.'){ answer.erase(i, 1); i--; size--; } } // 3. 연속된 '.' 치환 size = answer.size(); bool flag = false; for(int i=0; i= 16){ ans..

공부/알고리즘 2021.09.09

HackerRank Bigger is Greater c++ solution

#include #include using namespace std; string biggerIsGreater(string w) { vector V; for(auto s : w) V.push_back(s); do{ string temp=""; for(auto v : V) temp += v; if( temp > w ){ return temp; } }while(next_permutation(V.begin(), V.end())); return "no answer"; } vector에 주어진 문자열을 char로 쪼개어 넣고, next_permutation을 이용하여 다음 크기의 문자열을 얻어서 원 string과 비교하면 된다.

공부/알고리즘 2021.09.07

go mod download dial tcp i/o timeout 오류

어느 날 갑자기 잘 되던 docker image build가 안됐다. 원인은 go mod download에서 i/o timeout이 문제였다. 처음에는 DNS서버 문제인가 싶어서 네트워크 설정을 바꾸고 재시작도 해보았지만 그대로였다. 해결법은 의외로 간단했다... 그냥 아래 명령어 한 번 치면 된다. $ go mod tidy go mod tidy를 치니까 아주 잘 된다. go mod tidy는 필요없는 의존성을 제거해주는 명령어이다. 아마도 go가 의존성 관리를 하면서 무언가가 꼬였었나 보다 ============= 며칠 후에 또 같은 오류가 발생했다. 2시간 정도를 뻘짓하다가 허무하게 해결했다. 그냥 도커를 재시작하니 됐다. $ systemctl restart docker 도커 설치한 이후에 내 우분투..

공부/Go 2021.09.06

프로그래머스 가장 큰 수 c++ solution

#include #include #include using namespace std; bool myfunc(string a, string b){ return a+b > b+a ? true : false; } string solution(vector numbers) { string answer = ""; vector v; for(auto n : numbers) v.push_back(to_string(n)); sort(v.begin(), v.end(), myfunc); if(v.at(0) == "0") return "0"; for(auto b : v){ answer += b; } return answer; } https://mungto.tistory.com/22 가장 큰 수 C++ (정렬)[프로그래머스] ※..

공부/알고리즘 2021.09.05

프로그래머스 위장 c++ solution

#include #include #include #include using namespace std; int solution(vector clothes) { map M; for(auto cloth : clothes) M[cloth[1]]++; int answer=1; for(auto m : M) answer *= (m.second+1); return answer-1; } A,B 두 가지 종류의 의상이 있을 때 경우의 = A 종류의 의상을 입을 수 있는 가짓수 * B 종류의 의상을 입을 수 있는 가짓수 = ( A 종류의 의상 갯수 + 1 ) * ( B 종류의 의상 갯수 + 1 ) - ( 모두 안 입는 한 가지 경우 ) = ( A + 1 ) * ( B + 1 ) - 1

공부/알고리즘 2021.09.05

Kubernetes operator 메커니즘

operator-sdk를 통해 두 세개의 operator 개발은 해봤지만, 내부 동작원리는 어떻게 되는지는 정확히 알기가 어려웠다. 그래서 호기심에 찾아보다가 아주 잘 정리된 글을 찾아서 내 나름대로 정리할겸 공유한다. 원 출처는 아래 블로그이다. https://ssup2.github.io/programming/Kubernetes_Kubebuilder/ Kubernetes Kubebuilder를 이용한 Operator 개발 Memcached 예제를 통해서 Kubebuilder와 Controller를 분석한다. ssup2.github.io 0. CRD와 Operator 먼저 간단하게 쿠버네티스에서 operator의 역할이 무엇인지 짚고 넘어가자. 아주 간단히 설명하자면 operator는 특정 리소스(오브젝..

공부/Kubernetes 2021.08.31