제목

버츄얼 유튜버 커뮤니티 사이트 요구분석 및 설계

   2022년08월15일     25분읽었습니다.

버츄얼 유튜버 게시판을 만들기 위한 설계를 설명하는 페이지입니다.

사이트 제작 이유

현재 버츄얼 유튜버 시장은 성장하고, 많은 사람들과 회사들이 나오고 있지만, 그 커뮤니티는 여러 커뮤니티 안에서 마이너 커뮤니티로서 활동되고, 거대한 버츄얼 회사들을 제외하면 그 커뮤니티 조차 없습니다.
그래서 홀로라이브 뉴스라는 팬사이트를 보고 현재 성장해 가고 있는 버츄얼 시장에 버츄얼 전체를 아우르는 팬 커뮤니티인 사이트가 있었으면 좋겠다고 생각해 제작을 결정했습니다.

제작 목표

여타 커뮤니티처럼 작동하는 커뮤니티 사이트를 만들어 서버 구동까지 하는 것이 목표입니다.

참고 사이트

아카라이브홀로라이브 뉴스 사이트를 참고해 제작 방향을 결정했습니다.

제작 페이지별 초기 예상 필요 기능 및 고려해야할 것들

메인 페이지

  1. 로그인 여부 확인
  2. 구독한 커뮤니티에 대해 메인 페이지에서 간단한 정보들을 보여줌
  3. 구글 에드센스를 이용한 광고의 삽입이 필요하고 위치를 사람들이 거북해 하지 않을만한 위치로 구성해야 함
  4. 사이트 관리 페이지 제작 및 권한 확인
    • 사이트 관리 페이지에는 관리자만 접근 가능
    • 사이트 URL별 인가 설정 및 유저 권한 부여 제작, 권한 부여의 경우 유저가 많아질 것을 대비해 검색 기능 구현 필요
    • 사이트 게시판 관리(등록, 수정, 삭제) 페이지, 문의를 확인할 수 있는 페이지, 홍보 배너 등록 페이지 제작 필요
  5. 고려 중인 기능으로 알람 기능이 있어 만약 구현하게 된다면 알람 버튼을 만들어 쉽게 볼 수 있게 하고 싶음
  6. 일정 대가(포인트, 돈)를 지불하면 본인 채널의 홍보나 버튜버 및 버튜버 회사의 홍보를 배너로 걸어 둘 수 있음
  7. 구독중인 게시판으로 이동할 수 있도록 목록을 보여줌
    • 각 단축키를 설정하고, 단축키를 누르면 바로 이동할 수 있도록 하는 기능 생각 중
  8. 홍보를 삽입할 때 받은 사진을 프론트앤드에서 구현하는 것이 아니라 백앤드에 저장을 하면 자동으로 바뀌어서 나오게 설정하는게 효과적일 듯

로그인 및 회원가입, 아이디, 비밀번호 찾기

  1. 로컬 회원가입을 진행하고, 소셜 회원가입은 마이페이지에서 연결을 통해 구현
    • 고려 중인 기능은 소셜 회원가입을 진행하고, 그 정보를 가지고, 추가적인 로컬 회원가입을 진행해 두 방식의 로그인을 지원하는 형식으로 가고자 함
  2. 만약 소셜 연결을 진행했다면 로그인 시 소셜 로그인 만으로도 로그인이 가능하도록 설정
  3. 회원가입시 이메일 인증을 진행하고, 비밀번호 찾기 시 이메일 인증을 진행하고, 비밀번호 변경을 진행
    • 고려 중인 기능은 이메일 인증 시 문자열이 아닌 링크를 통한 인증을 구현하고 싶음

