Woozy_DevLog
article thumbnail
Carryduo 데이터 분석 프로세스 의사결정

지속적인 데이터 분석 상황 모니터링을 위한 로깅 적용 winston으로 데이터 분석 계층별로 로깅을 적용하여, 데이터 분석 상황을 모니터링하고, 이를 통해 유지/보수합니다. 로깅은 info, error 두 단계로 구분하여 적용했습니다. 다양한 용도의 상태값 활용 다양한 상태값을 통해 데이터 중복 분석, 스케줄 충돌 등 예기치 않은 상황을 방지, 안정적인 데이터 분석 스케줄링을 도모했습니다. 상태값 예시는 다음과 같습니다. analyzed는 다음과 같이 의미가 구분됩니다. 0: 분석 미완 1: 분석 완료 2: 분석 오류(로우데이터에 원하는 값이 들어있지 않음) 데이터 수집/분석 과정에 offset 방식 페이지네이션 도입 리그오브레전드가 제공하는 게임 로우데이터는 양이 매우 방대합니다. 방대한 양의 로우데이..

article thumbnail
Carryduo 데이터 분석 프로세스 설명

데이터 수집 세부 설명 Riot Games는 Riot API를 통해 리그오브레전드와 관련한 다양한 데이터를 제공합니다. 챔피언 듀오 승률, 챔피언 승률, 스펠 데이터를 분석하기 위해서는 한 소환사가 플레이한 게임 1개의 로우데이터를 반복적으로 수집해야 합니다. Carryduo의 데이터 분석 기준에 따르면, 플래티넘과 다이아 랭크에 소속된 모든 소환사들이 플레이한 모든 게임 로우데이터들을 수집해야하는 것입니다. Riot API를 통해 한 소환사의 리그오브레전드 게임 로우데이터 1개를 수집/분석하기 위해 요구되는 절차는 다음과 같습니다. 각 절차 모두 Riot API와의 통신을 요구합니다. 특정 랭크와 티어에 소속된 소환사들의 고유 ID값 조회(summonerId) summonerId로 개별 소환사의 게임 ..

Carryduo 데이터 분석 프로세스 개요 및 용어 설명

용어 설명 리그오브레전드는 이런 게임입니다. 리그오브레전드는 5:5 대전 게임입니다. 한 팀은 5개 포지션(탑, 정글, 미드, 원딜, 서폿)으로 구성됩니다. 리그오브레전드 유저(소환사)는 게임에서 제공하는 160개 이상의 챔피언들을 이용해 각 포지션을 플레이합니다. 리그오브레전드는 랭크를 통해 소환사들을 게임 실력에 따라 구분합니다. 마스터 미만 랭크는 1~4 티어로 한번 더 구분됩니다. 아이언, 브론즈, 실버, 골드, 플래티넘, 다이아, 마스터, 그랜드마스터, 챌린저 오른쪽일수록 상위 랭크입니다. 리그오브레전드는 약 2주에 1회 게임 버전 패치 업데이트를 진행합니다. 챔피언 승률/벤율/픽률이란 다음을 의미합니다. 챔피언 승률이란 한 챔피언의 승률을 의미합니다. 예를 들면, “탑 가렌”의 승률을 의미합니..

article thumbnail
복세편살 공공API 데이터 카테고리 분류
Project/복세편살 2023. 3. 22. 19:23

생년월일 카테고리화 문제 공공 API에는 정책데이터가 자체적으로 생애주기(ex. 아동, 청소년, 청년, 노년 등)로 분류돼 있다, 만 9세~ 24세까지 해당되는 정책이 아동,청소년, 청년으로 분류되어 있어서 만 25세 이상의 청년들에게도 해당 정책이 추천되는 등의 문제가 많았다. 해결 정책에 해당되는 정확한 만 나이를 정책 세부 내용에서 꺼내 새로운 분류 기준을 “age”:[9,24] 등으로 추가하고, 사용자에게 생년월일정보를 받아 만 나이를 계산해서 정확한 나이 맞춤 정책을 추천하도록 하여 해결하였다. 업종 카테고리화 문제 해당 정책은 사용자 중 농업인에게만 해당하는 정책인데 공공API에서는 분류가 안되어있어서 일반 사용자들도 추천이 되는 문제가 있었다. 해결 농업, 광업, 어업 등 같은 업종의 정책내..

article thumbnail
Carryduo 정적 파일 저장 및 응답하기
Project/Carryduo 2023. 3. 22. 06:57

