서버 개발 31

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

전통적인 배포 시대초기 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를 이용하여 묻지마 조인하여 복제 - 카피..

DB 절차적 사고 VS 집합적 사고

절차적으로 개발하면 하나 하나에 대한 처리를 던지므로 옵티마이저는 최적화 할 것이 거의 없습니다. (노가다만 하는 거죠) 조회 후 업데이트 또는 입력 select.Execute() while (select.Fetch()) { if(조건?) { update테이블.Execute(); } else { insert테이블.Execute(); } } merge 테이블 using (select ...) on ( 조건 ) when matched then update ... when not matched then insert ... 아이템 강화의 예 for(재료 아이템 종류) { if(아이템이 0개인가?) { delete아이템.Execute(); } else { update아이템수.Execute(); } } update..

DB 테이블 클러스터링 팩터

원하는 정보를 얻기 위해 얼마나 모여 있느냐가 '클러스터링 팩터'입니다. 잘 모여 있을 수록 디스크 IO 효율이 높아져서 성능 또한 좋습니다. 예를 들어, 6건을 얻어 오는데 피지컬 블럭을 2개를 엑세스해서 얻어왔고 3건을 얻기 위해 피지컬 블럭 3개를 엑세스해서 얻어 온다면 6건을 읽는 것이 더 빠릅니다. Index 구조 랜덤 엑세스, 싱글 블럭 IO Clustering Table(Clustered index) 랜던 엑세스를 줄일 수 있으며 멀티 블럭 IO를 할 수 있어서 검색이 빠릅니다. 지정된 컬럼값의 순서대로 로우를 저장시키는 방법 엑세스기법이 아니라 엑세스 효율향상을 위한 물리적 저장기법 검색의 효율을 높여주나 입력, 수정, 삭제시는 부하 증가 분포도가 넓을 수록 오히려 유리 Sorting Ta..