마이페이지

  1. 마이페이지에는 내 글/댓글 확인, 정보수정, 스크랩 게시글 정보, 팔로우 인원 및 구독한 채널 리스트, 최근 들어간 게시글, 추천한 게시글로 가는 버튼을 띄움
  2. 마이페이지에 출력되는 정보는 내 정보, 레벨, 가지고 있는 역할, 닉네임을 보여줄 예정
  3. 정보 수정시 비밀번호 인증을 거치게 제작할 예정
  4. 게시글 알람과 구독한 커뮤니티의 특정 게시판이 갱신되면 알람을 받는 것을 키고 끌 수 있는 기능을 제공
  5. 최근 게시글 접속 기록에 경우 켜고 끌 수 있는 버튼 제공
  6. 사용자는 프로필 사진을 등록할 수 있음
  7. 각 버튜버의 맴버쉽이나 구독 정보가 있어 그 정보를 인증할 경우 프로필 상에 마크와 같은 것을 달아줌
  8. 버튜버를 팔로우하면 해당 버튜버의 굿즈나 추가 소식이 나왔을 경우 알람을 띄움(굿즈의 경우 태그로 되어있으나 만약 게시글의 정보도 알람을 띄우려면 최소한 정보 계시글은 태그 기능이 동작하도록 해야함)

문의

  1. 문의는 크게 일반 문의와 홍보 문의로 나눠지며 권한은 모든 가입 유저들이 등록, 수정, 삭제할 수 있음
    • 일반 문의는 사이트 오류, 포인트 관련 질문, 사이트 기능 추가 등의 일반적인 문의들을 작성할 수 있도록 함
    • 홍보 문의는 기간을 선택할 수 있도록 하며 그 기간에 따른 포인트 소모가 달라지도록 함
  2. 문의의 경우 크게 문의 대기, 문의 확인 중, 문의 처리 완료, 문의 취소 상태를 가짐

게시판

  1. 게시판은 관리자만이 만들 수 있고, 채널 관리자 또한 관리자만 임명할 수 있음.
    • 만약 회사 관계자가 있을 경우 회사 관계자 또한 채널 관리자의 역할을 수행할 수 있음. 하지만 두 역할군은 종속적인 관계가 아님. 즉 회사 관계자가 꼭 채널 관리자일 필요는 없음.
  2. 게시판에 들어가면 리스트로 보여주는 것은 번호, 제목, 작성자, 작성일, 조회수, 추천수를 확인할 수 있음
  3. 추가 예상 기능으로 게시판의 생성 날짜나 추천수, 조회수를 기준으로 정렬하는 기능을 생각하고 있음
  4. 게시글 작성은 기본적으로 누구나 가능하며, 게시판의 하위 게시판 개시글의 조회, 생성, 삭제, 수정 등의 연산은 채널 관리자가 설정할 수 있음
  5. 게시글의 검색은 제목, 작성자, 제목/내용, 제목/내용/댓글로 검색 할 수 있도록 만들 예정
  6. 게시글 작성시 각 게시판의 하위 게시판을 선택하고, 게시글 제목과, 내용을 선택할 수 있음. 첨부는 링크와 사진만 가능. 동영상은 링크로만 첨부 가능
    • 게시판 베너 사진을 설정하면 게시글 작성 위에 베너가 보이거나, 게시판 상단에 베너가 보이도록 작성
  7. 게시판의 구독을 가능하게 해 구독한 게시판으로 쉽게 이동할 수 있는 기능 제공
  8. 게시판을 만드는 것은 관리자만 가능함, 게시판의 하위 게시판은 게시판 관리자가 생성, 수정이 가능하고, 게시글의 삭제, 사용자 제재가 가능함
    • 게시판 삭제는 게시글들의 존재 때문에 삭제 게시판 관리자가 삭제할 수 없게 만들 예정
    • 게시판은 반드시 자유 게시판, 정보 게시판, 신고 게시판이 존재해야 함
    • 게시글 삭제와 사용자 제재의 경우 관리자는 삭제 전 신고 게시판에 규칙 해당 게시글의 규칙 위반 내용과 증거, 조치 사항을 작성해야 함. 만약 작성되지 않았을 경우 사용자는 문의 게시판을 통해 이의를 제기할 수 있음
  9. 알람을 사용한다면 지금 많은 커뮤니티에서 하는 것 처럼 게시글에 달린 댓글과 같은 것에 알람이 울리도록 만들지 아님 구독한 게시판의 정보 게시판에 정보가 올라가도 알람이 울리게 할 지 고민해야 함
  10. 게시판에 일러스트나 이모티콘, 배경화면 등을 올리면 사용자들은 포인트를 설정된 포인트(예상: 0~1,000)를 사용해 다운로드 받을 수 있음
  11. 사용자 제재는 해당 조치를 받은 게시판의 접속 차단과, 사이트 자체 접속 차단 또는 게시판 댓글, 게시글 작성 금지나 사이트 전체 금지로 나눌 수 있음
    • 각 다른 커뮤니티에서 3번 이상 영구 제재를 받았다면 사이트 제재를 진행함
    • 사이트 전체 제재의 경우 사이트에 접속할 수는 있음
  12. 게시글 제목, 게시글 내용/댓글, 작성자에 대한 검색이 가능해야 함
  13. 조회수는 1번만 저장되고, 추천도 1번만 등록 가능해야 함
    • 추천은 저장해도 되고, 추천 게시글을 마이페이지에서 볼 수 있게 할 수도 있음

