자바 템플릿 메서드 디자인 패턴: 알고리즘의 일부를 서브클래스로 캡슐화하는 방법

Java Template Method Design Pattern

컴퓨터 프로그래밍에서, 알고리즘은 어떤 문제를 해결하기 위한 명확하고 정확한 절차로, 반복적으로 사용된다. 하지만, 알고리즘을 구현하는 것은 간단한 것이 아니다. 구현에는 여러 가지 문제가 있으며, 이를 해결하기 위해 디자인 패턴을 사용하는 것이 일반적이다. 디자인 패턴은 일반적인 문제를 해결하기 위해 반복적으로 사용되는 솔루션을 제공한다.

Java Template Method Design Pattern은 알고리즘의 일부를 서브클래스로 캡슐화하여, 알고리즘 구현의 문제를 해결하는 디자인 패턴 중 하나이다. 이 디자인 패턴은 Java 프로그래밍 언어에서 많이 사용된다.

자바 템플릿 메서드 디자인 패턴: 개념과 목적

자바 템플릿 메서드 디자인 패턴은 행동 디자인 패턴 중 하나이다. 이 패턴은 알고리즘의 일부를 서브클래스로 캡슐화하는 방법을 제공한다. 즉, 알고리즘의 공통 기능은 슈퍼 클래스로 구현되고, 서브클래스에서는 이를 오버라이드하여 서브클래스 고유의 동작을 구현할 수 있다.

이 패턴의 목적은 알고리즘의 구현을 단순화하고 코드 재사용성을 높이는 것이다. 이 패턴을 사용하면 다양한 알고리즘을 구현할 수 있고, 공통 코드를 중복해서 작성하지 않아도 된다.

알고리즘 구현의 문제와 템플릿 메서드 패턴의 해결책

알고리즘을 구현하는 것은 간단한 것이 아니다. 알고리즘은 복잡한 문제를 해결하기 위한 절차이기 때문이다. 알고리즘을 구현할 때 발생하는 문제 중 가장 일반적인 것은 코드 중복이다. 알고리즘은 일반적으로 공통된 기능을 가지고 있기 때문에, 이 기능을 구현하는 코드가 중복되는 것이다.

또 다른 문제는 알고리즘의 변경이다. 알고리즘은 자주 변경되기 때문에, 이를 유지보수하기 위해서는 많은 노력이 필요하다. 알고리즘의 변경 시, 모든 코드를 수정하거나 새로운 코드를 작성해야 할 수도 있다.

이러한 문제를 해결하기 위해, 템플릿 메서드 패턴을 사용할 수 있다. 이 패턴은 공통된 기능을 슈퍼 클래스에 구현하고, 서브클래스에서 이를 오버라이드하여 고유한 동작을 구현할 수 있도록 한다. 이를 통해 코드의 중복을 줄이고, 유지보수성을 높일 수 있다.

자바 템플릿 메서드 패턴: 예제와 적용법

자바 템플릿 메서드 패턴은 다음과 같은 구조를 가진다.

public abstract class AbstractClass {
    public final void templateMethod() {
        primitiveOperation1();
        primitiveOperation2();
        concreteOperation();
        hook();
    }

    protected abstract void primitiveOperation1();

    protected abstract void primitiveOperation2();

    protected void concreteOperation() {
        // 구현
    }

    protected void hook() {
        // 구현
    }
}

public class ConcreteClass extends AbstractClass {
    @Override
    protected void primitiveOperation1() {
        // 구현
    }

    @Override
    protected void primitiveOperation2() {
        // 구현
    }

    @Override
    protected void hook() {
        // 구현
    }
}

위 코드에서 AbstractClass는 알고리즘의 공통 기능을 구현하는 추상 클래스이다. templateMethod() 메서드는 알고리즘의 전체적인 흐름을 제어하는 메서드이다. 이 메서드에서는 primitiveOperation1(), primitiveOperation2(), concreteOperation(), hook() 메서드를 호출한다.

primitiveOperation1()과 primitiveOperation2() 메서드는 알고리즘의 기본적인 기능을 구현하는 추상 메서드이다. concreteOperation() 메서드는 선택적으로 구현할 수 있는 메서드로, 알고리즘의 공통 기능 중 하나를 구현한다. hook() 메서드는 추상 메서드로, 서브클래스에서 선택적으로 오버라이드할 수 있는 메서드이다.

ConcreteClass는 AbstractClass를 상속받아 알고리즘의 구체적인 기능을 구현하는 클래스이다. 이 클래스에서는 primitiveOperation1(), primitiveOperation2(), hook() 메서드를 오버라이드하여 고유한 기능을 구현한다. concreteOperation() 메서드는 선택적으로 구현할 수 있기 때문에, 이 클래스에서는 따로 구현하지 않아도 된다.

예를 들어, 파일을 읽고 쓰는 알고리즘을 구현해보자. 이 알고리즘은 다음과 같은 공통 기능을 가지고 있다.

  • 파일 열기
  • 데이터 읽기
  • 데이터 쓰기
  • 파일 닫기

이를 자바 템플릿 메서드 패턴으로 구현하면 다음과 같다.

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public abstract class FileIO {
    protected File file;

    public FileIO(File file) {
        this.file = file;
    }

    public void readFile() throws IOException {
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            processLine(line);
        }
        scanner.close();
    }

    public void writeFile(String data) throws IOException {
        FileWriter writer = new FileWriter(file);
        writer.write(data);
        writer.close();
    }

    protected abstract void processLine(String line) throws IOException;
}

public class TextFileIO extends FileIO {
    public TextFileIO(File file) {
        super(file);
    }

    @Override
    protected void processLine(String line) throws IOException {
        // 텍스트 파일에서 각 라인을 처리하는 코드
    }
}

public class BinaryFileIO extends FileIO {
    public BinaryFileIO(File file) {
        super(file);
    }

    @Override
    protected void processLine(String line) throws IOException {
        // 이진 파일에서 각 라인을 처리하는 코드
    }
}

위 코드에서 FileIO는 알고리즘의 공통 기능을 구현하는 추상 클래스이다. readFile() 메서드는 파일을 열고 데이터를 읽는 기능을 구현하고, writeFile() 메서드는 데이터를 쓰고 파일을 닫는 기능을 구현한다. processLine() 메서드는 추상 메서드로, 각각의 파일 형식에서 라인을 처리하는 고유한 기능을 구현한다.

TextFileIO와 BinaryFileIO는 FileIO를 상속받아 각각의 파일 형식에서 processLine() 메서드를 오버라이드하는 클래스이다. 이를 통해 각각의 파일 형식에서 고유한 기능을 구현할 수 있다.

서브클래스 캡슐화의 이점과 템플릿 메서드 패턴의 한계점

템플릿 메서드 패턴을 사용하면 서브클래스에서 고유한 기능을 구현할 수 있기 때문에, 코드의 재사용성을 높일 수 있다. 또한, 알고리즘의 공통 기능을 슈퍼 클래스에서 구현하기 때문에 코드의 중복을 줄일 수 있다. 이를 통해 유지보수성을 높일 수 있다.

하지만, 템플릿 메서드 패턴은 서브클래스 캡슐화를 사용하기 때문에, 서브클래스간의 결합도가 높아질 수 있다. 또한, 공통 기능이 슈퍼 클래스에 구현되기 때문에, 이를 오버라이드하지 않으면 공통 기능이 불필요하게 호출될 수 있다.

또한, 템플릿 메서드 패턴은 알고리즘의 구체적인 기능을 구현하는 것에 대해서는 제한적이다. 서브클래스에서 오버라이드할 수 있는 메서드는 일부에 불과하며, 이를 오버라이드해서 구현할 수 없는 경우도 있다.

결론

자바 템플릿 메서드 디자인 패턴은 알고리즘의 일부를 서브클래스로 캡슐화하여, 알고리즘 구현의 문제를 해결하는 디자인 패턴 중 하나이다. 이 패턴은 공통 기능을 슈퍼 클래스에 구현하고, 서브클래스에서 이를 오버라이드하여 고유한 기능을 구현할 수 있도록 한다. 이를 통해 코드의 재사용성을 높이고, 유지보수성을 높일 수 있다.

하지만, 서브클래스 캡슐화를 사용하기 때문에, 서브클래스 간의 결합도가 높아질 수 있고, 공통 기능이 불필요하게 호출될 수 있다는 단점이 있다. 또한, 구체적인 기능을 구현하는 것에 대해서는 제한적이기 때문에, 이를 고려하여 사용해야 한다.

자바 데코레이터 디자인 패턴: 객체에 동적으로 기능을 추가하는 방법

Java Decorator Design Pattern

자바 데코레이터 디자인 패턴은 객체 지향 프로그래밍에서 객체에 동적으로 기능을 추가하는 방법 중 하나입니다. 이 디자인 패턴은 객체의 기본 동작을 변경하지 않고, 기존 객체를 감싸서 추가 기능을 제공합니다. 이렇게 하면 객체의 확장성이 높아지며, 코드의 유연성과 재사용성이 증가합니다.

이 글에서는 자바 데코레이터 디자인 패턴의 소개, 구현 방법, 사용 예시 및 장단점에 대해 알아보겠습니다.

자바 데코레이터 디자인 패턴 소개

자바 데코레이터 디자인 패턴은 객체 지향 프로그래밍에서 객체의 동작을 확장하고, 변경하는 방법 중 하나입니다. 이 패턴은 객체를 감싸서 새로운 동작을 추가하거나, 기존 동작을 변경하지 않고 확장할 수 있습니다. 이를 통해 객체의 동작을 동적으로 변경할 수 있으며, 코드의 재사용성과 유연성을 높일 수 있습니다.

예를 들어, 새로운 기능을 추가하려면 기존 클래스를 상속받아 새로운 클래스를 만들어야 합니다. 그러나 이 방법은 상속 계층이 깊어지고 복잡해지면 유지보수가 어려워집니다. 데코레이터 패턴은 이러한 문제를 해결하기 위해 객체를 감싸는 방식으로 새로운 기능을 추가합니다.

객체에 동적으로 기능 추가하는 방법

자바 데코레이터 디자인 패턴은 객체를 감싸서 새로운 기능을 추가하는 방법입니다. 이 방법은 객체의 동작을 동적으로 변경하는 것이 가능하며, 코드의 재사용성과 유연성을 높일 수 있습니다.

데코레이터 패턴은 객체를 감싸는 래퍼 클래스를 만들어 기존 객체에 새로운 기능을 추가합니다. 이렇게 생성된 객체는 기존 객체와 같은 인터페이스를 사용하며, 새로운 기능을 제공합니다. 이 방법은 객체의 동작을 변경하지 않고, 기존 객체를 감싸서 동작을 확장하는 것이 가능합니다.

예를 들어, 다음과 같은 예제 코드가 있다고 가정해봅시다.

public interface Coffee {
    public double cost();
    public String getDescription();
}

public class Espresso implements Coffee {
    public double cost() {
        return 1.99;
    }

    public String getDescription() {
        return "Espresso";
    }
}

이 코드는 커피를 나타내는 인터페이스와 에스프레소를 구현한 클래스입니다. 이제 데코레이터 패턴을 적용하여, 에스프레소에 샷을 추가하는 데코레이터 클래스를 만들어 보겠습니다.

public abstract class CoffeeDecorator implements Coffee {
    protected Coffee coffee;

    public CoffeeDecorator(Coffee coffee) {
        this.coffee = coffee;
    }

    public double cost() {
        return coffee.cost();
    }

    public String getDescription() {
        return coffee.getDescription();
    }
}

public class ShotDecorator extends CoffeeDecorator {
    public ShotDecorator(Coffee coffee) {
        super(coffee);
    }

    public double cost() {
        return super.cost() + 0.50;
    }

    public String getDescription() {
        return super.getDescription() + ", Shot";
    }
}

이제 ShotDecorator 클래스는 Coffee 인터페이스를 구현하고, CoffeeDecorator 클래스를 상속받아 에스프레소에 샷을 추가하는 기능을 제공합니다. 이 데코레이터 클래스를 사용하면, 다음과 같이 에스프레소에 샷을 추가할 수 있습니다.

Coffee coffee = new Espresso();
coffee = new ShotDecorator(coffee);

System.out.println(coffee.getDescription() + " $" + coffee.cost());

위 코드는 에스프레소 객체를 생성하고, ShotDecorator 클래스를 사용하여 샷을 추가한 후, getDescription()과 cost() 메소드를 호출하여 결과를 출력합니다.

데코레이터 패턴의 구현 방법

