'
본문 바로가기
Archive/project 후기

[한화시스템 BEYOND SW 캠프 15기] 기반기술 프로젝트 - 오퓨(OPU)

by meowdule 2025. 2. 17.

 



오퓨 (OPU)

"작은 습관이 쌓이면 큰 변화를 만듭니다. 지금, 당신의 목표를 실천해보세요!"

 

 

1. 프로젝트 개요

 

  • 프로젝트명: 오퓨(OPU)
  • 주제
    : 작은 목표를 설정하고 꾸준히 수행하며 이를 기록하고 공유하는 목표 성장 플랫폼
  • SW캠프 : 한화시스템 BEYOND SW 캠프 15기
  • 진행 기간:  2025.01.21 ~ 2025.02.14 (13일 기반기술 교육기간, 2일 프로젝트 기간)
  • 팀 구성
    : 총 6명
    : 김경민, 김채원, 차명호, 윤채영, 정유진, 김여진

 

 

 

 

2. 프로젝트 기획

 

1) 서비스 소개

‘오퓨(OPU)’는 일상 속에서 실현 가능한 작은 목표를 설정하고, 꾸준히 수행하는 자기계발 방식입니다.

목표 수행 과정에서 성취감을 느끼며 자기 성장과 발전을 도모할 수 있도록 설계된 플랫폼입니다.

  • 맞춤형 목표 추천: 성향 검사 결과를 바탕으로 사용자가 실천 가능한 목표를 제시합니다.
  • 기록 : 해당 목표의 수행 과정을 기록하여 ,기록을 바탕으로 새로운 변화를 주도할 수 있습니다.
  • 커뮤니티 지원: 목표 도전과 성취 후기를 공유하고 응원을 주고받으며 함께 성장할 수 있는 환경을 제공합니다.
  • 지속적 목표 달성 관리: 푸시 알림, 성취도 관리, 캘린더 연동 등 체계적인 기능으로 목표 달성을 지원합니다.

 

원 포인트 업이란?

'원 포인트 업'은 한 번에 거창한 목표를 세우기보다 작은 목표를 하나씩 꾸준히 달성하는 방식의 자기계발 전략입니다.

매일의 작은 성공이 점진적인 성장으로 이어지며, 이를 통해 더 큰 목표에 도전할 자신감을 얻게 됩니다.

오퓨(OPU)는 이 '원 포인트 업' 방식을 기반으로
사용자가 성취감을 경험하며 지속적으로 발전할 수 있도록 설계되었습니다.

 

2) 배경 및 필요성

 

1) 현대 사회와 자기 계발 트렌드

현대 사회는 빠르게 변화하고 있으며, 자기 계발에 대한 관심이 높아지고 있습니다.

그러나 동시에 여러 목표를 한꺼번에 세우고 실패하는 경우도 빈번하게 발생합니다.

이런 상황은 목표 설정에 대한 부담감과 좌절로 이어질 수 있습니다.

오퓨(OPU)는 작은 목표부터 실천할 수 있는 환경을 제공하여 이러한 문제를 해결합니다.
목표를 성향에 맞게 추천하고, 꾸준히 달성할 수 있도록 지원하여
사용자가 부담 없이 자기계발을 이어가도록 지원합니다.

 

 

2) 목표 설정과 기록의 중요성

  • 명확하고 구체적인 목표 설정은 성공에 큰 영향을 미칩니다.
  • 연구에 따르면 명확하고 구체적인 목표를 설정하고 기록한 사람들은
    그렇지 않은 사람들보다 8배 이상의 성과를 달성합니다.
  • 오퓨(OPU)는 사용자에게 목표 설정과 기록 기능을 제공하여 성취감을 극대화합니다.

 

3) 작은 목표의 효과

  • 큰 목표를 한 번에 달성하려다 실패하면 좌절과 동기 상실로 이어질 수 있습니다.
  • 작은 목표를 달성하면서 경험하는 작은 성공들이 사용자의 자신감을 점진적으로 높입니다.
  • 실패의 부담감을 줄이고 매일 성취감을 느끼도록 지원함으로써 지속적인 동기 부여를 제공합니다.

 

4) 습관 형성과 지속 가능성

  • 새로운 습관을 형성하는 데 평균 66일이 소요되며, 지속적인 반복이 중요합니다.
  • 오퓨(OPU)는 푸쉬 알림과 목표 관리 기능을 통해 사용자가 목표를 꾸준히 실천하도록 돕습니다.
  • 긍정적인 습관 형성은 생산성 향상과 스트레스 감소, 삶의 질 향상에 기여합니다.

 

5) 커뮤니티와 사회적 지원의 역할

  • 목표 달성과 지속적인 노력에는 사회적 지원과 상호 피드백이 중요한 영향을 미칩니다.
  • 도미니칸 대학의 연구에 따르면, 목표를 공유하고 피드백을 받은 사람들은
    그렇지 않은 사람들보다 더 높은 성과를 달성했습니다.
  • 오퓨(OPU)의 커뮤니티 기능은
    사용자가 목표 달성 경험을 공유하고 서로 응원하며 동기 부여를 강화하는 데 기여합니다.

 

3) 타 서비스와의 차별점

  1. 맞춤형 목표 추천
    •   사용자 성향 분석을 통해 개인에게 최적화된 목표를 추천하여 목표 설정의 부담을 줄입니다.
  2. 작은 목표에 집중한 접근 방식
    •   부담을 줄이고 성공 가능성을 높이는 작고 실천 가능한 목표를 제공합니다.

 

4) 서비스 대상

다음과 같은 사람들에게 오퓨(OPU)가 적합합니다:

  • 작은 목표를 설정하고 실천하고 싶은 사람
  • 성취감을 통해 자기 계발에 동기를 부여받고 싶은 사람
  • 습관 형성과 지속 가능한 성장에 관심 있는 사람
  • 장기적인 자기계발 과정에서 부담을 느끼는 사람
  • 매일 새로운 도전과 변화를 경험하고 싶은 사람

 

5) 기대효과

  • 성취감 증대
    • 매일 작은 목표를 달성함으로써 성취감을 느끼고 자기계발에 대한 동기를 유지할 수 있습니다.
  • 지속 가능한 성장
    • 작은 목표들을 꾸준히 달성하면서 점진적으로 더 큰 목표에 도전할 자신감을 얻게 됩니다.
  • 습관 형성
    • 반복적인 목표 수행을 통해 장기적인 긍정적 습관을 형성할 수 있습니다.
  • 사회적 유대감 형성
    • 커뮤니티 기능을 통해 사용자 간 상호작용을 촉진하여 응원과 지지 문화를 조성합니다.
  • 번아웃 예방
    • 부담이 적은 목표 달성 방식을 통해 자기계발 과정에서 번아웃을 예방할 수 있습니다.
 

 

 

3. 핵심 기능

 

오퓨(OPU)의 핵심기능

🔧 OPU 설정 및 관리

  • 랜덤으로 뽑은 OPU와 사용자가 추가한 OPU를 관리하고 조회할 수 있습니다.

🎲 OPU 랜덤 뽑기

  • 성향 검사 결과를 바탕으로 개인의 성향에 맞게 OPU를 랜덤으로 추천해줍니다.

📊 성취도 조회

  • 캘린더를 통해 날짜별로 OPU 성공/실패 여부를 확인할 수 있습니다.

📰 커뮤니티 기능

  • 후기, 자유 게시판 기능이 있어, 서로의 경험을 공유하고 자유롭게 글을 작성할 수 있습니다.

 

오퓨(OPU)의 주요기능

🔒 보안 기능

  • 회원가입 및 로그인 기능
  • 사용자 정보 보호 및 불법 접근 방지

🔍 목표 설정 및 관리

  • OPU 랜덤 뽑기: 시간별 목표 추천 (1분, 5분, 30분, 1시간, 데일리)
  • OPU 조회: 전체 OPU, 데일리 OPU 조회 및 체크 표시, 달성 여부 확인
  • OPU 관리: 목표 추가/수정/삭제, 목표 찜하기 기능

📅 캘린더 기능

  • 월별 및 일별 성취율 조회
  • 일별 목표 달성 목록 및 횟수 기록

📰 커뮤니티 기능

  • 후기 게시판: 목표 도전 및 성취 후기를 공유
  • 자유 게시판: 목표 수행 관련 자유로운 의견 공유
  • 공지사항 게시판 및 신고 기능 지원

👤 마이페이지 및 프로필 관리

  • 회원 정보 조회 및 수정, 탈퇴 기능
  • 성향 검사 결과 조회 및 재검사 기능 제공
  • 프로필 관리: 닉네임, 사진, 한 줄 소개, 팔로우 기능 제공

📢 푸시 알림 기능

  • 데일리 OPU 알림, 랜덤 뽑기 알림, 댓글 및 답글 알림
  • 알림 수신 설정 및 최근 알림 기록 조회 기능

 

 

 

 

4. 기술스택

 

  • Database
    :
     MariaDB
  • Server
    :
     Linux, Ubuntu

  • Version Control
    :
     GitHub

  • Development Tools
    :
     HeidiSQL, ERD Cloud, DA# Modeler, Draw.io, Notion
 
 

 

 

5. 프로젝트 진행 과정

 

1) WBS

2) 요구사항 정의서 & 요구사항 명세서

 

더보기

1. 회원가입/로그인 (인증)

1. 개요

  • 이 섹션에서는 사용자의 로그인 및 회원가입 기능에 대한 요구사항을 정의합니다.
  • 이 기능들은 사용자가 서비스를 이용하기 위해 반드시 필요하며, 사용자의 개인정보 보호 및 서비스 이용에 대한 권한 제어를 제공합니다.

2. 일반 요구사항

  1. 시스템은 사용자의 개인정보를 보호해야 합니다.
  2. 시스템은 사용자의 전화번호를 이용한 회원가입 기능을 제공해야 합니다.
  3. 시스템은 사용자에게 로그인 및 로그아웃 기능을 제공해야 합니다.
  4. 시스템은 비밀번호 재설정 기능을 제공해야 합니다.
  5. 시스템은 사용자가 아이디/비밀번호 찾기 기능을 제공해야 합니다.
  6. 시스템은 사용자의 SNS 계정 정보를 이용한 SNS 연동 회원가입 기능을 제공해야 합니다.
  7. 시스템은 사용자의 SNS 계정 정보를 이용한 SNS 연동 로그인 기능을 제공해야 합니다.
  8. 시스템은 회원가입 시 성향 검사 기능을 제공해야 합니다.