쇼핑 관련

  1. 우선 각 버츄얼 회사들의 굿즈를 판매하는 사이트와 연결되는 링크를 제공한다
    • 혹은 웹 크롤링을 통해 각 버츄얼 회사들의 굿즈를 판매하는 사이트에 판매중인 상품들을 확인 후 DB에 갱신하고, 그 상품 링크를 화면에 뿌림 분류 기능을 제공해야함
  2. 자체 쇼핑몰을 만들어 개인 버튜버들이나, 콜라보 굿즈, 해외 콜라보 상품 개인간 거래에 활용
    • 상품 페이지에는 가격, 판매자, 기한, 리뷰, 기대평, 상품 정보가 들어가야 함
    • 물품의 수량을 고르고 장바구니에 저장이나, 바로 구매할 수 있음
  3. 만약 이 구매에 포인트 적립을 구현한다고 하면 무료 포인트와 유료 포인트로 구분해서, 저장해야 함
  4. 위 쇼핑 등록은 관리자나, 버튜버가 올릴 수 있고, 개인이 올리기 위해서는 관리자에게 문의를 하거나, 개인이 판매자 권한으로 등록 되어야 함

포인트 관련 게임

  1. 포인트 로또는 1~50 까지의 숫자 중 5개와, 1~25의 숫자 중 1개를 맞추거나, 1~50 까지의 숫자 중 6개를 맞추면, 일정 퍼센트의 포인트를 제외하고, 순위에 맞는 배수로 포인트를 제공하는 게임임
    • 만약 첫번째 방법으로 제작한다면, 예상으로는 1등 100배, 2등 50배, 3등 10배, 4등 본전, 5등 건 돈의 1/2배의 방식으로 제작. 하지만 확률 계산을 해보고 다시 변경해야 될 듯. 수수료는 25%
    • 만약 두번째 방법으로 제작하면, 예상으로는 1등 50배, 2등 10배, 3등 2배, 4등 부터는 위의 보상과 같음 수수료도 25%로 동일
    • 주기는 하루에 1번 가능
    • 페이지로써 유지되고, 아래에 지난 회차의 순위 번호와 1등~4등 까지의 인원수가 기록됨. 이는 한 회차가 끝날때 마다 DB에 값을 저장하고, 이 값을 불러오는 방식으로 진행됨
    • 본인이 입력한 번호와 당첨 여부는 마이페이지나, 현 사이트에 그 리스트의 페이지로 이동하는 버튼을 만듦.
    • 로또는 01:00~23:00 까지 포인트를 걸 수 있음
  2. 포인트 토토
    • 경쟁 컨텐츠나, 순위 컨텐츠 등 포인트를 걸고 무언가 예측할 수 있을 만한 이벤트가 있을 경우 생성할 수 있음
    • 사람들의 포인트 예측에 건 포인트를 대상으로 배율을 정하고, 맞춘 사람들이 그 포인트를 가져가는 구조
    • 포인트 토토는 게임 채널 관리자나 관리자가 등록할 수 있고, 배율은 자동으로 정해짐

버튜버 소개 페이지

  1. 관리자가 직접 등록함

서버 관련

  1. 서버 이중화를 하여 한 곳에 문제가 생겨도 문제없이 동작할 수 있도록 구성 필요
    • 서버 이중화 테스트를 위하여 가상 환경을 2개 구축해 서버를 돌리다가 한 서버를 다운시키는 방식으로 테스트 할 수 있음

