728x90

71

Chapter 1. 컴퓨터 구조

개발자에게 필요한 역량은 근거를 설명하는 능력이다.특정 코드 혹은 프로그램이 어떻게 작동하며, 왜 특정 성능을 내는지에 대한 근거를 제시하고 설명하는 능력이야 말로 AI 도구에 종속되지 않는 진짜 역량이다. 코드와 프로그램의 근거를 설명하는 능력은 상당 부분 컴퓨터 과학에서 찾을 수 있다.CHAPTER 01 기술 면접과 실무를 위한 컴퓨터 과학프로그램 개발의 목적은 일단 작동하게 만드는 것을 넘어 제대로 작동하게 만드는 것이다.프로그래밍 언어의 기초 문법이나 프레임워크/라이브러리의 기초 사용법은 단순한 프로그램을 개발하기에는 충분한 지식이지만, 그를 확장/유지보수 하거나 실행의 전 과정을 이해하는 데에는 충분하지 않은 경우가 많기 때문이다. 내가 작성한 코드의 실행 과정을 나조차 설명할 수 없는 경우에는..

게임 서버 프로그래밍 8장. 분산 서버 구조

8장. 분산 서버 구조 8.1 수직 확장과 수평 확장 확장성(scalability)이란 사용자 수가 늘어나더라도 쉽게 대응할 수 있어야 한다는 의미다. 최대로 처리할 수 있는 사용자 수가 무제한이여도 가능해야 한다는 것이 확장성 목표이다. 사용자 수가 늘어나도 서버 성능을 유지하려면 보통 다음 두 가지 중 하나를 수행한다. 스케일 업(scale-up) : 수직 확장 스케일 아웃(scale-out) : 수평 확장 수직 확장은 서버의 하드웨어를 더 좋은 것으로 교체하여 처리량을 늘리는 것을 의미한다. 수평 확장은 서버 대수를 늘려서 더 많은 처리를 하는 것이다. 수평 확장이 더 많이 사용되는 방법이지만, 소프트웨어 설계가 더 복잡하다는 대가가 따른다. 또 수평 확장은 수직 확장으로 서버보다 단위 처리 속도가..

책/운영체제 2024.04.12

게임 서버 프로그래밍 교과서 7장. 데이터베이스 기초

7장. 데이터베이스 기초 7.1 플레이어의 정보 저장 온라인 게임에서는 플레이어 정보를 클라이언트가 아닌 서버에만 저장한다. 클라이언트는 로그인한 후 플레이어 정보를 서버에서 받아 사용한다. 플레이어 정보를 서버에 저장하는 방법은 크게 두 가지가 있다. 파일 데이터베이스 단순파일 DB 비고 소프트웨어 비용 없다. 없거나 높다 오픈 소스 제품은 제한적으로 무료다 저장 및 로딩속도 빠르다 느리다 DB도 결국 파일 시스템을 사용한다. 데이터 관리, 분석 속도 느리다 빠르다 DB는 빠른 검색을 위한 인덱스 기능이 있다 데이터 백업 및 복원 기능 없다 있다. - 원자성 불가능하다 가능하다 DB의 트랜잭션 기능이다 일관성 (잘못된 상태의 데이터를 원천 봉쇄한다.) 없다 있다 DB의 제약(Constraints) 기능..

게임 서버 프로그래밍 교과서 5장. 게임 네트워킹

5장. 게임 네트워킹 5.1 UML 프로그램 구조 명세를 표현하는 대표적 수단이다. UML 시퀀스 다이어그램 UML 시퀀스 다이어그램에서는 객체와 메시지를 사용한다. 객체는 상호 작용의 주체(예 : 클라이언트, 서버)에 해당한다. 메시지는 상호작용의 내용(예 : 메시지 전달, 함수 실행, 이벤트 수신)으로 화살표이다. 화살표 방향을 보고 보내는 쪽과 받는 쪽을 구분할 수 있다. 시퀀스도의 주요용도는 객체 간 메시징 흐름을 일목요연하게 표현하는 것이다. 시퀀스도는 객체 사이에 메시지를 주고 받는 것을 한눈에 알아보기 쉽게 표현할 수 있다. 시퀀스도는 주고 받는 메시지를 어떻게 처리하는지 자세하게 표현하는 데는 한계가 있는데, 플로 차트를 함께 사용하면, 보다 자세하게 프로그램의 실행방식을 그림으로 묘사할 ..

게임 서버 프로그래밍 교과서 4장. 게임 서버와 클라이언트

4장. 게임 서버와 클라이언트 4.1 패키지 게임에서 게임서버 데디케이티드(decidated server) 렌더링과 사용자 입력 처리를 전혀 받지 않고, 순전히 클라이언트의 연결을 받는 세션을 처리만 하는 프로그램이 따로 들어있는 경우 4.2 서버의 역할 싱글 플레이 게임의 게임루프(game loop) 입력받기 → 게임 로직 처리하기 → 렌더링 4.3 게임 클라이언트와 서버의 상호작용 게임 클라이언트가 서버에 데이터, 즉 메시지를 전달하면 서버는 이를 수신하여 메시지 내용에 따라 특정한 행동을 한다. 반대로 서버에서 클라이언트에 메시지를 전달하면 클라이언트는 수신한 메시지 내용에 따라 특정한 행동을 한다. 이렇게 메시지가 오가는 과정을 상호작용(interaction)이라고 한다. 게임 클라이언트와 서버의..

