팀 이름: 찬지창조의 손
조원: 김찬별, 이지수, 손성욱
- 프로젝트 이름: SomeMate
- 목적: MBTI를 기반으로 한 사용자 매칭 웹 애플리케이션
- 주요 기능: 사용자 성격 유형(MBTI)에 따라 적합한 상대를 매칭하고, 수락시 카카오톡 채팅방 연결
![스크린샷 2024-09-29 오후 12 46 53](https://private-user-images.githubusercontent.com/47071366/371823898-8ede4f52-336e-4916-85c3-bba78caf949c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NTg5NjMsIm5iZiI6MTczOTU1ODY2MywicGF0aCI6Ii80NzA3MTM2Ni8zNzE4MjM4OTgtOGVkZTRmNTItMzM2ZS00OTE2LTg1YzMtYmJhNzhjYWY5NDljLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDE4NDQyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJmNjM4ZjRhZjFjMmFjYzdkMDcwNTA2N2MwYzJiZDg1Nzc2YTUzOWIwNjQyMWY1OGY4YjVjODg0MTg3YjgzZmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Y2pxbQxM1gJrh7CWuKcXB48bcrrXxmkYT9vAnywmJyM)
![스크린샷 2024-09-29 오후 1 27 11](https://private-user-images.githubusercontent.com/47071366/371823857-45ed17c4-7d14-4f32-8eee-6f4639f7a3c9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NTg5NjMsIm5iZiI6MTczOTU1ODY2MywicGF0aCI6Ii80NzA3MTM2Ni8zNzE4MjM4NTctNDVlZDE3YzQtN2QxNC00ZjMyLThlZWUtNmY0NjM5ZjdhM2M5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDE4NDQyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQwZGQ0YzVlNWQ4ZDZkYTdjOTBkZGZlNmJiNWFiNDFjMDZlOWM0OWY5MmQyNjgxZDIxMTAxMzFjMGM0OTcyM2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.xfw4S04d6N0UHvcrCmS0DpaBU8Z8EH9mBtG0UwJe3Wo)
- 설명: 사용자의 개인정보를 안전하게 관리하고, 로그인 및 회원가입 절차를 처리
- 기능 특징:
- 회원가입 기능: 사용자 정보를 입력하고 저장하여 회원으로 등록
- JWT 인증: JSON Web Token을 사용해 로그인 및 보안 인증 처리
- 비밀번호 암호화: 사용자의 비밀번호를 안전하게 암호화하여 데이터베이스에 저장
- 중복 확인: 사용자 ID 중복 여부를 확인하여 중복된 ID 사용 방지
- 아이디 유효성 검사: 영문 또는 숫자 이외에는 입력 방지
-
설명: 사용자의 MBTI 유형을 기반으로 적합한 상대를 매칭
-
매칭 로직: 연애 유형 설문을 통해 사용자의 MBTI를 도출하고, 성격 유형이 잘 맞는 상대를 추천하는 알고리즘 사용
-
기능 특징:
- 설명: 사용자가 로그인하면 자신의 등록된 정보를 확인할 수 있음
- 주요 기능:
- 이름, 성별, 나이, MBTI 정보 표시
- 매칭 이력: 과거 매칭된 사용자 목록을 캐러셀 형식으로 확인 가능하며, 각 매칭된 사용자와 카카오톡 오픈 채팅을 통해 대화할 수 있는 기능을 제공
- 새로운 사람과 매칭을 원할 경우, 매칭 재시도 기능 제공
- 설명: 매칭 성공 시 사용자가 입력한 카카오톡 오픈채팅방 URL을 통해 매칭 상대와 실시간으로 대화를 주고받을 수 있음
- 주요 기능:
- 매칭 성공 시: 사용자는 상대방의 개인 프로필 메세지와 카카오톡 오픈채팅방으로 연결되어 안전하게 대화를 시작할 수 있습니다.
- 매칭 실패 시: 친근한 방식으로 재매칭을 시도할 수 있는 기회를 제공하여 서비스 이용을 유도합니다.
SomeMate 프로젝트는 JWT 기반 인증을 통해 보안을 강화하고, 사용자 정보의 안전한 관리와 인증을 제공합니다.
보안 요소:
- JWT 토큰을 사용한 인증 및 권한 부여: 비밀번호 없이 사용자 인증 및 토큰 유효성 검증으로 상태 유지
- 비밀번호 암호화:
BCryptPasswordEncoder
를 사용해 비밀번호를 안전하게 암호화 - CORS 및 경로 보호: 안전한 도메인 접근을 허용하며, 회원가입 페이지는 인증 없이 접근 가능
- 프론트엔드 (React)
- 주요 역할: 사용자와의 인터페이스를 담당하며, 회원가입, 로그인, 프로필 확인, 매칭 결과, 카카오톡 오픈채팅 연결 등의 화면을 제공한다.
- 기술 스택: React, Vite, Axios, Styled-components, swipable
- 기능 구현:
- JWT 기반 인증 처리 (로그인/로그아웃)
- 사용자 정보 표시 및 매칭 결과 확인
- 카카오톡 오픈채팅방 연동
- 백엔드 (Spring Boot)
- 주요 역할: API 서버로서 데이터베이스와 프론트엔드 간의 통신을 처리하며, 비즈니스 로직과 보안을 관리한다.
- 기술 스택: Spring Boot, MySQL, JWT, BCrypt
- 기능 구현:
- 회원가입/로그인 API 및 JWT 발급
- MBTI 매칭 알고리즘 구현
- 패스워드 암호화
- 카카오톡 오픈채팅 URL 저장 및 제공
- 데이터베이스 (MySQL)
- 주요 역할: 사용자 정보, MBTI 유형, 매칭 결과 및 카카오톡 오픈채팅방 URL 등의 데이터를 저장하고 관리한다.
- 주요 테이블:
user
: 사용자 정보 (이름, 나이, 성별, MBTI, 프로필, refresh Token, openchat)matching
: 매칭 결과 및 상태mbti
: MBTI 유형의 특징과 설명을 저장best_mbti
: 각 MBTI 유형에 가장 적합한 매칭 상대를 저장 (예: MBTI 유형별 최적의 매칭 정보)mbti_question
: MBTI 설문과 질문 데이터를 저장하며, 사용자의 성격 유형 분석에 사용
- 보안
- JWT 인증: 사용자 인증 및 세션 관리를 위해 JWT(JSON Web Token)를 사용하며, 토큰 갱신 및 만료 처리를 통해 보안을 강화한다.
- 비밀번호 암호화: BCrypt를 사용해 사용자 비밀번호를 안전하게 암호화하여 데이터베이스에 저장한다.
- 통신 구조
- 클라이언트와 서버 간의 통신: Axios를 사용해 React에서 Spring Boot 서버와 REST API를 통해 통신하고, 로그인 시 JWT 토큰을 전송하여 인증을 처리한다.
- 토큰 갱신 및 만료 처리: Access token이 만료될 경우 refresh token을 통해 새로운 토큰을 발급받아 세션을 유지한다.
- JWT 기반 인증 및 보안
- JWT 인증: 회원가입 및 로그인 시 사용자의 인증 정보를 JWT로 발급하여, 클라이언트 측에서 저장 및 활용. API 요청 시 헤더에 JWT 토큰을 포함해 사용자 인증 처리.
- 토큰 갱신: 만료된 토큰을 자동으로 갱신하기 위해 refresh token을 사용하며, 로그인 세션을 안전하게 유지.
- 비밀번호 암호화
- BCryptPasswordEncoder를 사용하여 사용자의 비밀번호를 안전하게 암호화한 후 데이터베이스에 저장. 암호화된 비밀번호는 보안 강화와 데이터 유출 방지를 목표로 구현.
- MBTI 기반 매칭 알고리즘
- 매칭 로직: 사용자의 MBTI를 바탕으로
best_mbti
테이블에서 가장 적합한 상대를 추천. 사용자와 추천된 상대의 정보를matching
테이블에 기록하여 매칭 기록을 저장. - 추천 기능: 매칭된 사용자의 정보를 보여주고, 매칭 성공 시 카카오톡 오픈채팅을 통해 실시간 대화가 가능하게 구현.
- 매칭 로직: 사용자의 MBTI를 바탕으로
- 카카오톡 오픈채팅 연동
- 매칭 성공 시 사용자가 상대방과 대화할 수 있도록, 사용자가 입력한 카카오톡 오픈채팅 링크를 활용해 채팅방으로 바로 연결.
- 안전한 대화 환경을 제공하기 위해 사용자의 개인 연락처 대신 오픈채팅 링크를 통해 소통.
- 설문 조사 및 성격 유형 분석
- 사용자는
mbti_question
테이블에 저장된 질문에 답변을 제출하며, 해당 답변을 기반으로 성격 유형을 분석하여 MBTI를 결정. - 설문 데이터는
mbti_question
테이블에 저장된 질문 및 답변 정보와 매핑되어 사용자의 성격 유형을 결정하는 데 활용.
- 사용자는
- 개인 페이지 및 매칭 이력 관리
- 로그인한 사용자는 자신의 개인 정보를 확인하고, 과거 매칭된 사용자 목록을 확인할 수 있는 개인 페이지 구현.
- 과거 매칭된 사용자는 캐러셀 형식으로 보여지며, 다시 소통을 원할 경우 오픈채팅방 링크를 통해 대화를 이어나갈 수 있음.