-
Notifications
You must be signed in to change notification settings - Fork 4
사용자 추적 인수인계서
사용자 추적 모듈에서는 사용자의 행동들을 추적하여 데이터화 함으로써 엑셀 형태로 운영진들에게 사용자 관리 용도의 문서를 제공하거나 데이터의 시각화 제공, Spring Batch
를 통한 월말 정산 등이 포함되어 있습니다.
데이터는 MongoDB
에 저장하고 있고 사용자의 행동을 추적할 때는, 최대한 기존의 비즈니스 로직을 건들지 않기 위해 Spring AOP
를 이용하여 구현이 되어있습니다.
- userId
- userEmail
- registrationDate
- unRegistrationDate
- intraId
- ftOAuthRegistered
- peerMemberDate
- 피어 동아리원으로 처리된 날짜인데 피어 동아리원 개념이 아직 없어 미구현.
- accumulatedWallet
- 월렛 기획이 확립되지 않아 미구현.
- monthlyAccumulatedWallet
- 월렛 기획이 확립되지 않아 미구현.
- status
- 통상 상태, 탈퇴로는 업데이트가 되나 밴이나 블랙홀, 아우터 등은 아직 미구현.
- reportCount
- 신고 기능이 아직 구현되지 않아 미구현.
- teamId
- teamName
- actionDate
- actionType
- tag
- 미구현.
- actionFinishedDate
- actionUnproperFinishedDate
- 팀 해산 기능이 없어 미구현.
- teamStatus
- ftSubject
- 프로젝트에 42 서브젝트 여부가 없어서 미구현.
- in42
- 미구현.
- actId
- userId
- intraId
- registeredTeamId
- teamType
- actionType
- 가입, 모집 글쓰기, 탈퇴만 구현. 팀 게시판 글쓰기, 댓글쓰기, 팀 결성은 미구현.
- actDate
- wallet
- 활동 별 월렛이 확립되지 않아 미구현.
- handled
- Spring Batch 설정
- Scheduler 구현
- 정산 로직 구현
- 활동에서 월렛 부분이 구현되지 않아 미구현.
-
UserTracking
: 유저 추적 데이터를 저장하는 테이블. -
TeamTracking
: 팀 추적 데이터를 저장하는 테이블. -
ActivityTracking
: 활동 추적 데이터를 저장하는 테이블. -
AutoIncrementSequence
:MongoDB
는 Sequence를 지원하지 않기 때문에 Sequence를 직접 구현하기 위해 만든 테이블.
- Annotation
-
UserRegistrationTracking
: 유저 가입을 추적하기 위한 어노테이션. -
UserWithdrawalTracking
: 유저 탈퇴를 추적하기 위한 어노테이션. -
UserFtLinkTracking
: 유저 42 연동을 추적하기 위한 어노테이션. -
TeamCreateTracking
: 팀 생성을 추적하기 위한 어노테이션. -
TeamUpdateTracking
: 팀 수정을 추적하기 위한 어노테이션. -
RecruitWritingTracking
: 모집 글쓰기를 추적하기 위한 어노테이션.
-
- Aspect
-
UserTrackingAspect
: 유저 추적 부분 Aspect가 구현되어 있는 클래스. -
TeamTrackingAspect
: 팀 추적 부분 Aspect가 구현되어 있는 클래스. -
ActivityTrackingAspect
: 활동 추적 부분 Aspect가 구현되어 있는 클래스.
-
- Mongo
-
SequenceGeneratorService
: MongoDB를 위한 Sequence를 구현한 클래스. -
ActivityTrackingListener
: MongoDB에 데이터가 추가되는 트리거를 리스닝 하기위한 클래스.
-
- Batch
-
JobConfig
: Spring Batch의 Job들이 구현되는 클래스. -
JobScheduler
: Spring Batch에 사용될 스케쥴러가 구현되는 클래스.
-
해당 모듈의 구현은 모두 Spring AOP
를 이용하여 구현되어 있습니다. 해서 해당 모듈의 비즈니스 로직을 파악하기 위해서는 우선 Aspect
에서 Advice
들의 PointCut
을 살펴보아 Aspect
가 어느 JoinPoint
에서 동작하는지를 파악해야 합니다. 그 후 Advice
의 종류가 무엇인지를 파악한 후 필요한 데이터를 비즈니스 로직에서 어떻게 가져오는지를 살펴보아야 합니다. 예를 들어 AfterReturning
의 경우 함수의 리턴 밸류에서 데이터를 가져올 것이고 Aroud
의 경우 ProcessJoinPoint
에서 직접 Arguemnts
를 가져오는 케이스가 많을 것입니다. 그렇게 가져온 데이터를 바탕으로 추적 데이터를 구성하여 MongoDB에 insert를 하거나 update를 하는 것이 이 모듈의 주된 로직입니다.
그래서 정리를 하자면, 비즈니스 로직이 동작 -> 해당 비즈니스 로직을 PointCut
으로 지정한 Advice
가 동작 -> Advice
종류에 따라 땡겨온 데이터를 바탕으로 추적 데이터 구성 -> DB에 저장 or 수정이 되겠습니다.
추가로 Spring Batch
의 경우 크게 Job
과 Step
과 Scheduler
가 있습니다. 일련의 Step
들이 Job
을 구성하고 Batch는 이 Job을 기본 단위로 동작을 합니다. 해서 Batch는 Scheduler에서 정의한 스케쥴링에 따라 Job들을 실행하고 각각의 Job은 포함된 Step들을 순서대로 실행시킨다고 보면 됩니다.