Skip to content

사용자 추적 인수인계서

Hyeong Chan Kim edited this page Nov 27, 2023 · 6 revisions

Outline

사용자 추적 모듈에서는 사용자의 행동들을 추적하여 데이터화 함으로써 엑셀 형태로 운영진들에게 사용자 관리 용도의 문서를 제공하거나 데이터의 시각화 제공, Spring Batch를 통한 월말 정산 등이 포함되어 있습니다.

데이터는 MongoDB에 저장하고 있고 사용자의 행동을 추적할 때는, 최대한 기존의 비즈니스 로직을 건들지 않기 위해 Spring AOP를 이용하여 구현이 되어있습니다.

To-Do

유저 추적

  • 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 구현
  • 정산 로직 구현
    • 활동에서 월렛 부분이 구현되지 않아 미구현.

Tables

  • UserTracking: 유저 추적 데이터를 저장하는 테이블.
  • TeamTracking: 팀 추적 데이터를 저장하는 테이블.
  • ActivityTracking: 활동 추적 데이터를 저장하는 테이블.
  • AutoIncrementSequence: MongoDB는 Sequence를 지원하지 않기 때문에 Sequence를 직접 구현하기 위해 만든 테이블.

Classes

  • 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에 사용될 스케쥴러가 구현되는 클래스.

Processing Logic

해당 모듈의 구현은 모두 Spring AOP를 이용하여 구현되어 있습니다. 해서 해당 모듈의 비즈니스 로직을 파악하기 위해서는 우선 Aspect에서 Advice들의 PointCut을 살펴보아 Aspect가 어느 JoinPoint에서 동작하는지를 파악해야 합니다. 그 후 Advice의 종류가 무엇인지를 파악한 후 필요한 데이터를 비즈니스 로직에서 어떻게 가져오는지를 살펴보아야 합니다. 예를 들어 AfterReturning의 경우 함수의 리턴 밸류에서 데이터를 가져올 것이고 Aroud의 경우 ProcessJoinPoint에서 직접 Arguemnts를 가져오는 케이스가 많을 것입니다. 그렇게 가져온 데이터를 바탕으로 추적 데이터를 구성하여 MongoDB에 insert를 하거나 update를 하는 것이 이 모듈의 주된 로직입니다.

그래서 정리를 하자면, 비즈니스 로직이 동작 -> 해당 비즈니스 로직을 PointCut으로 지정한 Advice가 동작 -> Advice 종류에 따라 땡겨온 데이터를 바탕으로 추적 데이터 구성 -> DB에 저장 or 수정이 되겠습니다.

추가로 Spring Batch의 경우 크게 JobStepScheduler가 있습니다. 일련의 Step들이 Job을 구성하고 Batch는 이 Job을 기본 단위로 동작을 합니다. 해서 Batch는 Scheduler에서 정의한 스케쥴링에 따라 Job들을 실행하고 각각의 Job은 포함된 Step들을 순서대로 실행시킨다고 보면 됩니다.

Clone this wiki locally