HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
팀 09 : 눈떠보니개발자
팀 09 : 눈떠보니개발자
/
업적 도메인 개발
업적 도메인 개발
업적 도메인 개발

업적 도메인 개발

Created time
Feb 24, 2024 06:05 PM
github link
ID
20
개발 중요도
1
noti
Status
In progress
Summary
스프린트
S2
누가할꺼임;
지인
주환
Tags
 
 
업적 도메인 개발
DBML
Table user_tb { id bigint [increment, pk] username varchar(255) github_id varchar(255) avatar_url varchar(255) github_url varchar(255) bio varchar(50) jandi_rating double role enum [not null] region enum region_authentication_at timestamp available_join_count int avaiable_like_count int github_pk bigint signup_yn tinyint achievement_id bigint repository_url varchar(255) created_at timestamp deleted_at timestamp } Table user_achievement_tb { id bigint [increment, pk] user_id bigint achievement_id bigint completed boolean achieved_at timestamp } Table achievement_tb { id bigint [increment, pk] title varchar description varchar img_url varchar progress_level int Requirement_type enum ('sequence','count') requirement_value int activity_type } Table user_activity_tb { id bigint [increment, pk] user_id bigint activity_type activity_date timestamp } Ref: user_tb.id > user_event_tb.user_id Ref: user_tb.id > user_achievement_tb.user_id Ref: user_tb.achievement_id > user_achievement_tb.achievement_id Ref: user_achievement_tb.achievement_id > achievement_tb.id { id bigint [increment, pk] title varchar description varchar img_url varchar progress_level int sequence_yn tinyint status enum('PROGRESS, COMPLETED') now_grade int }
 
업적 타입 → achievement_type
  • 한 번에 달성 가능한 업적인지
  • 점진적으로 달성 가능한 업적인지
@Getter public enum AchievementType { ONCE(1), THIRD(3), FIFTH(5), TENTH(10) private final int level; AchievementType(int level) { this.level = level; } public static AchievementType getByLevel(int level) { for (AchievementType type : Achievement.values()) { if (type.getLevel() == level) { return type; } } return null; } }
 
업적의 연속성 → sequence_yn
  • (연속성의 기준은 ‘하루’로 가정)
  • true : 연속 3일동안 프로젝트 매칭을 진행
  • false : 연속성, 기한 상관없이 3회동안 프로젝트 매칭을 진행
 
연속성의 기준을 하루 로만 가져갈 것인지?
예1) 하루동안 ‘찔러보기’ 요청 3회 달성 시
예2) 일주일동안 ‘프로젝트’ 매칭을 모든 서비스 지역에서 수행했을 시
연속성의 기준을 하루 로만 가져갈 것인지? 예1) 하루동안 ‘찔러보기’ 요청 3회 달성 시 예2) 일주일동안 ‘프로젝트’ 매칭을 모든 서비스 지역에서 수행했을 시
 
  • (연속성의 기준을 자유롭게 가정)
  • sequence_yn
    • boolean으로 관리
    • true : 연속성을 가짐
    • false : 연속성을 가지지 않음
      • deadline : null or ZERO(0)
  • deadline → 확장성을 고려, but 필요없을듯!
    • enum으로 관리
    • ONCE(1)
    • SEVENTH(7)
 
sequence_yn
deadline
achievement_type
description
true
0
3
연속 3일동안 매칭
true
1
3
하루동안 연속 3번 매칭
false
7
5
7일동안 5번 달성
false
0
1
최초 1번 달성
false
0
3
기간 상관없이 3번 달성
false
1
3
하루동안 3번 매칭
 
업적의 연속성 체크
  • 연속성 업적에 대한 별도의 테이블을 분리?
  • 이벤트 히스토리를 남기기
  • 레코드를 생성하면서, 해당 업적의 sequence_yn / achievement_type 을 바탕으로 연속체크 쿼리 수행
    • event_date 를 기준으로 하루 전날 이벤트 히스토리를 추적
 
