분류 전체보기
[kubernetes] #10 쿠버네티스 영속성 데이터와 볼륨
서론 Persistent Volume, Persistent Volume Claim, Storage Class를 사용해서 쿠버네티스 데이터를 영구적으로 유지하는 방법을 알아보자. 볼륨의 필요성 애플리케이션이 mysql 파드를 사용한다고 가정하자. 애플리케이션을 사용할 수록 데이터는 업데이트되고, 생성될 것이다. 하지만 mysql 파드가 재시작 되면 내부의 데이터는 모두 초기화 될 것이다. 쿠버네티스는 기본적으로 데이터의 영속성을 제공하지 않기 때문에 파드의 라이프사이클에 관계없이 데이터를 보존하고 싶다면, 별도의 저장소가 필요하다. 그리고 저장소는 어디에 생성될 지 알 수 없기 때문에 모든 노드에 대해서 접근이 가능해야 한다. 그리고 저장소는 쿠버네티스 클러스터가 파괴되어도 영향을 받아서는 안된다. 위 조..
Ubuntu IP 설정하기 (Virtual Box)
Virtual Box를 사용하면 서버 네트워크를 설정해야할 경우가 많다. Ubuntu로 서버를 설치했을 때, 고정 IP를 설정하는 방법을 알아보자 ifconfig를 입력해서 네트워크 상태를 보면 위처럼 네트워크 어댑터들이 있음을 볼 수 있다. 별다른 설정을 안했으면 위에 보이는 enp0s3, enp0s8 같은 것들이 없을 것이다. Virtual Box에서 enp0s3는 NAT 네트워크를 의미하고, enp0s8은 호스트 전용 어댑터를 의미한다. 네트워크 어댑터를 설정하기 위해서 cd /etc/netplan 으로 이동한 후 보이는 yaml 파일에 sudo vi로 접속하자. ## 00-installer-config.yaml # This is the network config written by 'subiqui..
2022 SK ICT Family 개발자 채용 챌린지 후기 (1차)
2022 SK ICT Family 개발자 채용 챌린지 접수 22년 02월 25일 10:00 ~ 03월 10일 17:00 테스트 22년 03월 12일 10:00 ~ 03월 19일 17:00 programmers.co.kr 1번은 그리디 문제이다. 동전의 종류는 1원, 5원, 10원.. 이런식으로 6종류가 고정이었고, 동전을 만드는 데 비용이 든다. 10원짜리 동전을 만드는데 100원이 필요할 수 있다. 동전을 조합해서 원하는 돈을 만드는데 필요한 최소 비용을 구하는 문제이다. 동전을 만드는데 필요한 돈의 비율(동전의 가치/동전을 만드는 데 필요한 비용)이 높을 수록 많이 사용해야 할 동전이 된다. 나는 비율을 기준으로 최대 힙을 구성해서 문제를 풀었다. 프로그래머스 기준 쉬운 level2 문제라고 생각한다..
[운영체제] Ch9. 메인 메모리
공룡책(운영체제)을 읽고 정리한 글입니다. 컴퓨터의 CPU는 프로그램 카운터(PC)가 지시하는 대로 메모리로부터 다음 수행할 명령어를 가져오는데 그 명령어는 필요한 경우 추가적인 데이터를 더 가져올 수 있으며 반대로 데이터를 메모리로 내보낼 수도 있다. 전형적인 명령어 실행은 먼저 메모리로부터 한 명령어를 가져오는 데서부터 시작된다. 그런 다음 명령어를 해독하고, 메모리에서 피연산자를 가져와 피연산자에 대해 명령어를 실행한 후에 계산 결과를 메모리에 다시 저장한다. 배경 지식 기본 하드웨어 메인 메모리와 각 처리 코어에 내장된 레지스터들은 CPU가 직접 접근할 수 있는 유일한 범용 저장장치이다. 기계 명령어들은 메모리 주소만을 인수로 취하고, 디스크의 주소를 인수로 취하지 않는다. 따라서 모든 실행되는 ..
[kubernetes] #9 쿠버네티스 Ingress 란?
서론 Ingress가 무엇인지, 어떻게 사용하고 어떻게 생성하는지에 대해서 알아보자. Ingress vs External Service 간단한 my-app파드와 파드를 연결해주는 my-app서비스를 생각해보자. external-service는 사용자가 브라우저를 통해서 보낸 요청을 받아서 알맞은 파드로 전달해주는 역할을 한다. 사용자가 서비스에 접근하기 위해서는 클러스터에 접근하기 위한 클러스터 IP와 서비스가 열어놓은 포트 그리고 HTTP 프로토콜을 사용할 수 있다. 이러한 방식은 특정 케이스에 대해서 테스트하기 매우 빠르고 편리하다는 장점이 있다. 하지만 이는 배포 단계에서는 좋지 못하다. 배포 단계에서는 도메인 명으로 API 통신을 하는 것이 보안적 측면에서 중요하다. 이를 가능하게 해주는 쿠버네티..
[kubernetes] VirtualBox의 Minikube Service 노출시키기
왜 Minikube에서 만든 서비스는 호스트 브라우저에서 접근이 안될까?? Minikube에서 Nginx와 mongo-express 서비스를 External-service로 만들어보고, Internal-service로 만들어서 Ingress를 활용해 연결도 해보았다. 그런데 minikube에는 minikube만의 IP가 있다.(이하 mini IP) Virtual Box 같은 VM 에서 minikube를 사용하는 경우에 External-service를 생성하면 curl http://:port 와 같이 반드시 minikube IP를 사용해서 접근해야 한다. 그리고 이런 접근 방법 때문에 Linux 내부 IPtable을 사용한 포트포워딩과 VM 자체 포트포워딩을 통해 VM의 IP와 minikube IP를 엮어..
리버스 프록시의 정의와 설정 방법
리버스 프록시는 클라이언트의 요청과 서버의 응답을 중개한다. 주로 NGINX 또는 apache를 사용한다. Nginx의 특징 1. HTTP 서버 클라이언트(유저)로부터 요청을 받았을 때 WAS를 거치지 않고 요청에 맞는 정적 파일을 응답해주는 HTTP server로서 활용할 수 있다. HTML, CSS 같은 정적인 리소스에 대한 요청을 Nginx가 처리해준다. React의 build 된 파일들도 정적인 리소스라고 볼 수 있고, 따라서 Nginx가 index.html 같은 메인 페이지를 랜더링 해줄 수 있다. 2. 리버스 프록시 서버, 로드밸런싱 Nginx는 클라이언트의 요청을 적절한 WAS로 분산하기 위해 로드 밸런싱을 수행하여 성능, 확장성 및 신뢰성을 향상시킬 수 있다. 3. 캐싱 Nginx를 리버스..
[프로그래머스 level 3] 네트워크 (C++)
BFS 또는 DFS로 풀 수 있는 문제이다. 위 그래프는 2개로 나눌 수 있다. 위 그래프는 하나로 연결된 하나의 그래프이다. 모든 노드는 BFS 탐색의 시작점이 될 수 있다. BFS를 통해 방문한 노드는 방문 기록을 남기게 되고, 시작점이 되지 못한다. 시작점이 없을 때까지 BFS를 수행하고, 문제의 답은 BFS를 수행한 횟수가 된다. 개인적으로 이 문제를 비롯한 기본 bfs, dfs문제들이 왜 level 3인지 이해가 되지 않는다. 최종 코드 #include #include #include using namespace std; vector adj[201]; bool visited[201]; void bfs(int start){ queue que; que.push(start); visited[start..
[kubernetes] #8 네임스페이스를 통해 컴포넌트 구성하기
서론 네임스페이스가 무엇인지, 어떻게 사용하는지 알아보자. 네임스페이스란? #1 네임스페이스는 쿠버네티스 클러스터 내부의 가상 클러스터라고 생각할 수 있다. 클러스터를 만들때, 쿠버네티스는 기본적인 4개의 네임스페이스를 제공한다. kubectl get namespace kubernetes-dashboard : minikube에만 기본적으로 생성되어있는 네임스페이스이다. 대시보드의 생성에 필요한 컴포넌트를 가지고 있다. default : 다른 네임스페이스가 없는 오브젝트(컴포넌트)를 위한 기본 네임스페이스이다. kube-system : 쿠버네티스 시스템에서 생성한 오브젝트(시스템 프로세스)를 위한 네임스페이스이다. 사용자가 임의로 사용할 수 없다. kube-public : 공개적으로 접근할 수 있는 데이터..
[프로그래머스 level 3] 가장 먼 노드 (C++)
다익스트라 문제 시작노드는 1번으로 고정되어 있고, 간선 사이의 거리는 항상 1로 고정되어 있다. 일반적인 다익스트라 풀이와 거의 동일하다. 하지만 1번 노드에서 가장 멀리 떨어진 노드의 거리가 최댓값으로 갱신될 때마다 답을 1로 초기화 시켜야 한다. ex 우선순위 큐에 1번 노드가 있다. 가장 먼저 2번 노드에 방문하면 1번 노드와의 최대 거리가 1로 갱신이 되고, 가장 멀리 떨어진 노드의 수는 1이 된다. 그리고 3번 노드에 방문하면 1번 노드와의 거리가 1이므로 현재 최댓값인 1과 동일하다. 따라서 가장 멀리 떨어진 노드의 수는 2로 갱신이 된다. 동일한 방법으로 4, 5, 6번 노드에 방문하면 최대 거리가 2로 갱신이 되고, 가장 멀리 떨어진 노드의 수는 3이 될 것이다. 최종 코드 #includ..