본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.
또한, SpringBoot 기반의 Backend 위주의 설명을 포함하고 있으니
Frontend 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.
채팅방(ChatRoom
)과 관련된 DTO를 구현합니다.
ChatRoomRequestDto
와 ChatRoomResponseDto
로 구분합니다.
ChatRoomRequestDto
: ChatRoom과 관련된 요청에 사용될RequestDto
ChatRoomResponseDto
: ChatRoom과 관련된 응답에 사용될ResponseDto
@Getter
@NoArgsConstructor
public class ChatRoomRequestDto {
private String roomName;
@Builder
public ChatRoomRequestDto(String roomName) {
this.roomName = roomName;
}
public ChatRoom toEntity() {
return ChatRoom.builder()
.roomName(this.roomName)
.build();
}
}
- 채팅방(
ChatRoom
) 생성/수정 등의 요청으로 사용하기 위한 DTO 입니다.- 사용자가 채팅방 이름(
roomName
)을 결정하여 요청하게 됩니다.
roomName
: 채팅방 이름
@Getter
public class ChatRoomResponseDto {
private Long id;
private String roomName;
private String createdDate;
private String updatedDate;
public ChatRoomResponseDto(ChatRoom entity) {
this.id = entity.getId();
this.roomName = entity.getRoomName();
this.createdDate = entity.getCreatedDate().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
this.updatedDate = entity.getUpdatedDate().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
}
}
- 채팅방(
ChatRoom
) 입장 등의 요청으로 사용하기 위한 DTO 입니다.id
,roomName
,createdDate
,updatedDate
등의 정보를 담아 응답하게 됩니다.- 날짜와 관련된
createdDate
,updatedDate
는 Foramt 을 지정하여 String 타입으로 전달합니다.
id
: 채팅방 고유값roomName
: 채팅방 이름createdDate
: 채팅방 생성일updatedDate
: 채팅방 수정일
채팅 메세지(ChatMessage)와 관련된 DTO를 구현합니다.
ChatMessageRequestDto
와 ChatMessageResponseDto
로 구분합니다.
ChatMessageRequestDto
: ChatMeesage와 관련된 요청에 사용될RequestDto
ChatMessageResponseDto
: ChatMessage와 관련된 응답에 사용될ResponseDto
@Getter
@NoArgsConstructor
public class ChatMessageRequestDto {
private String sender;
private String message;
private ChatRoom chatRoom;
@Builder
public ChatMessageRequestDto(String sender, String message, ChatRoom chatRoom) {
this.sender = sender;
this.message = message;
this.chatRoom = chatRoom;
}
public ChatMessage toEntity() {
return ChatMessage.builder()
.sender(this.sender)
.message(this.message)
.chatRoom(this.chatRoom)
.build();
}
}
- 채팅 메세지(
ChatMessage
) 생성/수정 등의 요청으로 사용하기 위한 DTO 입니다.- 각각의 메세지마다 발송자(
sender
)와 메세지(message
), 연결된 채팅방(chatRoom
)
정보가 담겨 요청하게 됩니다.
sender
: 채팅 메세지 발신자message
: 채팅 메세지 내용chatRoom
: 채팅 메세지가 연결된 채팅방
@Getter
public class ChatMessageResponseDto {
private Long id;
private String sender;
private String message;
private String createdDate;
private String updatedDate;
public ChatMessageResponseDto(ChatMessage entity) {
this.id = entity.getId();
this.sender = entity.getSender();
this.message = entity.getMessage();
this.createdDate = entity.getCreatedDate().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
this.updatedDate = entity.getUpdatedDate().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
}
}
- 채팅 메세지(
ChatMessage
) 불러오기 등의 요청으로 사용하기 위한 DTO 입니다.id
,sender
,message
,createdDate
,updatedDate
등의 정보를 담아 응답하게 됩니다.- 날짜와 관련된
createdDate
,updatedDate
는 Foramt 을 지정하여 String 타입으로 전달합니다.
id
: 채팅 메세지 고유값sender
: 채팅 메세지 발신자message
: 채팅 메세지 내용createdDate
: 채팅 메세지 생성일updatedDate
: 채팅 메세지 수정일
실시간 채팅과 관련하여 요청과 응답에 대한 DTO 정의 작업이 끝났습니다.
RequestDto
의 경우 굳이 SaveRequest
와 UpdateRequest
로 구분하지 않았는데,
다음의 이유와 함께 깔끔한 파일명 관리를 위해 RequestDto
를 세분화하지 않았습니다.
- 채팅방(
ChatRoom
)의 경우, 채팅방 이름(roomName
)만 수정이 되는 등
채팅방 데이터에 대해 변경(update)되는 속성(컬럼)이 많지 않다.
- 채팅 메세지(
ChatMessage
)의 경우, 보편적으로 삭제 기능만 있지
별도의 채팅 메세지 수정 기능을 제공하지 않는 경우가 많다.
다음 시간에는 JPA Repository
를 활용하여 DB로 부터 데이터를 불러오는 등의
작업을 수행하기 위한 Repository
를 구현해보도록 하겠습니다.
본 시리즈는 SpringBoot
기반의 WebSocket
, STOMP
실시간 채팅기능 구현을 목표로
최근 트렌드와 함께 WebSocket
, STOMP
의 정형화된 기초개념을 정립하기 위해 작성되었습니다.
WebSocket을 찾아 헤매는 모든 이들에게 이 글을 바칩니다.
본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.
또한, SpringBoot 기반의 Backend 위주의 설명을 포함하고 있으니
Frontend 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.