별도로 event 테이블을 두어서 연속성 업적 조건을 관리하는 방법
예) 연속성을 고려한 업적의 경우, (연속 3일 프로젝트 매칭 완료) 업적을 위한 작업을 수행했을 때 event 테이블에서 
오늘 날짜를 기준으로 전날 이벤트 히스토리를 조회
- 히스토리가 존재하는 경우 grade += 1
- 히스토리가 존재하지 않는 경우 grade = 0
- grade == achievement_type 조건 만족 시, completed!
별도로 event 테이블을 두어서 연속성 업적 조건을 관리하는 방법 예) 연속성을 고려한 업적의 경우, (연속 3일 프로젝트 매칭 완료) 업적을 위한 작업을 수행했을 때 event 테이블에서 오늘 날짜를 기준으로 전날 이벤트 히스토리를 조회 - 히스토리가 존재하는 경우 grade += 1 - 히스토리가 존재하지 않는 경우 grade = 0 - grade == achievement_type 조건 만족 시, completed!
 
create table user_event_tb { id bigint auto_increment primary key, user_id bigint not null, achievement_id bigint not null, event_date timestamp // 연속성 업적 이벤트 수행일 }
사용자 이벤트 히스토리 테이블
 
event 테이블을 두지 않고 user_achievement 와 매칭 히스토리 project / matching 로 관리 고려
예) 연속성을 고려한 업적의 경우, (연속 3일 프로젝트 매칭 완료) 업적을 위한 작업을 수행했을 때 매칭 히스토리를 
통해서 해당 사용자가 전날 프로젝트 제안자, 참여자로써 매칭이 완료된 내역이 있는지 확인
- 내역이 있을 경우 grade += 1
- 내역이 없을 경우 grade = 0
- grade == achievement_type 조건 만족 시, completed!
event 테이블을 두지 않고 user_achievement 와 매칭 히스토리 project / matching 로 관리 고려 예) 연속성을 고려한 업적의 경우, (연속 3일 프로젝트 매칭 완료) 업적을 위한 작업을 수행했을 때 매칭 히스토리를 통해서 해당 사용자가 전날 프로젝트 제안자, 참여자로써 매칭이 완료된 내역이 있는지 확인 - 내역이 있을 경우 grade += 1 - 내역이 없을 경우 grade = 0 - grade == achievement_type 조건 만족 시, completed!
 
프로젝트 매칭 관련 엔티티
프로젝트 매칭 관련 엔티티
 
업적 최초 달성일, 점진적 달성일
  • 한 번에 달성 가능한 업적의 경우 → 최초 달성일 O, 수정일 null
  • 점진적으로 달성 가능한 업적의 경우
    • 연속성을 가지지 않는 업적의 경우 → 최초 달성일 O, 수정일 O
    • 연속성을 갖는 업적의 경우 → 연속성을 모두 만족하는 최초 달성일 O, 수정일 null
 
연속성을 다룬다면 최초 생성일이 필요한지? 점진적으로 달성할 때마다 달성일이 필요한지?
연속성을 다룬다면 최초 생성일이 필요한지? 점진적으로 달성할 때마다 달성일이 필요한지?
 
업적에 대한 이벤트 처리
  • 특정 업적과 관련된 이벤트 (예: 프로젝트 매칭 완료) 가 발생 시, 어떻게 해당 업적에 처리를 할 것인가!
    • 노가다,,,?
    •  
[Unity] 유니티 데이터 기반 퀘스트 시스템 구현 (업적 및 주간 일간) - 달여행
퀘스트 시스템은 어떤 게임이던 필수적으로 들어가는 경우가 많습니다. 퀘스트 시스템 특성 상 게임의 여러 부분과 엮이다 보니 설계를 잘못할 경우 제작 일정에 큰 영향을 미칠 수 있습니다. 이번 시간에는 어떤 게임 이든 바로 적용 가능한 데이터 기반 퀘스트 시스템을 구현해 보겠습니다.
[Unity] 유니티 데이터 기반 퀘스트 시스템 구현 (업적 및 주간 일간) - 달여행
https://programmingdev.com/unity-유니티-데이터-기반-퀘스트-시스템-구현-업적-및-주/
[Unity] 유니티 데이터 기반 퀘스트 시스템 구현 (업적 및 주간 일간) - 달여행