Skip to content

[12/18] 프론트–디자이너-백엔드 5차 회의 - 추가 기획 논의 #23

@yoorli

Description

@yoorli

회의 개요

  • 날짜: 2025.12.24(수)
  • 회의 안건
    • 에러/404 화면 및 레이아웃 배경 컬러 추가 디자인 요청
    • 모임 참여 방식(즉시 참여 / 승인 후 참여) 도입 및 관련 UX 정리
    • 모임 상태(대기 중, 마감) 뱃지·인디케이션 위치 정의
    • 모임 승인 전용 페이지(방장용) 플로우 확정 및 진입 경로 논의
    • 그룹 채팅 내 유저 목록/추방 기능 및 모임 추방 로직 연계
    • 채팅 상세 메시지 “전체 보기” 모달 방식 결정
    • 소셜 로그인(구글 중심) 시 약관 동의·닉네임 입력 화면 추가, 카카오/네이버 확장 고려
    • 알림(Noti) 응답 스키마 정리(유저/모임 객체화, redirect URL 제거)
    • 구글 OAuth 흐름(프론트 주도 vs 백엔드 주도) 방식 선택
    • 채팅(1:1 / 그룹) 전체 플로우, 데이터 저장 시점, 만료(24시간) 정책 및 기술 스택(STOMP) 논의
    • 채팅·알림·모임 관련 백엔드 일정, 데드라인(12/31) 및 휴가 일정 공유

회의 내용 요약

  1. 에러 화면은 “예기치 못한 에러”와 “존재하지 않는 페이지(404)” 두 종류를 별도 화면으로 추가하고, 기존 “데이터 없음” 화면과는 다른 일러스트/톤으로 디자인
  2. 전체 레이아웃 좌우 공백 영역에 은은한 파스텔톤 배경 컬러를 넣는 방안을 검토하며, 여러 시안을 만들어 추후 재논의
  3. 모임 생성 시 “참여 방식: 즉시 참여 / 승인 후 참여”를 선택하는 UI를 추가하고, 승인제일 경우 버튼 문구(참여하기→참여 신청하기, 채팅 입장→대기 중, 모임 탈퇴→신청 취소), 참여 신청 메시지 모달, 방장용 승인 페이지까지 일괄 설계
  4. 참여 승인 전용 페이지는 알림 화면에서 알림 클릭 시 진입하며, 신청 유저 리스트·메시지·수락/거절 버튼을 카드 형태로 제공. 추가로 스케줄러/상세 등 다른 진입 경로를 둘지 검토 후 다시 공유
  5. 사용자가 “대기 중”인 모임은 메인 모임 목록과 상세 화면에서 모두 ‘대기 중’ 뱃지나 리본 등으로 표시하고, 위치는 카드 상단 우측(리본) 및 상세 상단/프로필 옆(기존 수정 버튼 자리 활용) 방향으로 디자인을 검토
  6. 그룹 채팅에는 참여 유저 목록 버튼을 추가하고, 방장만 해당 목록에서 유저를 추방할 수 있도록 하며, 모임 상세 화면에서도 방장 전용 추방 버튼을 제공해 모임 추방과 채팅 추방을 동일 로직으로 처리(추방 시 조용히 목록/채팅에서 제거)
  7. 채팅 메시지 “전체 보기”는 인라인 확장 대신 모달로 띄우는 안으로 결정, 배경 클릭 시 닫히는 패턴으로 구현
  8. 구글 로그인 사용자의 경우에도 서비스 자체 이용약관 동의를 별도 화면/모달에서 받고, 같은 화면에서 소셜 유저의 닉네임을 직접 입력. 향후 카카오/네이버 버튼도 추가, 공간이 부족하면 아이콘만 사용하는 방식도 고려
  9. 알림 응답 스키마는 usergroup 객체를 포함하는 형태로 단순화, redirect URL은 제거한 뒤 type 기준으로 프론트에서 라우팅을 조합하는 구조로 변경
  10. 구글 OAuth는 프론트 주도 방식으로 시작하되, 프론트가 인가 코드만 백엔드에 전달하고, 백엔드가 코드로 토큰·userinfo 조회 후 JWT 발급·HttpOnly 쿠키 세팅을 담당하는 구조로 합의(향후 카카오/네이버도 동일 인터페이스 활용).
  11. 채팅 기능은 1:1 / 그룹 채팅을 모두 지원, 메시지는 전송 시점마다 즉시 DB에 저장하는 방식, WebSocket + STOMP 조합으로 구현. 그룹 채팅은 모임 시작 시점을 기준으로 24시간 후 채팅방을 자동 삭제, 새로 들어온 사람은 ‘입장 이후 메시지’만 보도록 기획.