데코레이터 패턴은 객체를 감싸는 방식으로 새로운 기능을 추가하거나 기존 동작을 변경하는 방법입니다. 이 패턴은 객체의 동작을 동적으로 변경할 수 있으며, 코드의 재사용성과 유연성을 높일 수 있습니다.

데코레이터 패턴은 다음과 같은 구성 요소로 이루어져 있습니다.

  • Component: 기본 객체를 나타내는 인터페이스 또는 추상 클래스입니다.
  • Concrete Component: Component를 구현한 실제 객체입니다.
  • Decorator: 기본 객체를 감싸는 데코레이터 클래스입니다. 이 클래스는 Component 인터페이스를 구현하거나, 추상 클래스로 정의됩니다.
  • Concrete Decorator: Decorator를 구현한 실제 데코레이터 클래스입니다.

데코레이터 패턴은 다음과 같은 순서로 구현됩니다.

  1. Component 인터페이스를 정의합니다.
  2. Concrete Component 클래스를 구현합니다.
  3. Decorator 클래스를 정의합니다. 이 클래스는 Component 인터페이스를 구현하거나, 추상 클래스로 정의됩니다.
  4. Concrete Decorator 클래스를 구현합니다.

예를 들어, 다음과 같은 코드가 있다고 가정해봅시다.

public interface Component {
    public void operation();
}

public class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("ConcreteComponent operation");
    }
}

이제 데코레이터 패턴을 적용하여, 기본 객체를 감싸는 데코레이터 클래스를 만들어 보겠습니다.

public abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    public void operation() {
        component.operation();
    }
}

public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }

    public void operation() {
        super.operation();
        System.out.println("ConcreteDecorator operation");
    }
}

이제 ConcreteDecorator 클래스는 Component 인터페이스를 구현하고, Decorator 클래스를 상속받아 기본 객체를 감싸는 기능을 제공합니다.

데코레이터 패턴의 사용 예시 및 장단점

데코레이터 패턴은 객체를 감싸는 방식으로 새로운 기능을 추가하거나 기존 동작을 변경하는 방법입니다. 이 패턴은 객체의 동작을 동적으로 변경할 수 있으며, 코드의 재사용성과 유연성을 높일 수 있습니다.

데코레이터 패턴은 다음과 같은 상황에서 사용됩니다.

  • 객체의 동작을 변경하거나, 확장해야 할 때
  • 상속 계층이 복잡해지고, 유지보수가 어려운 경우
  • 런타임에 동적으로 객체의 동작을 변경할 필요가 있는 경우

데코레이터 패턴의 장단점은 다음과 같습니다.

장점:

  • 객체의 동작을 동적으로 변경할 수 있으며, 상속 계층을 깊게 만들지 않아도 됩니다.
  • 새로운 기능을 추가하기 쉽습니다.
  • 기존 객체의 동작을 변경하지 않고, 새로운 동작을 추가할 수 있습니다.

단점:

  • 객체를 감싸는 방식으로 동작하기 때문에, 객체의 생성 시간과 메모리 사용량이 증가할 수 있습니다.
  • 객체의 동작을 파악하기 어려울 수 있습니다.

데코레이터 패턴은 객체의 동작을 동적으로 변경하고, 확장할 수 있는 유용한 디자인 패턴입니다. 이를 사용하면 객체의 확장성이 높아지며, 코드의 유연성과 재사용성이 증가합니다. 하지만, 객체를 감싸는 방식으로 동작하기 때문에, 객체의 생성 시간과 메모리 사용량이 증가할 수 있으며, 객체의 동작을 파악하기 어려울 수 있습니다. 따라서, 데코레이터 패턴을 사용할 때는 장단점을 고려하여 적절하게 적용해야 합니다.

스프링 웹소켓을 이용한 실시간 채팅 애플리케이션 개발 방법

스프링 웹소켓 채팅 애플리케이션

스프링 웹소켓은 HTML5에서 표준으로 제공하는 WebSocket API를 이용하여 웹 브라우저와 웹 서버간 실시간 양방향 통신을 구현할 수 있는 기술입니다. 이번에는 스프링 웹소켓을 이용하여 실시간 채팅 애플리케이션을 개발하는 방법에 대해 알아보겠습니다.

개발환경 설정과 의존성 추가

우선 개발환경을 설정하고 필요한 의존성을 추가해야 합니다. 스프링 부트를 이용하여 개발하므로, 스프링 부트 스타터 프로젝트를 생성하고, build.gradle 파일에 아래와 같이 의존성을 추가합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.webjars:webjars-locator-core'
    implementation 'org.webjars:sockjs-client:1.0.2'
    implementation 'org.webjars:stomp-websocket:2.3.3'
}
  • spring-boot-starter-websocket: 스프링 웹소켓 기능을 제공하는 스타터 의존성입니다.
  • webjars-locator-core: 웹 자원을 관리하는 Webjars를 사용하기 위한 의존성입니다.
  • sockjs-client: SockJS 클라이언트를 사용하기 위한 의존성입니다.
  • stomp-websocket: STOMP 프로토콜을 사용하기 위한 의존성입니다.

의존성 추가가 완료되면, IDE에서 프로젝트를 Import하여 WebSocketConfiguration 클래스를 생성합니다.

WebSocketConfiguration 구현

WebSocketConfiguration 클래스는 스프링 웹소켓을 구성하는 클래스입니다. @EnableWebSocketMessageBroker 어노테이션을 이용하여 웹소켓 메시지 브로커를 활성화합니다.

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
}

이어서 configureMessageBroker() 메소드를 오버라이딩하여 메시지 브로커를 구성합니다. 메시지 브로커는 클라이언트로부터 메시지를 수신하고, 구독 중인 클라이언트에게 메시지를 전달하는 역할을 합니다.

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
}
  • enableSimpleBroker(): "/topic" prefix로 시작하는 대상 구독자에게 메시지를 전달합니다.
  • setApplicationDestinationPrefixes(): "/app" prefix로 시작하는 대상 메시지를 처리합니다.

이어서 registerStompEndpoints() 메소드를 오버라이딩하여 STOMP 엔드포인트를 등록합니다. STOMP 프로토콜은 WebSocket을 기반으로 하며, HTTP 엔드포인트를 WebSocket 엔드포인트로 업그레이드할 수 있습니다.

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/chat").withSockJS();
}
  • addEndpoint(): "/chat" 엔드포인트를 등록합니다.
  • withSockJS(): SockJS를 사용하여 클라이언트에서 WebSocket을 지원하지 않을 경우, 대체 수단으로 사용할 수 있도록 합니다.