3. 상세 요구사항

  1. 회원가입
    • 사용자는 필수적으로 아이디, 비밀번호, 닉네임, 이름, 전화번호, 생년월일을 입력하여 회원가입을 진행할 수 있어야 합니다.
    • 사용자는 SNS 계정 정보를 이용하여 회원가입을 할 수 있어야 하고, SNS 연동 회원가입 시 닉네임을 입력해야 합니다.
    • 사용자는 선택적으로 프로필 사진, 프로필 한줄소개, 공개/비공개 여부(디폴트 비공개)를 입력하여 회원가입을 진행할 수 있어야 합니다.
    • 사용자는 본인의 전화번호 인증을 통해 회원가입을 진행할 수 있어야 합니다.
    • 사용자가 입력한 아이디, 닉네임, 전화번호는 시스템에 이미 등록되어 있지 않아야 합니다.
    • 사용자는 이용약관 및 개인정보 처리방침에 동의하여 회원가입을 진행할 수 있어야 합니다.
  2. 로그인
    • 사용자는 등록한 SNS 연동 로그인을 할 수 있어야 합니다.
    • 사용자는 등록한 아이디와 비밀번호를 이용하여 로그인할 수 있어야 합니다.
    • 로그인한 사용자는 언제든지 로그아웃할 수 있어야 합니다.
    • 시스템은 5회 연속 로그인 실패 시 보안 정책에 따라 계정 잠금 또는 제한을 설정할 수 있습니다.
  3. 아이디 찾기
    • 사용자는 아이디 찾기 기능을 통해 아이디를 찾을 수 있어야 합니다.
    • 사용자가 아이디를 찾기 위해서는 전화번호 인증이 필요합니다.
  4. 비밀번호 찾기
    • 사용자는 비밀번호 찾기 기능을 통해 비밀번호를 찾을 수 있어야 합니다.
    • 사용자가 비밀번호를 찾기 위해서는 입력한 아이디가 등록된 사용자의 아이디와 일치해야 하고 추가로 전화번호 인증이 필요합니다.
    • 새로운 비밀번호는 기존 비밀번호와 다른 값을 가져야 하며 보안 조건을 충족해야 합니다.
  5. SNS 연동 로그인 및 회원가입
    • 사용자는 카카오, 네이버, 구글 등의 SNS 계정을 연동하여 회원가입 및 로그인을 진행할 수 있습니다.
    • 연동된 계정 정보로 자동으로 로그인할 수 있으며, 연동 해제 기능도 제공해야 합니다.

4. 용어 정의

  • 회원가입: 사용자가 서비스 이용을 위해 자신의 정보를 시스템에 등록하는 과정.
  • 로그인: 사용자가 자신의 계정 정보를 이용하여 서비스에 접근하는 과정.
  • 로그아웃: 로그인한 사용자가 서비스에서 나가는 과정.
  • 비밀번호 재설정: 사용자가 기존 비밀번호를 변경하거나 잊어버린 비밀번호를 새로 설정하는 기능.
  • SNS 연동 로그인: 사용자가 외부 서비스(SNS)를 통해 본 서비스에 로그인하는 기능.
  • 전화번호 인증: 사용자가 자신의 전화번호를 통해 본인 확인을 완료하는 절차.

5. 예외 상황 및 대응

  • 로그인 실패:
    • 비밀번호 5회 이상 틀릴 경우 계정 잠금 상태가 될 수 있습니다.
    • 잠금 해제는 비밀번호 재설정 절차를 통해 가능해야 합니다.
  • 비밀번호 재설정 실패:
    • 인증 코드 입력을 실패한 경우 일정 시간 동안 시도 제한을 적용해야 합니다.
    • 인증 코드 유효 시간 초과 시 재발급 절차를 제공해야 합니다.
  • 전화번호 인증 실패:
    • 번호 입력이 잘못된 경우 재입력을 유도하는 오류 메시지를 제공해야 합니다.

2. 성향 검사

1. 개요

  • 사용자의 성향을 분석하여 OPU 활동(One Point Up) 추천에 활용하는 기능을 정의합니다.
  • 서비스에 가입한 사용자가 자신의 성향에 따라 적합한 활동을 추천받아 목표를 설정하고 달성할 수 있도록 지원합니다.
  • 성향 카테고리는 건강, 지식, 음식, 문화생활 네 가지로 나뉘며, 성향 검사 결과는 맞춤형 서비스 제공에 반영됩니다.

2. 일반 요구사항

  1. 시스템은 회원가입을 하지 않은 사용자에게 성향 검사 서비스를 제공하지 않습니다.
  2. 시스템은 사용자가 회원가입 시 성향 검사 서비스를 제공해야 합니다.
  3. 시스템은 사용자에게 10개의 질문을 제공해야 하고, 각 질문당 4개의 답변을 제공해야 합니다.
  4. 각 답변은 건강, 지식, 음식, 문화생활 4가지 카테고리 중 하나에 해당해야 합니다.
  5. 시스템은 각 카테고리의 답안 개수를 동일하게 유지해야 합니다.
  6. 시스템은 분석 결과를 저장하고 사용자에게 제공해야 합니다.
  7. 사용자는 로그인 후 성향 검사를 다시 진행할 수 있어야 합니다.
  8. 재검사 결과는 기존 결과를 덮어쓰고 저장해야 합니다.

3. 상세 요구사항

  1. 질문 구성 및 응답 처리
    • 각 질문당 4개의 답변을 제공하고 사용자는 하나의 답변을 선택할 수 있어야 합니다.
    • 예시 질문 )
      • 1. 주말에 시간이 생긴다면 무엇을 할까요?
        • 운동: 헬스장 가서 웨이트 트레이닝을 한다.
        • 지식: 읽고 싶던 책을 읽으며 시간을 보낸다.
        • 문화생활: 영화관이나 전시회를 방문한다.
        • 음식: 새로운 맛집을 찾아다닌다.
      • 2. 스트레스를 받을 때 어떻게 해소하나요?
        • 운동: 러닝이나 격렬한 운동을 한다.
        • 지식: 다큐멘터리나 강연 영상을 본다.
        • 문화생활: 음악을 듣거나 미술 작업을 한다.
        • 음식: 달콤한 디저트나 좋아하는 음식을 먹는다.
  2. 결과 저장 및 재검사
    • 사용자가 모든 질문에 답변한 후 결과 계산 후 저장되어야 합니다.
    • 저장된 결과는 OPU 활동 추천과 연동되어야 합니다.
    • 사용자가 재검사를 진행할 경우 새로운 결과가 기존 결과를 덮어써야 합니다.

4. 용어 정의

  • 성향 검사: 사용자의 선호도와 행동 양식을 파악하여 OPU 활동 추천에 활용되는 검사.
  • 카테고리: 성향 검사에서 사용되는 4가지 영역(건강, 지식, 음식, 문화생활).
  • OPU(One Point Up): 성향 검사 결과에 따라 추천되는 소규모 목표 활동.

5. 예외 상황 및 대응

  • 질문 누락:
    • 사용자가 질문에 응답하지 않고 결과를 제출할 경우, 미응답 질문에 대한 알림 메시지를 제공하여 응답을 유도해야 합니다.
  • 답변 중복 선택:
    • 각 질문당 하나의 답변만 선택 가능하도록 제한해야 합니다.
  • 데이터 저장 오류:
    • 결과 저장 중 오류가 발생하면 사용자에게 안내 메시지를 제공하고 재검사를 유도해야 합니다.

3. OPU 랜덤 뽑기

1. 개요

  • 이 기능은 매일 서비스에 처음 접속 시 가장 먼저 보여지는 기능입니다. 성향 검사 결과에 따라 사용자 맞춤 랜덤 OPU 활동을 뽑는 서비스입니다.
  • 사용자의 성향 검사 결과에 따라 One Point Up (OPU) 활동을 랜덤으로 추천하는 기능입니다.
  • 이 기능은 서비스의 차별화 요소로서, 사용자가 매일 새로운 활동을 추천받아 목표를 설정하고 달성하도록 돕습니다.
  • 로그인하지 않은 사용자에게는 체험 서비스가 제공되고, 로그인한 사용자에게는 성향 맞춤형 정식 서비스가 제공됩니다.

2. 일반 요구사항

  1. 시스템은 로그인을 하지 않은 사용자에게 OPU 랜덤 뽑기 체험 서비스를 제공해야 합니다.
  2. 시스템은 로그인한 사용자에게 성향 검사 결과를 기반으로 한 맞춤형 랜덤 OPU 서비스를 제공해야 합니다.
  3. 시스템은 랜덤 뽑기 전에 사용자에게 활동 시간을 결정하는 기능을 제공해야 합니다.
    • 예시: 1분, 5분, 10분 등
  4. 시스템은 체험 서비스를 통해 성향 분석 없이 모든 카테고리에서 랜덤 OPU를 하나 제공해야 합니다.
  5. 시스템은 정식 서비스를 통해 성향에 따른 OPU를 하나 제공해야 합니다.
    1. 사용자의 성향 결과를 분석하여 가장 많은 개수의 상위 두 개 카테고리를 추출해야 합니다.
    2. 성향 결과 중 동일한 개수의 상위 카테고리가 존재할 경우 모두 추출해야 합니다.
  6. 시스템에서 랜덤 뽑기로 제공된 OPU는 당일 동안 삭제가 불가능해야 하며, 사용자 목록에 자동 저장되어야 합니다.

3. 상세 요구사항

  1. 랜덤 뽑기 서비스 제공
    • 로그인 상태에 따라 체험 서비스와 정식 서비스로 분기되어야 합니다.
    • 로그인하지 않은 사용자는 성향 분석 없이 모든 카테고리에서 랜덤으로 OPU를 제공받아야 합니다.
    • 로그인한 사용자는 성향 검사 결과에 따라 특정 카테고리에서 랜덤으로 OPU를 제공받아야 합니다.
  2. 활동 시간 설정
    • 사용자는 랜덤 뽑기 전 활동 시간을 선택할 수 있어야 합니다.
    • 선택한 시간은 해당 OPU 활동의 목표 시간으로 설정되어야 합니다.
  3. 랜덤 OPU 등록 및 표시
    • OPU 표시 항목:
      • OPU 이름
      • 카테고리 (건강, 지식, 음식, 문화생활 중 하나)
      • 설정된 활동 시간
    • 랜덤 뽑기 결과는 당일 동안 삭제할 수 없어야 하며, 사용자 목록에 저장되어야 합니다.
  4. 성향 재검사 연동
    • 사용자는 랜덤 뽑기 페이지에서 성향 재검사를 진행할 수 있어야 합니다.
    • 재검사 후 새로운 결과에 따라 랜덤 뽑기가 다시 진행될 수 있어야 합니다.

4. 용어 정의

  • OPU (One Point Up): 사용자가 매일 달성해야 할 소규모 목표 활동.
  • 랜덤 뽑기: 시스템이 사용자에게 랜덤으로 OPU 활동을 제공하는 과정.
  • 체험 서비스: 로그인하지 않은 사용자가 제한적으로 랜덤 뽑기를 체험할 수 있는 서비스.
  • 정식 서비스: 로그인한 사용자가 성향 검사 결과에 따라 OPU를 맞춤 추천받는 서비스.

5. 예외 상황 및 대응

  1. 로그인 상태 확인 오류
    • 시스템이 로그인 상태를 확인하지 못하면 체험 서비스로 전환하여 기본 OPU를 제공해야 합니다.
  2. 활동 시간 미선택
    • 사용자가 활동 시간을 선택하지 않으면 기본 시간(5분)을 자동 설정해야 합니다.
  3. 랜덤 뽑기 중 오류 발생
    • 시스템 오류로 인해 랜덤 뽑기 결과를 제공할 수 없는 경우, 사용자에게 알림 메시지를 제공하고 재시도 기능을 안내해야 합니다.