공부해야 할 점 및 구현 기능 정리

메인 페이지

  1. 구글 에드센스를 사이트에 넣는 방법 공부
  2. 사용자가 작성한 글에 댓글이 달리거나 구독한 커뮤니티에 정보 게시판과 같은 특정 게시판에 정보가 갱신되었을 경우 알람을 사용자가 받을 수 있도록 하는 방법 공부
  3. 사용자들에게 권한 부여 및 인가 정책 구현
  4. 관리자 페이지의 유저 검색 기능, 메인 화면의 채널 검색 기능, 게시글 검색 기능 필요
  5. 사용자가 구독중인 사이트의 목록을 보여줘야 함
  6. 홍보 위치에 사진이 정상적으로 등록되야 함

회원 관리

  1. 사용자가 인증 요청을 하면 인증 메일을 보낼 수 있도록 공부해야 하고, 그 메일을 단순히 문자열이 아닌 시간 제한이 있는 링크로 인증될 수 있도록 공부해야 함
  2. 로컬 회원가입과 소셜 회원가입이 정상적으로 진행 되야 하고, 로그인 또한 둘중 하나로 진행하면 정상적으로 로그인 되어야 함
  3. 해당 유저가 가지고 있는 맴버쉽을 확인해 맴버쉽 인증 마크를 다는 것을 frontend에 구현 후 include 할 수 있다면 그렇게 하고 만약 그것이 안된다면 DB에서 가져올 수 있도록 구현해야 함

게시판

  1. 본인 게시글의 댓글이 생성되거나, 커뮤니티의 특정 개시판의 게시글이 생성되었을 경우 사용자에게 알람을 보낼 수 있는 방법 공부
  2. 게시판의 게시글을 생성 날짜, 조회수, 추천 수로 정렬 될 수 있도록 공부
  3. 게시글 제목, 내용, 댓글, 작성자에 대한 검색이 원할하게 이뤄질 수 있도록 공부
  4. 여러 다른 채널의 관리자들이 모두 관리자 권한으로 설정되어 있으므로, 추가로 각 게시판에 저장되어 있는 관리자를 불러와 각 관리자가 생각한대로 동작할 수 있도록 공부
  5. 댓글의 경우 대댓글을 어떻게 처리할 수 있는지 공부
  6. 채널 관리자가 되면 하위 게시판 생성, 수정할 수 있도록 해야함
  7. 여러 개의 게시판을 만들어 동작되는 사이트를 제작한 경험이 없어 여러 개의 게시판이 정상적으로 화면에 출력될 수 있도록 프론트앤드쪽에 신경을 써야함
  8. 게시판에 제제가 생길 경우 유저에게 게시글 작성과 댓글 작성이 막히거나, 커뮤니티에 들어가지 말아야 함
  9. 사이트 제재와 커뮤니티 제재를 나눌 수 있어야 함. 채널 관리자가 사용자 제재를 등록할 수 있어야 함
  10. 조회수는 만약 저장하기 싫다면 어떻게 조회수를 측정해야 하는가를 고민해야 함. 만약 이를 생각하지 않으면 조회수 조작이 가능함

쇼핑 관련

  1. 쇼핑 목록을 세부 분류 기준으로 분류되어 구매자들이 확인할 수 있도록 공부
  2. 만약 웹 크롤링으로 각 버튜버 굿즈의 정보 갱신을 진행할 경우 이 내용에 대해서도 공부
  3. 상품의 생성, 수정, 삭제와 댓글, 리뷰 등은 게시판의 기능들을 가지고 와 일부 변경만 가하면 쉽게 완성할 수 있을걸로 예상

포인트 게임

  1. 포인트 토토의 경우 포인트를 걸 경우 그 비율에 맞춰 배당을 결정할 수 있는 방법 공부
  2. 포인트 로또의 경우 데이터가 00시에 데이터가 자동으로 저장되고, 23시 10분에 로또 번호가 자동으로 생성될 수 있도록 공부

서버 관련

  1. 서버 이중화 공부 필요