WebSocketHandler 구현 및 통신 구현

WebSocketHandler는 클라이언트와 서버간의 웹소켓 메시지를 처리하는 핸들러 클래스입니다. 이번에는 WebSocketHandler를 구현하고, 클라이언트와 서버간의 통신을 구현해보겠습니다.

먼저, WebSocketHandler를 상속하여 ChatWebSocketHandler 클래스를 구현합니다.

public class ChatWebSocketHandler extends TextWebSocketHandler {
}

이어서, 클라이언트가 연결되었을 때 호출되는 afterConnectionEstablished() 메소드를 오버라이딩하여 클라이언트와의 연결을 처리합니다.

@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    super.afterConnectionEstablished(session);
    log.info("Connected session id {}", session.getId());
}
  • WebSocketSession: 클라이언트와 연결된 WebSocketSession 객체입니다.

그리고, 클라이언트로부터 메시지를 수신할 때 호출되는 handleTextMessage() 메소드를 오버라이딩하여 클라이언트로부터 수신된 메시지를 처리합니다.

@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
    super.handleTextMessage(session, message);
    log.info("Received message : {} from session id {}", message.getPayload(), session.getId());
    session.sendMessage(new TextMessage("Hello, " + message.getPayload()));
}
  • TextMessage: 클라이언트로부터 수신된 메시지 객체입니다.

마지막으로, 클라이언트와 연결이 종료될 때 호출되는 afterConnectionClosed() 메소드를 오버라이딩하여 클라이언트와의 연결을 종료합니다.

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
    super.afterConnectionClosed(session, status);
    log.info("Disconnected session id {}", session.getId());
}

WebSocketHandler를 구현한 후, ChatController 클래스를 생성하여 클라이언트와의 통신을 처리합니다.

@Controller
public class ChatController {
    @MessageMapping("/chat")
    @SendTo("/topic/messages")
    public ChatMessage sendMessage(ChatMessage chatMessage) {
        return chatMessage;
    }
}
  • @MessageMapping: 클라이언트로부터 수신된 메시지를 처리할 대상 메서드를 지정합니다.
  • @SendTo: 지정된 prefix로 시작하는 대상 구독자에게 메시지를 전달합니다.

이제, 웹소켓 메시지를 전송하는 클라이언트 코드를 작성합니다.

var socket = new SockJS('/chat');
var stompClient = Stomp.over(socket);

stompClient.connect({}, function (frame) {
    console.log('Connected: ' + frame);
    stompClient.subscribe('/topic/messages', function (message) {
        console.log(message);
    });
});

function sendMessage() {
    stompClient.send("/app/chat", {}, JSON.stringify({'content': $("#message").val()}));
    $("#message").val('');
}
  • SockJS: WebSocket이 지원되지 않는 브라우저에서 대체 수단으로 사용할 수 있는 클라이언트 라이브러리입니다.
  • Stomp: WebSocket을 이용하여 메시지를 주고받기 위한 프로토콜입니다.
  • connect(): 서버와 연결합니다.
  • subscribe(): 서버로부터 메시지를 구독합니다.
  • send(): 서버로 메시지를 전송합니다.

결론

이번에는 스프링 웹소켓을 이용하여 실시간 채팅 애플리케이션을 개발하는 방법에 대해 알아보았습니다. 스프링 웹소켓을 이용하면, 웹 브라우저와 웹 서버간의 실시간 양방향 통신을 구현할 수 있으며, STOMP 프로토콜을 사용하여 메시지를 주고받을 수 있습니다. 이를 이용하여 다양한 실시간 애플리케이션을 개발할 수 있습니다.

WebSocket

스프링을 활용한 이벤트 소싱 구현: 이벤트 기반 시스템 구축하기

Spring Event Sourcing

이벤트 소싱은 데이터베이스에서 변경 이력을 저장하는 방식으로, 모든 변경 작업을 이벤트로 기록하고 해당 이벤트를 통해 시스템의 상태를 관리하는 방식입니다. 이 방식을 사용하면 모든 변경 사항을 추적하고 이전 상태로 돌아갈 수 있으며, 시스템의 확장성과 유연성도 향상됩니다.

스프링 프레임워크는 이벤트 소싱을 구현하는 데 활용될 수 있습니다. 이번 기사에서는 이벤트 소싱과 이벤트 기반 시스템의 개념을 이해하고, 스프링을 활용한 이벤트 소싱 구현 방법과 예제를 살펴보겠습니다.

스프링과 이벤트 소싱의 개념 이해

이벤트 소싱은 변경 이력을 이벤트로 기록하고, 이벤트를 통해 시스템의 상태를 관리하는 방식입니다. 이벤트 소싱을 사용하면 시스템의 모든 변경 이력을 추적하고, 이전 상태로 돌아갈 수 있습니다. 이는 시스템의 신뢰성과 안정성을 향상시키는 데 큰 역할을 합니다.

스프링 프레임워크는 이벤트 소싱을 구현하는 데 사용될 수 있습니다. 스프링은 이벤트를 발생시키는 기능을 제공하며, 이벤트 리스너를 등록하여 이벤트를 처리할 수 있습니다.

이벤트 기반 시스템의 구성과 구현 방법

이벤트 기반 시스템은 이벤트를 중심으로 구성됩니다. 시스템에서 발생하는 모든 이벤트는 이벤트 버스라는 공통된 채널을 통해 전달됩니다. 이벤트 버스는 이벤트를 구독하는 모든 컴포넌트에게 이벤트를 전달합니다.

스프링 프레임워크에서 이벤트 기반 시스템을 구현하는 방법은 다음과 같습니다.

  1. 이벤트 객체 생성: 시스템에서 발생하는 모든 이벤트는 이벤트 객체로 표현됩니다. 이벤트 객체는 이벤트의 종류와 발생 시간 등의 정보를 담고 있습니다.

  2. 이벤트 발생: 이벤트 객체를 생성하고, 이벤트 버스에 등록하여 이벤트를 발생시킵니다. 이벤트 버스는 이벤트를 구독하는 모든 컴포넌트에게 이벤트를 전달합니다.

  3. 이벤트 리스너 등록: 이벤트를 처리하는 컴포넌트는 이벤트 리스너를 등록하여 이벤트를 처리합니다. 이벤트 리스너는 이벤트 버스에서 발생하는 이벤트를 수신하고, 해당 이벤트를 처리합니다.

