데이터에 기반한 사용자 행위 분석 - 어떤 데이터를 수집해야할까?
·
project/wargame
공격적인지 등의 플레이 스타일이나 성향 분석도 재밌을 거 같고, 인게임 데이터를 수집해서 사용자의 행위를 분석하면서 AFK나 탈주같은 트롤 행위를 검출하면 좋을 것같다. 추후 수집된 데이터들을 기반으로 다시 고민해보겠다. 일단 수집이 먼저다.  데이터 파이프라인(Data Pipeline) 구축e커머스 서비스들로 예시를 들자면, 구매나 배송같은 트랜잭션 작업 이외에 장바구니에 담거나 다시 꺼내고 쿠폰을 적용하는 모든 사용자 액션을 로그 데이터로 수집하고자 한다. 이런 사용자 행위를 수집하고 분석하는 데이터 파이프라인을 구축하는 것을 목표로 한다. 기존에 이미 사용하고 있던 Kafka를 통해서 데이터를 스트리밍할 생각이다. Case 1. Kafka Consumer가 이벤트를 받아서 구축한 ELK에서 분석Ca..
Hexagonal Architecture 마이그레이션
·
project/wargame
Hexagonal Architecture 마이그레이션프로젝트 내의 모든 서비스의 마이그레이션이 어느정도 마무리되었다. (25-02-22)가장 아래에서 일단락된 스프린트에 대한 후기를 작성했다.   대공사가 진행중입니다.와 너무 양이 많다……….그나마 통계 서비스는 내용이 적고 DynamoDB를 애초에 Adapter 형태로 설계해서 좀 편했다. 뭣도 모르고 사전순으로 피드(Feed) 서비스부터 시작했다가 뭔가 잘못됐다는걸 크게 느껴버렸음.게시글, 공지사항, 이벤트, 댓글, 좋아요 기능에는 PostgreSQL와 Redis를 섞어 쓰고 있기 때문에 엔티티와 외부시스템이 가장 많다. 현재 피드, 매칭, 통계를 담당하는 각 마이크로 서비스는 마이그레이션을 완료한 상태고, 사용자 정보 관리쪽과 게임 결과 관리 서비..
포탑의 공격 우선순위와 병종 시스템 개선 (feat. Kafka 메시지 유실)
·
project/wargame
적진 않았지만 구현한 내용 : Redis로 구현한 스핀락 >> Redisson을 이용한 분산 락그냥 길게 적을 내용 아닌거 같아서 뻈다. 나중에 배포하면서 노드 수가 늘어나면 다시 포스팅 주제로 할애하겠음  nlohmann/json 라이브러리 도입을 통해 JSON 타입 처리 개선 GitHub - nlohmann/json: JSON for Modern C++JSON for Modern C++. Contribute to nlohmann/json development by creating an account on GitHub.github.com 난 그동안 뭘했던걸까... 그냥 라이브러리 쓰면 편한데...  Kafka 메시지 유실에 대비한 후처리로 사용자 경험 개선사실 난관은 '메시지의 유실을 어떻게 인지하는가..
매칭 서버의 대규모 트래픽 시험 검증하기 (feat. Kafka 성능 튜닝)
·
project/wargame
매칭 시스템은  가장 성능이 중요한 비즈니스인 만큼 검증은 필수적이다.  매칭 비즈니스 흐름도기본 골자는 다음과 같다.registerMatchQueue : 회원 서비스에게 요청을 보내서 현재 게임중인 사용자인지 검증하고, 매칭 큐에 등록한다.getRank : 현재 매칭중인지 확인하는 APIcalcelMatchQueue : 매칭 큐에 등록된 사용자인지 확인하고 취소한다.  매칭 큐에 등록될때 ZSet 자료구조를 통해 사용자의 Elo 점수를 score로 정렬해서 비슷한 실력대의 사용자들끼리 매칭시켜준다. 마이크로 서비스로 분해하면서 회원 정보의 Nickname에 접근하기 까다로워졌기에, 맨 처음 매칭 큐에 등록할때 사용자 정보를 받아서 HSet 타입으로 캐싱해둬서 가져오도록 했다.    매칭하는데 결과가 줄..
사용자 경험 개선을 위한 시도 (Banner 구현, Addressable 패치)
·
project/wargame
비정상적인 좌표 이동에 대한 검증(Validation)아직 패킷 암호화 등의 처리를 하지 않았다. 어차피 막아도 뚫린다는 생각이 있어서 먼저 로직상의 검증부터 구현했다. 객체의 좌표 이동시 이전 위치와 speed를 고려해서 검사하고, 통과해야 움직여준다.로직상 비용이 드는 연산이 아니라 부담은 없다. 그러나 시작할때 생성되는 병종들과 충돌해서 사용자가 밀려나는데, 서버에서는 위치 검증에 실패해서 비정상적인 이동으로 판단함.물론 안 겹치게 병종들을 떨어트려서 생성하면 당장은 그럴듯하겠지만 근본적인 문제를 해결하진 못한다. 충돌(Collision) 등의 물리 연산도 서버에서 진행해야하는건지 의구심이 들기 시작함..   Csharp ↔ Cpp 마샬링 문제std::string과 C#의 string 간에 충돌로 ..
게임서버 개선을 위한 시행착오들 (feat. 게임서버 타이머, 매치메이킹 정책)
·
project/wargame
게임서버의 타이머 관리넥슨에 재직중인 선배님과 진득하게 얘기할 기회가 있어서 그중에 프로젝트에 쓰기 위해서 물어본 게 있었다. 현업에서는 게임서버의 타이머를 어떻게 관리하나요? M 게임에서 스킬이나 쿨타임쪽을 담당하진 않지만, 알기로는 타이머를 담당하는 쓰레드를 따로 두고 처리한다고 하셨다.class Timer { ...};void TimerCheckThread() { while (true) { Timer::TimeOutCheck(); Timer::ProcessTimers(); Sleep(1000); }}int main() { IOCPInit(); std::thread timer_thread(TimerCheckThread); timer_thread.join(); return 0;} 이.. 이렇게..
CQRS 패턴을 이용한 데이터 쿼리 - 게임 전적과 통계 구현
·
project/wargame
들어가기에 앞서리그오브레전드의 전적 검색이나 통계 시스템을 생각해보자. ​각 사용자의 전적에서는 사용한 챔피언별로 판수나 승률이 함께 조회된다. 심지어 각 챔피언별 판수나 승률, 아이템과 어떤 스펠을 사용했을때 가장 승률이 높은지도 알 수 있다.op.gg ​보이는거만 해도 각 챔피언당 몇 백만 판수씩 나오는데, 고작 플레이 수나, 승패에 따른 승률을 연산하기 위해 일일이 DB에서 꺼내와 더할건가?​예시가 너무 게임이라 다시 들자면 토스에서 제공하는 서비스중에서 서초구에 위치한 20대들의 평균 잔고가 얼마인지 제공하는게 있다.   모든 사용자들 중에서 서초구, 20대인 사람들을 쿼리문으로 조회해서 평균 잔고를 모두 더했겠는가? 그 사용자들이 100만 명이어도 평균을 계산하기 위해 모든 잔고를 더할건가? ...
MSA? 이길 수 없다면 합류해라 (feat. Kafka IPC 트러블슈팅)
·
project/wargame
당근마켓도 100만 MAU 뜨고 나서야 MSA를 도입했다는거 보면, 사실 그정도 규모 이하는 모놀리식으로 충분하다는 소리다.​도대체 왜 이렇게 MSA에 목메이게 되었는가..​이길 수 없다면 합류해라​나도 MSA하겠다​​이거말고 진짜 MSA를 결심한 이유원래 C++로 이뤄진 게임 서버와 통신하기 위해 Kafka를 사용했었다.   매칭 결과나 전적 결과를 저장하기 위해서라도 전달 과정에서 최소 한번은 디스크에 기록되어야 했다.​1. 매치메이킹의 결과를 받아서 게임 서버에 방을 생성2. 게임이 끝나면 그 결과를 다시 웹서버로 전달 대충 목적인데 닭 잡는데 소 칼 쓰는 느낌이다. 그래서 kafka를 좀 더 효율적으로 쓰기 위해서 고도화를 고민해봤다. ​일단 Redis를 이용하던 매치메이킹 기능이 스케줄러로 동작..
심플(SIEMple) - 2024년 쿠시스 프로젝트 마무리
·
project/SIEMple
2024년 KUCIS 우수 동아리 선정이 마무리 되었다. 5월부터 약 반년간 진행한 프로젝트가 끝났다.   결국 완제품 형태로 컨테이너 이미지를 DockerHub에 배포하는 단계까지 성공했다.  조만간 포트폴리오를 정리하면서 간단하게 ReadME에 실행법도 함께 작성할 예정이다.  보안 위협 검출과 시각화 보안 위협 검출하는 시연 영상, 자체 구현한 쿼리 문법과 JSON 타입으로 수집한 보안 로그들을 조회 및 분석 구현  대규모 데이터 처리, ISMS-P 피해 대응 보고서 자동화성능과 고가용성 유지를 위한 설계 고민  Terraform을 이용한 간편한 리소스 설치, sLM 모델 챗봇 구현 보안 취약점 발견시 대응 방법을 조언해주는 어드바이스 챗봇을 구현했다.24년 8월에 출시한 최신 sLM 모델인 Phi..
게임 서비스에 대한 취약점 모의해킹 이벤트
·
project/resistance
게임 서비스에 대한 모의해킹 이벤트기존 resistance 프로젝트를 kubernetes로 배포하면서 모의해킹 이벤트를 소소하게 준비했다.음 사실 kubernetes로 서비스를 배포해서 운영하는데 테스터들이 필요했다.​동아리에서 가볍게 참여할 인원을 모집했는데, 외부 인원까지 합쳐서 20명 가량 모여서 모의해킹을 진행했다.​그리고 명세서나 취약점 보고 양식을 노션으로 배포해서 이벤트를 진행했다.​게임도 원래 모바일 게임인데 WebGL로 포팅해서 가볍게(가볍지 않았다.) 웹으로 배포해서 진행했다. 모바일에서도 열리긴 하던데.. 솔직히 해상도 안맞고 게임하기 불편한 부분이 좀 보였다.​애초에 개발 단계에서 어떤 취약점도 막지 않았다. jwt와 Vault 라이브러리로 비밀번호 암호화하는 정도?ssh/tls 설..
Kubernetes 운영과 모니터링 및 오류 해결
·
project/resistance
resistance는 membership, dedicated, business, logging 총 4개의 마이크로 서비스로 구성되는 MSA 서비스이다.​ 아직 모니터링은 설치도 안했는데 배포하니까 총 Pod 64개가 나왔었다.​ 흠 4일정도 내내 틀어두니까 22$ 나왔다​NAT Gateway의 Data process보다 시간별 비용이 더 나온 것으로 보아 성능적 이슈는 안보였다. 근데도 오류 해결할때는 노드 성능탓만 했다ㅎㅎ​대략 게시글 7000개의 dummy 데이터를 넣어서 진행해봤는데, 무의미하게 데이터양만 늘린거 같다.​백엔드에서 동시 다발적으로 트래픽 과부하에 걸릴 정도의 병목에 버티느냐가 관건인거 같다.​​운영 모니터링 - Prometheus for k8sHelm repo를 설치해서 Promet..
나혼자만 할려고 만든 인디게임
·
project/Witch's Tower
생각나서 유니티 에디터로 혼자 한다. 노트북에 터치가 되니까 화면 크게 게임하는 기분   구글 개발자 계정 정지와 Google Play 스토어에 게시된 모든 앱 삭제?오랜만에 생각나서 들어가봤는데 Play스토어에 검색되지도 않고 링크로 들어가도 없다고 떴다.  Google 개발자 콘솔에 접속해서 출시 정보를 확인해봤는데... 앱이 삭제됨   네?????????????????????????    눈과 귀를 닫고 살다보니 개발자 정책이 바뀌면서 얼른 결제 프로필을 설정하라는 메일을 못 보고 결국....  사망했다.     플레이 영상23년에 군대 휴가 나와서 틈틈히 만들던 녀석으로, Admob 광고 설정해서 200원 정도 벌었었다.    출시하고 나서도 11번이나 업데이트했었는줄은 몰랐다.. 이번에 구글 계..