전체 글 316

[VM] 스토리지 인터페이스

가상 머신(VM)을 생성할 때 스토리지 인터페이스의 선택은 시스템의 성능과 안정성에 직접적인 영향을 미치는 중요한 요소이다. 올바른 스토리지 인터페이스를 선택하면 VM의 운영 효율성을 높일 수 있지만, 잘못된 선택은 성능 저하나 호환성 문제를 야기할 수 있다. 스토리지 인터페이스란?스토리지 인터페이스는 컴퓨터 시스템에서 저장 장치와 메인보드 간의 데이터 전송을 담당하는 물리적 또는 논리적 연결 방식을 의미한다. 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD) 등과 같은 저장 매체가 CPU와 데이터를 주고받는 통로 역할을 한다.주요 스토리지 인터페이스 종류IDE(Integrated Drive Electronics)초기의 병렬 ATA(PATA) 인터페이스로, 오래된 시스템에서 주로 사용된다..

DevOps/VM 2024.09.15

[Container] 컨테이너 사용자 설정 및 권한

도커 컨테이너는 기본적으로 루트 사용자(UID 0)로 실행된다. 그러나 루트 사용자로 실행되는 것은 보안상 위험할 수 있다. 컨테이너가 보안 침해를 당할 경우, 루트 권한을 가진 컨테이너는 호스트 시스템에 영향을 미칠 수 있기 때문이다. 따라서 비루트 사용자를 사용하여 컨테이너를 실행하는 것이 일반적으로 권장된다. 도커 이미지는 설계 목적에 따라 다르게 구성되어 있으며, 이미지마다 기본적으로 설정된 사용자가 다를 수 있다. 컨테이너 사용자 설정과 호스트 사용자 간의 관계도커 컨테이너는 호스트 시스템과 격리되어 동작하지만, UID(사용자 ID)와 GID(그룹 ID) 개념은 유지된다. 이는 파일과 디렉토리의 소유권과 권한 관리에 영향을 미친다. 컨테이너가 호스트의 디렉토리를 마운트 할 때, 컨테이너 내부에서..

DevOps/Container 2024.09.14

[NestJS] HTTP 기본 제공 예외 클래스

다음은 NestJS에서 제공하는 예외 클래스와 그에 해당하는 HTTP 상태 코드 및 기본 메시지를 정리한 표이다. NestJS는 HTTP 상태 코드와 관련된 예외 처리를 기본적으로 제공하며, 이들은 모두 HttpException을 상속받아 구현되어 있다.기본 메시지는 NestJS가 기본적으로 제공하는 HTTP 상태 코드에 맞는 예외에 대한 설명이다.예외 클래스는 필요에 따라 커스텀 메시지를 추가로 제공할 수 있다.이 예외 클래스들은 HttpException을 상속받아 사용되며, 필요한 경우 예외 메시지나 상태 코드를 직접 지정할 수 있다.GlobalExceptionHandler를 매번 구현할 필요 없이 그대로 사용하면 생산성을 높일 수 있을 것 같다.예외 클래스HTTP 상태 코드기본 메시지BadReque..

Javascript/NestJS 2024.09.07

[k8s] DNS

쿠버네티스에서 DNS(Domain Name System)는 클러스터 내 서비스와 파드 간의 통신을 간소화하는 중요한 구성 요소이다. 클러스터를 생성하면 기본적으로 DNS 서비스가 자동으로 설정되며, 최근의 쿠버네티스 클러스터에서는 CoreDNS가 기본 DNS 서비스로 사용된다. CoreDNS는 유연한 플러그인 아키텍처를 제공하여 클러스터 DNS뿐만 아니라 다른 네임서버와의 통합도 가능하게 한다. DNS 이름 형식쿠버네티스는 각 서비스에 대해 자동으로 DNS 이름을 생성하며, 그 형식은 다음과 같다:..svc.cluster.local예를 들어, default 네임스페이스에 있는 my-service라는 서비스의 DNS 이름은 my-service.default.svc.cluster.local이 된다. 이를 사..

DevOps/K8S 2024.09.02

[k8s] Volume

쿠버네티스(Kubernetes)는 애플리케이션이 실행되는 동안 데이터를 저장하고 관리할 수 있는 다양한 스토리지 옵션을 제공한다. Persistent Volume (PV)와 Persistent Volume Claim (PVC)은 상태 저장 애플리케이션을 위한 스토리지를 제공하는 개념으로, 이 두 가지를 통해 쿠버네티스는 다양한 스토리지 백엔드와 독립적으로 상태 저장 애플리케이션을 지원할 수 있다.Persistent Volume (PV)Persistent Volume(PV)은 쿠버네티스 클러스터 내에서 스토리지 리소스를 추상화한 객체이다. PV는 클러스터 관리자가 직접 프로비저닝 하거나 쿠버네티스가 동적으로 생성할 수 있으며, 클러스터의 다른 리소스와 독립적으로 존재한다. PV는 특정 사용자를 위한 것이 ..