스프링을 활용한 이벤트 소싱 구현 예제와 효과적인 활용 방법

스프링을 사용하여 이벤트 소싱을 구현하는 방법은 다음과 같습니다.

  1. 이벤트 객체 생성: 이벤트 객체는 스프링의 ApplicationEvent 클래스를 상속받아 구현합니다. 이벤트 객체는 이벤트의 종류와 발생 시간 등의 정보를 담고 있습니다.
public class OrderCreatedEvent extends ApplicationEvent {
    private Order order;

    public OrderCreatedEvent(Object source, Order order) {
        super(source);
        this.order = order;
    }

    public Order getOrder() {
        return order;
    }
}
  1. 이벤트 발생: 이벤트 객체를 생성하고, 스프링의 ApplicationContext에서 이벤트를 발생시킵니다. ApplicationContext는 스프링의 핵심 컨테이너로, 이벤트 버스 역할을 수행합니다.
public class OrderService {
    @Autowired
    private ApplicationContext applicationContext;

    public void createOrder(Order order) {
        // 주문 생성 로직
        OrderCreatedEvent event = new OrderCreatedEvent(this, order);
        applicationContext.publishEvent(event);
    }
}
  1. 이벤트 리스너 등록: 이벤트를 처리하는 컴포넌트는 스프링의 EventListener 어노테이션을 사용하여 이벤트 리스너를 등록합니다.
@Component
public class OrderListener {
    @EventListener
    public void handleOrderCreatedEvent(OrderCreatedEvent event) {
        // 주문 생성 이벤트 처리 로직
        Order order = event.getOrder();
        // ...
    }
}

스프링을 사용하여 이벤트 소싱을 구현하면 다음과 같은 이점이 있습니다.

  1. 모든 변경 이력을 추적할 수 있습니다.

  2. 이전 상태로 돌아갈 수 있습니다.

  3. 시스템의 확장성과 유연성이 향상됩니다.

  4. 이벤트 기반 시스템을 구축할 수 있습니다.

이러한 이점을 활용하여, 스프링을 활용한 이벤트 소싱 구현을 효과적으로 활용할 수 있습니다.

결론

이번 기사에서는 이벤트 소싱과 이벤트 기반 시스템의 개념을 이해하고, 스프링을 활용한 이벤트 소싱 구현 방법과 예제를 살펴보았습니다. 스프링을 사용하여 이벤트 소싱을 구현하면 모든 변경 이력을 추적하고, 이전 상태로 돌아갈 수 있으며, 시스템의 확장성과 유연성이 향상됩니다. 이러한 이점을 활용하여, 이벤트 기반 시스템을 구축하고 유지보수하는 데 효과적으로 활용할 수 있습니다.



해외뉴스 이슈 순위 Top10 관련 기사 - 2022년 02월 08일 07시 기준


1위 Cultura 0.43% 관련 반응

  1. [Google News] Obra de la Secretaria de Cultura de CDMX reflexiona sobre Covid-19 y el abandono
  2. [Google News] Secretaria de Cultura realiza exposicao Fotografica com o Foto Clube de Cascavel
  3. [Google News] Francolini designo a la nueva subsecretaria de Cultura - Concordia
  4. [Google News] Quinones nuevo editor de Cultura y Espectaculos de El Caribe y CDN
  5. [Google News] Cultura Itinerante encerra com live apos percorrer bairros e povoados de Teresina
  6. [Google News] Cultura.- David Lynch se une al reparto de la pelicula autobiografica de Steven Spielberg
  7. [Google News] Cultura.- China restituye el final original de El club de la lucha tras las criticas por la censura
  8. [Google News] Cultura.- Jared Leto, Amy Adams o Ben Affleck entre los nominados a los Razzie que crean una categoria para Bruce Willis
  9. [Google News] Cultura.- 'Apagon', la serie de Movistar+ revela las primeras imagenes del capitulo dirigido por Raul Arevalo
  10. [Google News] Curso Completo de Portugues do Zarinha Centro de Cultura melhora desempenho em concursos e na carreira profissional

2위 Super 0.39% 관련 반응

  1. [NBC News] 1 dead in shooting at Washington state supermarket; gunman on loose
  2. [Google News] Precios de entradas al Super Bowl LVI apuntan a los mas altos de la historia
  3. [Google News] Goldstein House creates perfect setting for Super Bowl party in LA - KABC
  4. [Google News] El ano clave de El Senor de los Anillos: la trilogia regresa a los cines y la serie de Amazon apunta al Super Bowl
  5. [Google News] Crisis politica: Castillo se reunio con coach especialista en autosanacion y superacion personal
  6. [Google News] Frente a frente de las defensivas de Rams y Bengals que disputaran el Super Bowl LVI
  7. [Google News] SiriusXM Announces Extensive Sports and Entertainment Programming for Super Bowl LVI Week in Los Angeles
  8. [Google News] Cristiano Ronaldo supera los 400 millones de seguidores en Instagram y es record
  9. [USA Today] Opinion: Sean McVay vs. Zac Taylor puts NFL's coaching revolution in Super Bowl spotlight
  10. [Google News] Quienes seran los artistas que animaran el show del Super Bowl

3위 Bowl 0.39% 관련 반응

  1. [Google News] Precios de entradas al Super Bowl LVI apuntan a los mas altos de la historia
  2. [Google News] Goldstein House creates perfect setting for Super Bowl party in LA - KABC
  3. [Google News] El ano clave de El Senor de los Anillos: la trilogia regresa a los cines y la serie de Amazon apunta al Super Bowl
  4. [Google News] Alvin Kamara, estrella de la NFL, detenido por agresion el fin de semana de la Pro Bowl
  5. [Google News] Frente a frente de las defensivas de Rams y Bengals que disputaran el Super Bowl LVI
  6. [Google News] SiriusXM Announces Extensive Sports and Entertainment Programming for Super Bowl LVI Week in Los Angeles
  7. [USA Today] Opinion: Sean McVay vs. Zac Taylor puts NFL's coaching revolution in Super Bowl spotlight
  8. [Google News] Quienes seran los artistas que animaran el show del Super Bowl
  9. [Google News] Top 10 team turnarounds of Super Bowl era: Where do 2021 Bengals rank?
  10. [Google News] Scarlett Johansson y Colin Jost se reunen en la pantalla para el Super Bowl 2022