회의 내용 상세

에러/404 화면 및 레이아웃 배경

  • 에러 화면 요구사항
    • “예기치 못한 에러가 발생했을 때 다시 시도하라는 안내 화면”과 “존재하지 않는 페이지(404)에 접근했을 때 보여줄 화면” 두 종류를 별도로 디자인하기로 함.
    • 기존 “데이터 없음(Empty State)” 화면과는 목적이 다르므로, 일러스트·메시지·톤을 다르게 가져가는 것이 좋다는 의견.
  • 그래픽 톤
    • 에러/404 일러스트는 현재 Empty 화면 일러스트와 완전히 동일하기보다는, 약간 다른 그림을 써서 상태를 명확히 구분하는 쪽으로 방향성 합의.
  • 레이아웃 배경 컬러
    • 현재 라이트 모드 기준으로 좌우가 완전히 흰색이라 “너무 휑한 느낌”이라는 내부 피드백.
    • 페이지 양 옆에 은은한 파스텔톤(밝은 컬러) 배경을 넣는 시안을 몇 가지 만들어, 실제 서비스 톤에 맞는 컬러를 선택하기로 함.

모임 참여 방식(즉시 / 승인 후) 및 버튼 상태

  • 참여 방식 옵션 추가
    • 모임 생성 화면에서 “참여 방식”을 선택할 수 있는 UI가 필요.
    • 옵션:
      • 즉시 참여
      • 승인 후 참여(승인제)
    • 구체 위치는 최대 인원 아래 등으로 고려 중이며, 디자이너가 레이아웃을 제안하기로 함.
  • 상세 화면 버튼 상태 변화 (승인제인 경우)
    • 기본 상태(참여 전):
      • 메인 버튼: “참여 신청하기”
    • 신청 후(승인 대기):
      • 메인 버튼: “대기 중”
      • 기존 “채팅 입장” 상태로 가지 않음.
    • 신청 취소
      • 기존 “모임 탈퇴” 버튼 대신, 승인 대기 상태에서는 “신청 취소” 버튼으로 표기.
  • 스케줄러(내 모임 목록)에서도 동일한 상태 체계 적용
    • 캘린더/스케줄러 내 “참여 중 / 내가 생성 / 과거 참여” 화면에서도 승인제 모임은 버튼/라벨을 동일한 규칙으로 맞추기로 함.

참여 신청 메시지 모달 및 방장 알림·승인 페이지

  • 참여 신청 메시지 모달
    • 승인제 모임에서 “참여 신청하기” 버튼 클릭 시, 방장에게 보낼 짧은 소개/신청 메세지를 입력하는 모달을 띄움.
    • 입력 필드는 한 줄 정도로 제한(간단한 자기소개/참여 이유).
    • 버튼 문구는 현재 “전송하기” 등 임시 텍스트이며, 실제 문구는 디자이너가 다듬어 적용.
  • 방장 알림 플로우
    • 신청이 들어오면 방장 계정의 알림 리스트(종 아이콘 클릭)에서 “누구누구님이 모임 참여를 신청했습니다”와 같은 알림이 생성됨.
    • 이 알림을 클릭하면 해당 모임의 “참여 승인 전용 페이지”로 이동.
  • 승인 전용 페이지 구조
    • 상단: 모임 제목 + 안내 문구(“참여 신청한 유저를 확인해 주세요” 등, 추후 문구 보완).
    • 본문: 신청자 수, 신청자 리스트 카드 배열. 각 카드에는
      • 프로필 정보(이미지, 닉네임 등)
      • 신청 메시지
      • 수락 / 거절 버튼
    • 상단 좌측 또는 상단 영역에 “이전 페이지로 돌아가기(알림 리스트로)” 아이콘 버튼 배치.

‘대기 중’ 상태 인디케이션(목록/상세)

  • 문제 의식
    • 대기 중 모임은 아직 진행 중인 모임이므로, 메인 목록/검색 결과에서 계속 노출될 예정.
    • 사용자가 이미 신청한 모임인지 한눈에 알 수 있는 인디케이터가 필요.
  • 목록 카드(모임 리스트)
    • 카드 우측 상단에 파란 리본/배지 형태로 “대기 중” 라벨을 붙이는 안이 제안됨.
    • 태그/마감 인디케이터와 겹치지 않도록 위치·디자인을 조정.
  • 상세 화면
    • 썸네일 상단에 “대기 중” 배지를 고정해서 표시하는 안,
    • 또는 기존 “모임 수정” 버튼이 있던 프로필 옆 위치를 재활용하는 안을 함께 검토.

