2024/11 42

Kubernetes 배포를 위한 클라우드 환경 구축

resistance 게임 프로젝트의 MSA 서버도 k8s 환경에서 배포하고자 한다.​내가 개발한 서비스를 실제 운영 환경에서 직접 관리하고 유지보수할 능력은 있어야 한다고 생각했기에, kubernetes에 대해 공부해봤다.​정확한 기간은 가격 정책 모니터링을 해야 알겠지만 목표는 일단 일주일동안 풀가동해서 모니터링하고 분석해보기​​​Terraform을 이용한 EKS 리소스 설치IaC(Infrastructure as Code)는 말 그대로 개발자들에게 친숙한 코드로 Infrastructure를 다루겠다는 소리다.​수동적인 프로세스로 관리하던 시스템과 인프라를 소프트웨어 개발과 유사한 방식으로 정의해서 쉽게 관리할 수 있다.이 IaC의 도구로, Terraform이 가장 널리 사용되고 있고 Terraform ..

project/resistance 2024.11.27

웹서버 마이그레이션, MSA 설계하기

기존의 Flask로 간단하게 구현한 프로토타입 백엔드는 Http 통신으로 계정과 게임 데이터를 불러오거나, 환율 혹은 공지사항, 이벤트 등의 실시간 변동 사항을 적용하는 시스템을 구현했었다.그러나 점점 볼륨이 커지니까 관리하기가 어려웠고, 공부중인 기술과 아키텍처의 경험도 얻을 겸 MSA로 마이그레이션을 시도했다. k8s로 인기를 얻게된 MSA는 굉장히 어렵고 복잡한 구조로 이해하기 위한 제반 지식이 필요하지만, 나의 경험을 녹아내기 위해 필요한 개념들만 간략하게 소개하면서 진행하겠다.​​MSA(Mircro Service Architecture)란?https://kr.tmaxsoft.com/info/storyTView.do?seq=345작고, 독립적으로 배포가 가능한 각각의 기능을 수행하는 서비스(mir..

project/resistance 2024.11.27

환율 변동과 환전 시스템 구현 (Redis 캐싱으로 성능 개선)

새로 추가한 시스템은 환율 시스템​게임중에 얻는 리소스 아이템중에 뭐 청나라에서 유입된 마재은이나 달러, 파운드화를 환전하는 시스템을 구현했음.​은전을 사용하면 사라지면서 폭죽과 함께 이쁘게 얼마 환전했는지 알려줌. 근데 웹서버가 닫혀있는 상태면 환전 자체가 되지 않음...​위 사진은 웹서버에서의 관리자 페이지. 실시간으로 환율을 통제하고 확인함ㅇㅇ 각 재화마다 다른 변동비를 가지고 있으며 정각을 기준으로 매일마다 크거나 작게 변동이 생김.​실시간으로 화폐 환율을 볼 수 있는 패널을 제공해서 보고 비싼 녀석 팔 수 있도록 의도했슴컴맹이라 이쁜 이펙트랑 이런거 스샷 못찍어서 그냥 로그창 보여주는걸로 만족ㅠㅠㅠ​​나중에는 은화를 불법으로 찍어내는 등 근대경제사에 있어서 흥미로운 조선의 혐성질에 대해서 이야기..

project/resistance 2024.11.23

Spring의 비동기 프로그래밍 @Async에 대해 알아보자

@EnableAsync, @Async 는 Spring에서 비동기로 작업을 처리하도록 쉽게 도와주는 어노테이션이다.​왜 ThreadPoolTaskExecutor를 등록해야 할까?Spring의 기본 비동기 처리 Executor는 매번 새로운 쓰레드를 생성하기에, 쓰레드풀을 만들어두면 성능 개선​​@EnableAsync 어노테이션을 들어가보자.​org.springframework.core.task.SimpleAsyncTaskExecutor 빈을 찾는다.does not reuse threads즉, 재사용하지 않고 매번 쓰레드를 생성한다.​​​쓰레드를 생성하는 작업은 매우 비용이 많이 드는 작업이라 쓰레드풀로 성능을 개선해보자​CPU Bound 작업보단 IO bound가 대부분인 애플리케이션 로직​​Java의 E..

backend 2024.11.23

Axon와 Kafka는 어떻게 다른가?

작업하는 프로젝트에서 CQRS 패턴을 이용하고자 EDA를 고민하던 차에, Axon Server를 두지 않고 기존에 운용하던 Kafka를 통해 이벤트를 전달하도록 하기 위해 axon-kafka를 공부했다. ​Axon Server는 메시지 브로커로 CQRS 패턴이나 이벤트 소싱 기반 아키텍처 구현을 지원하는 플랫폼이다. 얼핏 보면 Kafka와 비슷한 역할로 보이는데, 이벤트 소싱(Event Sourcing)을 중심으로 알아보자.​Event-Driven Architecture이벤트 생성 및 처리를 중심으로 애플리케이션 구축을 지지한다. 이는 주로 실시간, 분산 및 확장성에서 반응성이 있어야 하는 최신 서비스에 따라 주도되어 왔다.​ Event SourcingDDD(Domain-Driven Design)에서 시..