4위 New 0.32% 관련 반응

  1. [The Guardian] Australia politics live news updates: federal parliament returns with religious discrimination bill up for debate
  2. [Google News] Trump news - live: Archives staff say more records being located by ex-prez’s aides at Mar-a-Lago
  3. [Google News] Coronavirus update and global economy news
  4. [Google News] Live breaking news: Heatwave to fuel WA bushfires; Defence to aid aged care sector; Tourism operators 'thrilled' by border call
  5. [The Guardian] Houston Texans set to appoint Lovie Smith as new head coach
  6. [StarTribune] Amir Locke's killing prompts new scrutiny of state's no-knock warrant laws
  7. [Google News] Society of St. Vincent de Paul Has a New CEO
  8. [Google News] Sydney news: Southern hemisphere's 'longest escalators' installed at Central Station
  9. [ABC News] AP source: Texans expected to hire Smith as new head coach
  10. [Google News] MTA chief to City: Fully refund half-price MetroCards for poor New Yorkers | amNewYork

5위 Paris 0.31% 관련 반응

  1. [Google News] El coche de lujo de Antonela Roccuzzo en Paris
  2. [Google News] Teddy Riner se projette sur les JO 2024 : ≪ Arriver a Paris avec la banane ≫
  3. [Google News] Coronavirus : 98,94 % de cas de variant Omicron suspectes a Paris
  4. [Google News] Course-poursuite a 180 km/h : une BMW s’embrase en plein Paris
  5. [Google News] PSG-Real en direct, J-8: l'enorme coup de gueule des Ultras parisiens
  6. [Google News] VIDEO - Un enorme silure peche dans le Bassin de La Villette a Paris
  7. [Google News] Economie: friture sur la ligne Paris-Berlin
  8. [Google News] Des opposants au pass vaccinal veulent ≪rouler sur Paris≫ dans le cadre de ≪convois de la liberte≫
  9. [Google News] En Paris se dispara la reventa legal para ver el PSG-Real Madrid
  10. [Google News] La cour d'appel de Paris saisie sur la competence universelle de la justice francaise

6위 Roma 0.31% 관련 반응

  1. [Google News] Roma, scontro tra bus turistico e rider: grave 29enne
  2. [Google News] Roma, trovata distesa nella vasca da bagno: Tabita era morta da giorni
  3. [Google News] Si da fuoco a casa: 25enne grave/ Trasportato da Messina a Roma: ustioni su 70% corpo
  4. [Google News] SMART METRO, E ON LINE IL NUOVO SITO DI FONTE NUOVA E NAZZANO ROMANO - Associazione L'agone Nuovo
  5. [Google News] Yanina Screpante emprendio un viaje con su novio Federico Rozas y reafirmo su romance en Punta del Este
  6. [Google News] Karol G y James Rodriguez, las pistas del supuesto romance
  7. [Google News] "Cerro Alegre lo mejor": El romantico paseo de Pancha Merino y su pareja, Andrea Marocchino, por las calles de Valparaiso
  8. [Google News] Bertolini-Zaniolo, la Roma chiede chiarimenti alla FIGC: arriva la rettifica della CT
  9. [Google News] Viabilita Roma Regione Lazio del 07-02-2022 ore 19:45 - RomaDailyNews
  10. [Google News] Diamo i numeri - Inter-Roma: solo due successi per i giallorossi a Milano in Coppa Italia

7위 Milano 0.31% 관련 반응

  1. [Google News] "Milano moderna" di Fulvio Irace | Edito da 24 ORE Cultura | Casa Museo Boschi Di Stefano, Milano
  2. [Google News] Maltempo, raffiche e vento forte a Milano e in Lombardia: danni e feriti. FOTO
  3. [Google News] Diamo i numeri - Inter-Roma: solo due successi per i giallorossi a Milano in Coppa Italia
  4. [Google News] Roma in partenza per Milano per la Coppa Italia contro l’Inter ? FOTO GALLERY
  5. [Google News] Milano, anteprima Striscia la notizia: Enrico Lucci alle sfilate di moda di “AltaRoma”
  6. [Google News] Belen Rodriguez e Stefano De Martino non si nascondono piu: una cena a lume di candela a Milano
  7. [Google News] Il rider eroe che ha soccorso un'anziana a Milano
  8. [Google News] Giovanni Truppi porta “Tutto L’Universo” nei teatri di Napoli, Roma e Milano
  9. [Google News] Piazza Prealpi, inaugurata la prima panchina gialla di Milano per Giulio Regeni e Patrick Zaki ? Mianews
  10. [Google News] Meteo Diretta: Vento fortissimo a Milano, alberi divelti e persone ferite. Il Video

8위 Life 0.29% 관련 반응

  1. [Google News] Court: '3 Strikes' Life Sentences Can Count Juvenile Crimes
  2. [Google News] Life on Mars? NASA Discovers Abundant Water Source In The Red Planet
  3. [Google News] A butterfly sanctuary and the real-life implications of the far right’s web of lies
  4. [Google News] The getaway couple lives RV lifestyle
  5. [Google News] Sun Life Financial's Preferred Shares Series 4 Yield Pushes Past 4.5%
  6. [Google News] BWW Interview: Theatre Life with Doug Besterman
  7. [Google News] 6-year-old among 4 shot at ‘Celebration of Life’ service in Wilmington
  8. [Google News] Romeoville shooting left 5 with non-life threatening injuries: cops - The Herald
  9. [Google News] Man serving life sentences for rape, murder in Virginia gets additional years in Michigan for daughter’s death
  10. [Google News] Life Altering: Selections from a Kansas City Collection Celebrates Diverse Artists

9위 Rio 0.27% 관련 반응

  1. [Google News] Encontraron un bebe abandonado en Rosario
  2. [Google News] Muchas escuelas sufren tiroteos cercanos en Rio de Janeiro
  3. [Google News] Viajar al exterior sin pasar por Buenos Aires: tres ciudades del interior reanudaron sus vuelos internacionales
  4. [Google News] Rogerio nega influencia de Brasilia em sua gestao
  5. [Google News] Cidade do Rio de Janeiro vai diminuir numero de pontos de testagem ao longo de fevereiro
  6. [Google News] Dictan curso universitario sobre Taylor Swift: "Es un honor compartir mi experiencia como Swiftie"
  7. [Google News] Cuando son los corsos en la Ciudad de Buenos Aires, barrio por barrio - TN
  8. [Google News] Oculus Quest 2 reina en Steam sin mucha oposicion con casi el doble de usuarios que el resto de...
  9. [Google News] El ‘skater’ Mario Saenz es declarado culpable por feminicidio de su exnovia en CDMX
  10. [Google News] Banplus hace cultura con su Calendario Musical 2022