필요 데이터

각각의 기본키에 해당할 자동 증가되는 id 값은 추가하지 않음
따로 특이사항에 작성되있지 않을 경우 모든 UTF-8이 호환하는 문자는 입력 가능함

유저 관리

유저

데이터데이터 타입설명특이사항
유저 아이디String유저가 사이트에 로그인 할 때 ID로 사용될 값, 만약 이메일로 ID를 사용한다면 없어질 예정4~30자까지, 영문자, 숫자만 가능, Null 불가능
유저 비밀번호String사이트에 로그인 할 때 PW로 사용될 값6~50자까지, 특수문자, 영 대/소문자, 숫자를 반드시 포함해야 함, Null 불가능
유저 권한String유저가 사이트에서 가지고 있는 권한Null 불가능
무료 포인트Unsigned Long사용자가 게시글 작성이나 게임에서 받을 포인트기본값은 0, Null 불가능
유료 포인트Unsigned Int사이트에서 굿즈를 구매했을 때 제공되는 포인트기본값은 0, Null 불가능
프로필 사진String프로필 사진의 경로를 저장Null 가능
가입 위치String어떤 소셜이나 로컬로 회원가입한 회원인지 구분을 위해 작성Null 가능
소셜 아이디String소셜에서 가입했을 경우 소셜에서 받은 아이디 값을 저장Null 가능
닉네임String사용자가 사이트에서 사용할 닉네임을 저장2~25자까지 입력 가능, Null 불가능
이메일String사용자의 이메일 주소를 저장Null 불가능
소개문구String사용자의 마이페이지나 글 하단에 나올 소개 문구 저장250자까지 입력 가능, Null 가능
경험치Unsigned Long사용자의 활동 정도에 따라 경험치를 줌기본값은 0, Null 불가능
레벨Unsigned Long경험치를 통해 레벨을 구하는 뷰를 생성할 예정, 혹은 경험치 증가에 따라 레벨 갱신을 진행함기본값은 1, Null 불가능

구독

데이터데이터 타입설명특이사항
유저 아이디Unsigned Int사용자의 테이블 아이디 저장Null 불가능
구독 중인 커뮤니티Int사용자가 구독한 정보가 있을 경우 구독 커뮤니티 아이디 저장Null 불가능

팔로우

데이터데이터 타입설명특이사항
유저 아이디Unsigned Int사용자의 테이블 아이디 저장Null 불가능
팔로우 중인 유저Unsigned Int사용자가 팔로우한 다른 사용자가 있을 경우 그 사용자 테이블 아이디 저장Null 불가능

게시판

커뮤니티

데이터데이터 타입설명특이사항
커뮤니티 이름String커뮤니티의 이름 저장2~20자까지 입력 가능, Null 불가능
커뮤니티 소개String해당 커뮤니티의 소개 저장50자까지 입력 가능, null 가능
채널 관리자Unsigned Int해당 커뮤니티의 관리자들의 유저 테이블 아이디 저장테스트 시 Null 가능
커뮤니티 사진String커뮤니트를 표현할 수 있는 사진의 경로를 저장Null 가능

게시판

데이터데이터 타입설명특이사항
커뮤니티 이름Unsigned Int커뮤니티 아이디를 저장Null 불가능
게시판 이름String게시판 이름 저장2~10자까지 입력 가능, Null 불가능

게시글

데이터데이터 타입설명특이사항
제목String게시글의 제목 저장1~50자까지 입력 가능, Null 불가능
내용String게시글의 내용 저장1~250자까지 입력 가능, Null 불가능
작성자Unsigned Int게시글의 작성자 유저 테이블 아이디 저장Null 불가능
작성 게시판Unsigned Int게시글이 저장된 게시판 아이디 저장Null 불가능
조회수Unsigned Int조회수 저장기본값은 0, Null 불가능

추천인

데이터데이터 타입설명특이사항
해당 게시판 아이디Unsigned Int추천이 눌린 게시글 아이디Null 불가능
추천인Unsigned Int추천인의 유저 테이블 아이디 저장Null 불가능

댓글

