본문 바로가기

2023~17

Ch 01 쿠버네티스 소개 1.1 쿠버네티스와 같은 기술이 필요한 이유 monolith(모놀리스) 하나의 프로세스 프로그램을 만들어서 패키징하고 이를 운영팀한테 넘기면 운영팀이 배포하고 모니터링 하는 방식서버에 문제가 생기면 운영팀이 사용가능한 다른 서버로 직접 마이그레이션 MSA(마이크로 서비스)서비스가 작은 단위로 분리하여 구성하는 방식, 각각의 요소들을 개별적으로 개발/배포 가능각각의 작은 애플리케이션을 모두 수동으로 관리하는 것은 어려운일이 되었기 때문에 쿠버네티스 환경을 통해 자동으로 서비스들을 관리/장애 대비 필요  1.2 컨테이너 기술 소개 1) 가상 머신 가상머신마다 게스트 OS 를 할당하여 환경을 분리하는 방식가상 머신에 있는 애플리케이션은 게스트 OS 커널에 시스템 콜 요청시스템 콜을 요청 받으면 하이퍼 바이저를.. 2024. 9. 24.
Ch06 마블 다이어그램 6.1 마블 다이어그램이란?마블(구슬) + 다이어그램(도표)Publisher 의 데이터 생성 + Operator 데이터 가공 + 데이터 출력 과정을 도표로 나타낸 것 Publisher 가 데이터를 emit 하는 타임라인OnComplete signal: 정상적으로 데이터가 emit 되었을 때 Publisher 가 보내는 signalemit 된 데이터에 Operator 함수를 적용하여 데이터 가공Operator 를 거쳐 변환된 데이터 타임라인onComplete signal: 데이터 처리 종료 후 Publisher 가 보내는 signalonError signal: 데이터 가공시 에러가 발생하면 Publisher 가 보내는 signal  6.2 마블 다이어그램으로 Reactor 의 Publisher 이해하기1).. 2024. 9. 19.
Ch05 Reactor 개요 5.1 Reactor 란? 리액티브 스트림즈 사양의 구현체 중 하나(리액티브 프로그래밍을 위한 라이브러리로 Gradle dependency 에 spring-boot-starter-webflux 를 추가하면 Reactor도 추가된다)Reactor 특징 1) Reactive Streams 의 구현체2) Non-Blocking 어플리케이션3) 함수형 프로그래밍 API4) Flux[N], Mono[0|1]: Reactor 의 Publisher 에는 Flux, Mono 두 가지 타입이 있는데,: Flux[N] 은 0 ~ N 개의 데이터를 emit 할 수 있는 Publisher: Mono[0|1] 은 데이터를 emit 하거나/1개 하거나 이분법 적으로 emit 하는 Publisher5) MSA + 컴포넌트끼리 I/.. 2024. 9. 18.
Ch04 리액티브 프로그래밍을 위한 사전 지식 4.1 함수형 인터페이스 Java 8 부터 함수형 인터페이스 도입인터페이스가 하나의 추상메서드를 가질 때, 인터페이스를 구현한 구현체를 함수의 파라미터로 전달하는 방식 함수형 인터페이스 예시 e.g Comparator @FunctionalInterfacepublic interface Comparator { int compare(T o1, T o2);}// 정렬시 인터페이스 구현한 익명 객체 전달Collections.sort(리스트, new Comparator() { @Override public int compare(Type o1, Type o2) { return o1.getName().compareTo(o2.getName()); }}  4.2 람다식 함수형 인터페이스를.. 2024. 9. 17.
Ch03 Blocking I/O 와 Non-Blocking I/O Blocking I/O Spring MVC RedisTemplate 을 사용하여 동기적으로 API 응답을 주고 받는 방식요청 받은 작업 스레드가 작업을 완료하기 전까지 요청 스레드는 차단따라서 여러 작업을 차단없이 수행하려면 멀티 스레드를 사용해야 하는데 잦은 컨텍스트 스위칭, 스레드를 위한 메모리 할당 증가 등의 문제 존재 e.g. 클라이언트에서 본사 API 로 특정 책에 대한 정보를 요청할 때 본사 서버에서 다시 지점 서버로 요청하는 과정이 있다면,  ClientApplication @SpringBootApplicationpublic class ClientApplication { public static void main(String[] args) { SpringApplication.. 2024. 8. 28.
Ch02 리액티브 스트림즈(Reactive Streams) 2.1 리액티브 스트림즈란? 데이터를 리액티브하게 처리하기 위해서는 리액티브 라이브러리 필요리액티브 스트림즈 = 데이터를 리액티브(비동기 Non-Blocking 방식) 하게 처리하기 위한 리액트 라이브러리의 표준 사양 2.2 리액티브 스트림즈 구성요소 PublisherSubscriberSubscription(요청할 데이터 개수 지정, Publisher 구독 취소 등의 역할)Processor(Publisher, Subscriber 동시 역할 가능) 1) Subscriber 는 Publisher를 구독2) Publisher 는 데이터를 통지할 준비가 되었음을 Subscriber에 전달3) Subscriber 가 데이터 요청 개수 지정하여 요청(Subscription.request)4) Publisher 가 .. 2024. 8. 28.
Ch01 리액티브 시스템과 리액티브 프로그래밍 1.1 리액티브 시스템이란? 리액티브(Reactive) 하다 = 반응을 잘 한다클라이언트에서 요청을 보냈을 때 지연 없이(혹은 지연을 최소화하여) 응답하도록 하는 것1.2 리액티브 선언문으로 리액티브 시스템 이해하기 Responsive, Resllient(회복성), Elastic(탄력성), Message Driven(메세지 기반)https://www.reactivemanifesto.org/  1.3 리액티브 프로그래밍이란? 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델비동기 메세지 통신 기반, Non-Blocking I/O  1.4 리액티브 프로그래밍의 특징 1) 선언형 프로그래밍: 명령형 프로그래밍 (실행할 동작을 구체적으로 명시) vs 선언형 프로그래밍 (동작에 대한 목표만 명시)2) 지속적으로.. 2024. 8. 22.