[SpringBoot] WebSocket, STOMP - 실시간 채팅④, Repository, DAO

SihoonCho·2023년 3월 26일
3
post-thumbnail
post-custom-banner

※ 읽기에 앞서


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.

또한, SpringBoot 기반의 Backend 위주의 설명을 포함하고 있으니
Frontend 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.


📌 Repository(DAO)


JPA Repository를 활용한 Repository(DAO)를 구현합니다.
ChatRoomRepositoryChatMessageRepository로 구분합니다.

  • ChatRoomRepository: ChatRoom과 관련된 Database 데이터 처리
  • ChatMessageRepository: ChatMessage와 관련된 Database 데이터 처리

JPA 사용을 위해 build.gradle의 dependencies 항목에 다음과 같이 추가합니다.

// build.gradle
dependencies {
	...
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

📖 ChatRoomRepository.java


public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
    /** ChatRoom 조회 - RoomName 검색, 정확히 일치 */
    ChatRoom findByRoomName(String roomName);
    
    /** ChatRoom 목록조회 - 기본정렬순, RoomName 검색, 정확히 일치 */
    List<ChatRoom> findAllByRoomName(String roomName);

    /** ChatRoom 목록조회 - 조건정렬순, RoomName 검색, 정확히 일치 */
    List<ChatRoom> findAllByRoomName(String roomName, Sort sort);
    
    /** ChatRoom 목록조회 - 기본정렬순, RoomName 검색, 포함 일치 */
    List<ChatRoom> findAllByRoomNameContaining(String roomName);
    
    /** ChatRoom 목록조회 - 조건정렬순, RoomName 검색, 포함 일치 */
    List<ChatRoom> findAllByRoomNameContaining(String roomName, Sort sort);
}

ChatRoomRepository.java 특징

  • JPA Repository를 상속받은 Interface
  • JPA Repository를 활용한 기본적인 형태의 5개 메소드 구현
    본 프로젝트에서 사용되지 않는 메소드도 있을 수 있음, 단순 참고

ChatRoomRepository.java 메소드

  • findByRoomName(String roomName):
    • 단일 RoomName 검색, 정확히 일치
  • findAllByRoomName(String roomName):
    • 기본정렬순, RoomName 검색, 정확히 일치
  • findAllByRoomName(String roomName, Sort sort):
    • 조건정렬순, RoomName 검색, 정확히 일치
  • findAllByRoomNameContaining(String roomName):
    • 기본정렬순, RoomName 검색, 포함 일치
  • findAllByRoomNameContaining(String roomName, Sort sort):
    • 조건정렬순, RoomName 검색, 포함 일치

📖 ChatMessageRepository.java


interface ChatMessageRepository extends JpaRepository<ChatMessage, Long> {    
    /** ChatMessage 목록조회 - 기본정렬순, ChatRoom 검색 */
    List<ChatMessage> findAllByChatRoom(ChatRoom chatRoom);
    
    /** ChatMessage 목록조회 - 조건정렬순, ChatRoom 검색 */
    List<ChatMessage> findAllByChatRoom(ChatRoom chatRoom, Sort sort);
    
    /** ChatMessage 검색조회 - 기본정렬순, Message 검색 */    
    List<ChatMessage> findAllByMessageContaining(String message);
    
    /** ChatMessage 검색조회 - 조건정렬순, Message 검색 */    
    List<ChatMessage> findAllByMessageContaining(String message, Sort sort);
}

ChatRoomResponseDto.java 특징

  • JPA Repository를 상속받은 Interface
  • JPA Repository를 활용한 기본적인 형태의 4개 메소드 구현
    본 프로젝트에서 사용되지 않는 메소드도 있을 수 있음, 단순 참고

ChatRoomResponseDto.java 메소드

  • findAllByChatRoom(ChatRoom chatRoom): 기본정렬순, ChatRoom 검색
  • findAllByChatRoom(ChatRoom chatRoom, Sort sort): 조건정렬순, ChatRoom 검색
  • findAllByMessageContaining(String message): 기본정렬순, Message 검색
  • findAllByMessageContaining(String message, Sort sort): 조건정렬순, Message 검색

📌 결론


실시간 채팅과 관련하여 JPA Repository를 활용하여
Database Data 처리를 위한 Repository 구현인
ChatRoomRepository, ChatMessageRepository 구현이 끝났습니다.

다음 시간에는 지금까지 구현한 Entity, DTO, Repository를 활용해
실질적인 기능을 구현하는 Service를 구현해보도록 하겠습니다.


본 시리즈는 SpringBoot 기반의 WebSocket, STOMP 실시간 채팅기능 구현을 목표로
최근 트렌드와 함께 WebSocket, STOMP의 정형화된 기초개념을 정립하기 위해 작성되었습니다.

WebSocket을 찾아 헤매는 모든 이들에게 이 글을 바칩니다.


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.

또한, SpringBoot 기반의 Backend 위주의 설명을 포함하고 있으니
Frontend 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.
profile
개발을 즐길 줄 아는 백엔드 개발자
post-custom-banner

0개의 댓글