서버 개발 33

Agones: Kubernetes 기반 게임 서버 오케스트레이션 도구

게임 개발이 발전함에 따라 멀티플레이어 게임의 인프라 관리도 점점 더 복잡해지고 있습니다. 수천, 심지어 수만 명의 플레이어를 지원하기 위해 안정적이고 확장 가능한 게임 서버 관리 도구가 필수적입니다. 이러한 요구를 충족하기 위해 Google과 Ubisoft가 공동으로 개발한 오픈소스 프로젝트 Agones가 등장했습니다.이 글에서는 Agones의 역할, 필요성, 구성 요소 및 기본 명령어를 중심으로 살펴보겠습니다.  Agones는 Kubernetes 기반 게임 서버 오케스트레이션 도구로, Kubernetes 클러스터에서 게임 서버를 관리하고 배포할 수 있도록 설계되었습니다. Kubernetes의 강력한 컨테이너 관리 기능을 활용하여, 멀티플레이어 게임에 최적화된 서버 인프라를 제공합니다. 주요 역할:게임..

[Kubernetes] kubectl의 핵심 기능 요약

Kubernetes는 클라우드 환경에서 애플리케이션을 배포, 확장, 관리하는 강력한 도구입니다. 이를 제어하는 핵심 CLI 도구인 kubectl은 개발자와 운영자를 연결하는 중요한 다리 역할을 합니다. 이번 글에서는 kubectl과 Kubernetes의 주요 구성 요소, 그리고 실용적인 명령어 사용법을 정리해보겠습니다.kubectl: Kubernetes CLI 도구kubectl은 Kubernetes 클러스터와 상호작용하는 데 필요한 명령줄 인터페이스(CLI)입니다. 이를 통해 클러스터의 리소스를 관리하고 조작할 수 있습니다.주요 역할:파드(Pod) 생성 및 삭제배포(Deployment) 관리클러스터 상태 점검 및 리소스 조회기본 사용법: 명령어를 입력하여 클러스터와 상호작용합니다.모든 파드 조회: kub..

[쿠버네티스] 서비스 배포의 발전

전통적인 배포 시대초기 IT 환경에서는 애플리케이션을 물리 서버에서 직접 실행했습니다. 그러나 이 방식에는 한 가지 큰 문제가 있었습니다. 한 물리 서버에서 여러 애플리케이션을 실행할 때, 리소스 관리에 한계가 있었기 때문입니다. 리소스를 많이 사용하는 애플리케이션이 다른 애플리케이션의 성능을 저하시킬 수 있는 상황이 자주 발생했습니다.이 문제를 해결하기 위해 각 애플리케이션을 별도의 물리 서버에 배치하는 방법이 있었지만, 이는 서버 자원이 비효율적으로 사용되고 비용이 매우 높아지는 문제가 있었습니다. 물리 서버를 추가적으로 유지 관리하는 데 드는 비용과 확장성의 한계는 기업에게 큰 부담이 되었습니다.가상화된 배포 시대이 문제를 해결하기 위한 주요 기술로 가상화가 도입되었습니다. 가상화는 단일 물리 서버..

Kubernetes와 Helm

Kubernetes(쿠버네티스)와 Helm(헬름)은 클라우드 네이티브 환경에서 애플리케이션 배포, 관리, 스케일링을 자동화하기 위해 주로 사용되는 도구입니다. 이 두 도구는 서로 보완적인 역할을 하며, 함께 사용하면 복잡한 애플리케이션을 쉽게 관리할 수 있습니다.1. Kubernetes의 역할Kubernetes는 컨테이너화된 애플리케이션의 오케스트레이션을 담당하는 플랫폼입니다. 이를 통해 컨테이너를 생성, 배포, 확장, 복구하는 일련의 작업을 자동으로 처리할 수 있습니다.주요 기능:컨테이너 오케스트레이션: 컨테이너를 클러스터에서 관리하고, 애플리케이션을 배포하며, 요청에 따라 자동으로 스케일링(확장 및 축소)합니다.서비스 디스커버리 및 로드 밸런싱: Kubernetes는 애플리케이션 간의 네트워크 트래픽..

게임 개발자가 알아야 할 RDBMS(데이터베이스, MSSQL)

