# publisher

Chatper09. Sinks
Sinks란? > 리액티브 스트림즈의 Signal을 프로그래밍 방식으로 푸시할 수 있는 구조 > Publisher와 Subscriber의 기능을 모두 지닌 Processor의 향상된 기능을 제공 Multi Thread 기반 스레드 안정성 보장 Reactor에서 프로그래밍 방식으로 Singal을 전송하는 가장 일반적인 방법 generate() Operator create() Operator Single Thread 기반 따라서 스레드 안정성 보장 ❌ 코드 예시 create() Operator를 통한 Signal 전송 Sinks를 사용하는 코드 예제 참고: Thread Safety What Is Thread-Safety and How to Achieve It? | Baeldung

[Spring Boot] MQTT를 이용한 외부 API로의 데이터 송수신
❗️문제 상황 현재 필자는 대학에서 Smart Green Campus라는 프로젝트를 진행중이다. > Smart Green Campus란? 건축공학과, 컴퓨터공학과, 정보통신공학과가 협업하는 프로젝트로, 진행 과정은 다음과 같다. 건축공학과에서 학교의 일사량, 습도, 온도 등을 측정하여 Influx DB에 저장한다. 컴퓨터공학과에서 DB의 데이터를 가져와서 MQTT를 이용하여 정보통신공학과에 Publish! 정보통신공학과는 Broker, Subscriber를 구현하여 데이터를 수신받고, API 서버팀에 전송한다. API 서버팀은 최종 DB에 저장하고, FE팀이 웹 화면에 뿌려준다. 위의 과정에서 나는 컴퓨터공학과 측에서 송신하는 센싱값들을 MQTT를 이용해서 받고, API 서버팀에 보내주는 역할을 하고있다! 이 과정에서 나와 비슷한 사례들이 많이 있지 않아서 구현하는 데 쉽지 않았고, 그에 따른 경험을 공유하려 한다.
Spring Boot Event
옵저버 패턴을 사용한 Event 기능 구현하기 ✏️ 전체적인 순서 ✏️ Publisher Service 계층 변화가 발생할 때 구독자에게 이벤트를 보내주는 역할 ApplicationEventPublisher 이벤트 공급자 기능을 수행하기 위한 Spring boot 의 라이브러리 객체 publishEvent 구독자에게 이벤트를 발생을 알리기 위한 메서드 구독자가 이벤트를 처리하기 위한 값을 변수로 넘겨준다. ✏️ Event 계층 ApplicationEvent 를 상속받아 원하는 이벤트 객체를 생성할 수 있다. 이벤트 처리에 필요한 필드를 생성 후 생성자 주입방식으로 값을 얻을 수 있게 만들어준다. 공급자에 특정 이벤트가 발생될경우 Event 객체의 생성자가 호출된다. 이벤트 처리에 필요한 필드값을 선언하고, 생성자 주입으로 값을 채워준다.
Observer Pattern
관심있는 객체의 상태 변화를 관찰하고, 객체의 상태변화가 발생할 때 마다 알림을 받는 패턴을 뜻한다. ✏️ 옵저버 패턴의 구조 📍 Subscriber - 구독자 객체의 상태가 변화할 경우 알림을 받는 쪽을 뜻한다. subscribe() 을 통해 특정 객체의 변화를 감지하기 시작한다. unsubscribe() 을 통해 객체의 변화 감지를 종료한다. 📍 Publisher - 공급자 변화가 발생되는 객체를 뜻한다. subscribe() 을 한 구독자에 한에 객체의 변화가 발생될 때 notifySubscribers(eventType) 으로 변화에 대한 알림을 보낸다. ✏️ 옵저버 패턴의 작동방식 구독자가 구독을 할 경우 공급자는 내부적으로 관리하는 subscribers 배열에 구독자를 추가한다. 공급자 객체가 변화하면 notifySubscribers 를 호출
Publisher
Declares that a type can transmit a sequence of values over time. Declaration Overview 퍼블리셔는 하나 이상의 Subscriber 인스턴스에 요소들을 전달합니다. Subscriber의 인풋과 Failure associated type은 퍼블리셔에 의해 정의된 아웃풋 및 Failure 타입과 일치해야 합니다. 퍼블리셔는 Subscriber를 수락하기 위해 receive(subscriber:) 메소드를 구현합니다. 이후 퍼블리셔는 Subscriber에 아래 메소드를 호출할 수 있습니다. receive(subscription:): Subscribe 요청을 확인하고 Subscription 인스턴스를 반환합니다. Subscriber는 퍼블리셔로부터 요소들을 요구하기 위해 Sub