시작하기 lol에는 아이언, 브론즈, 실버, 골드, 플레티넘, 다이아몬드, 마스터, 그랜드마스터, 챌린저 9개의 티어가 존재한다. 해당 티어들의 이미지는 라이엇에서 파일 형식으로 제공해준다. 9개의 이미지 파일을 데이터베이스나 s3가 아닌 서버에 저장하여 프론트로 전달하기로 결정 하였다. 이미지의 개수가 정해져있고 적은 이미지 파일을 굳이 디비나 s3에 저장할 이유를 못찾았다. 이미지 파일 생성 정적파일인 static에 각 티어 이미지들을 저장한다. 그 후 main.ts에 다음과 코드를 작성한다. app.useStaticAssets(join(__dirname, '../../', 'static'), { prefix: '/tier', }); 문제 상황 app.useStaticAssets(join(__dirn..

article thumbnail
RDS start/stop 으로 실행 시간 조작하기
Project/Carryduo 2023. 3. 22. 06:45

시작하기 데이터 수집, 데이터 분석 프로세스에서는 한개의 RDS 서버를 사용하고 있다. 문제 1. AWS 프리티어 기간이 종료됨에 따라 RDS 과금이 발생하였다. 2. 나는 데이터 분석 EC2 한대도 같이 사용하고 있어서 요금 절약과 rds 실행/중지 자동화를 구현해보려 한다. 1. IAM 사용자 생성 사용자 이름 작성 및 암호 설정 후 다음. 직접 정책 연결 선택 → rds 검색 → fullAccess 선택 후 사용자 생성 액세스 키 생성 2. Amazon Lambda로 함수 생성하기 Lambda에서 사용할 키 생성 액세스 키 / 비밀 액세스 키 다운로드 Lambda 함수 생성 RDS 조작 코드 생성 aws-sdk패키지 사용, IAM에서 생성한 액세스키 입력 후 RDS 인스턴스 생성. RDS 실행 / ..

article thumbnail
Carryduo 테스트코드
Project/Carryduo 2023. 3. 21. 21:43

Error 테스트 하기 champ의 데이터를 제공하는 api에서 데이터베이스에 존재하지 않는 챔피언id로 요청을 보낼 경우에 대한 예외처리를 테스트를 작성한다. it('getTargetChampion은 존재하지 않는 챔피언id를 받으면 error return?', async () => { let error = null; const Param = { champId: '4', position: 'default', }; try { await service.getTargetChampion(Param); } catch (err) { error = err; } expect(error).not.toBeNull(); }); try catch 문을 이용하여 error가 발생했는지 여부를 not.tobeNull() 메서드..

Carryduo DTO
Project/Carryduo 2023. 3. 21. 21:42

DTO 리팩토링의 시작 배경 dto를 객체의 타입용도로만 사용하였다. 이후 dto에 대해 알게 되었고 배운 내용을 토대로 현재 프로젝트에 적용해보기로 하였다. dto는 각 계층 간 데이터 통신의 규격이 되는 객체이다. controller → service → repository의 계층에서 데이터 통신을 하려면 각 계층의 dto로 변환해주어야 한다. entity는 데이터베이스와 매핑되는 객체. DB에 접근하는 repository 계층은 entity 객체만 이용되는 것이 바람직하다. Service 계층 프로젝트는 repository 패턴을 적용하고 있다. repository에서 entity 객체를 전달 받아서 service에서 사용할 service 계층의 dto로 변환 후 데이터 연산을 통해 controll..

데이터 수집 프로세스 관리 및 오프셋 파일 저장
Project/Carryduo 2023. 3. 21. 21:40

시작하기 Carryduo 게임 데이터를 분석하기 위해서는 몇가지의 사용자 데이터 수집이 필요하다. 게임 내의 사용자 id, 사용자 puuid, matchid 등이 필요하다. Carryduo는 사용자 티어 중 중간 티어(게임 랭크)인 플레티넘, 다이아몬드 사용자의 데이터를 수집한다. Riot에서 제공하는 api로 플레티넘, 다이아몬드 사용자의 summonerId, puuId, matchId를 차례로 수집 한다. 데이터 수집 프로세스 기존 데이터 수집 프로세스 데이터베이스 연결 테스트용 request 로직실행 - 예외처리를 위해 테스트용으로 riot api에 요청 실행 데이터 수집 로직 실행 스케줄 패키지인 toad-scheduler를 이용해 2시간 30분 마다 실행 하도록 설정 데이터 수집 프로세스 완료 ..

article thumbnail
Carryduo 소환사 전적 갱신 요청 제한 시간 구현
Project/Carryduo 2023. 3. 21. 21:35

전적 검색 / 갱신 로직 현재 소환사 전적 검색 / 갱신은 여러 riot api를 통해 값을 가져온다. 소환사 이름으로 소환사의 개인 정보(summonerId, puuid,…)를 가져온다. 소환사의 summonerId로 소환사의 전적(win, tier, level, lp…)을 가져온다. 소환사의 summmonerId로 소환사의 모스트 챔피언을 가져온다. 소환사의 puuid로 플레이한 경기의 id인 matchId 10개를 가져온다. 소환사의 matchId로 게임 내 상세 데이터를 가져온다. 여기서 4번이 10개를 가져오면 반복문을 통해 게임내 데이터를 가져온다. 그러므로 소환사 검색 / 갱신은 riot api에 요청하는 양은 14번 정도이다. 그리고 riot에서는 api 요청 제한이 걸려있고 한번 제한이 ..