6. 서비스 흐름 예시

단계 설명
1. 서비스 진입 사용자가 OPU 랜덤 뽑기 페이지에 진입
2. 로그인 여부 확인 로그인 상태에 따라 체험 서비스 또는 정식 서비스로 분기
3. 활동 시간 선택 사용자가 활동 시간을 선택
4. 랜덤 뽑기 실행 시스템이 랜덤으로 OPU 활동을 추천
5. 결과 제공 및 등록 OPU가 화면에 표시되고 사용자 목록에 저장
6. OPU 활동 시작 사용자가 등록된 OPU를 실행하기
7. 활동 결과 기록 사용자는 OPU 활동 성공 여부를 기록

4. OPU 관리

1. 개요

  • 이 섹션에서는 본 서비스에서 제공되는 OPU를 관리하는 기능에 대한 요구사항을 정의합니다.
  • 사용자는 목표를 추가, 수정, 삭제하고, 자신의 목표 목록을 조회할 수 있습니다.
  • OPU 관리 기능은 사용자가 랜덤 뽑기, 성향 검사 결과에 따라 제공된 OPU뿐만 아니라 직접 추가한 목표도 효율적으로 관리할 수 있도록 지원합니다.
  • 이 기능은 사용자가 서비스를 원활하게 이용하기 위해 필요하며, 로그인을 한 사용자에게 제공되는 주요 기능입니다.

2. 일반 요구사항

  1. 시스템은 사용자가 자신의 OPU 목록을 조회할 수 있어야 합니다.
  2. 시스템은 사용자가 새로운 OPU 목표를 추가할 수 있는 기능을 제공해야 합니다.
  3. 시스템은 사용자가 등록된 OPU 목표를 수정할 수 있어야 합니다.
  4. 시스템은 사용자가 더 이상 필요하지 않은 OPU 목표를 삭제할 수 있는 기능을 제공해야 합니다.
  5. 시스템은 각 OPU에 대해 반복 설정, 종료 날짜, 활동 시간 등의 속성을 관리할 수 있어야 합니다.
  6. 시스템은 매일 아침 9시에 사용자의 데일리 OPU에 대한 푸쉬 알림을 제공해야 합니다.
  7. 사용자는 OPU 목록에서 원하는 OPU를 찜하여 상단에 우선 표시할 수 있어야 합니다.

3. 상세 요구사항

  1. 데일리 OPU 조회
    • 사용자는 자신의 데일리 OPU 목록을 조회할 수 있어야 합니다.
    • 각 OPU의 이름, 설정된 활동 시간, 완료 여부가 표시되어야 합니다.
    • 사용자는 데일리 OPU 목록에서 각 OPU의 완료 여부를 체크할 수 있어야 합니다.
    • 완료 체크 시 해당 OPU는 '완료' 상태로 변경되어 성취도 관리 기능에 기록되어야 합니다.
  2. OPU 추가
    • 사용자는 새로운 OPU 목표를 추가할 수 있어야 합니다.
    • 필수 입력 정보:
      • OPU 이름
      • 활동 시간 (예: 1분, 5분, 10분 등)
      • 반복 여부 및 반복 요일
      • 종료 날짜
    • 사용자가 지정한 OPU도 추가할 수 있어야 합니다.
  3. OPU 수정
    • 사용자는 기존에 등록된 OPU 목표의 속성을 수정할 수 있어야 합니다.
    • 수정 가능 항목:
      • 반복 설정
      • 종료 날짜
      • 목표 이름
  4. OPU 삭제
    • 사용자는 필요하지 않은 OPU 목표를 목록에서 삭제할 수 있어야 합니다.
    • 삭제된 OPU는 복구할 수 없어야 하며, 삭제 전 사용자에게 확인 메시지를 제공해야 합니다.
    • 랜덤뽑기를 통해 추가된 OPU의 경우 삭제할 수 없어야 합니다.
  5. 전체 OPU 목록 조회
    • 사용자는 자신이 등록하여 수행할 모든 OPU의 목록을 조회할 수 있어야 합니다.
    • 앞으로 수행할 OPU 목록 조회를 통해 등록한 모든 OPU의 수정 및 삭제가 가능해야 합니다.
  6. 푸쉬 알림 연동
    • 사용자가 등록한 OPU에 대해 매일 아침 9시에 푸쉬 알림이 제공되어야 합니다.
    • 사용자는 알림을 설정하거나 차단할 수 있어야 하며, 알림 내용은 목표 이름과 활동 시간으로 구성되어야 합니다.
  7. 찜 기능
    • 사용자는 특정 OPU를 찜하여 우선적으로 관리할 수 있어야 합니다.
    • 찜한 OPU는 목록의 상단에 우선적으로 표시되어야 하며, 필요시 찜 해제 기능도 제공해야 합니다.
  8. 목표 달성 기준
    • 당일 설정된 모든 OPU에 대해 사용자가 완료 체크를 한 경우에만 해당 날짜가 성공으로 기록되어야 합니다.
    • 하나라도 완료되지 않은 OPU가 있을 경우, 해당 날짜는 실패로 기록되어야 합니다.

4. 용어 정의

  • OPU (One Point Up): 사용자가 매일 또는 주기적으로 수행할 소규모 목표 활동.
  • 데일리 OPU: 사용자가 하루 동안 수행할 것으로 설정된 OPU 목록.
  • 사용자 지정 OPU: 사용자가 직접 추가한 OPU 활동.
  • 푸쉬 알림: 사용자가 설정한 시간에 OPU 활동을 알리는 알림 메시지.
  • 찜 기능: 사용자가 중요한 OPU를 우선적으로 표시하도록 설정하는 기능.

5. 예외 상황 및 대응

  1. 목표 추가 실패
    • 필수 입력 정보가 누락되었을 경우 사용자에게 오류 메시지를 제공하고 재입력을 유도해야 합니다.
  2. 목표 중복 등록
    • 동일한 이름과 속성을 가진 목표가 이미 등록된 경우, 중복 등록 방지 메시지를 제공해야 합니다.
  3. 목표 삭제 확인
    • 사용자가 목표 삭제 시, 삭제 전 확인 메시지를 제공하여 의도하지 않은 삭제를 방지해야 합니다.

6. 서비스 흐름 예시

단계 설명
1. OPU 관리 페이지 진입 사용자가 OPU 관리 페이지에 진입
2. OPU 목록 조회 데일리 OPU 및 전체 OPU 목록을 조회
3. 목표 추가 또는 수정 사용자가 새로운 OPU를 추가하거나 기존 목표를 수정
4. 목표 삭제 필요 없는 목표를 삭제
5. 푸쉬 알림 설정 사용자가 OPU 목표에 대해 알림을 설정 또는 차단
6. 활동 완료 여부 기록 사용자가 목표를 완료한 후 완료 상태로 기록

5. 커뮤니티

1. 개요

  • 이 섹션에서는 사용자가 게시글과 댓글을 통해 소통할 수 있는 커뮤니티 기능에 대한 요구사항을 정의합니다.
  • 커뮤니티는 사용자의 정보 공유 및 소통을 위한 자유게시판, 성공 후기 게시판, 공지사항 게시판을 제공합니다.
  • 게시글 및 댓글 기능을 통해 사용자는 경험과 정보를 나누고 상호작용할 수 있습니다.

2. 일반 요구사항

  1. 시스템은 사용자가 각 게시판의 게시글 목록을 조회할 수 있는 기능을 제공해야 합니다.
  2. 시스템은 사용자가 각 게시글의 상세 내용을 조회할 수 있는 기능을 제공해야 합니다.
  3. 시스템은 사용자가 게시글을 조회, 추가, 수정, 삭제할 수 있는 기능을 제공해야 합니다.
  4. 시스템은 사용자가 댓글과 답글을 조회, 추가, 수정, 삭제할 수 있는 기능을 제공해야 합니다.
  5. 시스템은 다음과 같은 게시판을 제공해야 합니다:
    • 자유게시판: 사용자가 자유 주제로 게시글을 작성할 수 있는 게시판.
    • 후기 게시판: 사용자가 OPU 목표 달성 후기를 공유하는 게시판.
      • 시스템은 후기 게시글을 작성하는 사용자에게 완료한 OPU 목록을 제공해야 합니다.
    • 공지사항 게시판: 관리자에 의해 공지사항이 등록되는 게시판.
  6. 사용자는 게시글, 댓글, 답글에 대해 좋아요를 등록하거나 취소할 수 있어야 합니다.
  7. 사용자는 부적절한 게시글이나 댓글을 신고할 수 있어야 합니다.
  8. 관리자는 신고가 누적된 콘텐츠나 사용자에 대해 제재 조치를 취할 수 있어야 합니다.

3. 상세 요구사항

  1. 게시글 기능
    • 게시글 목록 조회
      • 사용자는 자유게시판/후기/공지사항의 모든 게시글 목록을 조회할 수 있어야 합니다.
      • 사용자는 게시판에서 게시글 목록을 최신 순, 인기 순으로 정렬하여 조회할 수 있어야 합니다.
      • 사용자는 팔로우한 사용자의 게시글을 상단에 우선적으로 조회할 수 있어야 합니다.
      • 사용자는 게시글 목록에서 게시글ID, 제목, 작성시간, 작성자 닉네임을 조회할 수 있어야 합니다.
    • 게시글 검색
      • 사용자는 자유게시판/후기게시판에 등록된 게시글의 제목과 내용에 포함된 단어를 키워드로 검색해서 조건에 부합하는 게시글들을 조회할 수 있어야합니다.
      • 후기 게시글의 경우 등록된 OPU를 키워드로 검색하여 조건에 부합하는 게시글들을 조회할 수 있어야 합니다.
    • 게시글 상세 조회
      • 사용자는 등록된 게시글의 게시글 ID, 제목, 작성시간, 내용, 작성자(닉네임, 프로필사진), 게시글에 등록된 사진을 조회할 수 있어야 합니다.
      • 후기 게시글을 상세 조회할 경우 해당 게시글에 등록된 OPU 내용을 조회할 수 있어야합니다.
    • 게시글 추가
      • 사용자는 게시판에 새로운 게시글을 작성할 수 있어야 합니다.
      • 게시글은 작성자, 작성 날짜, 제목, 내용, 사진 첨부(선택)를 포함해야 합니다.
    • 게시글 수정 및 삭제
      • 사용자는 본인이 작성한 게시글을 수정하거나 삭제할 수 있어야 합니다.
      • 게시글 삭제 시 확인 메시지를 제공하여 의도하지 않은 삭제를 방지해야 합니다.
  2. 댓글 및 답글 기능
    • 댓글 기능
      • 사용자는 게시글에 댓글을 작성할 수 있어야 합니다.
      • 댓글은 작성자, 작성 날짜, 내용, 좋아요 개수를 포함해야 합니다.
      • 댓글이 있는 게시글에는 댓글 개수가 표시되어야 합니다.
    • 답글 기능
      • 사용자는 댓글에 답글을 남길 수 있어야 하며, 답글은 댓글을 클릭했을 때 표시되어야 합니다.
    • 댓글 및 답글 수정/삭제
      • 사용자는 본인이 작성한 댓글과 답글을 수정하거나 삭제할 수 있어야 합니다.
      • 삭제 시 확인 메시지를 제공하여 의도하지 않은 삭제를 방지해야 합니다.
  3. 좋아요 기능
    • 사용자는 게시글, 댓글, 답글에 대해 좋아요를 등록하거나 취소할 수 있어야 합니다.
    • 좋아요 수는 게시글 및 댓글 목록과 상세조회에서 표시되어야 합니다.
  4. 게시판별 특화 기능
    • 자유게시판
      • 사용자가 주제에 제한 없이 자유롭게 게시글을 작성할 수 있어야 합니다.
    • 성공 후기 게시판
      • 사용자는 완료한 OPU를 통해 OPU 목표 달성 후기를 작성할 수 있어야 합니다.
      • 후기 게시글 작성 시 최소 1개의 OPU를 필수로 연동해야 합니다.
    • 공지사항 게시판
      • 사용자는 공지사항 게시판에서 관리자에 의해 등록된 공지사항을 조회할 수 있어야 합니다.
      • 공지사항은 작성자, 작성 날짜, 제목, 내용을 포함해야 하며, 댓글, 답글, 좋아요 기능이 제공되지 않아야 합니다.
  5. 신고 기능
    • 사용자는 게시글과 댓글에 대해 신고할 수 있어야 합니다.
    • 신고 시 신고 사유를 선택하거나 직접 입력할 수 있어야 합니다.
    • 신고가 누적된 경우 관리자는 해당 콘텐츠나 사용자에 대해 제재 조치를 취할 수 있어야 합니다.