승인 페이지 추가 진입 경로 검토

  • 현재 진입 경로
    • 알림 화면에서 “참여 신청 알림” 클릭 시 승인 전용 페이지로 이동.
  • 추가 경로 필요성
    • 방장이 알림 화면 외에서도 승인 페이지에 접근할 수 있어야 편리하다는 의견.
    • 후보 경로:
      • 스케줄러의 “내가 생성한 모임” 섹션 → 각 모임 카드에 “대기 인원 보기/요청자 목록 보기” 버튼 추가
      • 혹은 모임 상세 페이지 내 방장 전용 버튼으로 진입
  • 결론
    • 구체적인 진입 위치는 다시 검토 후 최종 제안하기로 하고, 우선 알림→승인 페이지 플로우를 기준으로 설계 진행.

그룹 채팅: 유저 목록·추방 기능 및 모임 추방 연계

  • 그룹 채팅 내 유저 목록 버튼
    • 채팅 화면 상단 UI에 “참여 중인 유저 목록 보기” 버튼 추가.
    • 이 버튼 클릭 시 현재 채팅방에 속한 유저 리스트가 노출.
  • 추방 기능
    • 그룹 방의 방장(모임 호스트)만 유저 목록에서 개별 유저를 추방할 수 있음.
    • 추방 버튼은 유저별 액션 버튼(예: 빨간색 “추방하기” 등)으로 구현.
  • 모임 추방과의 관계
    • 채팅에서 추방 = 해당 모임에서 추방과 동일한 개념으로 취급.
    • 따라서 모임 도메인의 “추방 API”를 재사용하고, 채팅 측에서는 추방 시 해당 유저와 채팅방의 연결을 끊는 동작만 추가.
  • 추방 UX
    • 추방 시 별도의 알림/메시지 없이 조용히 목록에서 사라져도 괜찮다는 의견에 공감.
    • 시스템 메시지를 남길지 여부는 비용 대비 효과가 크지 않아 “조용한 제거” 쪽으로 가닥.
  • 모임 상세 화면에서도 추방 제공
    • 방장 전용으로 상세 화면의 참여자 목록 아래에 개별 “추방” 버튼 추가.
    • 그룹 채팅의 추방 UX와 시각적으로도 최대한 통일해 사용자가 혼동하지 않도록 할 계획.

채팅 메시지 “전체 보기” 모달

  • 기존 안
    • 긴 메시지 우측의 “전체 보기” 클릭 시, 카카오톡 레퍼런스처럼 채팅 풍선 내에서 펼쳐 보여주는 패턴을 참고 중
  • 새 제안
    • 한 팀원이 “전체 보기 → 모달로 띄우는” 형태를 시도해 봤고,
    • 배경을 클릭하면 닫히는 구조가 편리해 보인다는 의견 제시.
  • 팀 의견 수렴
    • 최종 투표에서 모달 쪽이 다수여서 모달 방식 채택으로 결론.
    • 디자이너가 모달 스타일을 정리해 주고, 개발자는 모달 UI로 구현.

소셜 로그인: 약관 동의 및 닉네임 입력 화면, 추가 SNS 버튼

  • 약관 동의 필요성
    • 구글 계정으로 로그인하더라도, 구글 자체 약관과 별도로 “우리 서비스 이용약관 동의”를 받아야 한다는 점을 재확인.
  • UX 방향
    • 구글 로그인 버튼 클릭 → 구글 인증 성공 → 서비스 측 “약관 동의 + 닉네임 입력 화면”으로 이동.
    • 이 화면에서
      • 필수 약관 동의 체크박스(및 ‘자세히 보기’ 모달/페이지)
      • 신규 소셜 사용자용 닉네임 텍스트 필드를 함께 구성하기로 함.
    • 초기 논의에서 계획했던 “자동 닉네임 부여” 대신, 소셜 유저도 직접 닉네임을 입력하도록 정책을 변경.
  • 추가 소셜 로그인 버튼
    • 현재 가장 먼저 구글을 붙이지만, 카카오/네이버도 가능하다면 함께 도입하고자 함.
    • 로그인 화면에 세 provider 버튼을 나란히 두되, 공간이 부족하면 아이콘 중심의 버튼으로 단순화하는 안도 고려.

