박현정 박현정 07-29
250729 박현정 채팅 소켓 통신 기능 추가
@2286a4e6301d64c65a64baa41a2ee70f33f69efa
build.gradle
--- build.gradle
+++ build.gradle
@@ -68,6 +68,9 @@
 	implementation 'io.jsonwebtoken:jjwt-api:0.12.5'
 	implementation 'io.jsonwebtoken:jjwt-impl:0.12.5'
 	implementation 'io.jsonwebtoken:jjwt-jackson:0.12.5'
+
+	// socket
+	implementation 'org.springframework.boot:spring-boot-starter-websocket'
 }
 
 tasks.named('test') {
src/main/java/kr/co/takensoft/ai/system/chatMsg/dao/ChatMsgDAO.java
--- src/main/java/kr/co/takensoft/ai/system/chatMsg/dao/ChatMsgDAO.java
+++ src/main/java/kr/co/takensoft/ai/system/chatMsg/dao/ChatMsgDAO.java
@@ -24,7 +24,21 @@
      *
      * 메시지 등록
      */
-    public int saveChatMsg(ChatMsgVO chatMsgVO);
+    int saveChatMsg(ChatMsgVO chatMsgVO);
 
-    public List<ChatMsgVO> findAllChatMsgsByChatRoomId(String chatRoomId);
+    /**
+     * @param chatRoomId - 채팅방 아이디
+     * @return List<ChatMsgVO> - 메시지 목록
+     *
+     * 메시지 목록 조회
+     */
+    List<ChatMsgVO> findAllChatMsgsByChatRoomId(String chatRoomId);
+
+    /**
+     * @param chatMsgId - 채팅 메시지 아이디
+     * @return ChatMsgVO - 메시지 객체
+     *
+     * 메시지 조회
+     */
+    ChatMsgVO findById(String chatMsgId);
 }