4. 용어 정의

  • 게시글: 커뮤니티에 사용자가 남기는 글로, 제목, 내용, 작성자 등의 정보를 포함함.
  • 댓글: 게시글에 사용자가 남기는 코멘트.
  • 답글: 댓글에 대한 추가 응답으로, 계층 구조로 표시됨.
  • 좋아요: 사용자가 게시글, 댓글에 긍정적인 반응을 표시하는 기능.
  • 공지사항: 관리자에 의해 게시판에 등록된 주요 안내 내용.
  • 신고: 부적절한 사용자나 콘텐츠를 관리자에게 알리는 기능.

5. 예외 상황 및 대응

  1. 게시글 작성 실패
    • 필수 입력 정보가 누락된 경우 사용자에게 오류 메시지를 제공하고 재입력을 유도해야 합니다.
  2. 댓글/답글 작성 실패
    • 서버 오류 또는 필수 입력 정보 누락 시 오류 메시지를 표시하고 재시도 기능을 제공해야 합니다.
  3. 신고 중복 처리 방지
    • 동일 게시글/댓글을 중복 신고하려는 경우, "이미 신고된 게시글/댓글입니다."라는 메시지를 제공해야 함.

6. 서비스 흐름 예시

단계 설명
1. 게시판 선택 사용자가 커뮤니티에서 게시판을 선택
2. 게시글 목록 조회 게시판 내 게시글 목록을 조회
3. 게시글 작성 사용자가 새로운 게시글을 작성
4. 댓글 및 답글 작성 사용자가 게시글에 댓글 또는 답글을 남김
5. 상호작용 (좋아요) 사용자가 게시글 및 댓글에 좋아요를 등록
6. 게시글 관리 작성자가 자신의 게시글을 수정 또는 삭제
7. 공지사항 조회 사용자가 공지사항 게시판에서 공지 목록을 조회
8. 신고 사용자가 부적절한 사용자나 게시글을 신고
9. 관리자 조치 신고가 누적된 사용자는 관리자에 의해 제재

6. 성취도 관리

1. 개요

  • 사용자가 O.P.U (One Point Up) 목표 달성 여부에 따라 자신의 오늘의 성공/실패를 시각적으로 확인할 수 있는 기능입니다.
  • 성취도 관리는 사용자가 목표 달성 현황을 파악하고 성취감을 얻어 지속적인 동기부여를 제공하는 것을 목적으로 합니다.

2. 일반 요구사항

  1. 일일 목표 달성 여부 확인
    • 시스템은 사용자가 수행한 데일리 OPU 활동의 성공 또는 실패 여부를 표시해야 합니다.
    • 사용자는 메인 화면에서 당일의 성공 여부를 확인할 수 있어야 합니다.

3. 상세 요구사항

  1. 메인 화면 (일일 목표 달성 여부 확인)
    • 조건: 사용자가 로그인한 상태에서만 제공됩니다.
    • 사용자는 해당 날짜에 설정된 OPU들의 완료 상태에 따라 목표 달성 여부를 확인할 수 있어야 합니다.
    • 목표 달성 기준:
      • 성공: 모든 설정된 OPU가 완료 체크된 경우.
      • 실패: 설정된 OPU 중 하나라도 완료 체크가 없는 경우.
      • 미수행: 사용자가 해당 날짜에 아무런 목표를 설정하지 않은 경우.
    • 성공 여부는 사용자가 당일 설정한 데일리 OPU 활동을 완료했는지에 따라 자동으로 결정됩니다.
  2. 목표 달성 기준
    • 성공 조건:
      • 사용자가 설정한 모든 OPU 목표를 완료 체크했을 경우 해당 날짜가 성공으로 기록됩니다.
    • 실패 조건:
      • 설정한 OPU 중 하나라도 완료되지 않은 경우 해당 날짜가 실패로 기록됩니다.
    • 미수행 조건:
      • 사용자가 해당 날짜에 OPU 목표를 설정하지 않은 경우 미수행으로 표시됩니다.
    • 수행 기록 수정 불가:
      • 과거 기록은 사용자가 임의로 수정할 수 없어야 합니다.

4. 용어 정의

  • 성취도: 사용자가 설정한 OPU 목표의 달성 여부를 기준으로 제공되는 통계 정보.
  • 데일리 OPU: 사용자가 하루 동안 수행할 목표로 설정한 OPU 활동.

5. 예외 상황 및 대응

  1. 성취 기록 누락
    • 사용자가 모든 목표에 대해 완료 체크를 하지 않은 경우, 해당 날짜는 실패로 기록됩니다.
  2. 목표 미설정 상태
    • 사용자가 해당 날짜에 OPU 목표를 설정하지 않은 경우, 성취도 기록에는 미수행으로 표시됩니다.
  3. 기록 조회 오류
    • 성취도 기록을 조회하는 중 오류가 발생할 경우, 사용자에게 알림 메시지를 제공하고 재시도를 유도해야 합니다.

6. 서비스 흐름 예시

단계 설명
1. 메인 화면 진입 사용자가 메인 화면에서 당일 성취 여부를 확인
2. 클릭 시 통계 페이지 이동 성공 여부 화면을 클릭하면 통계 페이지로 이동
3. 캘린더에서 기록 조회 사용자가 캘린더에서 날짜별 성취 현황을 조회
4. 사용자 검토 및 피드백 사용자는 성취 현황을 확인하고 목표 달성 계획을 세움

7. 캘린더

1. 개요

  • 사용자가 월별, 일별로 OPU 성취 현황을 조회할 수 있는 캘린더 기능을 정의합니다.
  • 사용자는 캘린더에서 특정 날짜를 선택하여 해당 날짜의 목표 설정성취 기록을 확인할 수 있습니다.
  • 캘린더 기능은 성취도 관리 기능과 연동되어 목표 달성 현황을 시각적으로 제공하여 사용자가 스스로 계획을 세우고 관리할 수 있도록 지원합니다.

2. 일반 요구사항

  1. 캘린더 기본 제공
    • 시스템은 사용자가 월, 일 단위로 성취 현황을 조회할 수 있는 캘린더를 제공해야 합니다.
    • 해당 월에 설정되어 완료한 OPU의 개수를 표시해야 합니다.
  2. 월별/일별 성취율 표시
    • 시스템은 사용자가 캘린더에서 각 날짜에 대한 성취율 상태를 시각적으로 표시해야 합니다.
    • 각 날짜에 설정된 OPU 목표 대비 완료된 목표 비율을 백분율로 계산하여 표시해야 합니다.
    • 성취율 값은 캘린더에 직접 표시하거나 그래픽(아이콘, 차트 등)으로 시각화할 수 있어야 합니다.
  3. 캘린더 상호작용 기능 제공
    • 사용자는 캘린더에서 특정 날짜를 클릭하여 해당 날짜의 세부 성취 현황과 OPU 목록을 조회할 수 있어야 합니다.
    • 사용자는 날짜 변경 기능(이전/다음 달 이동)을 통해 원하는 기간을 쉽게 조회할 수 있어야 합니다.
  4. 로그인 상태에 따른 기능 차별화
    • 로그인 사용자: 월별 및 일별 성취 현황과 세부 목표 기록을 조회할 수 있습니다.
    • 비로그인 사용자: 캘린더 기능을 사용할 수 없습니다.

3. 상세 요구사항

  1. 캘린더 기본 제공
    • 사용자는 다음 정보를 기본적으로 제공받아야 합니다.
      • 월간 달력: 해당 월의 날짜들이 표시된 캘린더 제공.
      • 현재 날짜 강조 표시: 현재 날짜가 시각적으로 강조되어야 합니다.
    • 사용자는 이전 달과 다음 달로 쉽게 이동할 수 있어야 하며, 이동 시에도 성취 상태가 즉시 반영되어야 합니다.
  2. 일별 성취율 확인
    • 사용자가 월간 캘린더 화면에서 각 날짜의 성취 상태를 한눈에 확인할 수 있어야 합니다.
      • 성취율 표시: 각 날짜에 설정된 OPU 목표의 성취율이 색상 또는 아이콘으로 표시되어야 합니다.
  3. 일별 성취도 세부 조회
    • 사용자가 특정 날짜를 클릭하면 해당 날짜의 세부 성취도 현황 및 OPU 목표 목록이 제공되어야 합니다.
    • 세부 정보 제공 항목:
      • 설정된 OPU 목표 리스트 (예: '물마시기', '책읽기')
      • 각 목표의 완료 상태 (완료/미완료)
      • 목표 완료 체크 여부에 따라 성공/실패 상태 표시
  4. 날짜 필터 기능
    • 사용자는 원하는 날짜 범위를 필터링하여 해당 기간의 성취율 데이터를 조회할 수 있어야 합니다.

4. 용어 정의

  • 캘린더: 날짜 및 일정 관리 도구로, 월간 단위로 제공되며 성취 상태를 시각적으로 보여줌.
  • 성취율: 해당 날짜에 설정된 OPU 목표 중 완료된 목표 비율을 백분율로 표시한 값.
  • 일별 성취 현황: 사용자가 특정 날짜에 설정한 OPU 목표와 해당 목표의 성취율.
  • 공휴일: 국가 또는 지역에서 공식적으로 지정된 휴일.

