분류 전체보기 1187

[k8s] node-shell - node 접근하기

개요 AWS EKS 환경에서 서비스를 운영하면서 간혹 문제상황이 발생한 경우 Pod 뿐만 아니라 Worker Node에 직접 접속해 상태를 확인할 필요가 있었다. 하지만 Worker Node에서 SSH 접속을 허용하고 있지 않아 접속할 수 있는 방법이 없었는데, Worker node 접속 기능을 제공하는 kubectl 플러그인을 확인하여 사용 방법을 정리해두려고 한다. node-shell로 EKS 클러스터 노드에 접속할 수 있는지는 확인해봐야 한다! 이 글에서는 사용 방법 정도만 정리해둔다. node-shell kubectl-enter로도 알려진 kubectl node-shell은 node의 호스트 OS에서 root shell을 시작한다. 간단히 말해 node에 명령어를 실행할 수 있는 shell을 제공..

Kubernetes 2023.12.27

[k8s] HorizontalPodAutoscaler - 수평적 오토스케일링

HPA (HorizontalPodAutoscaler) Kubernetes에서 HorizontalPodAutoscaler는 Deployment나 ReplicaSet의 리소스 수요에 맞춰 Pod의 수를 자동으로 Scale-up/down 하는 기능을 제공한다. 보통 컴퓨팅 리소스를 추가로 확보할 때는 더 많은 리소스가 있는 자원을 사용하거나, 적당한 리소스가 있는 자원을 여러 대 사용하는 방법을 사용하는데 HorizontalPodAutoscaler는 후자에 해당한다. 때문에 DaemonSet과 같은 복제본 수를 지정할 수 없는 객체를 대상으로 동작하지 않는다. HorizontalPodAutoscaler는 Kubernetes 리소스와 컨트롤러로 구현되어 있다. 리소스는 컨트롤러의 동작을 지정하고, 컨트롤러는 주..

Kubernetes 2023.12.26

[Python] itertools.product - 데카르트 곱

데카르트 곱 (cartesian product) 곱집합 또는 데카르트 곱(product set, product)은 각 집합의 원소를 성분으로 하는 튜플의 집합이다. Python에서는 itertools.product 함수로 사용할 수 있는데, 이 글에서 사용 방법을 적어둔다. itertools.product itertools.product 함수는 중첩 for 문과 동등하다. 예로 들어 product(A, B)는 (x, y) for x in A for y in B라고 할 수 있다. from itertools import product A = 'xyz' B = [1, 2 ,3] print(*product(A, B)) itertools.product 중복 허용 집합 자신의 곱을 구할 때는 반복 횟수를 지정하는 ..

Python 2023.12.25

[Algorithm] LZW (Lempel-Ziv-Welch) 구현

LZW LZW (Lempel-Ziv-Welch)는 Abraham Lempel, Jacob Ziv와 Terry Welch 만든 공통 무손실 데이터 압축 알고리즘이다. 1978년에 Lempel과 Ziv가 공개한 LZ78 알고리즘을 1984년에 Welch가 개선하여 공개했다. 구현이 간단하고 높은 처리량을 제공할 수 있다. 유닉스 파일 압축 유틸리티인 compress의 알고리즘이며 GIP 이미지 포맷에도 사용된다. 핵심 아이디어는 데이터 공간을 절약하기 위해 패턴을 만들어서 재사용하는 것이다. 일반적으로 ASCII Code는 문자를 8bit로 나타내므로 최대로 표현할 수 있는 문자의 개수는 256개이다. 여기서 LZW는 문자를 9~12bit까지 확장하여, 총 4096개 공간 중 기본 문자 256개 공간을 제외..

Algorithm 2023.12.22

[프로그래머스] [3차] 압축

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17684 어피치는 메신저에서 전송되는 메시지를 압축해 전송 효율을 높이는 업무를 맡았다. 메시지를 압축해도 전달하는 정보가 변경되서는 안 되기 때문에 압축 전 정보를 복원할 수 있는 여러 가지 무손실 압축 알고리즘 중, 성능이 좋고 구현하기 좋은 LZW(Lempel–Ziv–Welch) 압축을 구현하기로 했다. LZW 압축은 1983년에 발표된 알고리즘으로, 이미지 파일 포맷 GIF 등에서 사용된다. 압축 과정은 다음과 같다. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다. w에 해당하는 사전 색인 번호를 출력하고, 입력..