데이터데이터 타입설명특이사항
작성자Unsigned Int댓글을 작성한 작성자의 유저 테이블 아이디Null 불가능
해당 게시글 아이디Unsigned Int댓글을 작성한 게시글의 아이디Null 불가능
내용String댓글의 내용Null 불가능
상위 댓글Unsigned Int대댓글에 대비해 만듦Null 가능

쇼핑

상품 등록

데이터데이터 타입설명특이사항
상품 이름String등록한 상품 이름Null 불가능
상품 설명String상품의 설명Null 가능
상품 등록 사용자Unsigned Int상품을 등록한 사용자의 유저 테이블 아이디Null 가능
가격Unsigned Int상품의 가격Null 불가능
상품 링크String만약 상품이 공식 홈페이지에 있을 경우 그 상품의 링크 저장Null 불가능
상품 종류Unsigned Short링크 상품인지, 홈페이지에서 팔고있는 상품인지 구분Null 불가능, 1이면 링크 상품, 2면 홈페이지 상품

상품 관련 버튜버

데이터데이터 타입설명특이사항
상품 아이디String등록한 상품 이름Null 불가능
버튜버 이름Unsigned Int해당 상품의 관련 버튜버Null 불가능

장바구니

데이터데이터 타입설명특이사항
사려는 사람Unsigned Int사려는 사람의 유저 테이블 아이디Null 불가능
상품 아이디Unsigned Int사려는 상품의 아이디Null 불가능
수량Int사려는 상품의 수량Null 불가능

포인트 게임

토토

데이터데이터 타입설명특이사항
토토 제목String토토 제목Null 불가능
토토 내용String토토의 내용Null 불가능

토토 진행자

데이터데이터 타입설명특이사항
토토 아이디String토토 제목Null 불가능
토토 건 사용자Unsigned Int토토에 포인트를 건 사용자의 유저 테이블 아이디Null 불가능
boolean or Unsigned Short어느 팀에 걸었는지Null 불가능
포인트Int얼마나 걸었는지10~1,000까지 걸 수 있음, Null 불가능

로또

데이터데이터 타입설명특이사항
회차Unsigned Int로또의 회차 저장자동 증가, Null 불가능
로또 번호1~6Unsigned Int로또 1~6까지 총 6개의 당첨 번호를 저장Null 불가능

로또 진행자

데이터데이터 타입설명특이사항
회차Unsigned Int로또의 회차 저장Null 불가능
등수Unsigned Short만약 로또에 당첨되면 1~5등까지 등수 저장Null 가능
로또 진행자Unsigned Int로또 진행 인원의 유저 테이블 아이디 저장Null 불가능

버튜버 소개

버튜버 회사

데이터데이터 타입설명특이사항
회사 이름String버튜버 회사 이름 저장Null 불가능
회사 사이트 링크String개인을 제외한 회사의 사이트가 있을경우 해당 사이트의 링크 저장Null 가능

버튜버 소개

데이터데이터 타입설명특이사항
회사 아이디Unsigned Int버튜버의 소속 회사의 테이블 아이디 저장Null 불가능
버튜버 이름String버튜버의 이름 저장Null 불가능
버튜버 소개String버튜버 소개100자까지 입력 가능, Null 가능
방송 링크String방송인의 방송국 링크 저장Null 불가능
SNS 링크String방송인의 SNS 링크 저장Null 가능

UML

엑터

아래 표는 각 액터들의 이름과 설명입니다.

이름설명
관리자사이트의 관리자로서 개발자나 전체 사이트의 관리자
채널 관리자각 버츄얼 커뮤니티 채널의 관리자
채널 활동자각 버츄얼 커뮤니티의 활동 권한을 부여받은 사람들
번역가커뮤니티 활동하는 사람들 중 번역을 하는 사람들
일러스트레이터커뮤니티 활동하는 사람들 중 일러스트를 제작하는 사람들
게스트커뮤니티에 회원가입을 했지만 어떤 역활도 부여받지 못한 사람들

페이지 설계

오븐에 페이지 설계를 함

데이터베이스 설계

ER 다이어그램

데이터베이스 스키마

DB 스키마 사진

BCNF

API 명세서

추후 업로드 예정