10위 China 0.24% 관련 반응

  1. [Radio Free Asia] Rights group protests China’s repatriation of North Korean escapees
  2. [Google News] Los Juegos en la burbuja: China lleva las medidas al extremo
  3. [Google News] Cultura.- China restituye el final original de El club de la lucha tras las criticas por la censura
  4. [Google News] TMW RADIO - Tacchinardi: "Tonali mostruoso nel derby, non e mai fallo quello di Giroud"
  5. [Radio Free Asia] In the South China Sea, even the name is disputed
  6. [Google News] Beijing 2022: las criticas de atletas y federaciones a China y al Comite Olimpico por la organizacion de los Juegos de Invierno
  7. [Google News] UFFICIALE - Coppa d'Africa, nessun azzurro nella Top 11: Koulibaly e Anguissa in panchina
  8. [Radio Free Asia] China puts Vietnam border city of four million under strict COVID-19 lockdown
  9. [NYT] Criticism of Zhu Yi, a U.S.-born skater, shows the harsh scrutiny of naturalized athletes in China.
  10. [Google News] Stronger, tighter, bolder: China-Russia ‘alliance’ rings a bell
#Cultura #Super #Bowl #New #Paris #Roma #Milano #Life #Rio #China #뉴스속보 #뉴스 #이슈링크 #이슈 #실검 #실시간검색어


출처 : 이슈링크
이슈링크 앱 다운로드
NewsLink App Download


해외뉴스 이슈 순위 Top10 관련 기사 - 2021년 04월 22일 08시 기준


1위 Biden 0.5% 관련 반응

  1. [Google News] Kudlow: Biden's infrastructure spending bill will 'destroy' the economy
  2. [ABC News] Jill Biden visits US Southwest amid vaccine push
  3. [Google News] Shoulder injuries to remain eligible for vaccine fund payouts under Biden administration
  4. [Google News] Ariz. Gov. Ducey urges Biden to declare national emergency at the border, as he deploys National Guard
  5. [CNN] 'I stay up nights': Afghans working for US worry about their future after Biden withdrawal announcement
  6. [Google News] George Floyd murder: President Biden announces investigation of Minneapolis policing - BBC News
  7. [StarTribune] Biden faces calls on pledge to recognize Armenian genocide
  8. [StarTribune] Jill Biden visits Southwest US amid vaccine push
  9. [CNN] Biden hits 200 million vaccine doses. The next 200 million will be a lot harder
  10. [Google News] Cuales son los puntos clave de la Cumbre de Lideres organizada por Joe Biden para frenar el Cambio Climatico

2위 Netflix 0.4% 관련 반응

  1. [Google News] “Cobra Kai”: Netflix anuncia que la temporada 4 se estrenara este 2021
  2. [Google News] No solo Netflix: ‘Spider-Man’ y otras peliculas de Sony tambien llegaran a Disney Plus
  3. [Independent] Don?셳 believe the hype: the streaming boom is far from over. Those writing off Netflix are going to look silly
  4. [ABC News] Intuitive Surgical, Tenet rise; Netflix, NextEra Energy fall
  5. [Google News] Estos son los estrenos de Netflix para mayo 2021
  6. [Google News] Netflix presento otro desesperante trailer de Oxigeno, la nueva pelicula de Alexandre Aja
  7. [Google News] ¿Mindhunter regresa? Reportan que Netflix y David Fincher retomaron platicas para tercera temporada
  8. [Independent] Stranger Things season 4: Finn Wolfhard provides frustrating update on future of Netflix show
  9. [Google News] Netflix anuncio la fecha de estreno de la temporada 5 de Outlander: ¿cuando sera? - Spoiler
  10. [Google News] ‘Cobra Kai’, ‘The Witcher’ y ‘You’ regresaran en 2021, anuncia Netflix

3위 League 0.38% 관련 반응

  1. [Google News] Liverpool and Manchester United owners apologise following European Super League collapse
  2. [BBC News] Aston Villa 1-2 Manchester City: Pep Guardiola's side eight points from Premier League title
  3. [Google News] Serie A | Inter sigue siendo el favorito al titulo y Juventus intenta asegurar un cupo a la Champions League
  4. [Google News] European Super League LIVE: PSG chairman appointed European Clubs Association president, all English clubs...
  5. [Google News] NAB League top 50 rankings: Son of Dogs champ shines
  6. [Google News] Tottenham v. Southampton | PREMIER LEAGUE HIGHLIGHTS | 4/21/2021 | NBC Sports
  7. [The Guardian] Super League died but the cartel lives on: ‘back to normal’ will simply not suffice | Jonathan Liew
  8. [Google News] The Thrilling Collapse of the European Super League
  9. [The Guardian] Aston Villa v Manchester City: Premier League ? live!
  10. [NYT] Boris Johnson Opposes Super League, Scores Political Points

4위 Covid 0.36% 관련 반응

  1. [Google News] “Su carino me ayudo”: Alejandro Fernandez ya esta libre de COVID-19
  2. [Google News] COVID-19 vaccines: building and maintaining confidence
  3. [Google News] Mental health and social interactions of older people with physical disabilities in England during the COVID-19 pandemic: a longitudinal cohort study
  4. [Google News] 2 more Granite Staters die of COVID-19; cases, hospitalizations fall
  5. [Google News] Tourists traveling to the Maldives may soon be offered a COVID-19 vaccine
  6. [Google News] Reynolds concerned vaccine hesitancy will slow Iowa's fight against COVID-19
  7. [Google News] DC Day of Action seeks volunteers to get residents registered for COVID-19 vaccine
  8. [NBC News] Covid vaccine appears to be safe during pregnancy, large CDC report shows
  9. [Google News] Answering COVID vaccine questions: Why is the vaccine needle so long? Is the rise in COVID cases...
  10. [Google News] Indiana travel baseball team dedicates season to Charlestown officer killed by COVID-19