src/main/java/kr/co/takensoft/ai/system/chatMsg/dto/ChatMsgDTO.java
--- src/main/java/kr/co/takensoft/ai/system/chatMsg/dto/ChatMsgDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/chatMsg/dto/ChatMsgDTO.java
@@ -22,6 +22,7 @@
 @AllArgsConstructor
 public class ChatMsgDTO {
 
+    private String chatRoomId; // 채팅방 아이디
     private String chatMsgId; // 채팅 메시지 아이디
     private String senderId; // 메시지 작성자 아이디
     private String senderName; // 메시지 작성자 이름
@@ -31,6 +32,7 @@
 
     public static ChatMsgDTO from(ChatMsgVO chatMsgVO) {
         return new ChatMsgDTO(
+                chatMsgVO.getChatRoomId(),
                 chatMsgVO.getChatMsgId(),
                 chatMsgVO.getSenderId(),
                 chatMsgVO.getSenderName(),
src/main/java/kr/co/takensoft/ai/system/chatMsg/dto/InsertChatMsgDTO.java
--- src/main/java/kr/co/takensoft/ai/system/chatMsg/dto/InsertChatMsgDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/chatMsg/dto/InsertChatMsgDTO.java
@@ -22,4 +22,10 @@
 public class InsertChatMsgDTO extends BaseParam {
 
     private String msgContent; // 메시지 내용
+
+    public InsertChatMsgDTO(String senderId, String msgContent) {
+
+        this.setMemberId(senderId);
+        this.setMsgContent(msgContent);
+    }
 }
src/main/java/kr/co/takensoft/ai/system/chatMsg/service/ChatMsgService.java
--- src/main/java/kr/co/takensoft/ai/system/chatMsg/service/ChatMsgService.java
+++ src/main/java/kr/co/takensoft/ai/system/chatMsg/service/ChatMsgService.java
@@ -2,6 +2,7 @@
 
 import kr.co.takensoft.ai.system.chatMsg.dto.ChatMsgDTO;
 import kr.co.takensoft.ai.system.chatMsg.dto.InsertChatMsgDTO;
+import kr.co.takensoft.ai.system.chatMsg.vo.ChatMsgVO;
 import kr.co.takensoft.ai.system.feedback.vo.FeedbackVO;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -22,12 +23,12 @@
      * @param chatRoomId - 채팅방 아이디
      * @param senderId - 보내는 사용자 아이디
      * @param msgContent - 메시지 내용
-     * @return 등록 성공 여부
+     * @return 채팅 메시지 객체
      *
      * 채팅방 메시지 등록
      */
     @Transactional
-    int saveChatMsg(String chatRoomId, String senderId, String msgContent);
+    ChatMsgVO saveChatMsg(String chatRoomId, String senderId, String msgContent);
 
     /**
      * @param chatRoomId - 채팅방 아이디
src/main/java/kr/co/takensoft/ai/system/chatMsg/service/impl/ChatMsgServiceImpl.java
--- src/main/java/kr/co/takensoft/ai/system/chatMsg/service/impl/ChatMsgServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/chatMsg/service/impl/ChatMsgServiceImpl.java
@@ -36,22 +36,24 @@
      * @param chatRoomId - 채팅방 아이디
      * @param senderId - 보내는 사용자 아이디
      * @param msgContent - 메시지 내용
-     * @return 등록 성공 여부
+     * @return 채팅 메시지 객체
      *
      * 채팅방 메시지 등록
      */
     @Override
     @Transactional
-    public int saveChatMsg(String chatRoomId, String senderId, String msgContent) {
+    public ChatMsgVO saveChatMsg(String chatRoomId, String senderId, String msgContent) {
 
         try {
 
             String chatMsgId = chatMsgIdgn.getNextStringId(); // 채팅 메시지 구분 아이디 생성
             ChatMsgVO chatMsgVO = new ChatMsgVO(chatMsgId, chatRoomId, senderId, msgContent); // 채팅 메시지 객체 생성
-            return chatMsgDAO.saveChatMsg(chatMsgVO); // 채팅 메시지 등록
+            chatMsgDAO.saveChatMsg(chatMsgVO); // 채팅 메시지 등록
+            ChatMsgVO saved = chatMsgDAO.findById(chatMsgId); // 저장된 채팅 메시지 반환
+            return saved; // 채팅 메시지 객체 반환
         }  catch (Exception e) {
             e.printStackTrace();
-            return -1;
+            throw e;
         }
     }
 
src/main/java/kr/co/takensoft/ai/system/chatRoom/service/ChatRoomService.java
--- src/main/java/kr/co/takensoft/ai/system/chatRoom/service/ChatRoomService.java
+++ src/main/java/kr/co/takensoft/ai/system/chatRoom/service/ChatRoomService.java
@@ -2,6 +2,7 @@
 
 import kr.co.takensoft.ai.system.chatMsg.dto.ChatMsgDTO;
 import kr.co.takensoft.ai.system.chatMsg.dto.InsertChatMsgDTO;
+import kr.co.takensoft.ai.system.chatMsg.vo.ChatMsgVO;
 import kr.co.takensoft.ai.system.common.dto.BaseParam;
 import kr.co.takensoft.ai.system.feedback.vo.FeedbackVO;
 import org.springframework.transaction.annotation.Transactional;
@@ -31,12 +32,12 @@
     /**
      * @param chatRoomId - 채팅방 아이디
      * @param request - 메시지 관련 내용을 담은 DTO 객체
-     * @return 등록 성공 여부
+     * @return 채팅 메시지 객체
      *
      * 채팅방 메시지 등록
      */
     @Transactional
-    int saveChatMsg(String chatRoomId, InsertChatMsgDTO request);
+    ChatMsgVO saveChatMsg(String chatRoomId, InsertChatMsgDTO request);
 
     /**
      * @param chatRoomId - 채팅방 아이디
src/main/java/kr/co/takensoft/ai/system/chatRoom/service/impl/ChatRoomServiceImpl.java
--- src/main/java/kr/co/takensoft/ai/system/chatRoom/service/impl/ChatRoomServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/chatRoom/service/impl/ChatRoomServiceImpl.java
@@ -59,13 +59,13 @@
     /**
      * @param chatRoomId - 채팅방 아이디
      * @param request - 메시지 관련 내용을 담은 DTO 객체
-     * @return 등록 성공 여부
+     * @return 채팅 메시지 객체
      *
      * 채팅방 메시지 등록
      */
     @Override
     @Transactional
-    public int saveChatMsg(String chatRoomId, InsertChatMsgDTO request) {
+    public ChatMsgVO saveChatMsg(String chatRoomId, InsertChatMsgDTO request) {
         return chatMsgService.saveChatMsg(chatRoomId, request.getMemberId(), request.getMsgContent()); // 채팅 메시지 등록
     }
 
src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
--- src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
@@ -78,7 +78,7 @@
             return feedbackDAO.setFeedbackCheck(feedbackVO.getFeedbackId()); // 피드백 확인
         }  catch (Exception e) {
             e.printStackTrace();
-            return -1;
+            throw e;
         }
     }
 
src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
--- src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
@@ -80,11 +80,7 @@
     @Override
     public void validateProjectOwner(String projectGroupId, String memberId) {
         if(!projectMemberDAO.existsByProjectGroupIdAndMemberIdAndIsOwner(projectGroupId, memberId)){
-            try {
-                throw new IllegalAccessException("이 프로젝트의 대표자가 아닙니다.");
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
-            }
+            throw new IllegalArgumentException("이 프로젝트의 대표자가 아닙니다.");
         }
     }
 }
src/main/resources/mybatis/mapper/chatMsg/chatMsg-SQL.xml
--- src/main/resources/mybatis/mapper/chatMsg/chatMsg-SQL.xml
+++ src/main/resources/mybatis/mapper/chatMsg/chatMsg-SQL.xml
@@ -65,6 +65,24 @@
         ORDER BY cm.created_at
     </select>
 
-
+    <!--
+        작 성 자 : 박현정
+        작 성 일 : 2025.07.29
+        내    용 : 채팅 메시지 조회
+    -->
+    <select id="findById" parameterType="String" resultMap="ChatMsgMap">
+        SELECT
+            cm.chat_msg_id,
+            cm.chat_room_id,
+            cm.sender_id,
+            m.member_name,
+            cm.msg_content,
+            cm.use_at,
+            cm.created_at,
+            cm.updated_at
+        FROM chat_msg cm
+        LEFT JOIN member m ON cm.sender_id = m.member_id
+        WHERE chat_msg_id = #{chatMsgId}
+    </select>
 
 </mapper>
(파일 끝에 줄바꿈 문자 없음)
src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
--- src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
+++ src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
@@ -95,9 +95,9 @@
             f.updated_at
         FROM feedback f
         LEFT JOIN project p ON f.project_group_id = p.project_group_id AND p.is_main = 'Y'
+        LEFT JOIN project_member pm ON f.project_group_id = pm.project_group_id AND pm.member_id = #{memberId}
         LEFT JOIN member m ON f.member_id = m.member_id
         LEFT JOIN chat_room cr ON f.feedback_id = cr.feedback_id
-        WHERE f.member_id = #{member_id}
         AND f.use_at = 'Y'
     </select>
 
Add a comment
List