쿠버네티스의 다양한 리소스들에 대해서 다뤄보면 ETCD라는 중요한 요소에 대해서 알 수 있다. ETCD는 키-값으로 데이터를 저장하는 스토리지로 쿠버네티스에서 모든 상태 정보(메타데이터)를 영구적으로 저장하는 역할을 한다. 마스터 노드에 있는 kube-apiserver는 이 ETCD를 참고하여 클러스터 전체의 최신 상태를 일관성 있게 유지하는 역할을 한다. 간단하게 쿠버네티스의 마스터 노드의 컴포넌트에 대한 그림을 그려보면 위와 같다. 여기서 ETCD에 접근할 수 있는 쿠버네티스의 컴포넌트는 kube-apiserver 뿐으로써 etcd는 쿠버네티스 클러스터에 있어 심장과도 같은 중요한 존재이다. 쿠버네티스는 이런 심장과도 같은 etcd를 어떻게 오케스트레이션하는 것인가? 간단하게 스포일러를 하면 etc..
전체 글
Paint the World쿠버네티스를 공부하다 보면 아마 처음으로 접하게 되는 것 트래픽 관련 리소스가 Service라고 하는 것일텐데, 이는 우리가 생각하는 대로 특정한 Pod에 대하여 IP를 뚫어주어 전략(ClusterIP, NodePort, LoadBalancer)에 따라서 직접 접근할 수 있게 된다. 그다음으로는 Ingress라는 리소스도 있는데, 이 또한 Port를 이용하여 IP 계층에서 직접 트래픽을 조작해 준다. 대체 어떠한 차이점이 있을까? 쿠버네티스에 대해서 단순하게 이해하고 있을 때에는 Ingress는 프론트엔드 페이지 보여줄 때, Service는 그 외라고 알고 있었지만, 좀 더 공부해 보면 사실 굉장히 이야기할 거리가 많은 주제이고 복잡하기도 했다. 재미있는 사실은 결국에는 Ingress는 웹을 보여줄 때,..
쿠버네티스 클러스터를 통해 다양한 시도를 하기 전 직접 로컬에서 테스트해 볼 수 있는 환경이 있어야 한다. 그 과정에서 사람들이 가장 많이 찾는 툴은 minikube라고 하는 툴이다. minikube는 로컬 쿠버네티스 클러스터를 생성하고 관리하기 위한 경량화된 도구로, 로컬에서 쿠버네티스 애플리케이션을 개발, 테스트 학습할 수 있도록 설계되어 있다. 이번 포스팅에서는 미니쿠베의 세팅 방법과 함께, 꿀같은 터미널 세팅에 대해서 다뤄보려고 한다. 이 외에도 vscode 세팅이나 lens 등 로컬에서 직접 쿠버네티스를 테스트하기 좋은 환경을 구축하기 위한 내용들을 포스팅한다. 먼저, 준비물들이 꽤나 있는데 다음과 같다. 이 포스팅의 내용은 macOS에 특화되어 있다. homebrewdockeroh-my-zs..
redis를 그냥 띄우게 되면 데이터를 무한정 넣을 수 있다. 음? 인메모리 데이터 그리드에 데이터를 무한정 넣을 수 있다고? 그런 말도 안 되는 일이 어떻게 일어나는 걸까. 그 비밀은 바로 maxmemory라는 설정에 있다. 레디스는 maxmemory를 별도로 설정하지 않으면 메모리 제한을 걸지 않는다. 그렇다면 모든 메모리를 잡아먹게 되는 경우라면 어떨까? 그럴 경우에는 디스크의 스왑 영역까지 사용하게 되며, 이 때부터 레디스의 성능이 급격하게 저하된다. 떠올려보면 이러한 케이스가 몇 번 있었던 것 같다. 레디스를 단순히 적당한 수준에서의 캐싱이나 TTL을 걸어 토큰을 저장하는 경우에는 크게 문제 될 일이 없었다. 하지만 학교 공지사항을 스크래핑하는 크론잡을 만들어서 공지사항에 대한 내용을 전부 레디..
예전에 레디스에 대해서 재미있게 다룬 내용을 보았다. 그 당시에는 레디스에 대한 그렇게까지 자세힌 이해도는 없었던 것 같다. 하지만 워낙 글쓴이의 필력이 대단해서 어느새 마지막 문단을 읽고 있었던 것 같다.[June] 레디스의 50가지 그림자 : https://papercut.blog/235 레디스(Redis)의 50가지 그림자터미널에 비친 로그에 좌절해서 얼굴을 찌푸렸다. 이 몹쓸 캐시는 얌전히 데이터를 가지고 있을 생각을 하지 않았다. 원래 캐시는 데이터를 유지할 의무가 없었지만, 몹쓸 개발자였던 나는 일관papercut.blog 예전에는 그냥 레디스라고 하면 그냥 캐시 할 때 쓰는 거 아닌가? 정도였다. 그 외에 레디스에 대한 것이라면 특징 정도가 있겠다. 예를 들면 인메모리 데이터 그리드라는 것,..
최근에 쿠버네티스 자격증을 공부하고 있는데, CMD와 ENTRYPOINT의 차이점에 대한 내용이 나왔다. 강의를 듣다 보니까 세상에, 이런 사실을 자세히 모르고 있었다니... 대충 ENTRYPOINT를 사용할 때에는 런타임에 주입하는 경우라고만 알고 있었는데, 자세히 알고 보니까 생각보다 중요한 내용이었다. 그리고 생각해 보니 예전에 재미있는 일이 있었다. 한 2년 전쯤의 일이다. node.js 프로그램을 docker container로 띄우기 위해서 아래와 같이 CMD를 입력했는데 안 됐다.CMD ["tsc", "main.ts", "&&", "node", "main.js"] ts를 통해서 타입스크립트를 빌드하고, 빌드된 js를 실행하는 명령어를 CMD로 나타냈는 데, 안 되는 것이다. 도저히 안되어 n..
예전에 인증과 인가에 관련된 포스팅을 작성한 적이 있었다. 그 과정에서 세션 방식과 토큰 방식이 쓰인다고 하였고, 토큰 방식에서는 JWT(JSON Web Token)을 일반적으로 사용한다고 이야기를 했었다. 그 이후로 스프링 시큐리티로 직접 인증과 인가를 구현해야 할 일이 생긴 적이 있었다. Access Token과 Refresh Token을 통해서 구현한 적이 있었는데, 처음에 이를 도대체 어떻게 구현해야 할지 상당한 난제였다. 로직 자체를 구현하는 것 자체는 크게 어렵지 않으나, 스프링 시큐리티와 맞물려서 구현하는 과정에서 상당히 오랜 시간이 걸렸다. 여담으로, username과 password로 로그인하는 스프링 시큐리티의 userDetails의 구현체를 변경하여, 전화번호를 통해서 로그인이 되게끔..
앞서 embedding과 VDB에 대해서 살펴보았다. 이번에는 이러한 embedding과 VDB를 조합하여 검색 엔진을 만들어보는 방법에 대해서 다루려고 한다. 앞서 다루었던 VDB의 개념에 Flask를 통한 간단한 API 서버를 만들고, embedding model을 조합하여 벡터값으로 나타내주기만 하면 모든 과정이 끝이다. 제목에 검색 엔진과 추천 시스템이라는 키워드를 같이 썼는데, 실제로 나도 관련된 연구를 진행하면서 초반에 둘을 많이 헷갈리기도 했다. 사실 정확히 말하면 우리가 오늘 만들 것은 검색 엔진이다. 하지만 추천 시스템과도 어느 정도 관련이 있다. 검색 엔진은 명시적인 사용자 쿼리를 처리하는 것이다. 사용자가 특정 쿼리값을 보내면, 이를 가공하여 필요한 정보를 제공해주는 것이다. pul..