5. 예외 상황 및 대응

  1. 캘린더 데이터 조회 오류
    • 데이터가 조회되지 않는 경우 사용자에게 "성취도 데이터를 불러올 수 없습니다"라는 메시지를 제공하고 재시도 기능을 안내해야 합니다.
  2. 미수행 상태
    • 해당 날짜에 목표가 설정되지 않은 경우 "해당 날짜의 성취 데이터가 없습니다"라는 메시지를 제공해야 합니다.
  3. 기록 조회 오류
    • 성취도 기록을 조회하는 중 오류가 발생할 경우 사용자에게 알림 메시지를 제공하고 재시도를 유도해야 합니다.

6. 서비스 흐름 예시

단계 설명
1. 캘린더 화면 진입 사용자가 캘린더 화면에서 월간 달력을 조회
2. 날짜별 성취 상태 확인 각 날짜에 표시된 성취율을 확인
3. 날짜 클릭 사용자가 특정 날짜를 클릭하여 세부 정보 조회
4. 목표 목록 제공 해당 날짜의 목표와 완료 상태가 제공됨
5. 날짜 범위 설정 사용자가 조회할 날짜 범위를 선택
6. 통계 및 성취 현황 제공 선택된 기간의 통계가 그래프로 제공됨

7. 추가 연계 기능

  1. 성취도 관리 연동
    • 캘린더는 성취도 관리 기능과 통합되어 각 날짜별 성취율을 표시해야 합니다.
    • 사용자가 캘린더에서 날짜를 선택하면 해당 날짜의 성취도 기록 페이지로 이동할 수 있어야 합니다.

8. 마이페이지

1. 개요

  • 사용자가 본인의 정보를 조회하고 수정할 수 있는 마이페이지 기능을 정의합니다.
  • 마이페이지는 개인정보 보호와 서비스 이용 설정 관리를 위한 핵심 기능을 포함하며, 프로필 정보, 성향 검사 결과, 활동 내역 등을 제공합니다.
  • 사용자는 본인의 계정 정보, 활동 내역, 서비스 이용 내역 및 설정 등을 확인하고 관리할 수 있습니다.

2. 일반 요구사항

  1. 개인정보 조회 및 수정 제공
    • 시스템은 사용자가 등록한 개인정보(아이디, 이름, 닉네임, 전화번호, 비밀번호 등)를 조회 및 수정할 수 있어야 합니다.
  2. 보안 정보 수정 제공
    • 사용자는 보안에 관련된 정보(전화번호, 비밀번호)를 조회 및 수정할 수 있어야 합니다.
  3. 목표 설정 및 성취 현황 제공
    • 사용자는 마이페이지에서 자신의 OPU 설정과 달성 현황을 한눈에 확인할 수 있어야 합니다.
  4. 성향 검사 연동 제공
    • 사용자는 성향 검사 결과를 조회하고 필요시 재검사를 진행할 수 있어야 합니다.
  5. 활동 내역 조회 및 관리 제공
    • 사용자는 본인이 작성한 게시글, 댓글 등 활동 내역을 종합적으로 조회할 수 있어야 합니다.
    • 사용자는 해당 활동 내역을 수정하거나 삭제할 수 있어야 합니다.
    • 사용자는 활동 내역에 따른 등급을 조회할 수 있어야 합니다.
    • 사용자는 등급의 기준을 조회하고 해당 등급별 인원을 조회할 수 있어야 합니다.
  6. 회원 탈퇴 및 복구 절차 제공
    • 시스템은 사용자가 회원 탈퇴를 요청할 경우, 비밀번호 인증과 함께 복구 기간을 안내해야 합니다.

3. 상세 요구사항

  1. 개인정보 조회 및 수정
    • 사용자는 다음 정보를 마이페이지에서 조회하고 수정할 수 있어야 합니다.
      • 아이디: 조회 및 수정 가능, 단 중복 여부 확인 필요.
      • 이름: 사용자는 본인의 이름을 수정할 수 있음.
      • 닉네임: 조회 및 수정 가능, 단 중복 여부 확인 필요.
      • 생년월일: 사용자의 생년월일에 대한 정보를 조회 가능, 수정 불가능.
      • 프로필 사진: 프로필 사진을 변경 가능.
      • 자기소개: 간단한 자기소개 문구를 추가, 수정, 삭제 가능.
      • 등급: 사용자 활동 내역에 따라 시스템에서 제공하는 등급 및 기준을 조회 가능, 수정 불가능.
  2. 보안 정보 수정
    • 비밀번호:
      • 기존 비밀번호 입력 후 일치하는 경우에만 수정 가능.
      • 새로운 비밀번호는 보안 기준(최소 길이, 대문자/숫자 포함 여부)을 충족해야 함.
      • 비밀번호 입력 후 동일한 값을 재입력하여 확인해야 함.
    • 전화번호:
      • 전화번호는 인증번호 확인 후 수정 가능.
  3. 성향 검사 기능 제공
    • 사용자는 마이페이지에서 성향 검사 결과를 조회할 수 있어야 합니다.
    • 성향 검사 결과가 마음에 들지 않을 경우 재검사를 진행할 수 있어야 합니다.
      • 재검사 후 새로운 결과가 저장되고 기존 결과는 무효화됨.
  4. 활동 내역 조회 및 관리
    • 사용자는 본인이 작성한 게시글, 댓글 등의 활동 내역을 종합적으로 조회할 수 있어야 합니다.
    • 사용자는 해당 활동 내역에서 원하는 항목을 수정하거나 삭제할 수 있어야 합니다.
    • 활동 내역은 작성 날짜, 게시판 구분, 제목(댓글의 경우 내용) 등으로 제공되어야 합니다.
    • 사용자는 활동 내역들에 따라 설정된 자신의 등급을 조회할 수 있어야 합니다.
    • 사용자는 시스템에 등록된 등급의 기준과 등급에 속한 인원 수를 조회할 수 있어야 합니다.
  5. 회원 탈퇴 및 복구 기능
    • 회원 탈퇴 절차
      • 사용자가 회원 탈퇴 요청 시 비밀번호 인증이 필요함.
      • 탈퇴 시 사용자에게 탈퇴 이유 선택(선택사항)과 30일 복구 가능 기간에 대한 안내가 제공되어야 함.
      • 탈퇴 후 계정은 30일 이내에 복구 가능, 이후 완전 삭제됨.
    • 회원 복구 절차
      • 사용자가 30일 이내에 복구 요청할 경우, 관리자 확인 후 계정 복구가 가능해야 함.

4. 용어 정의

  • 개인정보: 사용자가 서비스에 등록한 아이디, 닉네임, 전화번호 등 계정 관련 정보.
  • 개인정보 조회: 사용자가 시스템에 등록한 정보를 조회하는 과정.
  • 개인정보 수정: 사용자가 시스템에 등록한 정보를 추가, 수정, 삭제하는 과정.
  • 성향 검사: 사용자가 OPU 추천을 위해 진행하는 검사로, 건강, 지식, 음식, 문화 등의 카테고리별 결과로 제공됨.
  • 활동 내역: 사용자가 작성한 게시글, 댓글 등 서비스 내에서의 활동 기록.
  • 회원 탈퇴: 사용자가 서비스 이용을 중단하고 계정 정보를 삭제하는 과정.

5. 예외 상황 및 대응

  1. 입력 데이터 오류
    • 사용자가 잘못된 형식의 전화번호, 비밀번호 등을 입력할 경우, 적절한 오류 메시지를 제공해야 함.
    • 예: "전화번호 형식이 올바르지 않습니다. 다시 입력해주세요."
  2. 중복 데이터 오류
    • 아이디, 닉네임 또는 전화번호가 중복될 경우, "이미 사용 중인 값입니다"라는 메시지를 제공해야 함.
  3. 비밀번호 인증 실패
    • 회원 탈퇴 또는 복구 시 비밀번호가 일치하지 않는 경우, "비밀번호가 일치하지 않습니다"라는 메시지를 제공해야 함.
  4. 활동 내역 연동 오류
    • 사용자가 수정하고자하는 게시글/댓글 혹은 사용자가 댓글을 작성한 게시글이 삭제된 경우 “해당 내역이 삭제되어 정보를 제공할 수 없습니다.”라는 메시지를 제공해야 함.

6. 서비스 흐름 예시

단계 설명
1. 마이페이지 진입 사용자가 마이페이지에 진입하여 정보 조회
2. 개인정보 수정 사용자가 닉네임, 전화번호 등을 수정
3. 목표 성취 현황 확인 최근 목표 및 성취 현황을 확인
4. 성향 검사 결과 조회 사용자가 성향 검사 결과를 조회
5. 활동 내역 조회 및 관리 사용자가 작성한 게시글과 댓글 내역을 조회 및 관리
6. 회원 탈퇴 요청 사용자가 회원 탈퇴 요청 및 비밀번호 인증
7. 회원 복구 요청 사용자가 복구 기간 내에 계정 복구 요청

7. 추가 연계 기능

  1. 프로필 기능 연동
    • 사용자는 마이페이지에서 자신의 프로필 정보를 조회하고 관리할 수 있어야 함.
    • 프로필 공개 여부는 커뮤니티, 팔로우 기능과 연동됨.
  2. 푸쉬 알림 연동
    • 사용자는 마이페이지에서 푸쉬 알림 설정을 관리할 수 있어야 함.
    • 예: "알림 설정".

9. 프로필

1. 개요

  • 사용자가 자신의 프로필을 조회 및 관리하고, 다른 사용자의 프로필 정보를 확인할 수 있는 기능입니다.
  • 사용자는 프로필에서 기본 정보, 활동 내역(게시글, 목표 성취도 등), 한줄 소개 등을 확인하거나 수정할 수 있습니다.
  • 팔로우를 통해 사용자 간 상호작용을 지원합니다.

2. 일반 요구사항

  1. 프로필 정보 제공
    • 시스템은 사용자가 자신의 프로필 및 다른 사용자의 프로필을 조회할 수 있는 기능을 제공해야 합니다.
    • 프로필에는 닉네임, 프로필 사진, 한줄 소개, 사용자 등급 및 등급 기준, 성취율, 게시글 수, 팔로잉/팔로워 수 등의 정보가 표시되어야 합니다.
  2. 팔로우 기능 제공
    • 사용자는 다른 사용자를 팔로우하거나 팔로우를 취소할 수 있어야 합니다.
    • 팔로우한 사용자의 게시글은 커뮤니티에서 우선적으로 표시되어야 합니다.
  3. 프로필 정보 관리 제공
    • 사용자는 자신의 프로필 정보(닉네임, 프로필 사진, 한줄 소개 등)를 마이페이지를 통해 관리할 수 있어야 합니다.
    • 사용자는 공개 설정을 통해 자신의 프로필 정보의 공개 여부를 설정할 수 있어야 합니다.

