본문 바로가기
728x90

전체 글70

2. Reactor Core (Mono, Flux, Subscribe) 이번장에는 Reactor를 직접 사용하여 Reactive programming을 어떻게 하는지 알아보자. 필자는 Kotlin을 주로 사용하기 때문에 언어는 Kotlin을 사용한다. Dependency 먼저 Reactor를 사용하기 위한 환경과 디펜던시를 맞추자. Reactor가 Java8 함수형 API(CompletableFuture, Stream, Duration)와 관련이 있기 때문에 Reactor를 사용하기 위해서는 Java 8 이상이어야 한다. 그리고 Reactor 라이브러리를 사용하기 위해서 gradle 설정을 추가하자. (KotlinDSL) plugins { id("io.spring.dependency-management") version "1.0.9.RELEASE" } dependencies.. 2022. 4. 29.
1. Reactor 소개 Spring Webflux 기반으로 웹 애플리케이션을 개발하기 위해 필요한 Reactor에 대한 지식을 넓히고자 공식 문서를 보면서 공부한 내용을 정리해보았습니다. Reactor Reactor는 JVM 환경에서 동작하는 non-blocking reactive 라이브러리이다. Reactor에서는 Mono와 Flux 라는 두 가지 비동기 시퀀스 API를 제공한다. 이는 나중에 자세히 다뤄보겠다. 그리고 Reactor는 Reactor Netty 프로젝트와 함께 non-blocking IPC(Inter-Process Commumication)을 지원한다. 여기서 Netty는 HTTP, TCP, UDP를 위한 backpressure(배압) 가 준비된 네트워크 엔진을 제공한다. Reactive Programming.. 2022. 4. 27.
3. Docker Volume 도커 볼륨 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되어 컨테이너 변경사항만 별도로 컨테이너 계층에 저장하여 각 컨테이너 정보를 보존한다. 하지만 컨테이너를 삭제하게 되면 컨테이너 계층에 저장된 정보들이 모두 날아간다. 예를 들어 이전에 설치했던 mysql 컨테이너를 삭제하게 된다면 mysql에 저장된 데이터베이스 정보도 모두 삭제된다는 것이다. 컨테이너를 삭제하면 데이터를 복구할 수 없기 때문에 삭제를 신중하게 해야한다. mysql 컨테이너와 같이 영속성 데이터를 저장하는 컨테이너를 실수로 삭제해버리면 데이터를 복구할 수 없는 등 치명적인 결과를 낳을 수 있는데, 이를 방지하기 위해 도커에서는 볼륨을 통해 데이터를 영속 데이터로 저장할 수 있다. 볼륨은 (1) 호스트와 볼륨을 공유할 수도.. 2022. 4. 24.
2. Docker Container 컨테이너 사용하기 이전 장에서 도커 이미지와 컨테이너에 대해 간단히 알아보았다. 이제는 도커 컨테이너를 사용하는 방법에 대해 알아보자. 컨테이너 생성 + 실행 먼저 컨테이너를 실행하는 명령어에 대해 알아보자. 도커는 docker run 명령어를 통해 컨테이너를 생성하고 즉시 실행한다. $ docker run -it ubuntu:14.04 Unable to find image 'ubuntu:14.04' locally 14.04: Pulling from library/ubuntu 2e6e20c8e2e6: Pull complete 0551a797c01d: Pull complete 512123a864da: Pull complete Digest: sha256:60840958b25b5947b11d7a274274dc.. 2022. 4. 24.
1. Docker 소개 및 설치 Docker Docker는 리눅스 컨테이너에서 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다. Docker를 배우기 앞서 Docker와 자주 비교되는 가상머신과 함께 비교해보자. 가상 머신과 Docker container 기존의 가상화 기술은 하이퍼바이저를 이용하여 여러 가상 머신을 만들어 여러가지 운영체제를 하나의 호스트에서 생성하여 사용하였다. 하나의 가상머신은 하나의 운영체제가 설치되어 있다. 하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제라고 하며 각 게스트 운영체제는 독립된 공간과 시스템 자원을 호스트에서 할당받아 사용한다. 그러나 각 시스템 자원을 가상화하여 독립적인 공간을 생성하는 작업은 하이퍼바이저를 반드시 거.. 2022. 4. 24.
[9] 쿠버네티스 볼륨 Volume 컨테이너(파드)가 뜨면 컨테이너 만의 공간이 생성되고 이 공간은 임시적으로 사용된다. 만약 파드가 죽는다면 해당 공간은 사라진다. 웹 애플리케이션과 같은 Stateless한 애플리케이션인 경우에는 문제가 없지만, 애플리케이션이 특정 데이터를 저장해야 하는 경우나 파드에서 같이 실행되는 컨테이너 간에 임시 파일을 공유해야 하는 경우에 문제가 발생하게 된다. 컨테이너 애플리케이션이 특정 데이터를 저장해야 하는 경우에는 애플리케이션이 죽으면 쿠버네티스가 컨테이너를 다시 띄우겠지만 컨테이너 공간이 사라지기 때문에 해당 데이터는 당연히 삭제된다. 파드에서 같이 실행되는 컨테이너 간에 임시 파일을 공유해야 하는 경우, 파일을 저장하는 컨테이너가 죽어버리면 위와 똑같은 이유로 임시파일에 저장된 데이터는 .. 2022. 2. 20.
[8] 쿠버네티스 서비스 지금까지는 파드로 컨테이너 기반 애플리케이션을 띄우고 디플로이먼트로 파드의 레플리카 수와 버전을 관리하였다. 하지만 이것만으로는 파드로 띄운 웹 애플리케이션을 쿠버네티스 클러스터 외부로 서비스할 수 없다. 왜냐하면 파드는 파드 고유의 IP를 가지긴 하지만 클러스터 내부용 IP이며, 파드는 클러스터의 상태에 맞게 생성되고 삭제되기 때문에 파드는 영구적인 리소스가 아니다. 즉, 파드가 장애가 났다고 판단하면 디플로이먼트가 파드를 재구동 시키면서 파드의 IP가 유지되지 않아서 파드가 클러스터 외부와 통신이 가능한다 하더라도 제대로된 서비스를 할 수가 없다. 이러한 파드의 특성 때문에 쿠버네티스의 클러스터 외부에서 파드와 통신할 수 있도록 하는 메커니즘이 필요하다. 필요한 기능은 먼저 파드가 영구적인 리소스가 .. 2022. 2. 9.
[7] 쿠버네티스 디플로이먼트 쿠버네티스는 파드를 생성하여 컨테이너 애플리케이션을 구동한다. 그런데 실제로 쿠버네티스 환경으로 운영할 때는 파드 자체를 생성하지 않고 디플로이먼트와 같은 워크로드 리소스를 생성하여 파드 집합을 관리한다. 이 워크로드 리소스는 원하는 파드의 종류와 갯수가 실행될 수 있도록 원하는 상태(desired state) 를 보장하는 컨트롤러를 구성한다. 이 장에서는 워크로드 리소스 중 하나인 디플로이먼트에 대해 알아보자. 디플로이먼트 디플로이먼트는 파드와 레플리카셋에 대한 선언적 업데이트를 제공한다. 디플로이먼트에서 원하는 상태(desired state)를 기술하며, 디플로이먼트 컨트롤러가 현재 상태를 원하는 상태로 변경한다. 디플로이먼트는 새로운 레플리카셋을 생성할지, 기존 디플로이먼트를 제거하고 제거 대상 모.. 2022. 1. 23.
[6] 쿠버네티스 파드 쿠버네티스를 사용하는 가장 큰 이유는 컨테이너 애플리케이션을 쉽게 배포하고 관리하기 위해서이다. 쿠버네티스에서는 컨테이너 애플리케이션을 파드라는 오브젝트로 추상화하여 관리한다. 그러면 어떻게 쿠버네티스에서 컨테이너 애플리케이션을 관리하는지 알아보자. 파드 파드는 쿠버네티스에서 생성하고 관리하는 배포 가능한 가장 작은 컴퓨팅 단위이다. 보통 쿠버네티스의 컨테이너 애플리케이션을 파드라고도 부르기도 하지만 엄밀히 말하면 컨테이너 애플리케이션을 포함한 여러가지를 내포하고 있다. 쿠버네티스에서는 하나 이상의 컨테이너 애플리케이션과 네트워크 리소스, 그리고 필요하다면 스토리지까지를 한꺼번에 모아 파드 라는 오브젝트로 추상화하고 있다. 여기서 네트워크 리소스는 각 파드마다 고유한 IP를 가지며, 파드 내에 있는 컨테.. 2022. 1. 5.
728x90