2. 스프링을 이용한 리액티브 프로그래밍 기본 개념 관찰자 패턴 스프링 서버에서 보낸 이벤트를 구현한 발행-구독(Publish-Subscribe) 구현 RxJava 역사 및 기본 개념 마블(Marble) 다이어그램 리액티브 프로그래밍을 적용한 비즈니스 사례 리액티브 라이브러리의 현재 상황 2.1 리액티브를 위한 스프링 프레임워크의 초기 해법 ...
1. 왜 리액티브 스프링인가? 1.1 왜 리액티브인가? 서버진영에서 reactive(반응형)이라는 말이 2019년쯤부터 굉장히 빈번하게 들려왔다. 시스템의 가용량 예시 tomcat worker thread 500으로 설정 API 응답시간이 250ms 이 기준으로 계산해보면 시스템의 최대 TPS 2,000임을 알수 있다. 특수...
11. 쿠버네티스 내부 이해 11.1 쿠버네티스 아키텍처 이해 쿠버네티스 클러스터 구성요소 컨트롤 플레인 (워커)노드 컨트롤 플레인 구성요소 클러스터 기능을 제어하고 전체 클러스터가 동작하게 만드는 역할을 한다. etcd 분산 저장 스토리지 API 서버 스케줄러 컨트롤러 매니저 워커 노드에서 실행하는 구성 요소...
10. 스테이트풀셋: 복제된 스테이트풀 애플리케이션 배포하기 볼륨이나 퍼시스턴트볼륨클레임에 바인딩된 퍼시스턴트볼륨을 통해서 데이터베이스를 일반 파드에 실행했었는데, 이 파드들을 스케일아웃하려면 어떻게 할수 있을지 살펴본다. 10.1 스테이트풀 파드 복제하기 스테이트풀 파드를 복제할떄 레플리카셋을 이용한다면 어떨까? 레플리카셋은 하나의...
9. 디플로이먼트 : 선언적 애플리케이션 업데이트 쿠버네티스 클러스터에서 실행되는 애플리케이션을 업데이트 하는 방법과 쿠버네티스가 어떻게 무중단 업데이트 프로세스로 전환하는 데 도움을 주는지 살펴본다. 9.1 파드에서 실행중인 애플리케이션 업데이트 쿠버네티스에서 실행되는 애플리케이션 기본 구성은 아래와 같다. 여기서 파드에서 실행중인 컨...
8. 애플리케이션에서 파드 메타데이터와 그 외의 리소스에 엑세스하기 Downward API사용방법과 쿠버네티스 REST API 사용방법, 인증과 서버 검증을 kubectl proxy에 맡기는 방법, 컨테이너 내에서 API 서버에 접근하는 방법, 앰배서더 컨테이너 패턴의 이해, 쿠버네티스 클라이언트 라이브러리 사용방법 등을 살펴본다. ...
7. 컨피그맵과 시크릿 : 애플리케이션 설정 빌드된 애플리케이션 자체에 포함되지 말아야 하는 설정(배포된 인스턴스별로 다른 세팅, 외부 시스템 엑세스를 위한 자격증명 등)이 필요하다. 쿠버네티스는 이런 앱을 실행할때 설정 옵션을 전달할수 있는 방법을 제공한다. 7.1 컨테이너화된 애플리케이션 설정 필요한 모든 설정을 앱에 포함하는 경우를...
6. 볼륨 : 컨테이너에 디스크 스토리지 연결 파드는 내부에 프로세스가 실행되고 CPU, RAM, 네트워크 인터페이스 등의 리소스를 공유한다. 하지만 디스크는 공유되지 않는다. 파드 내부의 각 컨테이너는 고유하게 분리된 파일 시스템을 가지기 때문이다.(컨테이너 이미지로부터 제공되는) 새로 시작한 컨테이너는 이전에 실행했던 컨테이너에 쓰여진 파...
5. 서비스 : 클라이언트가 파드를 검색하고 통신을 가능하게 함. 파드가 다른 파드에게 제공하는 서비스를 사용하려면 다른 파드를 찾는 방법이 필요하다. 쿠버네티스에서는 서비스를 제공하는 서버의 정확한 IP 주소나 호스트 이름을 지정해 각 클라이언트 앱을 구성하는것과는 다른 방식이 필요하다. 기존의 방식과 다른 방식이 필요한 이유 쿠버네티...
4. 레플리케이션과 그 밖의 컨트롤러 : 관리되는 파드 배포 4.1 파드를 안정적으로 유지하기 쿠버네티스를 사용하면 얻을 수 있는 주요 이점은 쿠버네티스에 컨테이너 목록을 제공하면 해당 컨테이너를 클러스터 어딘가에서 계속 실행되도록 할수 있는 것이다. 파드가 노드에 스케줄링되면 노드의 Kubelet은 이 파드가 존재하는 한 컨테이너가 계속 실...