반응형
반응형
이번 포스팅에서는 Windows C/C++ 프로젝트에 블록암호 알고리즘(LEA) 모듈을 적용하기 위한 기초 내용 조사 및 실제 적용 테스트에 관한 내용을 다룹니다. 저는 클라이언트 프로그램에 서버 계정과 패스워드를 저장하여 자동 로그인 기능을 구현하기 위해 블록암호 알고리즘 모듈을 적용하려고 합니다. 1. 암호알고리즘 용어 정리평문(Plaintext, P) : 암호화되지 않은 평범한 데이터 또는 메시지암호문(Ciphertext, C) : 암호화된 형태의 데이터 또는 메시지암호화(Encryption, E) : 평문을 암호문으로 변환하는 과정복호화(Decryption, D) : 암호문을 본래의 평문으로 복원하는 과정2. 각 기준별 암호알고리즘 분류공개키암호: RSAES(2048, 3072)키 설정: DH, ..
SQLite는 작고, 빠르고, 믿을 수 있는 세계에서 가장 많이 사용되는 관계형 데이터베이스로서 1조 개가 넘는 SQLite 데이터베이스가 사용되고 있다고 합니다. 또한 모든 iOS, Android, Mac, Windows 디바이스 및 인터넷브라우저와 IoT 디바이스에서 사용할 수 있습니다. 단일 데이터베이스 파일의 최대 크기는 281TB라고 합니다. 1. SQLite 특징작은 사이즈: MySQL이나 PostgreSQL과 같은 데이터베이스는 클라이언트/서버 데이터베이스서 일반적으로 자체 디스크와 메모리가 있는 서버에서 별도의 프로세스로 실행해야 합니다. SQLite는 이와 반대로 임베디드 데이터베이스입니다. 즉 데이터베이스가 디바이스, 서버 또는 스마트폰 자체에 내장됩니다. SQLite 데이터베이스는 독..
Thread를 원하는 시간에만 동작시키려면? 특정 조건에서 멈추거나 종료하려면? Thread 동작 상태를 파악하려면? Thread 동적 관리 기능이 필요합니다. 이번 포스팅에서는 프로그램 개발단계부터 디버깅 용도로 유용하게 활용할 수 있는 Thread 관리기능(생성, 서스펜션, 디스트로이) 구현 방안을 예제 기반으로 설명해 보겠습니다. 이하 본문에서는 Thread를 태스크(TASK)라 지칭하도록 하겠습니다.1. 동적 관리기능 요구사항태스크 동적 관리기능의 구현에 앞서 반영할 요구사항은 다음과 같습니다.프로그램 동작 상태에서 동적으로 태스크를 생성, 중지, 종료할 수 있어야 한다.활용 가능한 태스크 목록을 관리하고 정보를 제공할 수 있어야 한다.태스크 상태를 확인할 수 있어야 한다.태스크 추가/삭제가 용..
MFC의 CMap 클래스는 키와 값의 쌍으로 이루어진 맵을 구현하는 클래스입니다. C++ 표준라이브러리의 map 클래스와 유사하지만 MFC에 특화된 기능을 추가로 제공합니다. CMap 클래스는 MFC에 종속적입니다. 이번 포스팅에서는 CMap 클래스 초기화, 삽입, 탐색, 삭제 등을 예제 코드로 알아보겠습니다. 1. CMap 클래스 사용사례 배열이나 리스트로 자료를 관리해야 할 때 특정 값이 어느 인덱스에 있는지 찾으려면 탐색을 해야 하는데 최악의 경우 N-1까지 탐색을 해야 합니다. 이때 찾으려는 값을 KEY, 인덱스를 VALUE로 CMap에 저장해 두면 deterministic 하게 탐색 가능합니다. 2. CMap 클래스 설명 CMap을 사용하려면 CMap 인스턴스를 생성해야 하는데 공식 MSDN 구..
소켓 재활용은 이미 연결이 끊어진 소켓을 재사용하는 기술입니다. 소켓을 재활용하면 새로운 소켓을 생성하지 않고 기존 소켓을 활용하여 새로운 연결을 맺을 수 있습니다. 즉 소켓 생성 및 소켓 핸들 관리에 필요한 시스템 리소스를 절약할 수 있습니다. 소켓을 재활용하기 위해서는 소켓 연결이 끊어진 상태여야 합니다. 서버 관점에서 클라이언트의 접속을 비동기로 처리하는 과정은 다음과 같습니다. 리슨 소켓 생성 및 리슨 포트 바인드 소켓 미리 생성 후 대기 소켓 풀에 등록 클라이언트 접속 종료 시 사용한 소켓 재사용처리 후 대기 소켓 풀에 등록 예제 코드는 IOCP 기반입니다. 이해가 되지 않으면 다음의 IOCP 프로토타입 포스팅을 참고하세요. 2023.12.13 - [프로그래밍/C | C++] - IOCP 기반 ..
이번 포스팅에서는 IOCP 서버에서 소켓 풀을 관리하는 방법에 대해 알아보겠습니다. 이전 포스팅에서 IOCP 뼈대 코드를 작성하고 초기화하는 과정을 알아보았습니다. 2023.12.13 - [프로그래밍/C | C++] - IOCP 기반 다중 접속 및 데이터 처리-1 IOCP 기반 다중 접속 및 데이터 처리-1 윈도 환경에서 다중 클라이언트의 접속을 처리하는 네트워크 서버를 구현하기 위해서는 IOCP 사용이 필수라고 생각합니다. 에코 서버를 IOCP 기반으로 구현한 예제는 많지만 실제 현업에서 다중 blog.noyecube.com 2023.12.14 - [프로그래밍/C | C++] - IOCP 기반 다중 접속 및 데이터 처리-2 1. 리슨소켓 Accept 이벤트 감지 WSAEVENT hWSAEvent = W..
이전 포스팅에서 IOCP 서버 스켈레톤 코드를 작성해 보았습니다. 이번 포스팅에서는 IOCP 서버를 위한 스레드풀 초기화 코드를 살펴보겠습니다. 1. IOCP 서버 실행 결과 실행결과 먼저 살펴보겠습니다. 실행환경은 8 코어 16 스레드 CPU입니다. IOCP Worker Thread 16개, IOCP RIL Thread 16개씩 생성하였고 동시실행 가능 스레드 수는 각 8개씩 설정하였습니다. 스레드는 실행중 I/O 나 기타 사유로 Pending 상태에 빠질 수 있기 때문에 동시 실행 가능한 숫자보다 많은 수의 스레드를 생성하여 스레드풀에 등록해 둡니다. 2. 초기화 코드 호출 구조 및 예제 코드 RilInit 함수에서 서버를 초기화합니다. 작업 스레드풀을 생성하고 작업 스레드들을 대기시킵니다. 송신 스..
윈도 환경에서 다중 클라이언트의 접속을 처리하는 네트워크 서버를 구현하기 위해서는 IOCP 사용이 필수라고 생각합니다. 에코 서버를 IOCP 기반으로 구현한 예제는 많지만 실제 현업에서 다중 클라이언트 접속을 처리하기 위한 아키텍처를 어떤 방식으로 접근하면 좋을지 고민해 보는 차원에서 IOCP 기반 다중 접속 처리 및 데이터 처리 프로토타입 구상을 위해 이번 포스팅을 작성합니다. 1. 리눅스 epoll 대비 IOCP(I/O Completion Port) 장점 대부분의 유명한 게임서버는 Windows Server 기반이라는 사실을 알고 계신가요? 그 이유는 리눅스에서 다중 접속을 처리하기 위해 사용가능한 epoll 보다 Windows의 IOCP가 더 나은 장점이 있기 때문입니다. 윈도 표준 API로 윈도 ..