Computer Science 기본 지식 91

[게임 서버 프로그래밍 교과서] IOCP 서버

논 블로킹 소켓의 장점 1. 블로킹이 없으므로 중도 취소가 가능하다. 2. 생성하는 스레드 개수가 적고 동시에 많은 소켓을 다룰 수 있다. 3. 연산량이 줄어들고 스레드 개수가 적어지므로 호출 스택 메모리도 낭비되지 않는다. 논 블로킹 소켓의 단점 1. 소켓 I/O 함수가 리턴한 코드가 WOULD_BLOCK인 경우 재시도 호출 낭비가 발생한다. 2. 소켓 I/O 함수를 호출할 때 입력하는 데이터 블록에 대한 복사 연산이 발생한다. 3. 재호출 API가 복잡할 수 있다. 구체적으로 1) 사용자 프로세스에서 소켓 버퍼로의 데이터 복사에 대한 비용과 2) send()와 같은 API 함수 호출 비용(송신 버퍼가 꽉 차있는 경우)이 문제가 될 수 있다. Overlapped I/O 혹은 비동기 I/O Overlap..

[게임 서버 프로그래밍 교과서] Poll을 이용한 논블로킹 서버

다수 클라이언트를 처리하는 논블로킹 소켓을 이용한 서버 예제 -- msdn 참고 POLL_FD 구조체 typedef struct pollfd { SOCKET fd; SHORT events; SHORT revents; } WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD; fd에 소켓 핸들을 대입 events에는 관찰하고자 하는 I/O에 대한 Flag를 설정한다. revents는 해당 I/O 이벤트 발생시 해당 Flag가 설정되어 있다. Flag Description POLLPRI Priority data may be read without blocking. This flag is not supported by the Microsoft Winsock provider. POLLRDBAND P..

[게임 서버 프로그래밍 교과서] 블로킹 소켓 ManyClient - ManyServer 구조

에코 메세지를 송수신하는 예제 1. 서버는 메인 스레드와 자식 스레드 두 개를 가진다. - 메인 스레드는 에코 메세지를 송신한 이후 할 일이 끝난 RemoteClient 인스턴스를 제거한다. - 자식 스레드는 서버 소켓으로 부터 Accept될 때 마다 RemoteClient를 생성하고 클라이언트 소켓과 에코 메세지를 송신할 작업을 할당한다. 2. Remote Client의 Echo Thread Echo Thread에서는 Receive()를 통해 메세지를 수신하고 다시 메세지를 전송한다. (Echo) 소켓을 닫고 현 작업에 해당하는 RemoteClient를 제거할 준비를 한다. 메인 스레드의 세마포어에 이 사실을 알린다. 3. 에코 이후 Main Thread의 역할 에코 작업이 끝날 때마다 세마포어가 활성..

inet_pton / inet_ntop

ws2tcpip.h에 포함되어 있다. https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_pton inet_pton INT WSAAPI inet_pton( INT Family, PCSTR pszAddrString, PVOID pAddrBuf ); IPv4 혹은 IPv6 주소체계에서 문자열로 표현되는 주소를 실제 이진수에 해당하는 주소로 바꿔주는 함수. 소켓에 주소를 할당할 때, 문자열 주소로 위 함수를 통해 주소를 부여한다. WSAGetLastError로 반환된 오류를 알 수 있다. ex) inet_pton(AF_INET, szInAddress, socekt.sin_addr); inet_ntop PCWSTR WSAAPI..

[C++ Thread] Windows API에서 쓰레드 생성

Windows에서 사용할 수 있는 쓰레드를 알아본다. 1. CreateThread CreateThread를 이용하여 쓰레드를 생성할 수 있다. HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUTINE lpStartAddress, _In_opt_ __drv_aliasesMem LPVOID lpParameter, _In_ DWORD dwCreationFlags, _Out_opt_ LPDWORD lpThreadId ); lpThreadAttributes : 보안 속성을 결정한다. dwStackSize : 쓰레드 생성시 할당되는 스택 ..

DB (7) 트랜잭션과 동시성 제어