backend 2024.11.23

토이프로젝트 - IOCP 서버와 유니티 클라이언트 구현(winsock2, cpp)

네트워크 수업 자유 주제 과제로 IOCP 서버에 유니티 연동해서 클라이언트 구현함.아무래도 과제용이니까.. 대부분의 기능을 쳐냈음그래서 Accept 도 동기로 처리하고.. 패킷 처리도 엉성하고.. ​Unity3d 와 연동하는 자료는 찾아도 안나오니 공부하는데 참고만 하길 바람니당 ​​유니티 클라이언트에서는 해당 dummy들의 좌표 이동을 시각화해서 볼 수 있고 채팅 가능함server/client 디렉토리의 client.cpp : dummy를 N(defined)개 서버에 접속시키고 매 초당 무작위로 이동 (x,y : -1,1)유니티 클라이언트에서 시각화할때 유의미한 결과를 보여주기 위해서 제공한 기능/client 디렉토리는 unity project : 그냥 유니티의 tcpClient로 접속해서 cpp와 c..

windows 2024.11.22

IOCP(IO Completion Port) 쉽게 이해하기

IOCP(IO Completion Port) 란?Windows 운영체제에서 제공하는 비동기 I/O 처리 모델게임 서버에서 사용해서 착각하는데, 소켓 네트워크 기술이 아니라 이벤트 기반 I/O 처리 방법론이다.​Linux는 소켓을 파일 디스크립터로 동일시하는 반면, 윈도우는 별개로 구분한다.​IOCP = Overlapped IO + ThreadPool + Completion Queue​​중첩 입출력(Overlapped I/O)비동기 I/O 작업을 가능하게 하는 Windows 기술I/O처리 요청을 스레드가 디바이스 드라이버에 위임하고 I/O작업 종료까지 해당 스레드는 다른 작업을 수행device driver가 IO 작업을 처리하고, 완료되면 이벤트 객체를 통해 전달IO 요청한 쓰레드가 이벤트를 확인하고 결과..

windows 2024.11.22

토이프로젝트 - winsock으로 구현한 프록시 서버(winsock2, cpp)

학교 과제로 했던거다.   webserver.cpp와 동일한 경로에 main.html 파일이 있어야한다. main.html의 내용은 다음과 같다.​각 서버의 IP 주소는 sockAddr.sin_addr.s_addr = INADDR_ANY; 를 통해서 어떤 네트워크 인터페이스에도 바인딩하지 않음으로서 현재 사용 가능한 모든 네트워크 인터페이스에서 들어오는 연결을 수락한다. 우리는 localhost(127.0.0.1)로 접속할거임 웹서버의 포트(Port) : 8080프록시 서버의 포트(Port) : 80​ 1. 웹서버를 구동한 뒤, 원하는 브라우저에 들어가서 https://localhost:8080/main.html 으로 접속하면 성공적으로 main.html을 표시​ 2. 사용자는 포트(Port) 80번의 ..

windows 2024.11.22

IOCP GetQueuedCompletionStatus, CreateloCompletionPort 함수의 변경점

어쩐지 공부하던거랑 다르더라....자꾸 오류뜨길래 무시했는데 알고보니 최신 SDK에서 함수들의 인자 타입이 변경되었다. 최신... 이라 해봤자 한참 옛날이지만ㅜ​  GetQueuedCompletionStatus 같은 경우에 LPDWORD 인자를 PULONG_PTR로 변환해야함  그외에도 CreateloCompletionPort, GetQueuedCompletionStatus의 새 버전인 GetQueuedCompletionStatusEx도 있다.​난 왜 이제 알았는가   https://learn.microsoft.com/ko-kr/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus GetQueuedCompletionStatus 함수(ioapi..

windows 2024.11.22

게임서버 매치메이킹 구현과 기술 세미나 발표

작년 초 발표한 내용대략 이런 주제로 연합 동아리 기술 세미나, 테크톡에 참가했음 근데 발표시간 10분 제한이라.. 가볍게 듣고 넘어갈 수 있는 '매치메이킹'을 주제로 발표함​​​어떤 사용자들끼리 매칭시켜줘야할까?되도록 비슷한 실력의 유저를 짝지어줘야하는데, 짝지어주는건 고사하고 도대체 어떻게 사용자들의 실력을 측정함..?? 이런 문제는 컴퓨터 발명 이전부터 계속되어 왔다. 체스나 여타 보드게임 대회 등에서 볼 수 있는 방법으로 사용자들의 실력을 수치화해서 비교하는 방법이 있다.​실력점수(MatchMakingRating) : 초기값은 모두 동일한 시작 점수로 시작해서 이기면 점수를 따고, 지면 점수를 잃는 과정속에서 MMR을 업데이트하면서 실력에 맞는 점수대로 수렴하는 원리로 승률을 예측한다.​​Elo ..

windows 2024.11.22