3. 상세 요구사항

  1. 프로필 조회
    • 기본 정보 제공:
      • 닉네임, 프로필 사진, 한줄 소개
      • 사용자 등급(성취도에 따른 레벨 또는 등급)
      • 성취율(총 완료한 OPU 수, 총 목표 대비 달성 퍼센트)
      • 게시글 수(상세페이지를 통해 사용자의 게시글 목록 조회 가능)
      • 팔로잉/팔로워 (자신의 프로필의 경우 목록을 모두 조회 가능, 다른 사용자일 경우 인원 수만 확인 가능)
    • 사용자는 다른 사용자의 프로필을 조회할 때 개인정보 보호 정책에 따라 일부 정보가 비공개 처리될 수 있음.
      • 비공개 설정 시 닉네임과 프로필 사진 외 다른 정보는 표시되지 않음.
  2. 프로필 수정
    • 사용자는 자신의 프로필 정보를 다음과 같이 관리할 수 있어야 합니다.
      • 닉네임 변경: 닉네임 중복 여부 확인 후 수정 가능.
      • 프로필 사진 변경: 새로운 사진 추가, 기존 사진 삭제 가능.
      • 한줄 소개 변경: 자기소개 문구 추가, 수정, 삭제 가능.
      • 공개 설정 변경: 프로필 정보의 공개/비공개 여부를 설정 가능.
  3. 팔로우 및 팔로우 관리
    • 팔로우 기능 제공:
      • 사용자는 다른 사용자의 프로필에서 팔로우 버튼을 통해 해당 사용자를 팔로우할 수 있어야 함.
      • 팔로우 상태일 경우 버튼이 팔로우 취소로 변경됨.
    • 팔로우 목록 관리:
      • 사용자는 자신의 팔로우 목록에서 팔로우한 사용자와 팔로워 목록을 조회할 수 있어야 함.
      • 팔로우한 사용자를 목록에서 삭제할 수 있어야 함.
    • 팔로우한 사용자의 게시글 우선 조회:
      • 커뮤니티에서 팔로우한 사용자의 게시글이 상단에 우선 표시되어야 함.

4. 용어 정의

  • 프로필: 사용자의 기본 정보와 활동 내역을 보여주는 개인 페이지.
  • 팔로우: 사용자가 다른 사용자의 활동을 추적하고 소식을 받아볼 수 있도록 설정하는 기능.

5. 예외 상황 및 대응

  1. 프로필을 비공개한 다른 사용자의 프로필 조회
    • 프로필이 비공개 설정한 사용자의 프로필을 조회한 경우 “정보를 비공개한 사용자입니다.”라는 메시지를 제공해야 함.
  2. 탈퇴한 사용자 프로필 조회
    • 이미 계정을 탈퇴한 사용자의 프로필을 조회한 경우 “계정을 탈퇴한 회원입니다.”라는 메시지를 제공해야 함.

6. 서비스 흐름 예시

단계 설명
1. 프로필 조회 사용자가 자신의 또는 다른 사용자의 프로필을 조회
2. 프로필 수정 사용자가 닉네임, 프로필 사진, 한줄 소개를 수정
3. 팔로우 사용자가 다른 사용자를 팔로우 또는 팔로우 취소
4. 팔로우 목록 관리 사용자가 팔로우 목록에서 사용자들을 조회 및 관리
5. 신고 사용자가 부적절한 사용자를 신고

7. 추가 연계 기능

  1. 마이페이지 연동
    • 사용자는 마이페이지에서 자신의 프로필 정보를 관리할 수 있음.
  2. 커뮤니티 연동
    • 프로필 공개 여부에 따라 커뮤니티에서 사용자의 표시되는 정보가 달라짐.
  3. 푸쉬 알림 연동
    • 팔로우한 사용자의 새로운 게시글 또는 주요 활동에 대한 알림을 받을 수 있어야 함.

10. 관리자 기능

1. 개요

  • 관리자는 시스템의 전반적인 운영과 관리를 책임지며, 사용자 관리, 커뮤니티 관리, 시스템 설정 등의 기능을 수행합니다.
  • 관리자는 문제 상황에 대응하고 서비스의 질서와 안정성을 유지할 수 있는 기능들을 제공받아야 합니다.
  • 관리자는 신고 누적 등 규정 위반 사용자를 블랙리스트에 등록하여 영구 접근 차단재가입 방지를 수행할 수 있습니다.

2. 일반 요구사항

  1. 시스템 설정 관리 제공
    • 관리자는 시스템의 기본 설정(사이트 이름, 로고 등)과 보안 정책(비밀번호 정책, 접근 권한 등)을 관리할 수 있어야 합니다.
  2. 사용자 관리 기능 제공
    • 관리자는 사용자의 목록과 상세 정보를 조회할 수 있어야 합니다.
    • 사용자가 신고된 경우 해당 계정을 검토하여 제재 또는 복구할 수 있어야 합니다.
    • 사용자는 필요시 계정을 삭제하거나 복구할 수 있어야 합니다.
    • 블랙리스트 기능
      • 관리자는 신고 내역 또는 문제 행위를 근거로 사용자를 블랙리스트에 등록할 수 있어야 함.
      • 블랙리스트에 등록된 사용자는 서비스에 접근할 수 없으며, 재가입이 차단됨.
    • 재가입 방지
      • 시스템은 회원가입 시 **블랙리스트 정보(아이디, 전화번호)**와 대조하여 재가입을 차단해야 함.
    • 블랙리스트 관리 제공
      • 관리자는 블랙리스트 사용자 목록을 조회, 등록, 삭제할 수 있어야 함.
  3. 커뮤니티 관리 기능 제공
    • 관리자는 본인이 작성한 커뮤니티의 모든 게시글, 댓글, 답글에 대한 조회, 수정, 삭제 권한을 가져야 합니다.
    • 관리자는 공지사항 게시판에 새로운 공지사항을 추가하거나 기존 공지를 수정, 삭제할 수 있어야 합니다.
    • 관리자는 삭제된 모든 게시글, 댓글, 답글에 대한 조회 권한을 가져야 합니다.
  4. 사용자 활동 관리 제공
    • 관리자는 사용자의 커뮤니티 활동 내역(게시글, 댓글, 답글 등)을 조회하고, 필요시 삭제 조치를 취할 수 있어야 합니다.

3. 상세 요구사항

  1. 시스템 설정 관리
    • 관리자는 시스템의 기본 설정을 변경할 수 있어야 합니다.
      • 사이트 정보 관리: 사이트 이름, 로고, 소개 문구 등 변경 가능.
      • 보안 설정 관리: 비밀번호 정책(최소 길이, 대문자 포함 여부 등)과 접근 권한 설정 가능.
  2. 사용자 관리
    • 사용자 목록 조회
      • 관리자는 사용자의 목록을 조회할 수 있어야 하며, 각 사용자에 대한 기본 정보를 제공받아야 함.
      • 기본 정보에는 아이디, 닉네임, 전화번호, 상태(활성/탈퇴), 신고 누적 수 등이 포함됨.
      • 관리자는 사용자 목록에서 신고 내역블랙리스트 목록을 조회할 수 있음.
      • 필요시 블랙리스트 해제 기능도 제공됨.
    • 사용자 계정 조치
      • 관리자는 사용자 계정을 삭제 또는 복구할 수 있어야 함.
      • 탈퇴 사용자 복구: 탈퇴 후 복구 가능한 기간 내에 있는 사용자를 복구할 수 있음.
      • 계정 삭제: 필요시 영구 삭제 기능 제공.
  3. 커뮤니티 관리
    • 관리자는 커뮤니티 내에서 다뤄지는 본인이 작성한 콘텐츠(게시글, 댓글, 답글)를 관리할 수 있어야 함.
      • 게시글 관리: 게시글 조회, 수정, 삭제 가능.
      • 댓글 및 답글 관리: 댓글과 답글 조회, 수정, 삭제 가능.
      • 공지사항 관리: 관리자는 공지사항 게시판에 공지를 추가, 수정, 삭제할 수 있어야 함.
      • 삭제된 콘텐츠 관리 : 관리자는 삭제된 모든 콘텐츠를 조회할 수 있어야함.
  4. 사용자 활동 관리
    • 관리자는 사용자의 커뮤니티 활동 내역을 조회할 수 있어야 함.
      • 조회 항목: 게시글, 댓글, 답글, 좋아요 내역 등.
      • 필요시 특정 활동 내역을 삭제할 수 있어야 함.
  5. 신고 관리
    • 신고 내역 조회
      • 관리자는 신고된 콘텐츠의 내역을 조회할 수 있어야 함.
      • 신고 내역에는 신고된 콘텐츠, 신고자 정보, 신고 사유, 신고 대상이 포함됨.
    • 조치 및 기록
      • 관리자는 신고 내역을 검토하고 필요시 제재(계정 정지, 게시물 삭제 등)를 할 수 있어야 함.
      • 관리자는 신고 내역을 검토하여 필요한 경우 블랙리스트 등록을 결정할 수 있음.
  6. 블랙리스트 관리
    • 등록 절차
      • 관리자는 신고 접수 및 검토 후 문제 사용자를 블랙리스트에 등록할 수 있음.
        • 사용자가 블랙리스트에
      • 등록 시 다음 정보가 기록됨:
        • 사용자 이름, 전화번호 등 식별 정보
        • 등록 사유 및 관리자 메모
    • 차단 조건
      • 블랙리스트에 등록된 사용자는 즉시 로그아웃 처리되며, 서비스 접근이 차단됨.
      • 재가입 시도 시 "해당 서비스 이용이 제한되었습니다" 메시지를 제공해야 함.

4. 용어 정의

  • 관리자: 시스템 전반의 운영과 관리를 담당하는 사용자.
  • 시스템 설정: 사이트 정보 및 보안 정책 등 시스템의 기본 설정.
  • 사용자 관리: 사용자의 계정 정보와 상태를 조회 및 조치하는 기능.
  • 커뮤니티 관리: 게시글, 댓글 등의 커뮤니티 콘텐츠를 관리하는 기능.
  • 블랙리스트: 규정 위반으로 인해 서비스 접근이 영구적으로 차단된 사용자 목록.
  • 신고: 사용자가 부적절한 사용자나 콘텐츠를 관리자에게 알리는 기능.
  • 재가입 방지: 블랙리스트에 등록된 사용자가 동일 정보로 재가입을 시도할 때 차단하는 기능.

5. 예외 상황 및 대응

  1. 관리 권한
    • 관리 권한이 없는 사용자가 관리자 페이지에 접근할 수 없음.
  2. 사용자 정보 조회 실패
    • 데이터베이스 오류 등으로 인해 사용자 정보를 불러오지 못할 경우 "사용자 정보를 불러올 수 없습니다"라는 메시지를 제공해야 함.
  3. 조치 실패
    • 제재 또는 복구 조치가 실패할 경우, "조치가 실패하였습니다. 다시 시도해주세요"라는 메시지를 제공해야 함.
  4. 재가입 시도 차단
    • 블랙리스트에 등록된 사용자 정보와 일치할 경우 즉시 차단되어야 함.
  5. 신고 및 블랙리스트 오작동
    • 잘못된 신고나 실수로 블랙리스트에 등록된 경우, 관리자가 블랙리스트를 해제하고 사용자를 복구할 수 있어야 함.

