맨들맨들 돌덩이
Home
  • 분류 전체보기 (439)
    • 프로젝트 (14)
    • NOTICE (2)
    • 개발 (206)
      • Unity (12)
      • JAVA (20)
      • SPRING (9)
      • DB (10)
      • FronT (14)
      • 알고리즘 (16)
      • 이코테 (25)
      • Python (60)
      • Arduino (4)
      • WEB (18)
      • C++ (17)
    • 게임 (33)
      • DNF (31)
      • LostArk (2)
    • KT_DS (93)
      • 보호관리용 (3)
    • 실습코드 (64)
      • 실습 코드 (63)
    • 독서 (2)
      • 생각넓히기 (2)
    • Setting (17)
    • 일상 (8)
ALL
  • 분류 전체보기 (439)
    • 프로젝트 (14)
    • NOTICE (2)
    • 개발 (206)
      • Unity (12)
      • JAVA (20)
      • SPRING (9)
      • DB (10)
      • FronT (14)
      • 알고리즘 (16)
      • 이코테 (25)
      • Python (60)
      • Arduino (4)
      • WEB (18)
      • C++ (17)
    • 게임 (33)
      • DNF (31)
      • LostArk (2)
    • KT_DS (93)
      • 보호관리용 (3)
    • 실습코드 (64)
      • 실습 코드 (63)
    • 독서 (2)
      • 생각넓히기 (2)
    • Setting (17)
    • 일상 (8)
블로그 내 검색

맨들맨들 돌덩이

티스토리 생일 : 2020.11.18. 모든 문의 : highcw@naver.com

  • 개발/WEB

    Web_ project 진행_9 : Spring Boot + Sring chat, 스프링 채팅 시스템 구현(2)

    2022. 4. 24.

    by. KAEY


    Web_ project 진행_8 : Spring Boot + Sring chat, 스프링 채팅 시스템 구현(1) :: MS (tistory.com)

     

    Web_ project 진행_8 : Spring Boot + Sring chat, 스프링 채팅 시스템 구현(1)

    스프링으로 채팅 시스템을 구현하기 위해서, Lombok, MongoDB, Flux 을 사용합니다. 왜 필요할까요? 세 개의 요소들 모두 리엑티브 환경에서 사용하기 유용한 도구들 입니다. Flux는 리액티브 프로그래

    kaey.tistory.com

    에서 이어지는 글입니다.

     

    채팅 서버(서버B)는 jdk 11버전을, STS4, mongoDB, Lombok, Flux가 사용되었습니다.


    application.yml

    spring:
      data:
        mongodb:
          host: localhost
          port: 27017
          database: chatdb

     기본 mongoDB의 설정을 진행해줍니다. 포트는 몽고디비 기본 포트를 사용했습니다.

     

     

     

    chat.java

    @Data
    @Document(collection = "chat")
    public class Chat {
    	@Id
    	private String id;
    	private String msg;
    	private String sender; // 보내는 사람
    	private String receiver; // 받는 사람 (귓속말)
    	private Integer roomNum; // 방 번호
    	
    	private LocalDateTime createdAt;
    }

    Lombok을 사용해서 따로 getter, setter의 구현이 필요하지 않습니다. 원하는 데이터 값만을 설정합니다.

     

     

     

    ChatRepository.java

    public interface ChatRepository extends ReactiveMongoRepository<Chat, String>{
    	
    	@Tailable
    	@Query("{ roomNum: ?0 }")
    	Flux<Chat> mFindByRoomNum(Integer roomNum);
    }

     몽고디비에서 채팅 관련한 내용을 출력할 수 있게 해줍니다. roomNum을 통해서 채팅이 구분됩니다.

    또한 Flux을 통해서 응답을 유지한 상태(서버B->서버A)를 유지한 상태로 계속 새로운 데이터가 있다면 불러옵니다.

     

     

    ChatController.java

    	@CrossOrigin
    	@PostMapping("/chat") 
    	public Mono<Chat> setMsg(@RequestBody Chat chat){
    		chat.setCreatedAt(LocalDateTime.now());
    		return chatRepository.save(chat); // Object를 리턴하면 자동으로 JSON 변환 (MessageConverter)
    	}

    앞서 JSP에서 입력된 채팅의 내용을 해당 채팅서버/chat으로 보내므로 이를 컨트롤러에서 저장할 수 있게 설정해놓습니다.  

     

     

    	@CrossOrigin
    	@GetMapping(value = "/chat/roomNum/{roomNum}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    	public Flux<Chat> findByRoomNum(@PathVariable Integer roomNum) {
    		return chatRepository.mFindByRoomNum(roomNum)
    				.subscribeOn(Schedulers.boundedElastic());
    	}

    그 외에 채팅창을 출력하기 위해서 채팅방 번호를 수집해서 채팅방번호로 매칭해주고 해당 채팅방번호로 저장한 mongoDB의 데이터 값들을 출력해줍니다.

     

     

    채팅방으로 들어가서 확인해보면 다음과 같이 데이터들을 불러옴을 알 수 있습니다. 이를 서버A에서 정제하여 출력하는 것입니다.

     

     

     

    이렇게 서버 A에서 서버B로 즉시 이동하고 서버B에서 몽고디비로 저장한 데이터가 지속적인 출력을 보여줍니다.

     

     

     

     


     

    저작자표시 비영리 동일조건 (새창열림)

    '개발 > WEB' 카테고리의 다른 글

    Web_ project 진행_10 : 최종 구현/시연 화면, 프로젝트 종료 및 후기  (0) 2022.04.24
    Web_ project 진행_8 : Spring Boot + Sring chat, 스프링 채팅 시스템 구현(1)  (0) 2022.04.24
    Web_ project 진행_7 : JSP을 이용하여 원하는 정보 전달하기  (0) 2021.11.17
    Web_ project 진행_6 : Spring 회원 로그인 시스템  (0) 2021.11.05
    Web_ project 진행_5 : Spring DB 게시글 삭제 (두 개의 테이블)  (0) 2021.11.04

    댓글 (비로그인 댓글 허용하지 않습니다.)

    관련글

    • Web_ project 진행_10 : 최종 구현/시연 화면, 프로젝트 종료 및 후기 2022.04.24
    • Web_ project 진행_8 : Spring Boot + Sring chat, 스프링 채팅 시스템 구현(1) 2022.04.24
    • Web_ project 진행_7 : JSP을 이용하여 원하는 정보 전달하기 2021.11.17
    • Web_ project 진행_6 : Spring 회원 로그인 시스템 2021.11.05
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
KAEY
#모바일 접속 차단. (PC 환경 자동 리다이렉트) #현재 블로그내 모든 광고는 티스토리(카카오)에서 게시한 광고입니다😢. #문의 이메일 : highcw@naver.com

티스토리툴바