'대용량 데이터베이스 솔루션'에서 나온 내용과 제가 게임 개발 하면서 경험 해던 것들을 토대로 꼭 알아야할 것들을 정리하였습니다. DB 옵티마이저 부분범위 처리와 전체범위 처리 절차형이 아니라 집합형 사고의 필요성 인덱스와 테이블의 내부 구조 인덱스 제대로 알고 사용하기 테이블 조인의 방법들과 제대로 사용하기 게임 개발자는 전문 DBA가 아니기에 DW나 OLAP와 같은 분야는 관심 밖이며 OLTP 환경에서 그것도 게임 서버가 대신 많은 것들을 처리해주는 환경에서 개발 하므로 게임 개발자가 바라 보는 RDBMS는 다를 것입니다. 게임 서버 개발자로서 꼭 알아야할 RDBMS의 개념들에 대하여 설명합니다.

Windbg 유용한 명령어

.reload symbol과 source 읽어 온다. .ecxr : (exception context record) 예외가 발생한 컨텍스트 레코드를 보여주고 디버거가 해당 내용을 참조하게 하는 명령 k, kb, kn / ~*k, ~*kb 콜 스택 / 모든 쓰레드 콜 스택 ~2 제어는 2번 쓰레드로 변경 ~ 쓰레드 목록 확인 ~. 현재 쓰레드만 확인 ~[숫자]s ~2s 이면 2번 쓰레드로 변경한다 입니다. ?? 표현식 평가 ??GMemoryManager : 전역 변수를 평가 명령어 설명 .sympath 현재 symbol path 로 설정된 경로를 보거나 설정합니다. .sympath+ symbol path 를 기존 설정 뒤에 새로 추가합니다. !sym noisy 설정된 symbol path 에서 symbol..

인라인 뷰의 활용

단계적 조인을 위한 활용 전체적인 일량을 줄이기 위해 사용하는 방법 - group by 후 조인 내가 추출할 그룹의 레벨인 테이블로 group by 한 후 조인하면 많은 불필요한 조인을 줄일 수 있습니다. select y.상인이름 sum(x.판매수량), sum(x.판매금액) from 상품목록 x, 상인 y where x.상인코드 = y.상인코드 and x.아이템코드 = @아이템코드 group by y.상인이름 상품 목록을 '상인' 레벨로 추출 후 조인하였습니다. select y.상인이름, 수량, 금액 from (select 상인코드, sum(판매수량) 수량, sum(판매금액) 금액, from 상품목록 where 아이템코드 = @아이템코드 group by 상인코드) x, 상인 y where x.상인코드 =..

서브 쿼리 활용

'제공자 역할' 서브 쿼리라면 먼저 수행됩니다. 서브 쿼리의 결과를 메인 쿼리로 제공해주며 메인 쿼리의 인덱스로 잡혀야 겠습니다. 서브 쿼리 안에 메인 쿼리의 컬럼이 없어야 합니다. '확인자 역할' 메인 쿼리가 먼저 실행되고 서브 쿼리가 실행됩니다. 서브 쿼리 내에 메인 쿼리의 컬럼이 있다면 '확인자 역할'을 합니다. - 잘못 사용된 예 REQT 테이블 2000만 건(월 500만건 생성) INDEX는 cust_no + req_ym update reqt x set in_amt = in_amt + @amt where req_ym = '202005' and custno in (select custno from cust y where pay_cust = @cust and x.custno = y.custno) 지..

SQL IN의 특징과 IN의 활용

- OR 연산의 해소 select ... from tab1 x, tab2 y, tab3 z where ... join_conditions... and ((@선택 = 1 and 구분 = 10 코드 = @코드) or (@선택 = 2 and 구분 between 20 and 30 and 코드 = @코드)) in과 case when 으로 가능한한 OR를 해소 시키세요. select ... from tab1 x, tab2 y, tab3 z where ... join_conditions... and 구분 in (case when 선택 = 1 then 10 else 20 end, case when 선택 = 2 then 30) and 코드 = @코드 - IN 연산자의 특성 IN은 n개의 = 입니다. COL1 BETWEE..

SQL 집합의 가공

합집합 : UNION 차집합 : EXCEPT 교집합 : INTERSECT 집합간의 곱(cartesian product) : Join 정의역 : WHERE 조건으로 변경 and : 정의역 범위 줄어듬 or : 정의역 범위 늘어남 치역 : SELECT 항목, group by로 변경 Join 관련된 다른 집합을 찾아 오는 것이 아닙니다. Join은 집합간의 곱으로 생각하세요. "1쪽과 M쪽을 조인한다"는 "1 * M만큼의 데이터가 M쪽을 기준으로해서 1쪽에 복제되서 만들어진다."로 생각해야 합니다. 세로 데이터를 가로로 바꿀때 : sum(case when ...) 가로를 세로로 바꿀때 : 1 x n 을 Join 하여 n건으로 복제해서 얻음 데이터를 복제 : copy_t를 이용하여 묻지마 조인하여 복제 - 카피..