6. 서비스 흐름 예시

단계 설명
1. 관리자 페이지 진입 관리자가 관리자 페이지에 로그인 및 진입
2. 사용자 관리 사용자 목록을 조회하고 계정 상태를 조치
3. 커뮤니티 콘텐츠 관리 게시글 및 댓글을 조회, 수정, 삭제
4. 신고 내역 검토 신고된 사용자 및 콘텐츠를 검토
5. 시스템 설정 변경 사이트 이름, 로고, 보안 정책 등을 변경
6. 블랙리스트 관리 블랙리스트 사용자 목록을 조회 및 관리

7. 추가 연계 기능

  1. 사용자 관리 연동
    • 관리자는 사용자 관리 페이지에서 사용자의 기본 정보와 활동 내역, 신고내역을 함께 조회할 수 있어야 함.
  2. 커뮤니티 연동
    • 커뮤니티에서 부적절한 게시글, 댓글 등이 신고된 경우 관리자가 즉시 접근하여 조치할 수 있어야 함.
  3. 신고 기능 연동
    • 신고 내역 검토 후 관리자가 블랙리스트에 사용자 등록 가능.
  4. 회원가입 기능 연동
    • 회원가입 시 블랙리스트 정보와 대조하여 일치하는 경우 가입을 차단함.

11. 푸쉬 알림 설정

1. 개요

  • 사용자에게 전달되는 푸쉬 알림에 대한 요구사항을 정의합니다.
  • 푸쉬 알림은 데일리 OPU 알림, 랜덤 뽑기 알림, 댓글 및 답글 알림 등 주요 활동과 관련된 정보를 사용자 기기에 제공하여 목표 수행을 독려하고 커뮤니케이션을 활성화합니다.
  • 사용자는 각 알림에 대한 설정/차단 기능을 통해 필요에 맞게 알림을 관리할 수 있습니다.

2. 일반 요구사항

  1. 알림 종류 제공
    • 시스템은 다음과 같은 유형의 알림을 제공해야 합니다.
      • 데일리 OPU 알림: 매일 아침 9시에 설정된 OPU 목표 알림 제공.
      • 랜덤 뽑기 알림: 매일 아침 9시에 랜덤 OPU 뽑기 알림 제공.
      • 댓글/답글 알림: 사용자가 작성한 게시글 또는 댓글에 새로운 댓글이나 답글이 달릴 때 알림 제공.
  2. 알림 설정 기능 제공
    • 사용자는 알림에 대한 수신 여부를 설정할 수 있어야 합니다.
    • 알림이 필요 없는 경우 알림을 차단할 수 있어야 합니다.
  3. 푸쉬 알림 전송
    • 시스템은 사용자 기기로 푸쉬 알림을 정확한 시간에 전송해야 합니다.

3. 상세 요구사항

  1. 데일리 OPU 알림
    • 알림 시간: 매일 아침 9시
    • 알림 내용:
      • 사용자가 당일 수행할 데일리 OPU 목록 제공.
      • 예시 메시지:
      • 오늘의 목표: 물마시기, 책읽기! 목표를 완료해보세요!
    • 상호작용:
      • 사용자가 알림을 클릭하면 해당 OPU 관리 페이지로 이동하여 목표를 확인할 수 있어야 함.

  1. 랜덤 뽑기 알림
    • 알림 시간: 매일 아침 9시
    • 알림 내용:
      • 랜덤 OPU 뽑기 기능 알림 제공.
      • 예시 메시지:
      • 오늘의 랜덤 OPU를 뽑아보세요!
    • 상호작용:
      • 사용자가 알림을 클릭하면 랜덤 OPU 뽑기 페이지로 이동해야 함.

  1. 댓글/답글 알림
    • 알림 조건:
      • 사용자가 작성한 게시글이나 댓글에 새로운 댓글 또는 답글이 달릴 때 알림 제공.
      • 알림은 즉시 전송되어야 함.
    • 알림 내용:
      • 예시 메시지:
      • [홍길동]님이 게시글에 새로운 댓글을 남겼습니다: "좋은 정보 감사합니다!"
    • 상호작용:
      • 사용자가 알림을 클릭하면 해당 게시글 또는 댓글로 이동해야 함.

  1. 알림 설정 기능
    • 사용자는 설정에서 모든 알림에 대한 수신 여부를 설정할 수 있어야 함.
    • 알림 설정 옵션:
      • 알림 ON/OFF
    • 사용자가 알림을 차단한 경우, 알림은 전송되지 않아야 함.

4. 용어 정의

  • 푸쉬 알림: 사용자 기기에 전송되는 알림 메시지로, 서비스 참여와 활동 독려를 위한 정보 제공.
  • 데일리 OPU 알림: 매일 설정된 OPU 목표를 안내하는 알림.
  • 랜덤 뽑기 알림: 사용자가 랜덤 OPU 뽑기를 진행하도록 유도하는 알림.
  • 댓글/답글 알림: 사용자가 작성한 게시글이나 댓글에 새로운 댓글 또는 답글이 달렸을 때 제공되는 알림.

5. 예외 상황 및 대응

  1. 알림 전송 실패
    • 네트워크 오류로 인해 알림 전송이 실패한 경우, 일정 시간 후 재전송 시도.
  2. 알림 설정 미적용
    • 사용자가 알림을 설정했음에도 알림이 미전송되는 경우, "설정 오류"라는 메시지를 제공하고 재설정 유도.

6. 서비스 흐름 예시

단계 설명
1. 알림 설정 사용자가 마이페이지에서 알림 설정 관리
2. 알림 전송 시스템이 조건에 맞는 알림을 전송
3. 알림 수신 사용자가 기기에서 알림을 수신 및 확인
4. 상호작용 알림을 클릭하여 해당 기능 페이지로 이동
5. 알림 기록 조회 사용자가 마이페이지에서 알림 기록 조회

7. 추가 연계 기능

  1. 마이페이지 연동
    • 사용자는 마이페이지에서 알림 설정 및 기록을 관리할 수 있어야 함.
  2. 커뮤니티 연동
    • 댓글 및 답글 알림은 커뮤니티의 게시글 및 댓글 활동과 연동됨.
  3. OPU 관리 연동
    • 데일리 OPU 알림과 랜덤 뽑기 알림은 OPU 관리 기능과 연동됨.

 

3) 플로우차트

 

4) 유스케이스

 

5) ERD  (논리 & 물리)

 

6) 테이블 정의서 (DDL 구문)

더보기
-- -----------------------------------------------------------------
-- 외래 키 제약 조건을 무시하여 테이블 삭제
-- -----------------------------------------------------------------
SET FOREIGN_KEY_CHECKS = 0;

-- 재생성을 위해 테이블 모두 삭제
DROP TABLE IF EXISTS `answer`;
DROP TABLE IF EXISTS `blacklist`;
DROP TABLE IF EXISTS `comment`;
DROP TABLE IF EXISTS `comment_like`;
DROP TABLE IF EXISTS `follow`;
DROP TABLE IF EXISTS `level`;
DROP TABLE IF EXISTS `notify`;
DROP TABLE IF EXISTS `opu_add`;
DROP TABLE IF EXISTS `opu_category`;
DROP TABLE IF EXISTS `opu_like`;
DROP TABLE IF EXISTS `opu_list`;
DROP TABLE IF EXISTS `opu_script`;
DROP TABLE IF EXISTS `post`;
DROP TABLE IF EXISTS `post_category`;
DROP TABLE IF EXISTS `post_img`;
DROP TABLE IF EXISTS `post_like`;
DROP TABLE IF EXISTS `question`;
DROP TABLE IF EXISTS `result`;
DROP TABLE IF EXISTS `time`;
DROP TABLE IF EXISTS `user`;

-- 외래 키 제약 조건 다시 활성화
SET FOREIGN_KEY_CHECKS = 1;

-- -----------------< CREATE문 시작 >-----------------

-- 등급 테이블
CREATE OR REPLACE TABLE `level` (
    `level_id`    INTEGER NOT NULL AUTO_INCREMENT COMMENT '등급 ID',
    `level_title` VARCHAR(15) NOT NULL COMMENT '등급 이름',
    `level_criteria`    VARCHAR(255) NOT NULL COMMENT '등급기준',
    PRIMARY KEY (`level_id`)
) COMMENT = '등급';

