본문 바로가기

Computer Science

(252)
2일차 Message Queue Message Queue 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법이다. 메시지 지향 미들웨어 (Message Oriented Middleware, MOM) 비동기 메시지를 사용하는 프로그램 간의 데이터 송수신이다. MOM을 구현한 시스템을 MQ라고 한다. 특징 비동기 - Queue에 넣기 때문에 즉시 처리할 필요 없이 나중에 처리할 수 있다. 비동조- Application과 분리할 수 있다. 탄력성 - 일부가 실패하더라도 전체는 영향을 받지 않는다. 과잉 - 실패할 경우 재실행이 가능하다. 확장성 - 다수의 프로세스들이 큐에 메시지를 보낼 수 있다. 장점 애플리케이션 & 시스템 간의 통신 서버 간의 데이터를 주고 받거나 어떤 작업을 요청할 때 항상 시스템 장애를 염두해야 한다...
3일차 과제 리뷰 & 카프카 실습 예제 과제 리뷰 진행 과정 저번주에 발표 순서에 따라 나뉜 1조, 2조의 과제 발표가 있었다. 순서는 1조에서 2조의 순서대로 갔으며, 촉박한 시간에 의해서 두팀다 100% 완벽하진 않았지만 충분한 퀄리티를 가진 시스템을 만들었던걸 볼수 있었다. 다만, 나는 해당 과제를 수행하면서 다음과 같이 필요하 점을 느끼게 되었다. 보완해 나가야 할 점 1. 처음에 다 같이 설정을 잡고 시작해야 한다. WebFlux를 사용한 API 만들기 이다 보니 팀 내부에서도 누구는 R2DBC를 사용하고, 누구는 JDBC를 사용하고 이렇다 보니 종합하는 과정에서 JDBC나 R2DBC로 묶여야 하는 문제점이 있었다. 그렇다 보니 처음에 시작할 설정은 다 같이 잡고 시작하는것이 맞다라는 생각을 했다. 2. Swagger나 Spring ..
5일차 WebFlux Webflux springWebFlux란? Spring5에서 reactive stack을 지원하는 web container freamework Netty등 비동기 Non blocking 컨테이너 사용 springWebFlux특징 Non bolcking IO 최소한의 리소스로 효율적인 운영 Singler worker thread가 Event loop 처리 Functional Endpoints Lambda 기반 functonal programming model Reqeuest Router가 handler로 request routing Handler method에 @RequestMapping선언부 없이 request/reponse를 App에서 전부 제어 spring MVC와 WebFlux spring MVC와..
4일차 과제 실습 Operation 실습 시간에는 실습을 하면서, 내가 궁금했던 혹은 의아했던 것들에 대해서 블로그에 정리해보기로 정하였다. expectSubscription() 위 두가지 테스트는 둘다 성공적으로 돌아간다. 그렇다면 .expectSubscription()을 사용하지 않아도 될까? Reacive Streams의 흐름을 보면, Subscriber에 의해, Publisher의 subscribe Method가 실행되면, Subscription이 생성된다. 이후 Subscription에 Publisher는 data를 전달하며, subscriber는 onNext를 통해 data를 전달받기도, 이후 onComplete와 onError로 흐름을 마루리 짓기도 한다. 이 때, 이 Subscription이 생겼는가를 확인..
3일차 리액티브 프로그래밍 오퍼레이션 Sequence 생성 Just 시퀀스를 생성하는 가장 쉬운 방법은 Flux.just()를 사용하는 것이다. just() 메서드는 시퀀스로 사용할 데이터가 이미 존재할 때 사용한다. 다음은 사용 예이다. 내부 구조를 살펴보면 다음과 같다. 전달받은 값이 빈값이라면 빈플럭스를 반환하고 그게 아니라면 FluxArray를 반환한다. 위에도 확인할수 있는 사실은 3가지가 존재한다. 1. Flux, Mono는 Publisher를 구현한 클래스들이고 Sequence(데이터 흐름)를 생성한다. 2. Publisher와 Subscriber구조에서 볼수 있듯이, Sequence는 subscriber에 의해 subscribe되어 데이터가 처리 된다. 3. 이후 subscriber은 request를 통해 전달받은 데이터의 수..
2일 리액티브 프로그래밍 리액티브 프로그래밍이란? 요구사항의 변화 한 개의 거대한 앱에서 도메인별로 나뉘어진 여러개의 Micro App으로 변화함에 따라 응답이 잘되고, 탄력적이며 유연하고 메시지 기반으로 동작하는 시스템의 필요성이 대두되었고 이에 따라 등장한 프로그래밍 방식이다. 리액티브 프로그래밍은 데이터 스트림과 변경 사항 전파를 중심으로하는 비동기 프로그래밍 패러다임이다. 이것은 프로그래밍 언어로 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있어야하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다. 리액티브 프로그래밍은 위의 그림처럼 비동기 & 논블록킹 방식을 취하고 있다. funB가 funcA를 호출하며 callbackUrl을 주고 funA는 callBackUrl을 통해 실행 ..
1일차 이벤트 드리븐 아키텍쳐 & 프로그래밍 동기 (Synchronous)와 비동기(Asynchronous) 1. 동기 말그대로 동시에 일어난다는 의미입니다. 예를 들어 커피를 시켰을때, 커피가 만들어질때까지 옆에서 기다린다면 동기적 프로그래밍이라고 할수 있습니다. 결과가 발생할때까지 결과값을 기다리는것을 의미합니다 2. 비동기 동시에 일어나지 않는것을 의미합니다. 예를 들어 커피를 시켰을때, 진동벨을 통해 커피가 만들어질때까지 기다리지 않는다면 비동기적 프로그래밍이라고 할 수 있습니다. 결과가 발생할때까지 결과값을 기다리지 않고 다른 할일을 처리하다가 결과값을 받는것을 의미합니다. 블록킹(Blocking)과 논 블록킹(Non - Blocking) 1. 블록킹 호출한 함수의 상태와 연관이 있다. A가 B를 호출하고 B를 계속 기다린다면, 그 방식을..
싱클톤 패턴(Singleton Pattern) 1. Singleton Pattern 싱글톤 패턴이란 어플리케이션이 시작될때 최초 한번 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 변화되여서는 안되는 설정값등을 위해 주로 사용되며 여러 객체에서 접근이 가능하므로 동시성 문제를 잘 해결해야만 한다. // 일반적인 class문 public class Factory { private boolean isOperating = false; public Factory() {}; public void operationFactory() { isOperating = true; System.out.println("start Opertion!"); } public void shutDownFactory() { isOperating = false..