서비스 소개 : function 12 (feat, 내 밥그릇은 안전한가?)
1. Overview 퍼블리싱 일을 하면서, 프로모션 페이지와 같이 단일 페이지 작업을 할 때, 이미지를 자동화 시키면 얼마나 좋을까? 라는 생각을 해보곤 한다. 그러던 중 function12 라는 회사에서 만들어진 figma나 XD로 만들어진 것을 자동으로 퍼블리싱하는 프로그램을 개발이 되어 이에 대해 알아보는 시간을 갖게되었다. 2. 'function12' 란? 2-1. Low-code 와 No-code! 당신의 선택은? 하나의 프로세서를 기획하고 만들때, 우리는 대부분 다음과 같은 비지니스 측면을 생각해야 된다. > 개발자가 시스템을 만들때, Low-code를 사용할 것인가, No-code를 사용할 것인가. 여기서 중요한 것은 Low-code와 No-code에 대해 정확히 알고 사용해야 된다는 것이다. 2-1-1. No-code 이름에서와 같이 No-code시스템은 플랫폼을 개발시 개발자가 코딩을 하지 않는 것을 의미한다. 플랫폼내에서 이

[Reactive Java #2] Pub - Sub 이용해보기
오늘은 Java에서 제공해주는 concurrent.Flow 에서 pub sub 모델을 사용해볼 예정이다. 해당 라이브러리는 이전에 다루었던 옵저버 패턴의 상향된 버전이라고 생각하면 된다. 목차 선수지식 V1(pub-sub으로 로직구현) V2(pub-sub에 프록시 느낌 추가하기) 선수지식 > 먼저 알아야할 내용이 있다. Pub-Sub 모델에선 다음의 개념이 존재한다. Publisher Subscriber Subscription 옵저버 패턴과 매우 흡사하다. 해당 내용에는 "구독"이라는 개념이 존재한다. 먼저 이해하기 쉽게 순서를 살펴보자. publisher가 존재한다. publisher는 subscription이라는 정보를 가지고 있다. subscriber는 publisher를 구독한다. 일련의 스트림이 존재하면 publisher는 subscriber에게 스트림의 내용을 전달한다. subscribe

Custom Publisher & Subscriber
Combine에 대해서 실제 사용하다 보니, 이게 도대체 어떤 방식으로 이루어지는 지 궁금했다. 실제 코드를 보지 않으면 명확해지지 않을 것 같아 정리한다. Objective > URLSession에서 요청을 받아 내가 원하는 응답을 보내주는 Publisher, 그에 해당하는 Subscriber, Subscription을 모두 따로 만들어 본다. 이전 글에서 배웠던 이 흐름을 기반으로, Custom Publisher, Subscriber를 만들어보면서 내부 동작을 이해해보는 것을 목표로 한다. 그 전에, 앞의 글과 조금 다른 부분이 있어 그림을 수정했다. WWDC에서 나온 이 그림은 얼핏 보면 Publisher에게 값을 요청하는 것처럼 보인다. 하지만 그것은 사실이 아니며, Publisher

Notification Center
Notification Center는 꽤나 오래전 부터 iOS의 이벤트 전송 매커니즘으로 자리잡았다. 어떤 요소들이 있는지 확인해보자. Publisher/Subscriber Pattern NotificationCenter에 대해 알아보기 이전에, 이 녀석이 어떠한 기반을 가지고 태어난 아이인지 알아볼 필요가 있다. 기본적으로 NotificationCenter는 Publisher/Subscriber Pattern을 따른다. Publisher/Subscriber Pattern은 비동기 메시징 패러다임으로, 발신자와 수신자로 구분되어 있다. 이 때, 발신자의 메시지는 특별한 수신자가 정해져있지 않아도 메시지를 보낼 수 있다. 즉, 보내는데 받는 녀석이 없어도 된다는 말이다. 대신 수신하는 쪽에서

Introducing Combine
Combine이 무엇일까? Apple이 설명하는 것을 들어보자. What is Combine > 이벤트 처리 연산자를 결헙하여 비동기 이벤트를 처리하는 방법 일단 비동기 이벤트가 무엇이 있는지부터 알아보자. 이를 설명하기 위해서 WWDC에서는 Create Account 페이지를 만드는 것을 예시로 하여 설명을 이어간다. 요구사항은 위와 같다. username 유효성 판단, password matching 판단, 그리고 이것들이 맞을 경우, 버튼이 활성화되는 것, 이 세가지 이다. 이걸 가능케하기 위해서는 먼저,

Combine Cheat Sheet
Apple에서 공개한 API인 Combine. 이제 Rx에서 Combine으로 많이 넘어간다고 한다. 무엇을 하는 것인지, 왜 좋은지, 바로 써먹기 위한 팁은 무엇이 있는지 알아본다. 의의 Rx의 사전적 의미 Reactive (Observer pattern) Functional 값을 다루는 방식 기존 시간이 지남에 따라 변수 값이 변한다. a = 3 -> a = 4 Rx 값들의 sequence(stream) 일종의 array를 다루는 사고방식 기본 흐름 Publisher 값을 방출 Operator Publisher들을 조합 Subscriber 방출된 값을 받아서 사용 Publisher 방출하는 Event 종류 Output Value 특정 값 특정 값을 포함하는 Event (Publisher가 될 수도
[node.js] Subscriber / Publisher
1-1. Subscriber/Publisher Pattern > message queue 경로를 통해 서로 종속적인 관계에 있는 module을 분리하는 과정 > Publisher는 data를 전달하는 주체, Subscriber는 data를 전달받는 대상이다. > 서로 직접적으로 data를 주고받는 과정을, Publisher가 evenet를 발생하는 등의 특정 시점에서 Subscriber가 data를 받는 과정을 활용하는 방법이다. 위 도식에서 알 수 있듯이, Publusher가 event를 publish하는 시점에서 Event channel를 거쳐 Subscriber에게 data가 전달된다. subscriber는 해당 channel을 subscribe해야 해당 data를 받을 수 있고, 이 Publ
[ROS] Publisher & Subscriber
전체 요약 >숫자 2와 3을 publish한 것을 subscribe하여(받아와서) 더해서 출력한다. >>1. roscore 실행 launch파일이 없기 때문에 python으로 하나씩 실행 ex)python   publish되는 것을 확인 하려면 rostopic list로 목록을 확인한다. rostopic echo 명령어를 이용해 publish 되는것을 확인한다. 전체 구조를 보고싶다면 rqt_graph를 사용하여 확인할 수 있다. 1. Publisher #1 3을 publish하는 노드를 생성한다. >1. 초기 노드를 먼저 설정해준다. 메세지 형태의 토픽 이름을 정하고 형식, queue_size를 정해주고 반복해서 publish를 해준다. > python import rospy from std_msgs.msg import Int8 #메세지 형식 정하기, int8 > rospy.init_node('tes

210705(TIL 02) - react의 요소들, state 변수변환을 이용해 경고창 만들기.
React 현재 angular, vue 등 다른 프로그램과 비교했을 때 사용자가 가장 많다. 기본 React를 알면 응용하여 웹(React.js), 앱(React-Native), 데스크탑 프로그램(React.Electron (ex)ppt, slack) 만드는 프로그램을 배우기 쉽다. Component 기반으로 되어있어 ui 또는 기능을 부품화해서 재사용 가능하다. 협업을 위해 많이 쓰이며, 위 사진과 같이 하나의 원본 컴포넌트를 여러 사람이 다운받아 동시에 작업이 가능함. 작업 후 수정된 파일은 같은 경로로 업로드. 필요시 page 자체를 하나의 큰 컴포넌트로 정의해도 됨. (=page component) (react 사용 전에는 페이지 하나하나 다 코딩함.)
210705(Today I Learned. 01) - 수강 시작, Github설정 모음 + 터미널 명령어 (계속 추가)
오늘은 수강 첫 날이라 vscode내의 Terminal 탭에서 사용 할 emotion 등등의 것들을 설치했다. 나는 맥북이 아니라 윈도우여서 Windows Power Shell 에서 설치를 시작했다. 그리고 처음으로 React를 배웠다. 사실 어려울까봐 걱정이 됐는데 생각보단 괜찮았다. (그래도 아직 어렵긴 어려움) 설치할 것을 다 설치하고 나니 react 폴더들에 목록이 많이 생겼다. 원래 쓰던 html, css와는 경로명이 아예 달랐다. > package.json = 설치된 목록 _app.js = html 설정파일 public = 이미지 파일 pages = html파일 styles = css 파일 등등... 아! emotion에서는 태그 이름을 div, id같은 것이 아니라 맘대로 지정할 수 있다는 게 재밌었다. ex) TextButton 등등 숙제로 내주신 게시판 만들기를 했는데 내가 짠 코드는 어째 너무
Combine) Publisher
RxSwift를 공부했으니 이제 Combine에 대해 공부해보려 한다. 공식 문서와 내부 구현 먼저 보자. Publisher Publisher 공식 문서 Declaration 구현 Publisher는 시간에 따라 값의 sequence를 전달할 수 있는 "프로토콜"이다. 하나 혹은 그 이상의 Subscriber에게 elements를 전달할 수 있다. subscriber는 Input 과 Failure 라는 associated types를 가지고 있는데, 이는 Pubslisher에서 정의된 Output, *Failure