강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kcjerim12345672940
kcjerim12345672940

câu hỏi đã được viết

Giải quyết kiến trúc không đồng bộ bằng RabbitMQ một cách nhanh chóng

NotificationMessage가 필요한 이유 질문

Đã giải quyết

Viết

·

98

0

학습중 궁금한 것은 언제든 문의 하세요.

질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다.

추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다.


  1. Pub-Sub 모델을 이용한 실시간 알림 part2에 질문이 있습니다 !

 

package com.example.messagequeue.step2.step2;

public class NotificationMessage {
    private final String message;

    public NotificationMessage() {
        message = "";
    }

    public NotificationMessage(String message) {
        this.message = message;
    }

    public String getMessage(){
        return message;
    }
}

짊여기에서 NotificationMessage DTO를 만들어주셧는데, 뭐 때문에 만드신걸까요 ?

직렬화, 역직렬화와 관련이 있는거 같은데, 잘 이해가 안되네요 ㅎㅎ

답변 주시면 감사드리겠습니다 !

javaspring-bootjpamsawebsocketrabbitmq

Câu trả lời 2

0

codevillain님의 프로필 이미지
codevillain
Người chia sẻ kiến thức

안녕하세요. 수강자님

 

일반적으로 실무에서 다른 레이어(혹은 다른 서비스)에 전송할 때 자료형의 나열식의 구조 보다는 좀 더 구조화된 DTO 형태의 객체(MQ에서는 Payload 라고 하거나 xxxMessage 라고 칭합니다) 를 전송하는게 일반적인 케이스입니다.

 

단순히 문자열 "ABCD" 보다는 JSON 형태의 { title : "ABCD"} 와 같이 명시적으로 의미가 있는 형태로 필드를 정의해서 보내는것이 개발 스펙상 명확하고, MQ 뒷단에서 받는 이(개발자)가 다른이가 될 가능성이 있기 때문에 스키마 형태(필드:값) 의 데이터 값을 보내는 것이 테스트, 디버깅에도 유용하다고 할 수 있습니다.

그래서 MQ나 다른 미들웨어들도 내부적으로는 JSON을 파싱하는 컨버터 등을 기본적으로 내재하거나, Spring에서 제공하는 Converter (Jackson2Json) 를 써서 변환하는 형태로 개발을 하게 됩니다. 즉, 타입 안정성, 변수의 의미나 구조의 명확성 때문에 가급적 객체(DTO, Message, Payload) 형태로 보내는 것을 추천합니다.

이런 구조에서는 직렬화/역직렬화 (다음 강좌에 설명을 하고 있습니다) 의 개념도 같이 공부해두면 도움이 되겠습니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김제림님.

NotificationMessage와 같은 Data Transfer Object(DTO)를 사용하는 이유를 설명드리겠습니다.

DTO와 직렬화/역직렬화

  1. DTO의 역할: DTO는 주로 데이터를 전송하기 위한 객체로, 데이터 구조를 명확하게 표현하기 위해 사용됩니다. NotificationMessage라는 클래스는 메시지를 객체로 캡슐화하여 필요한 데이터를 안전하게 전송하거나 받을 수 있도록 해줍니다.

  2. 직렬화와 역직렬화: 이 클래스가 Jackson이나 다른 JSON 라이브러리에서 직렬화 및 역직렬화될 때, 기본 생성자가 필요합니다. 직렬화/역직렬화 과정은 Java 객체를 JSON 형식으로 변환하거나 그 반대의 과정이며, 기본 생성자가 있어야 라이브러리가 객체 생성 시 초기화를 올바르게 처리할 수 있습니다. 이러한 변환 과정에서 각 필드를 올바르게 매핑하기 위해 DTO가 사용됩니다.

  3. 불변성 유지: 위 코드에서 필드를 final로 정의함으로써 불변성을 유지하려고 하는데, 이는 객체가 한번 설정되면 그 상태가 변하지 않도록 하기 위함입니다. 이는 멀티스레드 환경에서 안전성을 높이고, 코드의 예측 가능성을 증가시킵니다.

이 DTO는 메시지의 구조와 내용을 쉽게 정의하고, Java와 JSON 간의 변환 과정을 단순화하기 위해서 사용됩니다. 따라서 직렬화 및 역직렬화가 필요한 상황에서 NotificationMessage 같은 구조는 자주 사용됩니다.

이와 비슷한 주제로 더 많은 정보와 유사한 질문 답변을 확인하려면 아래 링크를 참고하세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của kcjerim12345672940
kcjerim12345672940

câu hỏi đã được viết

Đặt câu hỏi