Algorithm 2023.12.21

[MySQL] 별칭 (Alias)

개요 SQL에서 테이블이나 컬럼에 대해 별칭을 지정하여 간단히 참조할 수 있다는 건 데이터베이스를 알고 있는 사람에게는 기본적인 지식이라고 할 수 있다. 하지만 나는 SELECT나 FROM 절 외의 다른 절에서도 참조할 수 있다는 걸 잘 기억하지 못하기 때문에 굳이 적어둔다. 별칭 SELECT 문에서는 키워드 AS를 사용해 별칭을 부여할 수 있다. 별칭은 표현식의 컬럼 이름이나 GROUP BY, ORDER BY, HAVING 절 등에서 사용할 수 있다. SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP, COUNT(1) AS `PRODUCTS` FROM PRODUCT GROUP BY PRICE_GROUP ORDER BY PRICE_GROUP 별칭은 컬럼 뿐만 아니..

Database 2023.12.20

[Python] 깊은 복사 (deep copy)

개요 이번 글에서는 2023.12.18 - [Python] 얕은 복사 (Shallow copy)에서 정리한 얕은 복사와 반대되는 개념인 깊은 복사에 대해 정리한다. 깊은 복사 깊은 복사(deep copy)란 복사 수행 시 객체 자체를 다른 메모리 공간에 복사하는 것의 의미한다. 복사 시 참조 메모리 주소가 달라지기 때문에 변수 간의 독립성을 유지할 수 있다. 깊은 복사 수행 깊은 복사는 copy.deepcopy를 이용해 수행할 수 있다. 아래 코드는 가변 객체를 원소로 하는 list에 대해 깊은 복사를 수행하는데, 실제로 가변 객체 원소인 1번 원소의 주소값을 확인해 보면, from copy import deepcopy a = ["python2", ["python3"]] b = deepcopy(a) pr..

Python 2023.12.19

[Python] 얕은 복사 (Shallow copy)

개요 2023.12.14 - [Python] 불변 객체 (Immutable) 2023.12.15 - [Python] 가변 객체 (Mutable) 위 두 개 글에서 불변 객체와 가변 객체에 대해 정리했는데, 이 글에서는 얕은 복사에 대해 정리해보려고 한다. 얕은 복사 얕은 복사(Shallow copy)란 객체의 참조값, 주소값만 복사하는 것을 의미한다. 객체의 주소값을 복사하기 때문에 복사된 값에 변경이 발생하면 복사한 값도 영향을 받아 두 변수 간에 독립성이 성립하지 않게 되는 특징이 있다. 다만, 변수의 독립성과 관련해서는 참조한 객체가 가변 객체인 경우에만 문제가 되며, 관련해서는 사실 2023.12.15 - [Python] 가변 객체 (Mutable)에서 살펴보았다. 따라서 이 글에서는 얕은 복사를..

Python 2023.12.18

[Python] 가변 객체 (Mutable)

객체 종류 Python에서는 객체를 두 가지 종류로 구분할 수 있다. Mutable : 가변객체. 상태를 변경할 수 있는 객체 Immutable : 불변객체. 상태를 변경할 수 없는 객체 여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다. 2023.12.14 - [Python] 불변 객체 (Immutable)에서는 불변 객체에 대해서 정리했는데 이 글에서는 가변 객체에 대해 정리한다. 가변(Mutable) 객체 1. 변수에 할당한 값이 달라져도 변수가 참조하는 메모리 주소가 달라지지 않는다. a = ["python2", "python3"] print(f"""a={a} id(a)={id(a)}""") a.append('python..

Python 2023.12.15

[Python] 불변 객체 (Immutable)

객체 종류 Python에서는 객체를 두 가지 종류로 구분할 수 있다. Mutable : 가변객체. 상태를 변경할 수 있는 객체 Immutable : 불변객체. 상태를 변경할 수 없는 객체 여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다. 이해해 둘 필요가 있어 보여 이 글에서는 불변 객체에 대해 정리한다. 불변(Immutable) 객체 특징 1. 변수에 할당한 값을 변경하면 변수가 참조하는 메모리 주소가 달라진다. a = "python2" print(f'a={a}, id(a)={id(a)}') a = "python3" print(f'a={a}, id(a)={id(a)}') 위의 코드는 다음과 같은 순서로 동작한다. 문자열 객체..

Python 2023.12.14