여러 사용자의 요구를 동시에 처리하기 위해 같은 데이터베이스에 대해 연산을 하는 트랜잭션을 동시에 처리해야한다. 동시적 처리, 병행적 연산에 따라 데이터베이스의 데이터가 업데이트되는 데 모든 사용자 요구에 대해 결과가 일관성을 가져야 한다. 따라서 일관성있는 병행처리를 위한 동시성 제어가 필요하다. 동시서성 제어의 목적 프로세스와 디스크 활용을 최대화한다. 단위 시간당 트랜잭션 처리 건수를 증가시킨다. 사용자 서비스 제공에 대한 응답시간을 최소화한다. 데이터베이스 공유 정도의 최대화를 보장한다. 데이터베이스 일관성을 유지한다. 동시성 제어의 문제 - 갱신 분실 Lost Update 2개 이상의 트랜잭션이 같은 데이터를 공유하여 갱신할 때, 한 트랙잭션의 갱신한 내용을 다른 트랜잭션에 의해 잃어버리는 현상..

DB (6) 회복

회복 Recovery 데이터베이스 시스템에 장애가 발생하였을 때 장애가 발생하기 이전 시점의 상태로 복구시키는 것 장애 유형 트랜잭션 장애 : 트랜잭션의 논리적 오류 / 잘못된 데이터 입력 / 시스템 자원의 과다 사용 요구 / 처리 대상 데이터의 부재의 이유로 발생한다. 시스템 장애 : 하드웨어 이상으로 메인 메모리에 저장된 정보가 손실되거나 교착 상태가 발생한 경우 등 미디어 장애 : 디스크 자체의 결함으로 디스크에 저장된 데이터베이스의 일부 혹은 전체가 손상된 상태 통신 장애 : 네트워크 통신망의 결함 회복의 방법 1) 중복 기법 덤프 : 주기적으로 데이터베이스 전체를 다른 곳에 백업해둔다. 로그 : 데이터베이스에서 변경 연산이 일어날 때마다 데이터를 변경하기 전과 이후 값을 별도의 파일로 저장하는 ..

DB (6) 정규화

관계 스킴 - 릴레이션의 표현과 속성들의 관계를 정의하는 방법 데이터베이스를 잘 못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산시 부작용이 발생할 수 있다. 이러한 부작용을 이상(anomaly) 현상이라 한다. 이상 현상을 제거해나가며 데이터베이스를 올바르게 설계하는 것을 정규화라고 한다. 정규화를 통해 데이터의 중복과 의존성을 없앤다. 릴레이션 형태에 따라 제1정규형(First Normal Form), 제2정규형(Second Normal Form), 제 3정규형(Third Normal Form), 보이스-코드 정규형(Boyce-Codd Normal Form), 제 4정규형(Fourth Normal Form), 제 5정규형(Fifth Normal Form)으로..

DB (5) SQL 언어

SQL Structured Query Language SQL은 사용자가 처리를 원하는 데이터가 무엇인지만 제시하고 어떻게 처리하는 지 제시하지 않기 때문에 비절차적 데이터 언어 특성을 가진다. SQL문의 구성 SQL 데이터 정의 테이블 생성 CREATE TABLE 테이블 변경 ALTER TABLE 테이블 제거 DROP TABLE 뷰 생성 CREATE VIEW 뷰 삭제 DROP VIEW 데이터 조작 데이터 검색 SELECT 데이터 삽입 INSERT 데이터 수정 UPDATE 데이터 삭제 DELETE 데이터 제어 권한 부여 GRANT 권한 회수 REVOKE 정상적 완료 COMMIT 복구 ROLLBACK SQL의 특징 ANSI, ISO에서 정한 관계 데이터베이스 표준 언어이다. 관계 대수와 관계 해석을 기초로한..

DB (4) 관계 데이터베이스

관계 데이터 모델에 따라 제작된 데이터베이스를 관계 데이터베이스(relational database)라고 한다. 기본 개념 관계 데이터 모델은 동일한 구조(릴레이션) 관점에서 모든 데이터를 논리적으로 구성하며 선언적인 질의어를 통해 데이터 접근을 제공한다. 관계 데이터 모델에서는 하나의 개체에 대한 데이터를 릴레이션 하나에 담아 데이터베이스에 저장한다. 관계 데이터베이스를 구성하는 요소 관계 데이터 모델 관계 데이터베이스 릴레이션 테이블 행 또는 튜플 레코드 열 또는 속성 필드 또는 데이터 항목 릴레이션 인스턴스 테이블 인스턴스 릴레이션 스킴 테이블 스킴 릴레이션 카디널리티 레코드의 개수 릴레이션 차수 필드의 개수 (1) 속성 릴레이션의 열을 속성 또는 애트리뷰트라고 한다. (2) 튜플 릴레이션의 행을 ..