비동기: 6개의 글
동기/비동기 vs 블로킹/논블로킹 Redis를 세션 스토리지로 적용하는 과정에서 Java의 대표적인 Redis client 인 Jedis와 Lettuce 중 Netty 기반의 Redis 클라이언트인 Lettuce를 사용하기로 결정했다. Netty는 비동기 이벤트 기반의 고성능 네트워크 프레임워크인데, 여기서 나온 비동기의 개념을 확실히 짚고 넘어가고자 정리하기로 했다. 동기/비동기 vs 블로킹/논블로킹 동기와 비동기 또는 블로킹과 논블로킹 중 하나를 떠올리면 자연스럽게 나머지 단어들도 떠오르게 된다. 그 이유는 둘의 개념적인 의미가 비슷하기 때문이다. 하지만 실제로 두 개념은 서로 연관관계가 없는 별개의 개념으로 기억해야 한다. 동기/비동기 먼저 동기와 비동기에 대해 알아보자. 동기(synchronous..
들어가며 파일 입출력에 대해서 설명을 해드리겠습니다. NodeJs에서는 File I/O의 주요 함수는 동기식, 비동기식 그리고 Stream을 이용한 방식이 있습니다. NodeJs는 비동기 방식이기 때문에 순차적으로 함수를 수행하지 않습니다. 그렇기 때문에 만약에 큰 파일을 읽고 있는 상태에서, 만약 그 파일을 쓰는 코드를 작성할 경우에는 에러가 발생 할 수도 있으니 주의하셔야 합니다. 이런 경우에는 동기식으로 파일 읽기/쓰기를 하시면 문제없이 사용할 수 있습니다. 파일입력 주요 함수 readFile('filename', 'encoding', callback(error, data)); readFileSync('fileㄱname', 'encoding') : data writeFile('filename', d..
오늘 포스팅할 내용은 래빗엠큐이다. 그 동안에는 카프카를 사용할 일이 많아 카프카에 대한 포스팅이 주였는데, 이번에 래빗엠큐를 사용할 일이 생겨 간단히 래빗엠큐에 대해 간단히 다루어 볼것이다.(예제 코드는 위 깃헙에 올려놓았습니다.) 비동기 작업에 있어 큐를 사용하려면 중간에 메시지 브로커라는 개념이 존재하는데, 이러한 메시지 브로커에는 RabbitMQ, Kafka 등이 대표적으로 있다. 해당 포스트에서는 표준 MQ프로토콜인 AMQP를 구현한 RabbitMQ(래빗엠큐)에 대해 다루어볼 것이다. 간단하게 메시지큐는 아래 그림과 같은 워크 플로우로 이루어져있다. 대부분의 메시지큐는 프로듀서가 있고, 해당 프로듀서가 브로커로 메시지를 발행하면, 적절한 컨슈머가 해당 메시지를 구독(읽다)하는 구조이다. 그렇다면..
Spring - Rabbitmq를 이용한 비동기 메시징 서비스 -리액티브 마이크로서비스 Mac OS 환경에서 작성되었습니다. 오늘은 간단히 Spring boot + Rabbitmq를 이용한 비동기 메시징 서비스를 구현해볼 것이다. 일단 이 포스팅을 진행하는 이유는 요즘 시대에는 일체형 애플리케이션이 작은 서비스 단위인 마이크로서비스 단위로 나누어 서비스 단위로 배포하는 아키텍쳐가 대세인듯하다. 이 말은 즉슨, 아주 큰 애플리케이션이 작은 서비스 단위(마이크로서비스)로 나뉘어 각각 단독적으로 독립적으로 실행가능한 상태로 배포가 된다. 이런 경우 마이크로서비스끼리의 통신은 RESTful한 통신도 있지만 메시지 큐와 같은 서비스를 이용하여 비동기적으로 통신하기도 한다. 그리고 이 구조를 발행구독구조라고 한다...
오늘 다루어볼 포스팅 내용은 Netty의 개념과 아키텍쳐에 대한 대략적인 설명이다. Netty에 대해 알아보기 전에 AS-IS 자바의 네트워킹 동작 방식에 대해 먼저 다루어본다. 자바의 네트워킹 순수 자바로 네트워크 통신을 하기위해서 생긴 최초의 라이브러리는 java.net 패키지이다. 해당 소켓 라이브러리가 제공하는 방식은 블로킹 함수만 지원했다. 해당 라이브러리를 이용한 서버코드를 간단히 보면 아래와 같다. public void blockCall() throws IOException { ServerSocket serverSocket = new ServerSocket(8080); Socket clientSocket = serverSocket.accept(); BufferedReader in = new ..
exec 나 shell_exec 를 비동기로 처리해야할 때가 있다. 그때는 명령어 뒤에 " > /dev/null 2>/dev/null &"를 붙혀주면 된다 exec("실행할 명령" . " > /dev/null 2>/dev/null &") shell_exec("실행할 명령" . " > /dev/null 2>/dev/null &") 출처: https://chobokkiri.tistory.com/61?category=656563 [초보끼리]