본문 바로가기

전체 글42

서버 상태 동기화 : 라이엇 게임즈 기술문서 분석 극한의 상태 동기화 설계 목표 소프트웨어 개발의 많은 과제와 마찬가지로 경쟁력 있는 전술 슈팅 게임을 구축하려면 많은(종종 경쟁하는) 디자인 목표에 대해 절충안을 만들어야 합니다. 넷코드 및 경쟁 무결성과 관련된 몇 가지 목표를 간략하게 살펴보고 그 후에 우리가 겪었던 몇 가지 기술적인 문제와 이러한 목표를 증폭하는 방식으로 문제를 해결한 방법을 살펴보겠습니다. 게임은 공정합니다. 우리는 VALORANT 를 마스터하는 데 시간을 할애하기로 선택한 플레이어가 투자한 결과를 보기를 바랍니다. 이는 치터가 게임을 망치는 것을 방지 하고 더 나은 하드웨어나 네트워크를 가진 플레이어에게 불리한 이점을 최소화하는 것을 의미합니다. 과제: 부정 행위자의 공격 노출 영역을 제한하도록 클라이언트/서버 통신을 설계합니다 .. 2022. 7. 7.
MSA 아키텍처 MSA(Micro Service Architecture)는 설계 방식중 하나이다. 배로 비유하면 Monolithic = 항공 모함이고, MSA = 각개 전투하는 여러 작은 보트들의 연결이다. (서로 무전으로 교신 중) MSA의 장점은 모두 Monolithic의 단점이며, 반대로 Monolithic의 장점은 모두 MSA의 단점이다. 정답은 없지만, IT 대기업들은 모두 MSA로 전환 했다는 사실이 팩트이다. 아래 Monolithic 단점 하나가 IT 대기업에게 너무 크리티컬하게 작용했다. (중소 기업은 Monolithic 규모가 작아서 관리가 가능하다는 얘기) MSA 장점 배포 관점 서비스 별 개별 배포가 가능하다. (배포 시 전체 서비스의 중단이 없음.) 독립 배포가 가능하므로 개발자의 자율성이 증가한다.. 2022. 7. 6.
객체지향(OOP) 2가지 핵심 포인트 본 포스팅은 인프런 김영한님의 ‘스프링 핵심 원리 - 기본편’ 강의를 듣고 정리한 내용을 바탕으로 복습을 위해 작성하였습니다. 객체지향이 필요한 이유는 '변경'과 '확장'에 유연하게 대응하기 위해서다. (개발자들이 유지보수 하기 편하게 짜자는 얘기) 레고 블럭 갈아끼우듯, 컴퓨터 부품을 갈아 끼우듯 쉽고 유연하게 변경이 가능하도록 만들어진 코드가 최고의 코드다. → 이런 코드를 위해 필요한 개념이 다형성 이다. 다형성 아래 예시를 보면, 운전자는 운전 인터페이스를(핸들, 악셀, 브레이크) 알기 때문에 차종이 달라도 바로 운전이 가능하다. 여기에 안전 인터페이스(에어백), 편의 인터페이스(후방 카메라) 등을 레고처럼 조립만 해주면, 개발자는 다양한 차종을 큰 지연없이 찍어낼수(코딩할수) 있다. → 즉, 우.. 2022. 7. 5.
게임 서버 상태 동기화 : 이벤트 동기화 이벤트 동기화 기법 소개 이벤트 동기화 기법은 Conservative Algorithm을 적용하거나 Optimistic Algorithm을 적용한 경우, 또 Optimistic Algorithm을 개선한 Trailing State Synchronization을 적용한 경우, Dead Reckoning을 적용한 경우, 크게 네 가지 기법으로 나눌 수 있습니다. 각 적용 기법에 대해서 간단하게 소개하겠습니다. Conservative Algorithms 먼저 Conservative Algorithm을 적용한 경우에 대해 설명하겠습니다. Lockstep Synchronization Lockstep Synchronization은 가장 간단한 동기화 방법입니다. 어떤 클라이언트가 시뮬레이션 클록을 증가시키기 위해서.. 2021. 7. 22.
Redis 특징, 데이터 타입, 백업, 아키텍처 Redis 특징 1. Redis와 RDBMS와 가장 큰 차이점은 데이터 저장 위치이다. RDBMS → Disk 에 저장 Redis → Disk & Memory 에 저장 Memory에 저장이 된다는 부분은 캐싱이 가능하다는 뜻이고, 이는 즉 Data 처리 속도가 매우 빠르다는 뜻이다. Memory는 휘발성이라 재부팅시 Data가 날라가는데, Redis는 Disk 저장 기능도 같이 지원하므로 Data 보존이 가능하다. 2. 굉장히 많은 자료구조를 지원하기 때문에 개발 편의성을 높여준다. String, Bitmaps, Lists, Hashes, Sets, Sorted Set, Streams 캐싱 전략 1. 읽기 전략 : DB보다 캐시를 먼저 읽는다. 만약 캐시에 찾는 데이터가 없으면, DB를 뒤진 후 이를 다.. 2021. 7. 21.
[Docker] 이미지 만들기 1. 도커 파일이란? 도커 이미지를 만들기 위한 설정파일, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해주는 것 도커 파일 만드는 순서 베이스 이미지 명시 (파일 스냅샷에 해당) 추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어 명시(파일 스냅샷에 해당) 컨테이너 시작시 실행 될 명령어 명시 베이스 이미지란? 도커의 이미지는 여러개의 레이어로 구성되어 있고 그중에서 이미지의 기반의 되는 부분이 베이스 이미지 레이어는 중간 단계의 이미지라고 생각 2. 도커 파일 만들기 기본적인 양식은 다음과 같다. # 베이스 이미지 명시, 이미지 생성시 기반이 되는 이미지 레이어 # from 형식 # 태그 명시하지 않으면 가장 최신것으로 자동 다운 FROM baseImage # 도커이미지가 생성되기 전에.. 2021. 7. 21.