[etc] HTTP 상태코드 HTTP는 웹서버와 클라이언트 간의 통신을 가능하게 하는 프로토콜이다. 서버는 클라이언트의 요청에 대한 응답으로 HTTP 상태 코드를 반환하여 요청의 결과를 전달한다. 몇 가지 일반적인 HTTP 상태 코드와 그 의미에 대해 알아보자. 1XX (Informational) 100 Continue: 서버가 클라이언트의 일부 요청을 받았으며, 클라이언트는 나머지 요청을 계속해도 된다는 것을 알린다. 101 Switching Protocols: 서버가 클라이언트의 요청을 수락하고 프로토콜 변경 요청을 받았음을 나타낸다. 2XX (Success) 200 OK: 요청이 성공적으로 처리되었음을 나타낸다. 201 Created: 요청이 성공적으로 처리되어 새로운 리소스가 생성되었음을 나타낸다..
[K8s] Network Policy Network Policy 네트워크 정책 적용을 통해 클러스터에서 쿠버네티스 네트워크 정책을 생성 할 수 있다. 허용되는 다른 파드 허용되는 네임 스페이스 IP 블록 네트워크 정책을 정의하면, 클러스터가 다중 수준의 애플리케이션을 제공할 때, 심층 방어와 같은 기능을 지원하는 데 도움이 된다. Network Policy 생성 예를 들어 다음과 같이 access: true 레이블을 가지고 있는 pod만 nginx 서비스에 접근할 수 있도록 Network Policy 객체 생성이 가능하다. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: access-nginx spec: podSelector: m..
[K8s] RBAC(Role-Based Access Control) RBAC는 개별 사용자의 역할을 기반으로 컴퓨터 또는 네트워크 리소스에 대한 액세스를 규제한다. 특정 사용자(User)와 역할(Role) 두 가지를 조합해서 사용자에게 특정 권한을 부여할 수 있다. API 객체 RBAC API는 Role, ClusterRole, Rolebinding 및 ClusterRoleBinding의 네가지 종류의 개체를 선언한다. Role, ClusterRole Role 및 ClusterRole 객체에서 RBAC 규칙을 정의한다. Role : 단일 네임스페이스에 포함된 리소스에 대한 액세스를 정의한다. apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: n..
[K8s] ServiceAccount 서비스 어카운트 (Service Account) 서비스 어카운트는 쿠버네티스에서 애플리케이션의 인증 및 권한 관리를 담당한다. 쿠버네티스 클러스터 내에서 실행되는 애플리케이션은 기본적으로 API 서버와 상호작용을 해야하는데, 서비스 어카운트를 통해 API에 접근 권한을 부여받을 수 있다. 서비스 어카운트는 파드에서 실행되는 프로세스에 대한 ID를 제공하며, 해당 프로세스 ID는 서비스 어카운트 객체에 매핑된다. API 서버에 액세스 모든 쿠버네티스의 네임스페이스에는 ServiceAccount가 하나 이상 포함되어 있다. 만약 서비스 어카운트를 따로 지정하지 않고 Pod를 생성하여 API 서버에 연결하면, Pod는 default 네임스페이스에 명명된 서비스 어카운트를 ..
[AWS] S3 수명 주기 정책 (Life Cycle Rule) S3 버킷에 저장된 객체가 일정 시간이 지나서, 액세스 할 필요가 없거나 삭제가 필요할 때 S3 수명 주기를 구성하면 효율적인 비용 절감이 가능하다. 전환 작업 객체가 다른 스토리지 클래스로 전환되는 시기를 정의한다. 예를 들어 30일이 지나면 STANDARD-IA 스토리지 클래스로 전환하고, 1년이 지나면 Glacier 클래스로 전환이 가능하다. 만료 작업 객체가 만료되는 시기를 정의한다. S3에서 만료된 객체를 자동으로 삭제한다. 수명주기 구성하기 수명주기 설정은 aws 콘솔에서 설정이 가능하다. 수명주기를 구성하고 싶은 버킷의 관리탭에서 수명 주기 규칙 생성을 클릭한다. 누르면 규칙 이름과 필터를 걸 수 있는데, 접두사로 제한하는 필터..
[Airflow] Docker compose Airflow에서 Cli 사용하기 docker compose는 컨테이너 환경에 Airflow를 띄우기 때문에 컨테이너 내부에 cli 명령어를 사용해야한다. 명령어를 사용하는 방법은 다음과 같다. docker compose run airflow-cli 명령어가 길기때문에 다음과 같이 alias로 등록해두고 사용하면 편하다. alias airflow='docker compose run airflow-cli' >> ~/.bashrc source ~/.bashrc
[Python] strip, rstrip, lstrip - 문자열 및 공백 제거 strip() 문자열의 양쪽 끝에서 지정된 문자를 제거한다. 만약 인자가 전달되지 않으면, 공백 문자가 기본적으로 제거된다. text = " Hello, World! " result = text.strip() >>> result "Hello, World!" rstrip() 문자열의 오른쪽(끝)에서 지정된 문자를 제거한다. text = " Hello, World! " result = text.rstrip() >>> result " Hello, World!" lstrip() 문자열의 왼쪽(시작)에서 지정된 문자를 제거한다. text = " Hello, World! " result = text.lstrip() >>> result ..
[etc] MapReduce 맵리듀스(MapReduce)는 대규모 데이터 집합을 처리하는 데 사용되는 프로그래밍 모델이다. 대규모 컴퓨팅 클러스터에서 병렬 처리를 수행하여, 데이터를 처리하고 분석하는 데 유용하다. 맵 리듀스는 일반적으로 맵, 리듀스 두 단계로 구성된다. 맵(Map) 단계 입력 데이터를 가져와서 여러 작은 부분으로 나눈 후에, 각 부분에 대해 지정된 함수(맵 함수)를 적용하여 중간 결과를 생성한다. 이 단계에서 입력 데이터를 키-값 쌍 형식으로 매핑한다. 예를 들어 아래와 같은 입력 데이터가 있다고 가정해보자. Hello world Hello there Hello world 위의 입력 데이터에서는 다음과 같은 키-값 쌍이 생성된다. ("Hello", 1),("World", 1) ("Hel..
[Python] 변수명과 함수명 짓기 변수명과 함수명은 코드의 가독성과 유지 보수성에 매우 중요하다. 함수가 무엇을 하는지 명확하게 설명하고, 변수명도 각각의 역할에 따라 명확하게 지어야한다. 좋은 변수명과 함수명을 지정하는 방법을 알아보자. 의미 있는 이름 선택 변수나 함수의 목적과 역할을 잘 설명하는 이름을 선택해야 한다. 다른 사람이 코드를 읽을 때 이해하기 쉽도록 이름을 지정하는 것이 중요하다. #좋은 예 student_name = '홍길동' total_score = 95 #나쁜 예 a = '홍길동' b = 95 일관성 프로젝트 전체에서 일관된 명명 규칙을 사용한다. 변수명과 함수명이 일관되면 코드를 이해하고 유지보수 하기 쉬워진다. #좋은 예 def calculate_total_price(ite..
[Python] 사용자 정의 함수를 사용할 때의 주의 사항 사용자 정의 함수를 작성할 때, 코드의 가독성과 안정성을 향상 시키기 위해 주의해야 할 점을 정리해보고자 한다. 명확한 역할 함수는 한 가지 명확한 역할을 수행하도록 작성해야 한다. 함수가 너무 많은 일을 하거나 다양한 동작을 수행하면 가독성과 유지보수성이 저하된다. 부작용 최소화 함수는 입력에 대해 예측가능한 결과를 반환해야 한다. 부작용(ex. 전역 변수 변경, 파일 시스템 수정 등)을 최소화하여 함수의 예측 가능성을 높인다. 명확한 이름 함수명은 해당 함수가 하는 일을 명확히 설명해야 한다. 의미 있는 이름을 선택하여 함수의 역할을 명확히 전달한다. 매개변수 개수 함수의 매개변수 개수를 적절히 제한해야한다. 많은 매개변수를 가진 함수는 이해..
[Pandas] 업데이트 (update) pandas의 내장 함수인 update는 다른 데이터 프레임의 NA 가 아닌 값을 사용하여 데이터프레임의 값을 수정한다. 업데이트는 인덱스를 기준으로 정렬하며, 반환값이 없다. DataFrame.update(other, join='left', overwrite=True, filter_func=None, errors='ignore') update 함수는 위와 같이 사용이 가능하며, 파라미터에 대한 설명은 다음과 같다. other : 데이터 프레임에 덮어씌울 객체를 말한다. join : 기준이 될 인덱스다. left만 선택이 가능하므로 제외 가능하다. overwrite : 덮어씌울 방식이다. True면 데이터프레임의 모든 데이터에 other을 덮어씌우며, False면..
[Python] index 찾기 문자열에서 인덱스 찾기 문자열의 위치 값을 앞에서부터 몇번째 위치에 있는지 알아내는 방법엔 find와 index가 있다. 문자열.find(찾을 문자열, start_index) 문자열.index(찾을 문자열) let = 'abcde' >>> let.find('a') 0 >>> let.index('b') 1 두 함수의 차이점은 find는 찾는 값이 없을 경우 -1을 반환하고 index는 오류를 반환한다. >>> let.find('f') -1 >>> let.index('f') ValueError: substring not found rfind, rindex 뒤에서 부터 찾고싶을때는 rfind, rindex를 사용하면 된다. let = 'abcdea' >>> let.rfind('..