-- 사용자 테이블
CREATE OR REPLACE TABLE `user` (
    `user_code`    INTEGER      NOT NULL AUTO_INCREMENT COMMENT '사용자 코드',
    `user_id`      VARCHAR(30)  NOT NULL COMMENT '아이디',
    `user_name`    VARCHAR(255) NOT NULL COMMENT '이름',
    `password`     VARCHAR(255) NOT NULL COMMENT '비밀번호',
    `nickname`     VARCHAR(255) NOT NULL COMMENT '닉네임',
    `phone`        VARCHAR(11)  NOT NULL COMMENT '전화번호',
    `birth`        DATE         NOT NULL COMMENT '생년월일',
    `profile_img`  TEXT         COMMENT '프로필 사진',
    `introduce`    VARCHAR(255) COMMENT '한 줄 소개',
    `create_date`  TIMESTAMP    DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '계정 생성 날짜',
    `is_manager`   CHAR(1)      NOT NULL DEFAULT 'N' COMMENT '관리자 권한 여부',
    `is_alarm`     CHAR(1)      NOT NULL DEFAULT 'Y' COMMENT '알림 설정 여부',
    `is_public`    CHAR(1)      DEFAULT 'N' COMMENT '계정 공개 여부',
    `is_delete`    CHAR(1)      NOT NULL DEFAULT 'N' COMMENT '탈퇴 여부',
    `delete_date`  TIMESTAMP    COMMENT '탈퇴 신청 날짜',
    `level_id`     INTEGER      DEFAULT 1 NOT NULL COMMENT '등급 ID',
    PRIMARY KEY (`user_code`),
    UNIQUE ( `user_id` ),
    UNIQUE ( `phone` ),
    FOREIGN KEY (`level_id`)
        REFERENCES `level` (`level_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT
) COMMENT = '사용자';

-- OPU 카테고리
CREATE OR REPLACE TABLE `opu_category` (
    `opu_category_id`   INTEGER  NOT NULL AUTO_INCREMENT COMMENT 'OPU 카테고리 ID',
    `opu_category_name` CHAR(5)  NOT NULL COMMENT 'OPU 카테고리 이름',
    PRIMARY KEY (`opu_category_id`)
) COMMENT = 'OPU 카테고리';

-- 성향 질문
CREATE OR REPLACE TABLE `question` (
    `question_id`      INTEGER     NOT NULL AUTO_INCREMENT COMMENT '성향 질문 ID',
    `question_content` VARCHAR(60) NOT NULL COMMENT '질문 내용',
    PRIMARY KEY (`question_id`)
) COMMENT = '성향 질문';

-- 성향 답변
CREATE OR REPLACE TABLE `answer` (
    `answer_id`        INTEGER      NOT NULL AUTO_INCREMENT COMMENT '성향 답변 ID',
    `opu_category_id`  INTEGER      NOT NULL COMMENT 'OPU 카테고리 ID',
    `question_id`      INTEGER      NOT NULL COMMENT '성향 질문 ID',
    `answer_content`   VARCHAR(255) NOT NULL COMMENT '답변 내용',
    PRIMARY KEY (`answer_id`),
    FOREIGN KEY (`opu_category_id`)
        REFERENCES `opu_category` (`opu_category_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`question_id`)
        REFERENCES `question` (`question_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '성향 답변';

-- 블랙리스트
CREATE OR REPLACE TABLE `blacklist` (
    `blacklist_id`   INTEGER      NOT NULL AUTO_INCREMENT COMMENT '블랙리스트 ID',
    `blacklist_reason`         VARCHAR(255) NOT NULL COMMENT '사유',
    `blacklist_date`  TIMESTAMP    NOT NULL COMMENT '지정 날짜',
    `user_code`    INTEGER NOT NULL COMMENT '사용자코드',
    PRIMARY KEY (`blacklist_id`),
    FOREIGN KEY ( `user_code` )
        REFERENCES `user` (`user_code` )
) COMMENT = '블랙리스트';

-- 성향결과
CREATE OR REPLACE TABLE `result` (
    `user_code`       INTEGER NOT NULL COMMENT '사용자코드',
    `health_score`    INTEGER NOT NULL DEFAULT 0 COMMENT '건강점수',
    `food_score`      INTEGER NOT NULL DEFAULT 0 COMMENT '음식점수',
    `culture_score`   INTEGER NOT NULL DEFAULT 0 COMMENT '문화점수',
    `knowledge_score` INTEGER NOT NULL DEFAULT 0 COMMENT '지식점수',
    PRIMARY KEY (`user_code`),
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '성향결과';

-- OPU스크립트
CREATE OR REPLACE TABLE `opu_script` (
    `opu_id`          INTEGER      NOT NULL AUTO_INCREMENT COMMENT 'OPUID',
    `opu_content`     VARCHAR(30)  NOT NULL COMMENT 'OPU내용',
    `opu_category_id` INTEGER      NOT NULL COMMENT 'OPU카테고리ID',
    PRIMARY KEY (`opu_id`),
    FOREIGN KEY (`opu_category_id`)
        REFERENCES `opu_category` (`opu_category_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = 'OPU스크립트';

-- 시간ID
CREATE OR REPLACE TABLE `time` (
    `time_id`      INTEGER      NOT NULL AUTO_INCREMENT COMMENT '시간ID',
    `time_content` VARCHAR(20)  NOT NULL COMMENT '시간내용',
    PRIMARY KEY (`time_id`)
) COMMENT = '시간ID';

-- OPU목록
CREATE OR REPLACE TABLE `opu_list` (
    `opu_list_id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'OPU목록ID',
    `opu_id`      INTEGER NOT NULL COMMENT 'OPUID',
    `time_id`     INTEGER NOT NULL COMMENT '시간ID',
    PRIMARY KEY (`opu_list_id`),
    FOREIGN KEY (`time_id`)
        REFERENCES `time` (`time_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`opu_id`)
        REFERENCES `opu_script` (`opu_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = 'OPU목록';

-- OPU추가
CREATE OR REPLACE TABLE `opu_add` (
    `opu_add_id`   INTEGER     NOT NULL AUTO_INCREMENT COMMENT 'OPU 추가 ID',
    `user_code`    INTEGER     NOT NULL COMMENT '사용자코드',
    `date`         DATE        NOT NULL COMMENT '날짜',
    `is_check`     CHAR(1)     NOT NULL DEFAULT 'N' COMMENT '체크여부',
    `opu_content`  VARCHAR(30) COMMENT 'OPU내용',
    `opu_list_id`  INTEGER     COMMENT 'OPU목록ID',
    `is_random`    CHAR(1)     DEFAULT 'N' NOT NULL COMMENT '랜덤여부',
    `is_delete`    CHAR(1)     DEFAULT 'N' NOT NULL COMMENT '삭제여부',
    PRIMARY KEY (`opu_add_id`),
    FOREIGN KEY (`opu_list_id`)
        REFERENCES `opu_list` (`opu_list_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = 'OPU추가';


-- OPU 찜
CREATE OR REPLACE TABLE `opu_like` (
    `opu_like_id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'OPU 찜 ID',
    `user_code`   INTEGER NOT NULL COMMENT '사용자코드',
    `opu_list_id` INTEGER NOT NULL COMMENT 'OPU목록ID',
    PRIMARY KEY (`opu_like_id`),
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`opu_list_id`)
        REFERENCES `opu_list` (`opu_list_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = 'OPU 찜';


-- 게시글 카테고리
CREATE OR REPLACE TABLE `post_category` (
    `category_id`   INTEGER     NOT NULL AUTO_INCREMENT COMMENT '게시글-카테고리 ID',
    `category_name` CHAR(30)    NOT NULL COMMENT '카테고리명',
    PRIMARY KEY (`category_id`)
) COMMENT = '게시글-카테고리';

-- 게시글
CREATE OR REPLACE TABLE `post` (
    `post_id`      INTEGER      NOT NULL AUTO_INCREMENT COMMENT '게시글 ID',
    `post_title`   VARCHAR(255) NOT NULL COMMENT '제목',
    `post_content` TEXT         NOT NULL COMMENT '내용',
    `create_at`    TIMESTAMP    DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '생성 시간',
    `update_at`    TIMESTAMP    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '마지막 수정 시간',
    `user_code`    INTEGER      NOT NULL COMMENT '사용자 코드',
    `category_id`  INTEGER      NOT NULL COMMENT '게시글-카테고리 ID',
    `is_delete`    CHAR(1)      DEFAULT 'N' NOT NULL COMMENT '삭제여부',
    `opu_add_id`   INTEGER      COMMENT 'OPU 추가 ID',
    PRIMARY KEY (`post_id`),
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    FOREIGN KEY (`category_id`)
        REFERENCES `post_category` (`category_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`opu_add_id`)
        REFERENCES `opu_add` (`opu_add_id`)
) COMMENT = '게시글';

-- 댓글
CREATE OR REPLACE TABLE `comment` (
    `comment_id`       INTEGER   NOT NULL AUTO_INCREMENT COMMENT '댓글 ID',
    `comment_content`  TEXT      NOT NULL COMMENT '댓글 내용',
    `create_at`        TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '댓글 생성 시간',
    `update_at`        TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '마지막 수정 시간',
    `post_id`          INTEGER   NOT NULL COMMENT '게시글 ID',
    `user_code`        INTEGER   NOT NULL COMMENT '사용자 코드',
    `reply_comment_id` INTEGER   COMMENT '상위댓글ID',
    `is_delete`        CHAR(1)   DEFAULT 'N' NOT NULL COMMENT '삭제여부',
    PRIMARY KEY (`comment_id`),
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    FOREIGN KEY (`reply_comment_id`)
        REFERENCES `comment` (`comment_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    FOREIGN KEY (`post_id`)
        REFERENCES `post` (`post_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '댓글';

-- 댓글 좋아요
CREATE OR REPLACE TABLE `comment_like` (
    `user_code`   INTEGER NOT NULL COMMENT '사용자 코드',
    `comment_id`  INTEGER NOT NULL COMMENT '댓글 ID',
    PRIMARY KEY (`user_code`, `comment_id`),
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`comment_id`)
        REFERENCES `comment` (`comment_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '댓글 좋아요';

-- 팔로우
CREATE OR REPLACE TABLE `follow` (
    `follow_id`       INTEGER NOT NULL AUTO_INCREMENT COMMENT '팔로우 ID',
    `following_code`  INTEGER NOT NULL COMMENT '팔로잉 코드',
    `follower_code`   INTEGER NOT NULL COMMENT '팔로워 코드',
    PRIMARY KEY (`follow_id`),
    FOREIGN KEY (`following_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`follower_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '팔로우';

-- 게시글-사진
CREATE OR REPLACE TABLE `post_img` (
    `img_id`   INTEGER NOT NULL AUTO_INCREMENT COMMENT '게시글-사진ID',
    `post_id`  INTEGER NOT NULL COMMENT '게시글ID',
    `img_url`  TEXT    NOT NULL COMMENT '사진URL',
    PRIMARY KEY (`img_id`),
    FOREIGN KEY (`post_id`)
        REFERENCES `post` (`post_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '게시글-사진';

-- 게시글좋아요
CREATE OR REPLACE TABLE `post_like` (
    `user_code` INTEGER NOT NULL COMMENT '사용자코드',
    `post_id`   INTEGER NOT NULL COMMENT '게시글ID',
    PRIMARY KEY (`user_code`, `post_id`),
    FOREIGN KEY (`post_id`)
        REFERENCES `post` (`post_id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) COMMENT = '게시글좋아요';

-- 신고
CREATE OR REPLACE TABLE `notify` (
    `notify_id`     INTEGER     NOT NULL AUTO_INCREMENT COMMENT '신고ID',
    `notify_reason` TEXT        NOT NULL COMMENT '신고사유',
    `notify_date`   TIMESTAMP   DEFAULT CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '신고날짜',
    `user_code`     INTEGER     NOT NULL COMMENT '신고자ID',
    `post_id`       INTEGER     COMMENT '게시글ID',
    `comment_id`    INTEGER     COMMENT '댓글ID',
    PRIMARY KEY (`notify_id`),
    FOREIGN KEY (`user_code`)
        REFERENCES `user` (`user_code`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    FOREIGN KEY (`post_id`)
        REFERENCES `post` (`post_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    FOREIGN KEY (`comment_id`)
        REFERENCES `comment` (`comment_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
) COMMENT = '신고';

 

 

7) 백업계획

 

8) 테스트 케이스

 

 

GitHub - be15-1st-F1T5-OPU

🦊 김경민 🐱 김채원 🦑 차명호 🐰 윤채영 🦉 정유진 🐼 김여진.

github.com

 

 

 

 

 

6. 회고 및 개선점

 

✅ 잘된 점

  • 활발한 논의와 협업을 통해 빠르게 문제를 해결
  • GitHub, Notion 등을 적극 활용하여 효율적인 프로젝트 관리
  • 성향 검사 및 목표 추천 기능을 통해 차별화된 서비스 제공

🔍 개선할 점

  • 기획 단계에서 보다 구체적인 요구사항 분석 필요
  • 기능 및 서비스 보완
    • OPU 카테고리 보완
    • 챌린지 기능 제작
    • 사용자간 채팅 기능 제작
    • 성향 검사 보완
 

 

 

7. 결과

 

 

https://github.com/beyond-sw-camp/be15-1st-F1T5-OnePointUp

 

GitHub - be15-1st-F1T5-OnePointUp

🦊 김경민 🐱 김채원 🦑 차명호 🐰 윤채영 🦉 정유진 🐼 김여진.

github.com

 

 

 

 

 

마무리
짧은 기간이었지만 만족스러운 결과물을 만들 수 있던 좋은 팀 프로젝트였다.