DevOps/K8S 2024.09.02

[JS] ESLint와 TypeScript 설정에서 ES 버전 차이

프로젝트에서 tsconfig.json과 ESLint 설정 파일(.eslintrc.js 또는 index.js)을 설정하다 보면, ES 버전이 서로 다르게 설정된 것을 발견할 수 있다. 예를 들어, TypeScript의 tsconfig.json에서 target을 ES2020으로 설정했지만, ESLint에서는 env 옵션이 es6로 설정되어 있을 수 있다.TypeScript와 ESLint는 각각 다른 목적을 위해 ES 버전을 설정하지만, 프로젝트의 일관성을 위해 이 둘을 맞춰주는 것이 좋다. TypeScript의 target과 ESLint의 parserOptions.ecmaVersion을 동일한 ECMAScript 버전으로 설정하면, 최신 자바스크립트 기능을 사용하면서도 일관된 코드 스타일을 유지할 수 있다...

Javascript 2024.09.01

[MW] Flyway

Flyway는 데이터베이스 버전 관리 도구로, 데이터베이스 스키마의 버전을 관리하고 마이그레이션을 자동으로 수행하여 데이터베이스 구조를 최신 상태로 유지하는 데 도움을 준다. Flyway는 SQL 스크립트 또는 Java 코드로 작성된 마이그레이션을 지원하며, 다양한 데이터베이스 관리 시스템(DBMS)을 지원한다.버전 관리: 데이터베이스 변경 사항을 버전으로 관리하여 이전 상태로 쉽게 되돌릴 수 있다.자동화: 데이터베이스 배포 과정에서 자동으로 마이그레이션을 실행하여 일관된 상태를 유지한다.호환성: 다양한 DBMS를 지원하며, SQL 및 Java 기반의 마이그레이션 스크립트를 사용할 수 있다. Flyway 파일의 네이밍 규칙Flyway는 데이터베이스 스키마 마이그레이션을 관리하기 위해 SQL 스크립트 파일..

DevOps 2024.08.31

[JS] Turborepo를 활용한 공통 라이브러리 관리

Turborepo를 활용하면 모노레포 환경에서 공통 라이브러리와 설정을 효과적으로 관리할 수 있다. 병렬 빌드, 캐싱, 전역 스크립트 등의 기능을 통해 개발 프로세스를 최적화하고, 공통 패키지를 통해 코드의 일관성과 품질을 유지할 수 있다.병렬 빌드: 여러 작업을 동시에 실행하여 빌드 속도를 향상시킨다.캐싱: 이전 작업의 결과를 재사용하여 빌드 및 테스트 시간을 단축시킨다.워크스페이스 관리: 여러 패키지를 효율적으로 관리하며, 종속성을 명확히 한다.전역 스크립트: 모노레포 내 모든 프로젝트에 대해 통합된 스크립트를 실행할 수 있다.구조Turborepo의 일반적인 디렉토리 구조는 다음과 같다:my-turborepo/ │ ├── apps/ │ ├── web/ │ └── mobile/ │ ├── package..

Javascript 2024.08.31

[k8s] 클러스터의 주요 구성 요소와 문제 발생 시 영향

Kubernetes 클러스터는 제어 평면(Control Plane)과 워커 노드(Worker Node)로 구성되어 있으며, 각 노드는 클러스터의 안정적 운영을 위해 중요한 역할을 수행한다. 클러스터의 주요 구성 요소로는 Kubelet, ContainerD, 스케줄러(Scheduler), 그리고 제어 평면의 각 요소가 있다. 다음은 시스템 서비스로 실행되며 systemctl로 관리되기 때문에 문제 발생 시 영향을 미칠 수 있는 요소들이다 제어 평면(Control Plane)제어 평면은 마스터 노드에서 실행되며 클러스터의 상태를 관리하고 조정하는 역할을 한다. 제어 평면의 주요 구성 요소는 다음과 같다.API 서버 (kube-apiserver)역할: 클러스터의 모든 요청을 처리하고, 클러스터 상태를 저장하는..

DevOps/K8S 2024.08.29

[k8s] Deployment

Deployment는 애플리케이션을 관리하고 자동으로 배포하는 객체로, 주로 애플리케이션의 상태를 선언적으로 정의하는 데 사용된다. Deployment는 애플리케이션의 여러 인스턴스를 안정적으로 운영하고, 롤링 업데이트, 롤백, 확장과 같은 작업을 간단하게 수행할 수 있도록 해 준다. Deployment의 구성 요소Pod: 각 Deployment는 여러 개의 Pod를 관리한다.ReplicaSet: Deployment가 관리하는 Pod의 복제본을 유지하는 역할을 하며, 특정 수의 Pod가 항상 실행 중인지 보장한다.Label Selector: Deployment는 Label을 사용하여 어떤 Pod가 관리 대상인지를 지정한다. Deployment의 주요 기능애플리케이션 배포 및 관리:Deployment를 사..

DevOps/K8S 2024.08.29
728x90