diff --git a/_posts/2023-11-06-javaGC.md b/_posts/2023-11-06-javaGC.md index a2ed6d8..737b47f 100644 --- a/_posts/2023-11-06-javaGC.md +++ b/_posts/2023-11-06-javaGC.md @@ -2,9 +2,9 @@ layout: post title: 자바의 가비지 컬렉션 author: 박석희 -categories: GC +categories: 기술세미나 banner: - image: https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/thumb_gc.png + image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/thumb_gc.png background: "#000" height: "100vh" min_height: "38vh" @@ -77,13 +77,13 @@ member.setName("Park SeokHee"); 이를 해결하기 위해 C나 C++ 같은 언어에선 개발자가 직접 메모리에 할당 해제 합니다. 이는 효율적으로 메모리를 관리하도록 프로그램을 개발하게 도와주지만 반대로 이것이 잘되지 않았을 경우 프로그램 크래시를 일으키기도 합니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/1.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/1.png) 자바에서는 JVM의 가비지 콜렉터가 이 역할을 자동으로 수행합니다. 그래서 개발자는 객체의 할당을 신경쓰지 않고 비즈니스 로직 그 자체에 집중해서 개발을 할 수 있도록 도와줍니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/2.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/2.png) JVM은 객체나 동적 데이터를 JVM 메모리 내의 힙 영역에 저장합니다. @@ -101,7 +101,7 @@ JVM 메모리 영역 중 가장 큰 블록이고 가비지 콜렉션이 이루 `Mark` 는 살아있는 객체를 찾는 과정입니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/3.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/3.png) 파란색으로 표시된 객체는 닿을 수 있는 객체(reachable), 붉은색으로 표시된 객체는 닿을 수 없는 객체(unreachable) 입니다. 한때는 참조되었지만 지금은 범위를 벗어난 객체죠. @@ -113,7 +113,7 @@ GC root 는 Stack 영역의 로컬 변수 / 메서드 영역의 static 변수 / 그래서 GC의 동작 방식을 `Mark And Sweep` 이라고 합니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/4.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/4.png) JVM 의 Heap 영역은 2가지 전제를 두고 설계 되었습니다. @@ -134,21 +134,21 @@ Young generation 영역에서 일어나는 가비지 콜렉션을 `Minor GC` , O Young generation 영역은 `Eden` 영역과 `Survivor` 영역으로 나누어지는데, 에덴 영역은 새로 생성된 객체가 저장되는 영역이고 서바이버 영역은 에덴 영역에서 살아남은 객체가 저장되는 곳입니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/5.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/5.png) 우선 객체가 새로 생성될 때마다 에덴 영역에 계속해서 생성되고, 어느 순간 에덴 영역이 꽉 차게 되면 그 때 Minor GC가 발생하게 됩니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/6.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/6.png) 이때 마크 앤 스윕이 일어나고 살아남은 객체는 Survivor 영역으로 옮겨집니다. 그리고 Survivor 에 할당된 객체에는 age가 1 증가하게 됩니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/7.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/7.png) 다시한번 같은 과정을 통해 에덴이 꽉 차게되고 마크앤 스윕이 일어나면 서바이버영역에 있던 객체와 gc로부터 살아남은 객체가 또 다른 서바이버 영역으로 이동합니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/8.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/8.png) 이는 heap fragment(힙 메모리 단편화) 문제를 막기 위함인데요. @@ -156,7 +156,7 @@ Sweep된 객체들의 메모리 주소가 연속되지 않기 때문에, 충분 이를 `Mark, Sweep and Compact` 라고 하기도 합니다. -![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/20231106/9.png) +![Untitled](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1106/9.png) 이후 age 값이 임계값에 달하면 (default: 31) old generation 영역으로 이동합니다. 이후 이 영역도 꽉 차면 Old generation을 대상으로 발생하는 Major GC가 발생합니다. diff --git a/_posts/2023-11-08-Message-Oriented-Middleware.md b/_posts/2023-11-08-Message-Oriented-Middleware.md index e5dec9b..8ded0db 100644 --- a/_posts/2023-11-08-Message-Oriented-Middleware.md +++ b/_posts/2023-11-08-Message-Oriented-Middleware.md @@ -1,18 +1,17 @@ --- layout: post -title: `메시지 지향 미들웨어` -author: `고병룡` -categories: `기술세미나` +title: 메시지 지향 미들웨어 +author: 고병룡 +categories: 기술세미나 banner: - image: `[썸네일로 넣고 싶은 이미지 링크](https://docs.oracle.com/cd/E19340-01/820-6424/images/to_MOM.gif)` + image: https://docs.oracle.com/cd/E19340-01/820-6424/images/to_MOM.gif background: "#000" height: "100vh" min_height: "38vh" heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline" - tags: [`메시지 지향 미들웨어`, `메시지 브로커`, `메시지 큐`, `Kafka`, `RabbitMQ`, `ActiveMQ`, `기술세미나`] + tags: [메시지 지향 미들웨어, 메시지 브로커, 메시지 큐, Kafka, RabbitMQ, ActiveMQ, 기술세미나] --- - ## 메시지 지향 미들웨어란 ? _**메시지 지향 미들웨어(Message-Oriented Middleware)**_ 는 시스템과 시스템간의 데이터 통신을 위한 소프트웨어, @@ -33,7 +32,7 @@ _**메시지 지향 미들웨어(Message-Oriented Middleware)**_ 는 시스템 ### Message Queue (메시지 큐) -![message_queue](https://github.com/Kernel360/blog-image/blob/main/20231108/message_queue.png?raw=true) +![message_queue](https://github.com/Kernel360/blog-image/blob/main/2023/1108/message_queue.png?raw=true) 메시지 큐에서는 메시지 생산자가 메시지를 만들어서 메시지 큐에 보내면 큐에 메시지를 저장하게 됩니다. @@ -56,7 +55,7 @@ _**메시지 지향 미들웨어(Message-Oriented Middleware)**_ 는 시스템 * 큐에 과도하게 많은 양의 메시지가 들어오거나 과부하가 걸리면 성능에 제한이 걸립니다. ### Pub / Sub (게시 / 구독) -![pub/sub](https://github.com/Kernel360/blog-image/blob/main/20231108/pub-sub.png?raw=true) +![pub/sub](https://github.com/Kernel360/blog-image/blob/main/2023/1108/pub-sub.png?raw=true) 게시 구독 모델에서는 ``토픽``이라는 단위를 사용합니다. @@ -85,7 +84,7 @@ _**메시지 지향 미들웨어(Message-Oriented Middleware)**_ 는 시스템 ### [Apache ActiveMQ](https://activemq.apache.org/components/artemis/) -![apache_activemq](https://github.com/Kernel360/blog-image/blob/main/20231108/activemq.png?raw=true) +![apache_activemq](https://github.com/Kernel360/blog-image/blob/main/2023/1108/activemq.png?raw=true) Apache ActiveMQ는 오픈 소스이자 멀티프로토콜인 메시지 지향 미들웨어(Message Oriented Middleware, MOM)로서, Java Message Service (JMS) 스펙을 구현한 프로젝트 중 하나입니다. @@ -99,7 +98,7 @@ JavaScript, C, C++, Python, .NET 등 다양한 언어로 된 클라이언트를 현재 제공하는 버전은 좀 더 전통적인 버전인 ApacheMQ Classic과 ActiveMQ Artemis가 있으며 Classic 버전 만큼의 기능성을 갖게 된다면 Artemis가 ActiveMQ Classic을 대체할 예정입니다. ### [RabbitMQ](https://www.rabbitmq.com/) -![rabbitmq](https://github.com/Kernel360/blog-image/blob/main/20231108/rabbit_mq.png?raw=true) +![rabbitmq](https://github.com/Kernel360/blog-image/blob/main/2023/1108/rabbit_mq.png?raw=true) RabbitMQ는 Erlang으로 개발된 오픈 소스 지향 미들웨어로서 AMQP를 구현하여 다양한 어플리케이션 간의 비동기적인 통신을 지원합니다. @@ -119,7 +118,7 @@ RabbitMQ는 Erlang으로 개발된 오픈 소스 지향 미들웨어로서 AMQP ### [Apache Kafka](https://kafka.apache.org/) -![apache_kafka](https://github.com/Kernel360/blog-image/blob/main/20231108/apache_kafka.png?raw=true) +![apache_kafka](https://github.com/Kernel360/blog-image/blob/main/2023/1108/apache_kafka.png?raw=true) Kafka는 게시 / 구독 모델을 기반으로 한 분산형 이벤트 스트리밍 플랫폼입니다.