티스토리 뷰

카테고리 없음

HazelcastInstance 소개

행복[HappY] 2025. 3. 10. 08:35

HazelcastInstance 소개

HazelcastInstanceHazelcast 클러스터의 중심이 되는 인터페이스로, 분산 데이터 구조와 컴퓨팅 기능을 제공하는 역할을 합니다. 이를 통해 분산 맵(Map), 큐(Queue), 주제(Topic) 등 다양한 데이터 구조에 접근할 수 있으며, 분산 실행(Executor Service)과 같은 기능도 사용할 수 있습니다.

 

 

 

1. HazelcastInstance란?

Hazelcast는 인메모리 데이터 그리드(IMDG, In-Memory Data Grid) 로, 데이터를 메모리에 저장하여 빠른 속도로 접근할 수 있도록 합니다. HazelcastInstance는 이러한 Hazelcast 클러스터를 구성하는 개별 노드를 의미하며, 분산 데이터 저장과 처리를 담당합니다.

주요 특징

  • 자동 클러스터링: 같은 네트워크에서 실행된 Hazelcast 인스턴스들은 자동으로 클러스터를 형성합니다.
  • 분산 데이터 저장: 데이터를 여러 노드에 분산 저장하여 성능과 안정성을 높입니다.
  • 확장성: 노드를 추가하면 성능이 수평 확장됩니다.
  • 고가용성: 특정 노드가 장애가 발생하더라도 다른 노드가 데이터를 유지합니다.
  • 다양한 데이터 구조 제공: 분산 맵(IMap), 큐(IQueue), 주제(ITopic) 등 다양한 데이터 구조를 지원합니다.

 

 

 

2. HazelcastInstance 생성 방법

1) 단일 노드 실행 (Standalone Mode)

아래 코드를 실행하면 단일 노드로 Hazelcast 인스턴스를 생성할 수 있습니다.

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;

public class HazelcastExample {
    public static void main(String[] args) {
        HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
        System.out.println("Hazelcast 인스턴스가 시작되었습니다.");
    }
}

설명: Hazelcast가 기본 설정으로 실행되며, 다른 노드와 연결되지 않은 단일 노드 환경입니다.

 

2) 클러스터 모드 실행 (Cluster Mode)

같은 네트워크에서 두 개 이상의 HazelcastInstance를 실행하면 자동으로 클러스터가 형성됩니다.

HazelcastInstance node1 = Hazelcast.newHazelcastInstance();
HazelcastInstance node2 = Hazelcast.newHazelcastInstance();

System.out.println("클러스터 멤버 수: " + node1.getCluster().getMembers().size());

설명: 별도 설정 없이도 같은 네트워크에서 실행하면 자동으로 클러스터가 구성됩니다.

 

3) 클라이언트-서버 모드 실행 (Client-Server Mode)

Hazelcast는 서버 노드(HazelcastInstance)와 클라이언트(HazelcastClientInstance)를 분리하여 사용할 수도 있습니다.

서버 코드

import com.hazelcast.config.Config;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;

public class HazelcastServer {
    public static void main(String[] args) {
        Config config = new Config();
        config.setClusterName("my-cluster");
        HazelcastInstance server = Hazelcast.newHazelcastInstance(config);
        System.out.println("Hazelcast 서버가 시작되었습니다.");
    }
}

클라이언트 코드

import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.core.HazelcastInstance;

public class HazelcastClientApp {
    public static void main(String[] args) {
        ClientConfig clientConfig = new ClientConfig();
        clientConfig.setClusterName("my-cluster");
        HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);
        System.out.println("Hazelcast 클라이언트가 서버에 연결되었습니다.");
    }
}

설명: 클라이언트는 데이터를 저장하지 않으며, 서버 노드에 접근하여 데이터를 조회하거나 수정하는 역할을 합니다.

 

 

 

3. HazelcastInstance의 주요 데이터 구조

1) 분산 맵 (IMap)

Hazelcast의 IMap은 일반적인 HashMap과 유사하지만, 여러 노드에 데이터를 분산 저장할 수 있습니다.

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;

public class HazelcastMapExample {
    public static void main(String[] args) {
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();
        IMap<String, String> map = instance.getMap("myMap");

        map.put("key1", "value1");
        System.out.println("key1의 값: " + map.get("key1"));
    }
}

설명: 분산 환경에서도 데이터를 공유할 수 있으며, 노드 간 동기화가 자동으로 이루어집니다.

 

2) 분산 큐 (IQueue)

FIFO(First In, First Out) 방식으로 동작하는 분산 메시지 큐입니다.

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.collection.IQueue;

public class HazelcastQueueExample {
    public static void main(String[] args) throws Exception {
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();
        IQueue<String> queue = instance.getQueue("myQueue");

        queue.put("message1");
        System.out.println("큐에서 꺼낸 값: " + queue.take());
    }
}

설명: 분산 메시징 시스템을 구현할 때 사용할 수 있습니다.

 

3) 분산 주제 (ITopic)

Pub/Sub(발행-구독) 모델을 지원하는 데이터 구조입니다.

import com.hazelcast.core.*;

public class HazelcastTopicExample {
    public static void main(String[] args) {
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();
        ITopic<String> topic = instance.getTopic("myTopic");

        topic.addMessageListener(message -> 
            System.out.println("받은 메시지: " + message.getMessageObject())
        );

        topic.publish("안녕하세요, Hazelcast입니다!");
    }
}

설명: 여러 노드 간 메시지를 실시간으로 브로드캐스트할 수 있습니다.

 

 

 

4. HazelcastInstance 종료 및 관리

1) HazelcastInstance 종료

사용이 끝난 HazelcastInstance는 명시적으로 종료하는 것이 좋습니다.

HazelcastInstance instance = Hazelcast.newHazelcastInstance();
instance.shutdown();

2) 모든 인스턴스 종료

Hazelcast.shutdownAll();

설명: Hazelcast 클러스터의 모든 노드를 종료합니다.

 

 

 

5. 결론

  • HazelcastInstance는 Hazelcast 클러스터를 구성하는 핵심 요소로, 데이터 저장 및 처리를 담당합니다.
  • 자동 클러스터링 기능을 제공하며, 고가용성 및 확장성이 뛰어납니다.
  • IMap, IQueue, ITopic 등 다양한 분산 데이터 구조를 활용할 수 있습니다.
  • 클라이언트-서버 모드임베디드 모드를 지원하여 다양한 환경에 적용할 수 있습니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함