게임 서버 프로그래밍 교과서 3장. 소켓 프로그래밍

3장 소켓 프로그래밍 온라인 게임 프로그래밍에서 소켓은 파일 핸들 방식과는 약간 다르다. 게임 서버에서는 다루어야 하는 소켓 개수가 많다. TCP를 이용해서 통신하는 경우 클라이언트 개수만큼 소켓이 있어야 한다. 파일 핸들을 하는 동안 스레드가 대기하는 일이 없어야 한다. 디스크를 읽거나 쓸 때 사용하는 read(), write() 함수는 호출 후 실행이 완료될 때 까지 리턴하지 않는다. 소켓을 이용해서 읽기/쓰기를 하는 함수를 호출 했는데 즉시, 리턴하지 않는다면 이들을 호출한 메인 스레드는 사용자 입장에서 일시정지 하는 것 처럼 보인다. 이러한 이유 때문에 네트워크 프로그래밍에서 소켓은 보통 비동기 입출력(Asynchronous I/O) 상태로 다룬다. 소켓을 비동기 입출력으로 다루는 방식에는 크게는..

게임 서버 프로그래밍 2장. 컴퓨터 네트워크

2장. 컴퓨터 네트워크 2.1 OSI 모델 계층 1 : 물리 계층 계층 2 : 데이터 링크 계층 계층 3 : 네트워크 계층 계층 4 : 전송 계층 계층 5 : 세션 계층, 6 : 표현 계층, 7 : 응용 계층 데이터 링크 계층 각 단말기는 고유한 주소를 갖는다. 단말기는 데이터를 프레임이라는 단위로 주고 받는다. 네트워크 계층 라우터는 서로 다른 LAN 사이에 컴퓨터 통신을 할 수 있게 하는 장비이다. 3계층에서 흔히 접하는 것은인터넷 프로토콜(Internet Protocol)혹은 IP라고 하는 것이다. 인터넷 프로토콜에서는 주소 형식 8비트 숫자 4개로 구성되어 있다. 우리가 흔히 IP 주소라고 칭하는 것이 이것이다. 데이터는 IP에 의해 IP 패킷 형태로 포장된다. 2.2 인터넷 서로 다른 종류의 많..

게임 서버 프로그래밍 1장. 멀티스레딩

1장. 멀티스레딩 1.1 프로그램과 프로세스 프로그램은 크게 코드(code)와 데이터(data)로 구성되어 있다. 프로그램은 실행하면 이를 프로세스라고 한다. 이런 프로세스가 여러개 실행되고 있는것을 멀티 프로세싱 이라고 한다. 1.2 스레드 각 프로세스는 독립된 메모리 공간이 있고, 기본적으로 서로 다른 프로세스는 상대방의 메모리 공간에 쓸 수 없다. 일반적으로 많이 쓰는 운영체제는 대부분 스레드(thread)라는 기능을 제공한다. 스레드 역시 프로세스처럼 명령어를 한 줄씩 실행하는 기본 단위이다. 스레드와 프로세스의 차이 스레드는 한 프로세스 안에 여러 개가 있다. 한 프로세스 안에 있는 스레드는 프로세스 안에 있는 메모리 공간을 같이 사용할 수 있다. 스레드마다 스택을 가진다. 이는 각 스레드에서 ..

운영체제 34. 분산시스템

34. 분산시스템 웹브라우저가 지구상 어딘가에 있는 웹 서버에 접속하면 클라이언트/서버 분산 시스템이라는 구조에 한 구성원이 된다. 분산 시스템의 핵심 사안은 실패와 고장의 극복이다. 개별 구성요소들은 자주 고장나지만 기계들은 고장없는 시스템처럼 보이도록 만들 수가 있다. 또 다른 중요한 문제가 있다. 시스템 성넝은 매우 중요한 요소이다. 분산된 시스템들을 연결하는 네트워크에서는 시스템 설계자들은 주어진 목적을 달성하는데 많은 신경을 써야한다. 마지막으로 보안 역시 매우 중요한 요소이다. 원격 사이트를 접속할 때, 접속한 사이트가 진짜 원했던 사이트인지를 확신할 수 있는지도 중요한 문제이다. 34.1 통신의 기본 최신 네트워킹의 핵심 가정은 통신은 신뢰할 수 없다는 것이다. 종류에 상관 없이 패킷들은 정..

책/운영체제 2024.04.02

운영체제 33. 데이터 무결성과 보호

33. 데이터 무결성과 보호 33.1 디스크 오류 모델 디스크는 완전하지 않으며 오류가 발생할 수 있다. 현대의 디스크들은 정상적으로 동작하는 것처럼 보이지만 블럭들을 읽는데 실패하는 경우가 있다. 우리가 살펴볼 만한 것은 두 가지 종류의 단일 - 블럭 오류가 있다. 각각은 숨어있는 섹터 에러(Latent Sector error, LSE)와 블럭손상(block corruption)이다. LSE는 디스크 섹터가 어떤 이유로든 손상되었을 때 발생한다. 예를들어, 디스크 헤드가 표면에 어떤 이유로 닿았다면(head crash, 일반적인 상황에서는 일어나면 안된다) 표면을 망가뜨릴것이고 비트들을 읽을 수 없게 만든다. 강한 방사선도 역시 비트를 반전시켜서 내용을 부정확하게 만들 수 있다. 다행스러운 것은 디스크..

책/운영체제 2024.03.31
728x90