알림 타입/응답 스키마 정리

  • 기존 응답 구조
    • notificationIdreceiverIdsenderIdgroupIdredirectUrlmessage 등 개별 ID와 URL을 모두 내려주는 형태였다.
  • 프론트 요구사항
    • 타입별로 라우팅을 프론트에서 유연하게 조합하고자 하며,

      • type (예: FOLLOW, GROUP_CREATED, GROUP_JOINED, GROUP_CANCELED …)

      • user 객체: { id, nickname }

      • group 객체: { id, title }

        위주로 단순한 구조를 선호.

    • redirectUrl은 굳이 내려받지 않고, type 기반으로 클라이언트에서 경로를 구성하는 쪽이 관리에 유리하다고 판단.

  • 백엔드 입장
    • 알림 목록 UI에서는 기본적으로 “메시지 + 시간”만 보여주기 때문에 message string은 여전히 서버에서 만들어 주되, 프론트가 조합해서 쓰고 싶으면 user.nickname·group.title을 활용할 수 있도록 객체 형태로 내려주는 방향에 동의.
  • 합의된 구조(개요)
    • id (알림 ID)
    • user{ id, nickname }
    • group{ id, title } (그룹 관련 알림에 한해)
    • type
    • message (옵션, 서버에서 고정 생성)
    • createdAtreadAt

구글 OAuth 흐름: 프론트 주도 방식

  • 세 가지 일반 패턴 설명
    • 프론트 완전 책임
    • 백엔드 완전 책임
    • 프론트/백엔드 반반(코드만 넘기기)
  • 보안/구현 관점 정리
    • 백엔드에서 전부 처리하는 방식이 “정석”에 가깝다는 경험을 공유하되,
    • 이번 프로젝트에서는 프론트가 OAuth 플로우를 직접 경험해 보는 것도 의미가 있어, 프론트 주도 + 코드 전달 방식으로 진행해 보기로 함.
  • 최종 흐름(합의)
    1. 프론트: 구글 OAuth 로그인 요청 → 인가 코드(code) 수신
    2. 프론트: 이 인가 코드를 백엔드로 전달
      • 기존 이메일 계정/소셜 계정 정책에 맞춰 회원가입 or 로그인 처리
    3. 백엔드: 코드로 구글 토큰/유저 정보 조회 → 기존 이메일 계정/소셜 계정 정책에 맞춰 회원가입 or 로그인 처리
    4. 백엔드: 우리 서비스용 JWT 발급 + HttpOnly 쿠키 세팅(현 구조 유지).
  • 멀티 프로바이더(구글/카카오/네이버)
    • 백엔드는 세 provider 모두 유사한 인터페이스로 사용 가능하도록 구현할 계획.
    • 프론트는 우선 구글만 붙이고, 이후 카카오/네이버를 같은 패턴으로 확장.

채팅 기능 상세: 1:1 / 그룹, 데이터 저장, 만료 정책, 기술 스택

  • 채팅 유형
    • 1:1 채팅
    • 그룹 채팅(모임 단위 채팅방)
  • 공통 사항
    • 실시간 통신: WebSocket + STOMP 조합 사용을 1차 안으로 검토.
    • 메시지 저장: 사용자가 메시지를 전송(엔터)하는 시점마다 즉시 DB에 저장하는 방식으로 진행.
      • 배치로 묶어서 한 번에 저장하는 방식은 사용하지 않기로 함.
    • 과거 메시지 조회: 커서 기반 무한 스크롤 형태로 이전 내역을 점진적으로 불러오는 구조.
  • 그룹 채팅
    • 모임에 참여하면 그룹 채팅방 입장 버튼이 활성화.
    • 채팅방 입장 후,
      • 해당 방에 이미 참여 중인 멤버들 간에 메시지가 오가고,
      • 나중에 합류한 유저에게 “입장 이전 채팅 내역을 어디까지 보여줄지” 논의:
        • 카카오톡처럼 “입장 시점 이후 메시지만” 볼 수 있게 하는 안으로 정리.
    • 모임과의 연계
      • 모임에서 추방되면 해당 그룹 채팅에서도 자동으로 연결이 끊김(동일 API 사용).
      • 채팅에서 “나가기” 버튼은 별도로 두지 않고, 모임 탈퇴와 동일 이벤트로 처리.
    • 만료 정책
      • 모임 시작 시점 기준으로 24시간 경과 후, 해당 채팅방을 완전히 삭제(하드 삭제) 하는 방향.
      • 이미 모임이 끝난 후 채팅을 계속 유지할 필요가 없다는 기획에 따른 결정.
      • 모임 종료 상태로 바꿔주는 기존 배치와 중복/부하 문제를 피할 수 있도록, 종료/삭제 처리를 어떻게 묶을지 백엔드에서 추가 검토.
  • 1:1 채팅
    • 진입
      • 팔로우 목록/프로필 등에서 “메시지 보내기” 클릭 시 1:1 채팅 UI로 진입.
    • 채팅방 생성 시점
      • 단순 진입만으로는 방/소켓을 만들지 않고,
      • 실제로 첫 메시지를 보낸 순간 채팅방이 생성되고 WebSocket 연결을 여는 구조를 고려.
    • 나가기
      • 별도 “나가기” 기능은 두지 않고, 1:1 채팅은 사실상 계속 유지되는 대화로 취급.

