네트워크 CAP 이론

CAP 이론이란 일관성(Consistency): 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다. 가용성(Availability): 모든 요청이 성공 또는 실패 결과를 반환할 수 있다. 분할내성(Partition tolerance): 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작할 수 있다. 이 3가지의 만족하는 분산시스템은 없다는 이야기이고 다른말로 하면 한가지를 포기해야한다는 이야기이다. 대표적으로 AP는 Aws dynamonDB의 큰예이고 AP인경우는 AWS SQS서비스라고 보면된다.

스핀락 구현시 참고할점

스핀락을 구현할때 아래와 같이 구현한다. 하지만 위 코드를 테스트시 생각외로 좋은 성능이 안 나오는걸 벤치 마크로 확인할수있다. 리누스 토바즈형님이 이에 대해 의견을 남긴글이 있는데 https://www.realworldtech.com/forum/?threadid=189711&curpostid=189723&fbclid=IwAR1aqMqWNrvY7qcOmhGKUH6m9YkCanEEVIbhEqRlZcRP1Tb4rH053yvs2PE CPU 캐시 일관성때문에 성능이 더 느리다라는 이야기이다. 이는 실제로도 그렇다 라는 점이다. 다행히 x86에서는 이 문제를 펜티엄4부터 알았고 아래의 명령어를 추가되었다. 이는 NOP 명령어를 주어서 해결한다. 아래의 글을 보면 얼마나 소개 더보기 스핀락 구현시 참고할점[…]

원과 원 충돌 체크하는 방법

원과 원의 출돌 체크는 매우 깔끔하게 처리할수 있다. 두개의 원이 있고 반지름이 각각 R1 ,R2가 있다. 여기서 충돌했을때의 그림을 보자 직관적으로 두개의 중심의 거리보다 반지름의 합보다 작은걸 알수있다. 좀더 자세히 보기위해 태그를 추가했다. 두 거리는 아래의 공식으로 쉽게 구할수 있다. 거기에 두개의 반지름의 합보다 거리의 값이 작으면 충돌이 발생했다는 것이다. 하지만 이와같은식 을 컴퓨터로 구현할려면 소개 더보기 원과 원 충돌 체크하는 방법[…]

C# Entity Framework(EF) Mysql 간단 사용하기

대부분의 언어에서는 각자에 대표적인 ORM이 있는데 C#에서는 일명 EF에서 만든 공식 ORM이 있다. 간단하게 콘솔 프로젝트을 NET Framework 4.6.1 이상만든다. 먼저 해야할일은 EF SDK를 받아야 하므로 아래와 같이 콘솔 매니저를 클릭해준다. 그러면 nuget을 콘솔로 받을수 있는 명령어 창이 출력이 되게 된다. 여기서 Nuget의 다운로드 패키지를 명령어로 받을수 있는데 아래와 같이 쳐준다 여기서 많은 데이터베이스들이 있는데 소개 더보기 C# Entity Framework(EF) Mysql 간단 사용하기[…]

C# DUMP 분석하기

보통 컴퓨터로 덤프를 남긴다고 하면 바로 디버깅용을 위해 만든다고 합니다. C++일 경우에는 pdb흔히 말하는 심볼파일과 소스코드만 있으면 되는 반면 C#으로 덤프로 분석을하는 경우는 생각지도 못하는게 필요합니다. 이는 C#의 닷넷 라이브러리가 필요하게됩니다. 일단 설명보다 직접 해보면서 진행해보겠습니다. VC++을 C# console마법사로 프로젝트를 만든다음에 다음과 같은 코드를 쳐주시고 실행시켜주시기 바랍니다. 위 코드는 출력하고 입력을 받는 하나의 프로그램입니다. 일단 소개 더보기 C# DUMP 분석하기[…]

Visual Leak Detector을 이용한 메모리 누수 탐지법

C++을 하다보면 어쩔수 없이 생기는 것이 메모리누수입니다. 물론 최근에는 스마트포인터같은게 있다고 하지만 아직도 어쩔수없이 동적할당을 스마트포인터를 통해서 할당을 하지않습니다. 그러다보니 메모리누수는 당연시 여깁니다. 이를 방지하기 위해 C++ msdn에서도 메모리누수를 확인하는법에 관해 적혀있습니다. 하지만 이와 별개로 좀더 자세히 알고싶을때가 있습니다. 그래서 여러 메모리누수탐지 라이브러리가 있는데 대표적으로 Visual Leak Detector입니다. 해당 라이브러리는 사용법은 vld라는 헤더파일만 입력만 해주면됩니다. 소개 더보기 Visual Leak Detector을 이용한 메모리 누수 탐지법[…]

효율적으로 디버깅하기 SEH와 minidump

다음과 같은 소스 코드가있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <iostream> #include <Windows.h> #include <chrono> #include <mutex> #include <DbgHelp.h> int main() {     try {         int* A = NULL;         *A = 100;     }     catch (… ) {         std::cout << “hello world” << std::endl;     } } Colored by Color Scripter cs auto;”>이 예제는  access violation의 한 예이다. 해당 예제를 실행시키면 catch에서 hello world를 출력 소개 더보기 효율적으로 디버깅하기 SEH와 minidump[…]

C++ std::function 구현에 대해

오래전부터 std::function에 대해 꽤 궁금해왔다. 그 이유는 std::function<int(void)> 이런 형태이기 때문이다. 이를 어떻게 만들려면 어떻게 해야하나 맨첨에 생각할때는 다음과 같이 생각하였지만. 이는 내가 원하는 방식이 아니므로 넘어갔다. 1 2 3 4 5 6 template <typename T, typename… Args> class function{ } Colored by Color Scripter cs 비주얼 스튜디오에는 std::function코드는 다음과 같다. 1 2 3 4 5 6 7 8 9 소개 더보기 C++ std::function 구현에 대해[…]

32비트와 64비트를 따로 제공하는 라이브러리를 통합시키기

제가 자주 쓰는 기법이긴한데 큰 도움이 될지 모르겠지만 한번 올려본다. 이 기법을 자주 쓰는 큰예로 mysql있는데 mysql Connector라이브러리을 보자면 32비트와 64비트가 따로 있다. 이 말은 프레임워크 제작시 32비트 64비트라이브러리를 지원하기위해 거의 99%동일한 소스파일을 프로젝트 풀더에 모든 버전의 라이브러리를 전부 넣어야 한다는 의미이다. 나는 아래와 같은 해결방법으로 이 문제를 해결한다.   문제되는 라이브러리에서 32비트와 64비트 차이점을 소개 더보기 32비트와 64비트를 따로 제공하는 라이브러리를 통합시키기[…]

type traits로 is_class 구현하기

C++에는 type traits라는게 있다. 이는 컴파일 타입에 타입의 traits을 알기위해 사용한다. 간단한 예로 같은 타입인지 구하기 위해서는 이렇게 작성했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 struct true_type { enum {value  = true}; }; struct false_type { enum { value = false }; }; template<typename T, typename U> struct is_same : false_type {}; template<typename T> struct is_same<T, T> : true_type {}; class A { }; 소개 더보기 type traits로 is_class 구현하기[…]