인프라

    도커 컴포즈 (Docker Compose) 란? 도커 컴포즈 사용법

    도커 컴포즈란? 보통 개발할 때 로컬 환경이나 개발 환경에서 가상의 DB를 띄우기 위해서 많이 사용한다. 도커 컴포즈는 단일 호스트 환경에서 동작하고, 고가용성도 지원하지 않기 때문에 운영에서는 비슷한 역할을 하지만 고가용성을 지원하는 쿠버네티스를 사용한다. 도커 컴포즈 이용하기 (Node.js 기준) 프로젝트 메인 디렉토리에 docker-compose.yaml 파일을 생성한다. 도커 컴포즈 문법에 맞게 docker-compose.yaml 파일 작성 Docker Compose 공식문서 에 작성법이 있긴 한데, 예제를 보거나 GPT 를 이용하는 것이 빠를 것 같다. Postgres Yaml 파일 작성 방식은 Postgres 도커 페이지 에서 참고할 수있다. services: # 자동완성됨 postgres:..

    도커 컨테이너의 라이프사이클 (Docker container lifecycle)

    컨테이너의 라이프사이클 docker run 은 실제론 docker create 와 docker start 가 하나로 합쳐진 명령이다. docker create 까지는 격리된 공간만 만들어놓는다. docker start 단계에서 실제로 메모리와 CPU 를 사용하게 된다. docker pause 명령어는 컨테이너를 일시정지 시키는데, 이 때는 컨테이너의 상태를 기억해야 해서 메모리는 사용하지만 CPU 는 사용하지 않는 상태가 된다. docker stop 명령어는 컨테이너에서 실행 중이던 프로세스를 완전히 중지시킨 것이고, CPU 도 메모리도 사용하지 않는다. 다시 시작하면 컨테이너가 처음부터 다시 시작된다. docker rm 은 모든 단계에서 실행 가능하다. 단, 실행 중인 컨테이너를 삭제하려면 docker..

    컨테이너 런타임 (Container Runtime) 이란 무엇인가? 그리고 runc

    컨테이너 런타임이란? 도커에서 직접 커널과 통신하며 실제로 격리된 공간을 만드는 역할을 한다. 호스트 운영체제에서 컨테이너를 실행하고 컨테이너 이미지를 관리함 실행, 일시 중지, 중지와 네임스페이스, cgroup, 네트워크 인터페이스 관리와 같은 저수준 작업을 처리 컨테이너의 수명 주기를 담당 도커는 처음에 LXC 라는 런타임을 사용했지만 나중에 libcontainer 라는 자체 런타임을 개발하고 나중에 runc 로 발전 점진적으로 가볍고 유연하고 안정적이 됨 runc 런타임이란? OCI 스펙에 따라 컨테이너를 생성하고 실행하기 위한 CLI 도구임. Docker 및 기타 컨테이너 플랫폼이 내부적으로 사용하는 런타임이고 컨테이너 실행을 위한 사실상의 표준. 단순성, 이식성, OCI 런타임 사양 준수에 중점..

    도커의 아키텍처

    도커의 역할 커널의 컨테이너 가상화 기술을 사용자가 손쉽게 활용할 수 있게 하는 것 도커 아키텍처 컨테이너 엔진: 사용자의 요청을 받아 컨테이너를 관리하는 역할 컨테이너 런타임: 직접 커널과 통신하며 실제로 격리된 공간을 만드는 역할 도커는 runc 라는 컨테이너 런타임을 사용 runc 는 OCI (Open Container Initiative) 를 준수함 무조건 runc 를 사용해야 하는 것은 아니지만 도커에서 기본으로 사용하는 컨테이너 런타임임 리눅스 커널 버전마다 사용법이 다른데, runC는 cgroup, namespace 와 같은 기술을 버전에 구애받지 않고 사용할 수 있도록 LXC 혹은 libvirt 를 사용하여 간접적으로 관리함 도커 클라이언트 서버 구조 도커는 클라이언트 서버구조로 동작한다...

    컨테이너 가상화란?

    컨테이너 가상화 하이퍼바이저 방식보다 더 가볍고 더 빠르다. 리눅스 커널이 제공하는 LXC, 리눅스 컨테이너 라는 자체 격리 기술에서 출발했다. 커널 자체의 공간만 사용하여도 격리된 공간을 만들 수 있다. 커널의 Namespace 와 Cgroups 를 이용한다. Namespace: 프로세스, 하드드라이브, 네트워크, 사용자, 호스트 네임처럼 리소스를 나누는 기준의 역할 Cgroups: 메모리, CPU, Disk, Network Bandwidth 처럼 리소스의 사용량을 배분하는 기술 LXC 라는 기술을 통해 분리된 공간 각각을 컨테이너라고 부른다. Host OS 의 커널을 공유하는데, 이게 컨테이너 가상화의 가장 큰 특징 중 하나이다. Guest OS 를 사용하는 하이퍼바이저 방식보다 오버헤드가 작다. 하..

    LXC (Linux Container, 리눅스 컨테이너) 란?

    LXC (Linux Containers) 란? LXC 는 리눅스 컨테이너 (Linux Containers) 란 뜻이다. 리눅스 커널에 내장된 경량 가상화 기술이다. 단일 호스트에서 여러 개의 격리된 Linux 시스템 (컨테이너) 을 실행할 수 있다. c그룹 및 네임스페이스 격리를 사용하여 독립적인 컨테이너가 단일 Linux 인스턴스 내에서 실행되도록 함으로써 가상머신(VM) 을 시작하고 유지 관리하는데 드는 오버헤드를 방지한다. 특징 리소스 효율성 및 속도: VM과 비교했을 때 호스트 시스템의 커널을 공유하므로 오버헤드가 적고 빨리 부팅할 수 있다. 격리: 컨테이너 내부의 프로세스는 다른 컨테이너나 호스트 시스템에서 실행중인 프로세스를 보거나 상호작용할 수 없다. 보안: AppArmor, SElinux ..

    하이퍼바이저 (Hypervisor) 란 무엇인가?

    가상화 기술 용어 Host OS: 가상화 기술을 이용하고 있는 호스트의 운영체제 Guest OS: 가상화 기술에서 실행되고 있는 운영체제 하이퍼바이저 하이퍼바이저의 동작 원리 OS 엔 하드웨어를 사용하기 위해 커널이라는 중요한 도구가 설치되어 있음 커널은 System call 이란 것을 이용하여 OS 에 리소스 사용 요청을 전달함 System call 을 통해 하드웨어 자원을 이용할 수 있음 하이퍼바이저에서 Host OS 와 Guest OS 종류가 다르면 상호 호환이 되지 않음 여기서 하이퍼바이저가 다른 커널 간의 언어를 통역하는 역할을 하게 됨 가상머신은 하드웨어 리소스 사용을 위해 Host OS 로 시스템 콜을 보냄 이 시스템 콜은 하이퍼바이저에 의해 해석되어 Host OS 에 맞는 시스템 콜로 변함..

    Elastic Network Adapter (ENA) 란?

    Elastic Network Adapter (ENA) 란? EC2(Elastic Compute Cloud) 서비스에 고성능 네트워크 기능을 제공하는 네트워크 인터페이스다. AWS 의 최신 가상화 컴퓨팅 환경에 특화되어 설계됐다. 주요 특징 높은 처리량과 짧은 지연 시간 (High Throughput and Low Latency): 더 높은 대역폭(bandwidth), 낮은 지연 시간(lower latency), 더 많은 패킷 처리를 지원한다. 향상된 네트워킹 (Enhanced Networking): 기존 가상화 네트워킹 스택 대비 더 높은 성능과 패킷 처리 일관성을 제공 확장성 및 유연성 (Scalability and Flexibility): 인스턴스 유형의 대역폭에 따라 자동으로 확장됨. 강력한 EC2..

    AWS 의 Elastic Beanstalk 이란?

    개요 Elastic Beanstalk 은 AWS 에서 제공하는 오케스트레이션 서비스이다. 앱 인프라 스트럭처의 배포, 스케일링, 관리를 자동화해준다. 앱과 서비스의 배포 및 관리 프로세스를 간소화하도록 설계됐다. Elastic Beanstalk 이란? 개발자가 인프라 및 배포 프로세스 관리 대신 애플리케이션 코드 작성에 집중할 수 있게 해주는 오케스트레이션 서비스 Java, .NET, PHP, Node.js 등 다양한 언어를 지원 용도 배포: 인프라 걱정 없이 AWS 에서 앱을 신속하게 배포하고 관리해야 하는 경우 확장 (Scaling): 수요에 따라 확장, 축소가 필요한 경우 리소스 관리: AWS 리소스를 보다 유연하게 제어하고 관리하려는 경우 간소화된 관리: 서버 및 인프라의 세부 정보를 직접 관리하..

    Orchestration Service (오케스트레이션 서비스) 란?

    오케스트레이션 서비스 (Orchestration Service) 란? 복잡한 컴퓨터 시스템, 미들웨어, 서비스의 배치, 조정 및 관리를 자동화하는 시스템을 말한다. 특정 비즈니스 혹은 기술 목표를 달성하기 위해 리소스와 서비스를 조정하고 관리하는 것이다. 주요 측면 작업 자동화: 앱 배포, 라이프사이클 관리, 리소스 스케일링, 장애 처리 같은 작업을 자동화한다. 워크플로우 관리: 앱 배포 및 유지 관리를 위한 워크플로우를 만들기 위한 일련의 작업을 정의하고 관리한다. 리소스 조정: 컴퓨팅 인스턴스, 스토리지 및 네트워킹 구성요소와 같은 다양한 리소스를 효율적으로 관리하고 조정한다. 확장성 및 탄력성 (Scalability and Elasticity): 수요에 따라 리소스를 동적으로 확장하여 성능을 유지하..

    대규모 서비스를 지탱하는 기술, 9강 IO 부하를 줄이는 방법 요약

    대규모 서비스를 지탱하는 기술, 9강 IO 부하를 줄이는 방법 요약 캐시를 전제로 I/O 부하 줄이기 데이터 규모에 비해 물리 메모리가 크면 캐시를 통해 전체 데이터를 메모리에 올려둘 수 있기 때문에 이를 고려해야 한다. 일반적인 케이스에 캐시로 올리지 못하더라도 압축 알고리즘을 이용해 올릴 수 있는 경우도 있으니 이를 조사해보는 것도 좋다. 실무에서는 메모리의 가격도 큰 의사결정 요소가 되기 때문에 소프트웨어 개선과 하드웨어 구매 중 어느 것이 싸게 먹히는지 생각해보아야 한다. 복수 서버로 확장시키기 데이터를 전부 캐싱할 수 없는 규모에서 사용하기 적합하다. AP 서버를 늘리는 건 정말 쉽다. DB 서버는 늘리려면 고려할 사항이 많다. 테이블 단위로 각각 다른 DB 서버로 나누는 등의 방식을 사용할 수..

    대규모 서비스를 지탱하는 기술, 8강 OS의 캐시 구조 요약

    대규모 서비스를 지탱하는 기술, 8강 OS의 캐시 구조 요약 OS 캐시 구조 알고 애플리케이션 작성하기 OS 의 캐시 구조를 이해하고 디스크 액세스를 최소화하면 프로그램을 빠르게 만들 수 있다 디스크와 메모리 간 속도 차는 10^5 에서 10^6 배 이상이다 캐시 구조를 이해하면 최대한 메모리에 올릴 수 있다 메모리를 이용해 디스크 액세스를 줄일 수 있다. (OS 캐시) 가상 메모리 논리적인 선형 주소를 물리적인 물리 주소로 변환하는 것이다 프로세스는 가상 메모리의 물리 주소를 통해 메모리에 접근한다 프로세스는 특정 번지부터 시작한다는 식의 상대 주소로 메모리에 접근한다 OS 는 커널 내에서 메모리를 추상화하고 이것을 가상 메모리라고 한다 OS 는 메모리를 1 바이트씩 액세스하는 것이 아니라 4바이트 정..

반응형