5위 New 0.33% 관련 반응

  1. [Google News] Blue Economy Innovations by SIDS Can Advance Climate Action and Survival | News | SDG Knowledge Hub | IISD
  2. [Google News] Annastacia Palaszczuk announces million-dollar tourism boost with new Brisbane, Whitsundays travel vouchers
  3. [Google News] Nos 94 anos da Escola de Danca Maria Olenewa, Helio Bejani divulga programacao
  4. [Google News] Star Wars: Knights of the Old Republic Remake in the Works (Nerdist News w/ Dan Casey)
  5. [Google News] Tesla Roadster Matchbox car reveals new future for favourite toys
  6. [The Guardian] Australia news live: hotel quarantine hit by Covid infections; national cabinet to meet on vaccine rollout
  7. [Google News] Diablo Immortal gets new alpha test with endgame content, Crusader class
  8. [Google News] Vaccines available to all over 60 at New York walk-in sites | TheHill
  9. [Google News] George Floyd murder: President Biden announces investigation of Minneapolis policing - BBC News
  10. [Google News] Hobart Airport to welcome first international flight from New Zealand since 1998

6위 Copa 0.3% 관련 반응

  1. [Google News] EN VIVO Online: Donde y como ver Guabira - Independiente, por la Copa Sudamericana, por internet y TV
  2. [Google News] EN VIVO Online: Donde y como ver Rentistas - Racing, por la Copa Libertadores, por internet y TV
  3. [Google News] Conmebol anuncia arbitros europeos para dirigir por primera vez en Copa America
  4. [Google News] Huracan (LH) 1-4 Estudiantes (RC) I Copa Argentina
  5. [Google News] Goles de The Strongest - Boca, por la Copa Libertadores: resumen, polemicas, videos y estadisticas
  6. [Google News] Copa Argentina: llave al dia y lo que viene
  7. [Google News] The Strongest - Boca en vivo, por la Copa Libertadores: partido online, resultado, formaciones y suplentes
  8. [Google News] Copa Sudamericana 2021: horarios y canales de transmision de la primera fecha de la fase de grupos
  9. [Google News] Grupo B de la Copa Libertadores 2021: fixture, partidos y posiciones
  10. [Google News] Talleres vs. Emelec EN VIVO: como y donde VER GRATIS el partido por Copa Sudamericana 2021

7위 Super 0.28% 관련 반응

  1. [Google News] Florentino Perez confirma que proyecto de la Superliga solo esta "en stand by"
  2. [Google News] Liverpool and Manchester United owners apologise following European Super League collapse
  3. [Google News] [Video] Cuadrado se luce con doble asistencia (una exquisita) y supera a Zidane
  4. [Google News] Florentino Perez: "Estoy decepcionado, quiza no hemos sabido explicar la Superliga"
  5. [Google News] Watch 2 supermassive black holes dance around each other in a mesmerizing NASA animation
  6. [NYT] L.A. Schools Superintendent Austin Beutner Stepping Down
  7. [Google News] 'La Superliga era oportunidad unica para ayudar al futbol'
  8. [NYT] L.A. Schools Superintendent Austin Beutner to Leave in June
  9. [Google News] Salud confirma brote de covid en supermercado de Limache: hay 13 contagiados y un contacto estrecho
  10. [NYT] Florida School Superintendent Arrested on Perjury Charge

8위 Apple 0.26% 관련 반응

  1. [Google News] Spotify y Match senalan a Apple ante Senado por abuso de poder en la App Store
  2. [Google News] Appleton Airport sees 23% increase in air travel since last March
  3. [Google News] Apple targeted in $50 million ransomware attack resulting in unprecedented schematic leaks
  4. [Google News] ▷ Apple TV 4K 2021: la TV Box de Apple se renueva con el chip Bionic A12 ≫ ERdC
  5. [Google News] Tout ce qu'il faut savoir sur la balise AirTag d'Apple
  6. [Google News] Grupo de hackers secuestra informacion confidencial de Apple y exige 50 millones de dolares por ella
  7. [Google News] iPad Pro, estas son las nuevas caracteristicas de la tablet de Apple
  8. [Google News] Apple’s iPad Pro is making its own laptops obsolete
  9. [Google News] Apple shares two new ‘Behind the Mac’ ads with musician Finneas and more
  10. [Google News] Apple now lets you extend a Mac’s AppleCare Plus coverage beyond three years

9위 Chauvin 0.26% 관련 반응

  1. [Google News] Derek Chauvin latest updates ? Cop on suicide watch at maximum security prison after George Floyd murder c...
  2. [Google News] Derek Chauvin placed in solitary confinement at max security prison in Minnesota
  3. [NBC News] What Chauvin's conviction means for other former officers charged in Floyd's killing
  4. [Google News] Derek Chauvin permanecera en una unidad segregada de maxima seguridad en prision, mientras espera sentencia
  5. [USA Today] OnPolitics: Will the Derek Chauvin trial lead to police reform?
  6. [NBC News] Why Derek Chauvin's case was exceptional ??and won't lead to real change
  7. [USA Today] George Floyd still victim of lies on Facebook even after Derek Chauvin guilty verdict, report says
  8. [StarTribune] EXPLAINER: Chauvin jury could stay anonymous for a long time
  9. [USA Today] Lawmakers in Congress 'optimistic' about police overhaul in aftermath of Chauvin conviction
  10. [StarTribune] Chauvin guilty verdicts resonate among local activists who have long fought for justice

10위 CDMX 0.24% 관련 반응

  1. [Google News] CDMX: Custodio engana a sus companeros y roba 11 mdp de camioneta de valores
  2. [Google News] En lo que va del ano, 400 policias de la CDMX fueron dados de baja
  3. [Google News] Desempleo se debe a falta de inversion: CMIC-CDMX
  4. [Google News] Reitera Coparmex-CDMX respaldo a las decisiones y autonomia del INE
  5. [Google News] Detuvieron a diputado de Morena acusado de abuso sexual de un menor de edad en CDMX
  6. [Google News] Estos son los precios de la gasolina en Mexico; en CdMx se vende en minimos de $19.59
  7. [Google News] Detienen a diputado de Morena por agresion sexual a menor en CDMX
  8. [Google News] Jesus Sesma, candidato a diputado de CdMx, propone reducir impuestos a empresas
  9. [Google News] CDMX condonara pago de agua a 72 colonias de Iztapalapa
  10. [Google News] 6 playas para ir en carro desde CDMX
#Biden #Netflix #League #Covid #New #Copa #Super #Apple #Chauvin #CDMX #뉴스속보 #뉴스 #이슈링크 #이슈 #실검 #실시간검색어


출처 : 이슈링크
이슈링크 앱 다운로드
NewsLink App Download

+ Recent posts