Skip to content

[BE] 기업 사용자와 지원자의 채팅 기능 #14

Description

@KK-Hoon

채팅 기능 정리

1. 데이터 구조

@Entity
@Table(name = "chat_room")
public class ChatRoom {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long chatRoomId;

    @ManyToOne
    @JoinColumn(name = "company_id")
    private Company company;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @Column(nullable = false)
    private LocalDateTime createdAt;

    @OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL)
    private List<ChatMessage> messages;
}

@Entity
@Table(name = "chat_message")
public class ChatMessage {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long messageId;

    @ManyToOne
    @JoinColumn(name = "chat_room_id")
    private ChatRoom chatRoom;

    @ManyToOne
    @JoinColumn(name = "sender_id")
    private User sender;

    @Column(nullable = false, length = 1000)
    private String content;

    @Column(nullable = false)
    private LocalDateTime sentAt;

    @Column(nullable = false)
    private boolean isRead;
}

2. API 엔드포인트

  • 채팅방 생성: POST /chat-rooms
  • 채팅방 목록 조회: GET /chat-rooms
  • 채팅방 상세 조회: GET /chat-rooms/{chatRoomId}
  • 메시지 전송: POST /chat-rooms/{chatRoomId}/messages
  • 메시지 목록 조회: GET /chat-rooms/{chatRoomId}/messages
  • 메시지 읽음 처리: PUT /chat-rooms/{chatRoomId}/messages/{messageId}/read

3. WebSocket 엔드포인트

  • WebSocket 연결: /ws/chat
  • 메시지 구독: /topic/chat/{chatRoomId}
  • 메시지 발행: /app/chat/{chatRoomId}/send

4. 주요 기능

  • 실시간 채팅
  • 채팅방 생성 및 관리
  • 메시지 전송 및 수신
  • 읽음 확인
  • 채팅 내역 저장
  • 채팅방 목록 관리

5. 예시 요청/응답

5.1 채팅방 생성

// POST /chat-rooms
{
    "companyId": 1,
    "userId": 2
}

// 응답
{
    "success": true,
    "message": "채팅방이 생성되었습니다.",
    "chatRoomId": 1,
    "createdAt": "2024-03-11T15:30:00"
}

5.2 메시지 전송

// POST /chat-rooms/{chatRoomId}/messages
{
    "content": "안녕하세요, 지원자입니다."
}

// 응답
{
    "success": true,
    "message": "메시지가 전송되었습니다.",
    "messageId": 1,
    "sentAt": "2024-03-11T15:31:00"
}

5.3 WebSocket 메시지 형식

// 발행 메시지
{
    "type": "CHAT",
    "chatRoomId": 1,
    "senderId": 2,
    "content": "안녕하세요, 지원자입니다.",
    "sentAt": "2024-03-11T15:31:00"
}

6. 제약사항

  • 메시지 내용은 최대 1000자
  • 채팅방은 회사와 지원자 1:1로 생성
  • 메시지는 채팅방 참여자만 조회 가능
  • 채팅방 생성은 지원서 제출 후 가능

7. 보안

  • WebSocket 연결 시 인증 토큰 검증
  • 채팅방 접근 권한 검증
  • 메시지 암호화 전송
  • 개인정보 보호를 위한 데이터 마스킹

8. 성능 고려사항

  • WebSocket 연결 관리
  • 메시지 큐잉 시스템
  • 대량 메시지 처리
  • 실시간 알림 처리

9. 향후 개선사항

  • 이미지/파일 전송 기능
  • 읽음 확인 기능 강화
  • 채팅방 검색 기능
  • 채팅 내역 백업 기능
  • 채팅방 나가기 기능
  • 채팅방 초대 기능
  • 그룹 채팅 기능
  • 채팅 알림 설정
  • 채팅 내용 검색 기능

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions