LinkUp
"모임이라는 소속에 구애받지 않고 언제든 원할 때 신청해
여러 사람들과 운동을 즐길 수 있는 플랫폼"
1. 프로젝트 개요
- 프로젝트명: LinkUp
- 주제
: 사용자가 자신의 위치와 시간에 맞춰 운동 모임에 참여하거나 직접 개설할 수 있는 운동 모임 플랫폼입니다.
실시간 참여 인원 확인과 장소 예약 기능까지 제공하여, 간편한 모임 개설과 참여, 그리고 자연스러운 참여 유도 시스템을 통해 운동을 더 쉽고 꾸준히 이어갈 수 있도록 지원합니다. - SW캠프 : 한화시스템 BEYOND SW 캠프 15기
- 진행 기간: 2025.03.14 ~ 2025.04.15 (33일 기반기술 교육기간, 3일 프로젝트 기간)
- 팀 구성
: 총 6명
: 곽진웅, 김여진, 박성용, 박준서, 장건희, 최지혜

2. 프로젝트 기획
1) 서비스 소개
LinkUp은 사용자가 자신의 위치와 시간에 맞춰 운동 모임에 참여하거나 직접 개설할 수 있는 운동 모임 플랫폼입니다.
실시간 참여 인원 확인과 장소 예약 기능까지 제공하여, 간편한 모임 개설과 참여, 그리고 자연스러운 참여 유도 시스템을 통해 운동을 더 쉽고 꾸준히 이어갈 수 있도록 지원합니다.
2) 배경
현대 사회에서 운동은 단순한 건강 관리를 넘어, 사람들과의 교류와 소속감을 느낄 수 있는 중요한 여가 활동으로 자리 잡고 있습니다. 특히 팀 단위 또는 파트너가 필요한 종목들(풋살, 농구, 배드민턴, 탁구 등)의 경우, 함께할 사람을 찾는 일이 운동의 지속성과 몰입도를 결정짓는 주요 요소가 됩니다.
그러나 현재의 운동 참여 방식은 다음과 같은 문제점을 안고 있습니다.
- 폐쇄적인 동호회 문화
기존 동호회는 고정 멤버 중심으로 운영되어, 신규 참여자가 심리적 부담을 느끼는 경우가 많습니다.
특히 운동 초보자에게는 높은 실력 수준이나 경쟁적인 분위기가 장벽으로 작용합니다. - 비효율적인 시설 예약 방식
운동 시설 예약은 아직도 전화 또는 오프라인 방식에 의존하는 경우가 많아 불편함이 큽니다.
여러 업체의 정보를 한 곳에서 비교하거나 예약 상태를 실시간으로 확인하기 어렵습니다. - 개인 맞춤형 모임 매칭 부재
기존 서비스는 성별, 연령, 실력 수준 등 사용자의 조건을 고려하지 않은 일률적인 방식으로 매칭이 이루어지고 있습니다.
이는 만족도 낮은 참여로 이어지고, 장기적인 운동 습관 형성에도 부정적인 영향을 줍니다.
더불어 1인 가구 증가, 유연근무제 도입, 불규칙한 생활 패턴 등으로 인해
정기적인 모임 참여가 어려운 사용자들이 늘어나고 있으며,
이들은 즉흥적으로 참여할 수 있는 ‘번개 모임’ 형태의 운동 참여 방식을 선호하고 있습니다.
3) 필요성
현대인의 라이프스타일 변화와 운동 참여 방식의 다양화는, 기존의 운동 플랫폼으로는 더 이상 사용자들의 수요를 충분히 충족시키기 어렵다는 현실을 보여주고 있습니다. 아래와 같은 사회적 흐름은 본 서비스의 필요성을 뒷받침합니다.
- 개인화된 라이프스타일과 불규칙한 일상
1인 가구의 증가, 유연근무제 확산, 비정기적인 스케줄 등으로 인해
고정된 시간에 정기적으로 모임에 참여하기 어려운 사람들이 많아지고 있습니다.
이에 따라 당일 또는 주간 단위의 즉흥적인 운동 모임에 대한 수요가 커지고 있습니다. - 신뢰 기반 오프라인 커뮤니티의 부재
온라인에는 다양한 운동 커뮤니티가 존재하지만,
오프라인에서 실질적으로 함께 운동할 수 있는 신뢰 기반의 모임 공간은 매우 부족한 실정입니다.
운동을 함께할 사람을 찾는 것 자체가 하나의 장벽이 되어 운동 지속률 저하로 이어지고 있습니다. - 모임 기반 운동의 효과성
혼자 하는 운동보다, 함께하는 운동은 꾸준함과 동기 부여 측면에서 훨씬 효과적입니다.
사회적 연결을 통해 신체 건강과 정서적 안정을 동시에 도모할 수 있다는 점에서,
모임 중심 플랫폼의 가치는 더욱 커지고 있습니다. - 유휴 자원의 활용 필요
공공 체육시설, 소규모 체육관 등은 특정 시간대에 비효율적으로 운영되는 경우가 많습니다.
본 서비스는 이와 같은 유휴 공간을 운동 모임과 연결함으로써, 지역 자원의 효율적 활용을 가능하게 합니다. - 건강한 참여 문화를 위한 시스템 필요
노쇼, 무단 취소, 매너 부족 등 기존 모임 플랫폼에서 발생하는 문제들을 해결하기 위해,
후기 및 평가 시스템을 넘어선 매너온도 기반 신뢰 시스템이 요구됩니다.
따라서 본 프로젝트는,
위치 기반 번개 운동 모임 매칭, 조건 필터링, 실시간 인원 확인, 장소 예약 및 결제 통합,
그리고 신뢰 기반 평가 시스템까지 통합하여,
현실적인 참여 환경과 지속 가능한 운동 커뮤니티를 제공합니다.
이는 단순한 운동 플랫폼을 넘어,
사용자의 라이프스타일에 맞춘 여가 플랫폼이자, 지역 커뮤니티와 체육 자원의 연결 허브로서의 가능성을 지닙니다.
4) 타서비스와의 차별점
본 서비스는 기존 운동 모임 플랫폼과 비교하여 다음과 같은 차별화된 요소를 보유하고 있습니다.
- 다양한 종목 지원과 즉흥성 강화
기존 플랫폼은 풋살, 배드민턴, 러닝 등 특정 종목에 집중되어 있으나,
본 서비스는 풋살, 농구, 배드민턴, 테니스, 탁구, 스크린골프, 등산 등 다양한 팀 기반 운동 종목을 포괄적으로 지원합니다.
특히, '오늘 저녁', '내일 아침'과 같은 단기성 운동 모임을 쉽게 생성할 수 있어,
불규칙한 일정을 가진 사용자도 즉흥적으로 참여할 수 있습니다.
실시간 참여 인원 확인, 매칭 조건 자동 검증, 신청 시 포인트 선결제 구조 등을 통해
모임 개설부터 참여까지 최소한의 절차로 운동이 성사됩니다. - 사용자 주도형 자율 모임 생성
대부분의 기존 운동 플랫폼은 관리자 또는 특정 단체 주도의 정기 모임에 초점이 맞춰져 있으나,
본 서비스는 일반 사용자가 직접 번개 모임을 개설하고 조건을 설정할 수 있도록 설계되어 있습니다.
성별, 연령대, 실력 수준, 매너온도 등의 조건 필터링을 통해 자신에게 잘 맞는 참가자를 직접 모집할 수 있고,
신청 승인 여부도 주최자가 직접 관리할 수 있습니다. - 매너온도 시스템을 통한 신뢰 기반 매칭
후기, 출석률, 노쇼 여부 등을 정량화한 매너온도 시스템을 도입하여, 참여자의 신뢰도를 시각적으로 제공합니다.
이를 통해 신뢰성 높은 사용자 중심의 모임 문화를 조성하고 재참여율을 높이는 선순환 구조를 구축합니다. - 포인트 기반 선결제 및 정산 시스템
기존 플랫폼은 비용 정산이나 결제 처리가 외부 링크 또는 별도 방식으로 이루어지는 경우가 많습니다.
본 서비스는 모임 생성 시 주최자가 포인트 선결제를 하고,
참가자가 신청과 함께 1/N 금액 자동 차감,
이후 인원 증가 시 차액 자동 환불 등의 통합형 비용 관리 시스템을 제공합니다.
이는 공정하고 투명한 비용 구조를 제공함으로써, 사용자의 신뢰와 편의성을 동시에 만족시킵니다.
마일리지 적립 기능도 함께 제공되어 사용자 리텐션을 유도합니다. - 사업자 연동을 통한 장소 및 장비 예약 통합
사업자는 장소 및 장비 정보를 등록하고 예약 가능 시간대를 관리할 수 있으며,
사용자는 플랫폼 내에서 운동 모임과 장소 대여를 함께 처리할 수 있습니다.
이를 통해 시설 이용률을 높이고, 예약 과정을 간소화할 수 있습니다.
이와 같은 차별 요소들은 단순한 운동 매칭을 넘어서,
사용자 경험 중심의 통합 플랫폼으로서 본 서비스의 경쟁력을 높여주는 핵심이 됩니다.
5) 서비스 대상
- 혼자 운동하는 데 어려움을 겪는 직장인
바쁜 일정과 불규칙한 생활로 인해 정기적인 운동 모임에 참여하기 어려운 직장인에게, 당일 또는 주간 단위로 참여 가능한 유연한 번개 운동 모임을 제공합니다. - 운동을 함께할 친구를 찾고 있는 사용자
동아리나 고정된 운동 모임이 부담스러운 사람들에게 자유롭게 모임을 만들고, 또래와 함께 운동할 수 있는 개방형 플랫폼을 제공합니다. - 지역 기반 커뮤니티 활동을 원하는 사용자
지역 주민과의 교류를 원하는 사람들에게, 운동이라는 공통 관심사를 바탕으로 오프라인 네트워크를 형성할 수 있는 기회를 제공합니다. - 즉흥적 운동 참여를 선호하는 활동가 및 운동 매니아
정해진 루틴이 아닌, 그날그날 운동하고 싶은 사용자에게 실시간으로 매칭 가능한 번개 모임 시스템을 제공합니다. - 운동을 처음 시작하는 입문자 및 1인 가구, 이주민
초보자도 부담 없이 참여할 수 있는 모임과 매너 기반 매칭 시스템을 통해, 운동 입문자와 사회적 연결이 필요한 사용자에게 환영받는 구조를 갖추고 있습니다.
5) 기대효과
- 사용자 측면 : 운동 참여의 지속성과 접근성 향상
시간과 장소 제약을 최소화한 유연한 참여 환경을 제공함으로써,
바쁜 현대인도 꾸준한 운동 습관을 형성할 수 있습니다.
초보자도 매너 기반의 신뢰 시스템과 맞춤형 필터링을 통해 부담 없이 운동 모임에 참여할 수 있어,
운동 진입 장벽이 낮아지고 보다 다양한 사용자가 스포츠 활동에 접근할 수 있게 됩니다. - 사회적 측면: 지역 커뮤니티와 연결된 건강한 여가 문화 조성
운동을 매개로 한 지역 중심의 만남은 오프라인 커뮤니티 활성화로 이어지며,
고립감 해소, 세대 간 교류, 건강한 사회적 연결을 유도합니다.
이는 특히 1인 가구, 이주민, 사회 초년생 등에게 실질적인 사회적 소속감과 심리적 안정을 제공할 수 있습니다. - 플랫폼 측면: 신뢰 기반의 자율 생태계 구축
매너온도 시스템을 통한 정량적 신뢰도 평가는
건강한 사용자 행동을 유도하고, 재참여율과 플랫폼의 질적 수준을 향상시킵니다.
사용자 주도의 모임 개설과 참여 구조는 플랫폼 운영 부담을 줄이는 동시에 확장성과 자생력을 확보할 수 있는 기반이 됩니다. - 지역경제 측면: 유휴 체육시설의 활용도 제고 및 수익 창출
플랫폼을 통해 공공 및 민간 체육시설의 공백 시간대 예약과 활용을 유도함으로써
유휴 자원의 효율적 운영과 지역 기반 수익 모델이 가능해집니다.
특히 소규모 체육시설, 레저업체, 개인 사업자 등에게는
홍보·예약·정산까지 연동된 관리 편의성을 제공하여
지역 소상공인의 수익 창출에도 긍정적인 효과를 기대할 수 있습니다.
6) 향후 확장 방향
- 개인 운동 콘텐츠 및 클래스 기능 추가
필라테스, 요가, 헬스 등 1:1 또는 소규모 개인 운동 중심 콘텐츠를 도입
강사 또는 트레이너와의 예약 기반 클래스 연동 시스템 제공 - 운동 챌린지 및 랭킹 시스템 도입
사용자 참여를 유도하는 걸음 수, 소모 칼로리, 운동 횟수 기반의 챌린지 기능
지역별/종목별 랭킹 시스템을 통해 게임화(Gamification) 요소 강화 - 전문가 매칭 및 실력 분석 기능
트레이너 및 운동 지도자와의 멘토링 연계 서비스
실력 기반의 데이터 분석(모임 후기, 매너온도, 참여 이력 등)을 통한 AI 기반 매칭 고도화 - 실시간 대기자-모임 자동 연결 시스템
마감된 모임에 대기한 사용자가 모임 취소 발생 시 자동으로 참여 확정
참여율을 높이고, 참여자-공간의 낭비를 줄이는 구조 - 날씨 및 위치 기반 추천 알고리즘 고도화
현재 위치, 기온, 강수량 등을 반영한 실내/실외 종목 추천 시스템
특정 지역의 실시간 인기 모임 정보 제공 - 장소 및 장비 예약 세분화
장소 예약을 넘어 대여 가능한 장비에 대한 예약 시스템 연동
장비의 재고 파악과 대여 가능 상황을 통한 간편한 예약 시스템 제공
3. 핵심 기능
LinkUp의 핵심기능
- 회원 관리 및 인증
이메일, 소셜 로그인
프로필, 계정 복구, 사업자 인증 등 - 운동 모임 개설 및 참여
조건 기반 모임 생성 및 승인 관리
실시간 인원 확인 - 포인트 기반 결제
선결제, 자동 1/N 정산, 환불 처리
포인트 충전 및 마일리지 - 매너온도 시스템
후기, 노쇼 이력 기반 신뢰 시각화
베스트 플레이어 선정 - 장소 예약 연동
위치 기반 예약
사업자용 등록 및 외부일정 연동 - 커뮤니티 및 친구
자유 게시판, 댓글, 좋아요, 신고
친구 추가, 활동 이력 조회 - 실시간 알림
모임 승인/취소, 친구 알림 등 - 관리자 기능
회원 제재, 신고 처리, 후기 이의신청
사업자 승인, 공지사항 관리
4. 기술스택 및 아키텍쳐



5. 프로젝트 진행 과정
1) WBS

2) 요구사항 정의서

3) 플로우차트

4) 유스케이스

5) DDD

Step 1. Domain Event 정의
- 비즈니스 도메인 내에 발생하는 모든 이벤트를 과거형으로 기술(조회 기능 X)
- 이벤트는 Actor가 Action을 해서 발생한 결과
- 문장 형태: “XXX 됨”
- 상의 없이 각자 Event를 무작위로 작성
- 중복 제거 및 시간순 정렬
- 이슈/관심 사항은 빨간 포스트잇으로 표시

Step 2. External System 정의
- 결제 시스템, 이메일 발송, SMS 등 외부 시스템 정의
- 명사형으로 작성

Step 3. Command 정의
- 각 Domain Event를 유발하는 명령
- 현재형 & 명령형으로 작성

Step 4. HotSpot 정의
- 궁금하거나 결정되지 않은 사항을 정리

Step 5. Actor 정의
- 도메인 이벤트를 유발하는 주체
- 예: 사용자, 시스템, 외부 서비스 등

Step 6. 애그리거트 정의
- 하나의 단위로 간주되는 도메인 객체 집합
- 관계와 제약을 관리하는 중심 단위

Step 7. Bounded Context 정의
- 관련 애그리거트를 하나의 컨텍스트로 묶기

Step 8. Policy 정의
- 도메인 내 규칙 정의
- 액터별 정책 예시
- 사용자: 로그인 후 주문 가능
- 관리자: 모든 주문 조회 및 수정
- 애그리거트별 정책 예시
- 주문: 취소 전 수정만 허용
- 상품: 품절 시 주문 불가
- 이벤트별 정책 예시
- 주문 생성: 3일 이내 결제
- 주문 취소: 상태 변경 + 재고 복구

Step 9. Context Mapping
- Bounded Context 간 상호작용 & 경계 정의
- 도메인 설계의 명확성 확보

6) ERD (논리 & 물리)


7) 테이블 정의서
-- --------------------------------------------------------
-- 호스트: 127.0.0.1
-- 서버 버전: 11.4.4-MariaDB - mariadb.org binary distribution
-- 서버 OS: Win64
-- HeidiSQL 버전: 12.8.0.6908
-- --------------------------------------------------------
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- 0. linkupdb 데이터베이스 구조 내보내기
CREATE DATABASE IF NOT EXISTS `linkupdb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */;
USE `linkupdb`;
-- 외래 키 제약 조건을 무시하여 테이블 삭제
-- -----------------------------------------------------------------
SET FOREIGN_KEY_CHECKS = 0;
-- 0-1. 기초 테이블
DROP TABLE IF EXISTS `status`;
DROP TABLE IF EXISTS `role`;
DROP TABLE IF EXISTS `sport_type`;
-- 0-2. 사용자 테이블
DROP TABLE IF EXISTS `user`;
DROP TABLE IF EXISTS `member`;
DROP TABLE IF EXISTS `owner`;
DROP TABLE IF EXISTS `friend`;
DROP TABLE IF EXISTS `user_sport`;
-- 0-3. 포인트 테이블
DROP TABLE IF EXISTS `account`;
DROP TABLE IF EXISTS `point_transaction`;
-- 0-4. 장소 관련 테이블
DROP TABLE IF EXISTS `place`;
DROP TABLE IF EXISTS `place_image`;
DROP TABLE IF EXISTS `operation_time`;
DROP TABLE IF EXISTS `favorite`;
DROP TABLE IF EXISTS `reservation`;
DROP TABLE IF EXISTS `place_review`;
-- 0-5. 모임 관련 테이블
DROP TABLE IF EXISTS `meeting`;
DROP TABLE IF EXISTS `meeting_participation_history`;
DROP TABLE IF EXISTS `participant_review`;
DROP TABLE IF EXISTS `best_player`;
DROP TABLE IF EXISTS `interested_meeting`;
-- 0-6. 커뮤니티 테이블
DROP TABLE IF EXISTS `community_post`;
DROP TABLE IF EXISTS `post_like`;
DROP TABLE IF EXISTS `post_image`;
DROP TABLE IF EXISTS `community_comment`;
DROP TABLE IF EXISTS `comment_like`;
-- 0-7. 알림 테이블
DROP TABLE IF EXISTS `notification_type`;
DROP TABLE IF EXISTS `notification_setting`;
DROP TABLE IF EXISTS `domain_type`;
DROP TABLE IF EXISTS `notification`;
-- 0-8. 신고 및 제재 테이블
DROP TABLE IF EXISTS `report_type`;
DROP TABLE IF EXISTS `report_history`;
DROP TABLE IF EXISTS `user_penalty_history`;
DROP TABLE IF EXISTS `objection`;
DROP TABLE IF EXISTS `blacklist`;
-- 0-9. 토큰 관련 테이블
DROP TABLE IF EXISTS `verification_token`;
DROP TABLE IF EXISTS `refresh_token`;
SET FOREIGN_KEY_CHECKS = 1;
-- 1. 테이블 생성
-- 1-1. 기초 테이블 생성
-- 1) 상태 테이블 생성
CREATE TABLE IF NOT EXISTS `status` (
`status_id` INT NOT NULL AUTO_INCREMENT COMMENT '상태 ID',
`status_type` VARCHAR(8) NOT NULL UNIQUE COMMENT '상태 유형',
PRIMARY KEY (`status_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='상태 코드 테이블';
-- 2) 권한 테이블 생성
CREATE TABLE IF NOT EXISTS `role` (
`role_id` TINYINT NOT NULL AUTO_INCREMENT COMMENT '권한 ID',
`role_name` VARCHAR(10) NOT NULL UNIQUE COMMENT '권한명',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='회원 역할 정의 테이블';
-- 3) 운동 종목 테이블 생성
CREATE TABLE IF NOT EXISTS `sport_type` (
`sport_id` TINYINT NOT NULL AUTO_INCREMENT COMMENT '운동 ID',
`sport_name` VARCHAR(20) NOT NULL UNIQUE COMMENT '운동 종목',
PRIMARY KEY (`sport_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='스포츠 종목 정의 테이블';
-- 1-2. 사용자 관련 테이블 생성
-- 1) 사용자 테이블 생성
CREATE TABLE IF NOT EXISTS `user` (
`user_id` INT NOT NULL AUTO_INCREMENT COMMENT '사용자 ID',
`role_id` TINYINT NOT NULL COMMENT '권한 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`user_name` VARCHAR(50) NOT NULL COMMENT '사용자 명',
`password` VARCHAR(255) NOT NULL COMMENT '비밀번호',
`contact_number` VARCHAR(30) UNIQUE COMMENT '전화번호',
`email` VARCHAR(50) NOT NULL UNIQUE COMMENT '이메일',
`point_balance` INT NOT NULL DEFAULT 0 COMMENT '현재 포인트 잔액',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '가입 일시',
`deleted_at` DATETIME DEFAULT NULL COMMENT '탈퇴 신청 일시',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB
AUTO_INCREMENT=10
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사용자 정보 테이블';
-- 2) 회원 테이블 생성
CREATE TABLE IF NOT EXISTS `member` (
`member_id` INT NOT NULL COMMENT '사용자 ID',
`gender` ENUM('M', 'F') NOT NULL COMMENT '성별',
`nickname` VARCHAR(30) NOT NULL UNIQUE COMMENT '닉네임',
`birth_date` DATETIME DEFAULT NULL COMMENT '생년월일',
`introduction` TEXT COMMENT '자기소개',
`manner_temperature` DECIMAL NOT NULL DEFAULT 36.5 COMMENT '매너온도',
`profile_image_url` TEXT NOT NULL DEFAULT '기본이미지URL' COMMENT '프로필 이미지 URL',
PRIMARY KEY (`member_id`),
CONSTRAINT `chk_member_gender` CHECK (`gender` IN ('M', 'F'))
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='회원 정보 테이블';
-- 3) 사업자 테이블 생성
-- 사업자 테이블 생성
CREATE TABLE IF NOT EXISTS `owner` (
`owner_id` INT NOT NULL COMMENT '사업자 ID',
`status_id` INT NOT NULL COMMENT '인증 상태 ID',
`business_registration_document_url` TEXT NOT NULL COMMENT '사업자 등록증 파일 경로',
`authorized_at` DATETIME DEFAULT NULL COMMENT '권한 승인 날짜',
`rejection_reason` TEXT DEFAULT NULL COMMENT '반려 이유',
PRIMARY KEY (`owner_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사업자 정보를 저장하는 테이블';
-- 4) 친구 관계 테이블 생성
CREATE TABLE IF NOT EXISTS `friend` (
`requester_id` INT NOT NULL COMMENT '신청자 ID',
`addressee_id` INT NOT NULL COMMENT '피요청자 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`requested_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '요청 일시',
`responded_at` DATETIME DEFAULT NULL COMMENT '응답 일시',
PRIMARY KEY (`requester_id`, `addressee_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='친구 관계 테이블';
-- 5) 선호 운동 테이블 생성
CREATE TABLE IF NOT EXISTS `user_sport` (
`member_id` INT NOT NULL COMMENT '사용자 ID',
`sport_id` TINYINT NOT NULL COMMENT '운동 ID',
PRIMARY KEY (`member_id`, `sport_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='회원 관심 스포츠 연결 테이블';
-- 1-3. 포인트 테이블 생성
-- 1) 계좌 테이블 생성
CREATE TABLE IF NOT EXISTS `account` (
`account_id` INT NOT NULL AUTO_INCREMENT COMMENT '계좌 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`bank_name` VARCHAR(255) NOT NULL COMMENT '은행명',
`account_number` VARCHAR(255) NOT NULL UNIQUE COMMENT '계좌 번호',
`holder_name` VARCHAR(50) NOT NULL COMMENT '예금주 명',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록일',
PRIMARY KEY (`account_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사용자 또는 사업자의 계좌 정보 테이블';
-- 2) 포인트 거래 내역 테이블 생성
CREATE TABLE IF NOT EXISTS `point_transaction` (
`point_transaction_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '거래내역 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
`amount` INT NOT NULL COMMENT '거래 포인트',
`transaction_type` ENUM('CHARGE', 'PAYMENT', 'REFUND', 'WITHDRAW') NOT NULL COMMENT '트랜잭션 유형',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
PRIMARY KEY (`point_transaction_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사용자 또는 사업자의 포인트 거래 이력을 저장하는 테이블';
-- 1-4. 장소 관련 테이블 생성
-- 1) 장소 테이블 생성
CREATE TABLE IF NOT EXISTS `place` (
`place_id` INT NOT NULL AUTO_INCREMENT COMMENT '장소 ID',
`owner_id` INT NOT NULL COMMENT '사업자 ID',
`sport_id` TINYINT NOT NULL COMMENT '운동 ID',
`place_name` VARCHAR(255) NOT NULL COMMENT '장소 이름',
`address` TEXT NOT NULL COMMENT '주소',
`description` TEXT DEFAULT NULL COMMENT '장소 설명',
`equipment` TEXT DEFAULT NULL COMMENT '장비 정보',
`is_active` ENUM('Y', 'N') NOT NULL DEFAULT 'Y' COMMENT '활성화 여부',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록 일시',
`rental_cost` INT NOT NULL DEFAULT 0 COMMENT '장소 대여비',
PRIMARY KEY (`place_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='운동 모임을 위한 장소 정보를 저장하는 테이블';
-- 2) 장소 사진 테이블 생성
CREATE TABLE IF NOT EXISTS `place_image` (
`image_id` INT NOT NULL AUTO_INCREMENT COMMENT '장소 사진 ID',
`place_id` INT NOT NULL COMMENT '장소 ID',
`image_url` TEXT NOT NULL DEFAULT '기본이미지URL' COMMENT '사진 URL',
PRIMARY KEY (`image_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='장소에 연결된 사진 정보를 저장하는 테이블';
-- 3) 운영 시간 테이블 생성
CREATE TABLE IF NOT EXISTS `operation_time` (
`operating_time_id` INT NOT NULL AUTO_INCREMENT COMMENT '운영 시간 ID',
`place_id` INT NOT NULL COMMENT '장소 ID',
`day_of_week` ENUM('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT') NOT NULL COMMENT '요일',
`start_time` TIME NOT NULL COMMENT '시작 시간',
`end_time` TIME NOT NULL COMMENT '종료 시간',
PRIMARY KEY (`operating_time_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='장소의 요일별 운영 시간을 저장하는 테이블';
-- 4) 장소 즐겨찾기 테이블 생성
CREATE TABLE IF NOT EXISTS `favorite` (
`place_id` INT NOT NULL COMMENT '장소 ID',
`member_id` INT NOT NULL COMMENT '사용자 ID',
PRIMARY KEY (`place_id`, `member_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='회원이 즐겨찾기한 장소 정보를 저장하는 테이블';
-- 1-5. 모임 관련 테이블 생성
-- 1) 모임 테이블 생성
CREATE TABLE IF NOT EXISTS `meeting` (
`meeting_id` INT NOT NULL AUTO_INCREMENT COMMENT '모임 ID',
`leader_id` INT NOT NULL COMMENT '개설자 ID',
`place_id` INT DEFAULT NULL COMMENT '장소 ID',
`sport_id` TINYINT NOT NULL COMMENT '운동 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`meeting_title` VARCHAR(255) NOT NULL COMMENT '모임 제목',
`meeting_content` TEXT NOT NULL COMMENT '모임 내용',
`date` DATE NOT NULL COMMENT '모임 날짜',
`start_time` TIME NOT NULL COMMENT '시작 시간',
`end_time` TIME NOT NULL COMMENT '종료 시간',
`min_user` INT NOT NULL COMMENT '최소 인원',
`max_user` INT NOT NULL COMMENT '최대 인원',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '개설 일시',
`gender` ENUM('M', 'F', 'BOTH') NOT NULL DEFAULT 'BOTH' COMMENT '성별 제한',
`age_group` SET('10', '20', '30', '40', '50', '60', '70+') NOT NULL COMMENT '연령대 제한',
`level` SET('LV1', 'LV2', 'LV3') NOT NULL COMMENT '실력 제한',
`custom_place_address` VARCHAR(255) DEFAULT NULL COMMENT '사용자 설정 주소',
`latitude` DECIMAL DEFAULT NULL COMMENT '사용자 설정 주소 위도',
`longitude` DECIMAL DEFAULT NULL COMMENT '사용자 설정 주소 경도',
PRIMARY KEY (`meeting_id`),
CHECK (`min_user` >= 1),
CHECK (`max_user` <= 30),
CHECK (`min_user` <= `max_user`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='개설된 모임 정보를 저장하는 테이블';
-- 2) 모임 찜 테이블 생성
CREATE TABLE IF NOT EXISTS `interested_meeting` (
`meeting_id` INT NOT NULL COMMENT '모임 ID',
`member_id` INT NOT NULL COMMENT '사용자 ID',
PRIMARY KEY (`meeting_id`, `member_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='모임 찜 등록 내역을 저장하는 테이블';
-- 3) 모임 참여 이력 테이블 생성
CREATE TABLE `meeting_participation_history` (
`participation_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '모임 참여 이력 ID',
`member_id` INT NOT NULL COMMENT '사용자 ID',
`meeting_id` INT NOT NULL COMMENT '모임 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`participated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '참여 일시',
PRIMARY KEY (`participation_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='모임 참여 이력을 저장하는 테이블';
-- 4) 장소 예약 테이블 생성
-- 장소 예약 테이블 생성
CREATE TABLE `reservation` (
`reservation_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '예약 ID',
`place_id` INT NOT NULL COMMENT '장소 ID',
`meeting_id` INT DEFAULT NULL COMMENT '모임 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`reservation_date` DATE NOT NULL COMMENT '사용일',
`start_time` TIME NOT NULL COMMENT '시작 시간',
`end_time` TIME NOT NULL COMMENT '종료 시간',
PRIMARY KEY (`reservation_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='장소 예약 정보를 저장하는 테이블';
-- 1-6. 후기 및 평가 테이블 생성
-- 1) 참가자 평가 테이블 생성
CREATE TABLE `participant_review` (
`review_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '평가 ID',
`reviewer_id` INT NOT NULL COMMENT '평가자 ID',
`reviewee_id` INT NOT NULL COMMENT '평가 대상자 ID',
`meeting_id` INT NOT NULL COMMENT '모임 ID',
`score` INT NOT NULL DEFAULT 3 COMMENT '평점',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '평가 일시',
PRIMARY KEY (`review_id`),
CHECK (`score` BETWEEN 1 AND 5)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='모임 참가자에 대한 평가 이력을 저장하는 테이블';
-- 2) 장소 후기 테이블 생성
CREATE TABLE `place_review` (
`review_id` INT NOT NULL AUTO_INCREMENT COMMENT '장소 후기 ID',
`member_id` INT NOT NULL COMMENT '사용자 ID',
`place_id` INT NOT NULL COMMENT '장소 ID',
`participation_id` BIGINT NOT NULL COMMENT '모임 참여 이력 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`review_content` TEXT DEFAULT NULL COMMENT '후기 내용',
`review_image_url` TEXT DEFAULT NULL COMMENT '후기 사진',
`review_score` INT NOT NULL COMMENT '별점',
PRIMARY KEY (`review_id`),
CHECK (`review_score` BETWEEN 1 AND 5)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='회원이 작성한 장소 후기 정보를 저장하는 테이블';
-- 3) 베스트 플레이어 테이블 생성
CREATE TABLE `best_player` (
`meeting_id` INT NOT NULL COMMENT '모임 ID',
`member_id` INT NOT NULL COMMENT '사용자 ID',
PRIMARY KEY (`meeting_id`, `member_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='모임별 베스트 플레이어 정보를 저장하는 테이블';
-- 1-7. 커뮤니티 테이블 생성
-- 1) 게시글 테이블 생성
CREATE TABLE `community_post` (
`post_id` INT NOT NULL AUTO_INCREMENT COMMENT '게시글 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
`title` VARCHAR(30) NOT NULL COMMENT '제목',
`content` TEXT NOT NULL COMMENT '내용',
`is_deleted` ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '삭제 여부',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 일시',
`deleted_at` DATETIME DEFAULT NULL COMMENT '삭제 일시',
`is_notice` ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '공지사항 여부',
PRIMARY KEY (`post_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사용자 게시글을 저장하는 테이블';
-- 2) 게시글 좋아요 테이블 생성
CREATE TABLE `post_like` (
`post_like_id` INT NOT NULL AUTO_INCREMENT COMMENT '게시글 좋아요 ID',
`post_id` INT NOT NULL COMMENT '게시글 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
PRIMARY KEY (`post_like_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='게시글에 대한 사용자 좋아요 정보를 저장하는 테이블';
-- 3) 게시글 사진 테이블 생성
CREATE TABLE `post_image` (
`image_id` INT NOT NULL AUTO_INCREMENT COMMENT '게시글 사진 ID',
`post_id` INT NOT NULL COMMENT '게시글 ID',
`image_url` TEXT NOT NULL COMMENT '사진 URL',
PRIMARY KEY (`image_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='게시글에 첨부된 사진 정보를 저장하는 테이블';
-- 4) 댓글 테이블 생성
CREATE TABLE `community_comment` (
`comment_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '댓글 ID',
`post_id` INT NOT NULL COMMENT '게시글 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
`content` TEXT NOT NULL COMMENT '댓글 내용',
`is_deleted` ENUM('Y', 'N') NOT NULL DEFAULT 'N' COMMENT '삭제 여부',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
`deleted_at` DATETIME DEFAULT NULL COMMENT '삭제 일시',
PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='게시글에 작성된 댓글 정보를 저장하는 테이블';
-- 5) 댓글 좋아요 테이블 생성
CREATE TABLE `comment_like` (
`comment_like_id` INT NOT NULL AUTO_INCREMENT COMMENT '댓글 좋아요 ID',
`comment_id` BIGINT NOT NULL COMMENT '댓글 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
PRIMARY KEY (`comment_like_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='댓글에 대한 사용자 좋아요 정보를 저장하는 테이블';
-- 1-8. 알림 테이블 생성
-- 1) 알림 유형 테이블 생성
CREATE TABLE `notification_type` (
`notification_type_id` TINYINT NOT NULL COMMENT '알림 유형 ID',
`notification_type` VARCHAR(50) NOT NULL UNIQUE COMMENT '알림 유형 코드',
`send_sns` ENUM('Y', 'N') NOT NULL DEFAULT 'N' COMMENT 'SNS 알림 여부',
`send_email` ENUM('Y', 'N') NOT NULL DEFAULT 'N' COMMENT '이메일 알림 여부',
`notification_template` TEXT NOT NULL COMMENT '알림 템플릿 내용',
PRIMARY KEY (`notification_type_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='다양한 알림 유형 정보를 관리하는 테이블';
-- 2) 알림 설정 테이블 생성
CREATE TABLE `notification_setting` (
`notification_setting_id` INT NOT NULL AUTO_INCREMENT COMMENT '알림 설정 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
`notification_type_id` TINYINT NOT NULL COMMENT '알림 유형 ID',
`is_enabled` ENUM('Y','N') NOT NULL DEFAULT 'Y' COMMENT '알림 수신 여부',
PRIMARY KEY (`notification_setting_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사용자의 알림 수신 여부 설정을 저장하는 테이블';
-- 3) 도메인 타입 테이블 생성
CREATE TABLE `domain_type` (
`domain_type_id` TINYINT NOT NULL COMMENT '도메인 타입 ID',
`domain_name` VARCHAR(50) NOT NULL UNIQUE COMMENT '도메인 명',
PRIMARY KEY (`domain_type_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='알림이 발생한 도메인 정보를 관리하는 테이블';
-- 4) 알림 테이블 생성
CREATE TABLE `notification` (
`notification_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '알림 ID',
`receiver_id` INT NOT NULL COMMENT '수신자 ID',
`domain_type_id` TINYINT NOT NULL COMMENT '도메인 유형 ID',
`notification_type_id` TINYINT NOT NULL COMMENT '알림 유형 ID',
`domain_id` INT COMMENT '알림 관련 리소스 ID',
`title` VARCHAR(200) NOT NULL COMMENT '알림 제목',
`content` TEXT NOT NULL COMMENT '알림 본문 내용',
`is_read` ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '읽음 여부',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '알림 생성 일시',
`read_at` DATETIME DEFAULT NULL COMMENT '알림 확인 시점',
PRIMARY KEY (`notification_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='시스템에서 발생한 알림 정보를 저장하는 테이블';
-- 1-9. 신고 및 제재 테이블 생성
-- 1) 신고 유형 테이블 생성
CREATE TABLE `report_type` (
`report_type_id` TINYINT NOT NULL AUTO_INCREMENT COMMENT '신고 유형 ID',
`report_type` VARCHAR(20) NOT NULL UNIQUE COMMENT '신고 유형 코드',
`report_level` TINYINT NOT NULL COMMENT '신고 레벨',
PRIMARY KEY (`report_type_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='서비스 내에서 이루어지는 신고 유형 정보를 저장하는 테이블';
-- 2) 신고 이력 테이블 생성
CREATE TABLE `report_history` (
`report_id` INT NOT NULL AUTO_INCREMENT COMMENT '신고 ID',
`reporter_member_id` INT NOT NULL COMMENT '신고자 ID',
`target_member_id` INT NOT NULL COMMENT '신고 대상자 ID',
`post_id` INT DEFAULT NULL COMMENT '게시글 ID',
`comment_id` BIGINT DEFAULT NULL COMMENT '댓글 ID',
`report_type_id` TINYINT NOT NULL COMMENT '신고 유형 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`reason` TEXT NOT NULL COMMENT '신고 사유',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '신고 일시',
PRIMARY KEY (`report_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='회원이 회원, 게시글, 댓글을 신고한 이력 테이블';
-- 3) 사용자 제재 이력 테이블 생성
CREATE TABLE `user_penalty_history` (
`penalty_id` INT NOT NULL AUTO_INCREMENT COMMENT '제재 ID',
`user_id` INT NOT NULL COMMENT '사용자 ID',
`post_id` INT DEFAULT NULL COMMENT '게시글 ID',
`comment_id` BIGINT DEFAULT NULL COMMENT '댓글 ID',
`review_id` INT DEFAULT NULL COMMENT '장소 후기 ID',
`penalty_type` ENUM('POST', 'COMMENT', 'REVIEW') NOT NULL COMMENT '제재 유형',
`reason` TEXT NOT NULL COMMENT '사유',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '제재 일시',
`is_active` ENUM('Y','N') DEFAULT 'Y' COMMENT '제재 여부',
PRIMARY KEY (`penalty_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='신고 혹은 관리자의 판단 하에 발생한 사용자 제재 이력 저장 테이블';
-- 4) 이의 제기 테이블 생성
CREATE TABLE `objection` (
`objection_id` INT NOT NULL AUTO_INCREMENT COMMENT '이의 제기 ID',
`penalty_id` INT NOT NULL COMMENT '제재 ID',
`member_id` INT NOT NULL COMMENT '제기자 ID',
`status_id` INT NOT NULL COMMENT '상태 ID',
`reason` TEXT NOT NULL COMMENT '이의 제기 사유',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '이의 제기 일시',
`processed_at` DATETIME DEFAULT NULL COMMENT '처리 완료 일시',
PRIMARY KEY (`objection_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='사용자가 제재에 대해 이의를 제기한 이력 테이블';
-- 5) 블랙리스트 테이블 생성
CREATE TABLE `blacklist` (
`member_id` INT NOT NULL COMMENT '사용자 ID',
`reason` VARCHAR(255) NOT NULL COMMENT '블랙리스트 등록 사유',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록 일시',
PRIMARY KEY (`member_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci
COMMENT='서비스 이용이 제한된 사용자 목록 테이블';
-- -------------------------------------------------------------------------------------------------------------------------
-- 인증토큰 테이블 생성
CREATE TABLE `verification_token` (
`user_id` INT NOT NULL COMMENT '토큰 생성 요청자 ID',
`email` VARCHAR(255) NOT NULL COMMENT '인증을 요청
8) REST_API
9) 테스트 케이스
6. 회고 및 개선점
✅ 잘된 점
- 개인이 담당한 파트를 책임감 있게 작업한 점
- 단순히 구현을 넘어서 더 나은 방향으로 꾸준히 고뇌하고 보완한 점
🔍 개선할 점
- 각 기능에 대한 동일한 정의 내리기
- 기능 및 서비스 보완
- 세부 기능 정의 검토하기
- API 도입하기
- 세부 구현 코드 수정하기
7. 결과



GitHub - beyond-sw-camp/be15-2nd-Learning_Crew-LinkUp: 🦁 곽진웅 | 🐱 김여진 | 🐘 박성용 | 🐺 박준
🦁 곽진웅 | 🐱 김여진 | 🐘 박성용 | 🐺 박준서 | 🐻 장건희 | 🦉 최지혜 - beyond-sw-camp/be15-2nd-Learning_Crew-LinkUp
github.com
마무리
짧은 기간이었지만 만족스러운 결과물을 만들 수 있던 좋은 팀 프로젝트였다.
'Archive > project 후기' 카테고리의 다른 글
| [한화시스템 BEYOND SW 캠프 15기] 최종 프로젝트 - Momentum (5) | 2025.08.29 |
|---|---|
| [한화시스템 BEYOND SW 캠프 15기] 데브옵스 프로젝트 - NBTI (7) | 2025.08.29 |
| [한화시스템 BEYOND SW 캠프 15기] 기반기술 프로젝트 - 오퓨(OPU) (5) | 2025.02.17 |
| [Project] 단국산학아카데미 X 포투나 프로젝트 활동기 (2) | 2025.01.19 |
| [Develop project] 실내 소음 전달 서비스 (0) | 2025.01.19 |


