[java] Maven을 사용하여 자바 메시징 시스템 구현하기

이번 포스팅에서는 Maven을 사용하여 자바 메시징 시스템을 구현하는 방법에 대해 알아보겠습니다. 메시징 시스템은 분산 시스템에서 메시지 전달을 위해 사용되며, 대규모 시스템에서 데이터의 비동기적인 처리를 지원하는 기능을 제공합니다.

1. Maven 프로젝트 설정

먼저 Maven을 사용하여 자바 메시징 시스템을 구현하기 위해 Maven 프로젝트를 설정해야합니다. 이를 위해 다음 명령을 터미널에서 실행합니다.

mvn archetype:generate -DgroupId=com.example -DartifactId=messaging-system -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

위 명령을 실행하면 Maven 프로젝트 구조가 생성됩니다.

2. 의존성 추가

메시징 시스템을 구현하기 위해 필요한 의존성을 pom.xml 파일에 추가해야합니다. 다음은 ActiveMQ를 사용하는 예시입니다.

<dependencies>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-core</artifactId>
        <version>5.16.3</version>
    </dependency>
</dependencies>

의존성을 추가한 후, Maven 프로젝트를 업데이트합니다.

mvn clean install

3. 메시지 전송 및 수신 구현

이제 메시지를 전송하고 수신하는 코드를 구현해보겠습니다. 다음은 메시지를 전송하는 Producer 클래스의 예시입니다.

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

public class Producer {
    // ActiveMQ broker URL
    private static final String BROKER_URL = "tcp://localhost:61616";

    // Queue 이름
    private static final String QUEUE_NAME = "message-queue";

    public static void main(String[] args) {
        try {
            // ConnectionFactory 생성
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);

            // Connection 생성
            Connection connection = connectionFactory.createConnection();

            // Session 생성
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // Destination 생성
            Destination destination = session.createQueue(QUEUE_NAME);

            // MessageProducer 생성
            MessageProducer producer = session.createProducer(destination);

            // TextMessage 생성 및 전송
            TextMessage message = session.createTextMessage("Hello, messaging system!");
            producer.send(message);

            // 리소스 해제
            producer.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 코드에서는 ActiveMQConnectionFactory를 사용하여 ActiveMQ와의 연결을 생성하고, 메시지를 전송하는 로직을 구현하였습니다.

메시지를 수신하는 Consumer 클래스의 예시는 다음과 같습니다.

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

public class Consumer {
    // ActiveMQ broker URL
    private static final String BROKER_URL = "tcp://localhost:61616";

    // Queue 이름
    private static final String QUEUE_NAME = "message-queue";

    public static void main(String[] args) {
        try {
            // ConnectionFactory 생성
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);

            // Connection 생성
            Connection connection = connectionFactory.createConnection();

            // Session 생성
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // Destination 생성
            Destination destination = session.createQueue(QUEUE_NAME);

            // MessageConsumer 생성
            MessageConsumer consumer = session.createConsumer(destination);

            // Message 수신 대기
            TextMessage message = (TextMessage) consumer.receive();
            System.out.println("Received message: " + message.getText());

            // 리소스 해제
            consumer.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Consumer 클래스에서는 마찬가지로 ActiveMQConnectionFactory를 사용하여 ActiveMQ와의 연결을 생성하고, 메시지를 수신하는 로직을 구현하였습니다.

4. 실행 및 테스트

이제 ProducerConsumer 클래스를 실행하여 메시지 전송 및 수신을 테스트할 수 있습니다. Producer 클래스를 먼저 실행하고, 그 후에 Consumer 클래스를 실행합니다. 실행 결과로 Consumer에서 전송한 메시지를 수신하는 것을 확인할 수 있습니다.

결론

이번 포스팅에서는 Maven을 사용하여 자바 메시징 시스템을 구현하는 방법에 대해 알아보았습니다. Maven을 사용하면 필요한 의존성을 쉽게 관리하고, 메시징 시스템을 구현할 수 있습니다. 메시징 시스템은 분산 시스템에서 중요한 역할을 수행하기 때문에 이를 구현하는 방법을 익히는 것은 개발자에게 도움이 될 것입니다.