일정·역할 및 테스트 관련 논의

  • 마감 목표
    • 최종 발표: 2026-01-05.
    • 채팅이 가장 난도가 높은 기능이므로, 12/31까지 기능 개발을 완료하는 것을 1차 목표로 삼음.
    • 일정이 빡빡한 만큼, 31일까지의 개발 상황을 보고 필요 시 범위 조정을 고려.
  • 백엔드 진행 상황
    • 모임 관련 신규 API 9개, 필드 추가/수정, 모임 종료 스케줄러 등은 내일(12/25) 오후 3~4시 정도까지 마무리하는 것을 목표.
    • 알림 타입 변경, 스케줄러·알림 연동도 같은 타임라인에 맞춰 작업 예정.
  • 채팅 부하/테스트
    • 테스트 시 너무 많은 메시지(수천 개 이상)를 한 번에 쏘는 것은 서버 부하/성능 이슈를 유발할 수 있으므로, 합리적인 범위에서 부하 테스트를 진행하자는 의견을 공유.

정리된 결론 / 후속 액션

  1. 디자인/UX
    • 에러 화면(예기치 못한 에러, 404) 2종 신규 디자인.
    • 레이아웃 좌우 파스텔톤 배경 시안 다수 제작.
    • 모임 생성 화면에 “참여 방식(즉시/승인제)” 선택 UI 추가.
    • 승인제 플로우에 맞는 버튼 문구/상태(참여 신청하기, 대기 중, 신청 취소) 정의.
    • 참여 신청 메시지 모달·참여 승인 전용 페이지·대기 중/마감 뱃지·추방 UI 시안 제작.
    • 소셜 로그인용 약관/닉네임 입력 화면 및 구글/카카오/네이버 버튼 디자인.
  2. 알림/스키마·OAuth(백엔드 중심)
    • 알림 응답 스키마를 user/group 객체 + type 중심 구조로 변경, redirect URL 제거.
    • 각 타입별 기본 message 텍스트 정리 후 서버에서 생성.
    • 구글 OAuth는 프론트 주도 + 코드 전달 방식으로 구현, 백엔드는 코드→토큰→userinfo→회원가입/로그인→JWT 발급까지 처리.
    • 카카오/네이버 로그인도 동일 인터페이스로 확장 가능하도록 설계.
  3. 모임/채팅 도메인 연계
    • 모임 승인제: 신청/승인/대기/취소 전 플로우와 알림·승인 페이지 로직을 명세서로 정리.
    • 모임 추방 API와 채팅 추방 기능을 연동해, 한 번의 추방으로 모임·채팅 모두 처리.
    • 모임 시작 후 24시간 경과 시 그룹 채팅방 자동 삭제(배치 또는 기존 종료 배치와 연계).
  4. 채팅 기능 구현(프론트·백엔드 공동)
    • 기술 스택: WebSocket + STOMP 조합으로 확정(1차).
    • 메시지 저장: 전송 시점 즉시 DB 기록 + 커서 기반 무한 스크롤로 이전 내역 조회.
    • 그룹 채팅: 입장 이후 메시지만 보이는 정책, 추방·만료(24시간) 정책 반영.
    • 1:1 채팅: 첫 메시지 전송 시 방/소켓 생성, 나가기 기능은 미제공.
  5. 일정 관리
    • 백엔드: 모임·알림·스케줄러 관련 작업을 12/25~26 내로 1차 완료 목표.
    • 채팅: 12/31까지 기능 구현 완료를 목표로 진행, 중간에 위험 요소 발생 시 범위 조정 논의.
    • 전체 팀: 1/5 최종 발표까지 남은 기간 동안, 우선순위를 알림·승인제·채팅에 두고 나머지 부가 기능은 상황에 따라 조정.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions