본문 바로가기

분류 전체보기

(221)
[백준 8972] 미친 아두이노(Python 풀이) https://www.acmicpc.net/problem/8972 8972번: 미친 아두이노 요즘 종수는 아두이노를 이용해 "Robots"이라는 게임을 만들었다. 종수는 아두이노 한대를 조정하며, 미친 아두이노를 피해다녀야 한다. 미친 아두이노는 종수의 아두이노를 향해 점점 다가온다. www.acmicpc.net 풀이 문제 조건만 잘 확인해서 구현하면 쉽게 풀리는 문제였습니다. 입력 1 2 3 R, C = map(int, input().split(' ')) board = [list(map(str, input())) for _ in range(R)] moves = list(map(int, input())) cs 연속된 문자열 형태로 입력되기 때문에 위와 같이 map을 이용하여 list 형태로 입력받습니다...
[k8s] Job/CronJob Job/CronJob은 웹 서버와 같은 상주 서비스가 아니라 집계 등과 같은 배치 처리 또는 기계학습이나 수치해석과 같은 프로그램의 시작부터 종료까지로 완료되는 작업을 실행하기 위한 리소스입니다. Job(잡) 잡은 실행된 후 종료해야 하는 성격의 작업을 실행시킬 때 사용하는 컨트롤러입니다. 특정 개수만큼의 파드를 정상적으로 실행 종료함을 보장합니다. 예를 들어 데이터베이스 마이그레이션과 같이 한 번의 잡으로 처리가 끝나는 것에 이용합니다. 잡에서 하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료될 때 까지 계속해서 파드의 실행을 재시도합니다. 지정된 수 만큼 파드가 성공적으로 완료되면, 작업(즉, 잡)이 완료됩니다. 잡을 삭제하게되면 생성한 파드가 정리되며, 일시 중지하게 되면 작업이 다시..
[k8s] 데몬셋(Daemonset) 데몬셋(Daemonset) 데몬셋은 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러입니다. 클러스터 안에 새롭게 노드가 추가되었을 때 데몬셋이 자동으로 해당 노드에 파드를 실행시킵니다. 반대로 노드가 클러스터에서 빠졌을 때는 해당 노드에 있던 파드는 그대로 사라질 뿐 다른 곳으로 옮겨가서 실행되지는 않습니다. 따라서 데몬셋은 보통 로그 수집기를 실행하거나 노드를 모니터링하는 데몬 등 클러스터 전체에 항상 실행해두어야 하는 파드에 사용합니다. 데몬셋(Daemonset) 사용해보기 매니페스트 파일 작성 로그 수집을 실행하는 데몬셋의 예시는 다음과 같습니다. apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch nam..
[k8s] 디플로이먼트(Deployment) 디플로이먼트 디플로이먼트(Deployment)는 쿠버네티스에서 상태가 없는(stateless) 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러입니다. 쿠버네티스가 처음 등장했을 때는 Replication Controller에서 앱을 배포했는데 최근에는 디플로이먼트를 기본적적인 앱 배포에 사용합니다. Stateless Application이란? 클라이언트와 서버의 연결 구조에서 불필요한 상태의 반영을 위한 데이터나 리소스가 사용되지 않는 형태의 서비스 구조 파드와 레플리카셋은 '이력'이라는 개념이 없기 때문에 릴리스 후에 변경이 없는 애플리케이션을 관리하는데 적합합니다. 디플로이먼트는 이름처럼 배포 기능을 세분화 한 것으로 파드와 레플리카셋에 버전 관리 기능을 추가한 것이라고 생각하면 이해가 쉽습니다. 단..
[k8s] RelicaSet(레플리카셋) 정리 ReplicaSet 레플리카셋은 클러스터 안에서 움직이는 파드의 수를 유지하는 장치입니다. 클러스터의 파드의 실행을 항상 안정적으로 유지하는 것을 목표로 명시된 파드 개수에 대한 가용성을 보증하는데 사용됩니다. 만약 애플리케이션 오류나 노드 장애 등으로 파드가 정지된 경우 레플리카셋이 자동으로 새로운 파드를 시작합니다. 레플리카셋은 labelSelector의 조건에 따라 파드를 검색하여 가동 중인 파드의 수가 매니페스트 파일의 replicas의 수와 일치하는지 아닌지를 확인합니다. 만약 가동중인 파드의 수가 부족한 경우 새로 파드를 추가하고, 파드의 수가 많을 때는 여분의 파드를 정지시킵니다. 따라서 가동 중인 애플리케이션의 파드 수를 변경하고 싶을 때는 레플리카셋의 replicas의 값을 수정하기만 하..
[백준 20058] 마법사 상어와 파이어스톰(Python 풀이) https://www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 풀이 이번 문제는 배열의 회전, BFS를 이용하여 풀 수 있습니다. 풀이는 다음과 같습니다. 우선 다음과 같이 입력을 받습니다. N, Q = map(int, input().split(' ')) # N, Q len_board = 2 ** N # 얼음을 저장할 보드의 길이 board = [list(map(int, input().split(' '))) for _ in range(le..
[k8s] Namespace, ResourceQuota, LimitRange Namespace 네임스페이스는 쿠버네티스 클러스터 하나를 여러 개의 논리적인 단위로 나누어서 사용하는 것입니다. 네임스페이스 덕분에 쿠버네티스 클러스터 하나를 여러 개 팀이나 사용자가 공유할 수 있습니다. 또한 클러스터 안에서 용도에 따라 실행해야 하는 앱을 구분할 때도 네임스페이스를 사용합니다. 네임스페이스별로 별도의 쿼터를 설정해서 특정 네임스페이스의 사용량을 제한할 수 도 있습니다. 쿠버네티스에서 클러스터 다음으로 분리 단위가 큰 것이 이 네임스페이스이며, 네임스페이스가 가장 먼저 검토해야 할 분리 단위 입니다. 네임스페이스는 여러 개 팀이나, 프로젝트에 많은 사용자가 있는 환경에서 사용하기 적합하며, 사용자가 거의 없거나, 수 십명 정도가 되는 경우에는 네임스페이스를 고려할 필요가 없습니다. 쿠..
[k8s] Volume - (emptyDir, hostPath, PV/PVC) Volume Docker에서도 Volume의 개념은 존재한다. Docker의 Volume은 디스크에 있는 디렉터리이거나 다른 컨테이너에 있다. Volume 드라이버를 제공하지만, 기능이 다소 제한된다. 쿠버네티스에서는 다양한 유형의 Volume을 지원한다. 파드는 여러 볼륨 유형을 동시에 사용할 수 있다. 기본적으로 Volume은 디렉토리이며, 일부 데이터가 있을 수 있고, 파드 내 컨테이너에서 접근할 수 있다. 디렉토리의 생성 방식, 이를 지원하는 매체와 내용은 사용된 특정 볼륨의 유형에 따라 결정된다. emptyDir emptyDir Volume은 파드가 노드에 할당될 때 처음 생성되며, 해당 노드에서 파드가 실행되는 동안에만 존재한다. 이름에서 알 수 있듯이 emptyDir 볼륨은 처음에는 비어있다..
[백준 16985] Maaaaaaaaaze(Python 풀이) 풀이 이 문제는 브루트포스, 순열, BFS를 이용하여 풀어야한다.(이외에도 배열 회전 알고리즘 등 복잡한 문제이다.) import sys from collections import deque from itertools import permutations board = [[list(map(int, input().split(' '))) for _ in range(5)] for _ in range(5)] b = [[[0] * 5 for _ in range(5)] for _ in range(5)] result = sys.maxsize dh = (0, 0, 0, 0, 1, -1) dy = (0, 0, 1, -1, 0, 0) dx = (1, -1, 0, 0, 0, 0) 다음과 같이 입력을 받고, result, dh..
[RabbitMQ] Python에서 Pika를 이용한 RabbitMQ 사용 (Topic Queue) RabbitMQ는 AMQP(Advanced Message Queuing Protocol)을 구현되었습니다. (https://www.amqp.org/) AMQP는 queue, exchange, binding 이라는 세 개의 개념으로 구성됩니다. - queue는 메시지를 보관하고 소비자가 메시지를 선택하기를 기다립니다. - exchange는 게시자가 새 메시지를 추가하기 위한 진입점 - binding은 메시지가 exchange로 queue로 라우팅되는 방법을 정의합니다. RabbitMQ 실행 docker를 이용해서 Rabbitmq를 실행해보자(rabbitmq 3.8) 1 docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.8-..