이 블로그 검색

2020년 4월 30일 목요일

redis-benchmark 에서의 RPS(requests per second) 의미

redis-benchmark 를 수행했을때 출력되는 requests per second(RPS) 의미를 client 개수와 연관해보면 다음과 같다.

2019년 12월 27일 금요일

ASockLib windows 를 지원

ASock이라는 이름으로 socket 관련 라이브러리를 만들어서 프로젝트에서 사용하고 있었는데, linux, os x 만 지원하던것을 이번에 며칠 손봐서 windows 에서도 돌아가게 구현해봤다. 만들고 보니, proactive 방식과 reactive 방식이 뒤섞인 결과물. portable 한 networking library가 일단 완성된것에만 일단 만족...

https://github.com/jeremyko/ASockLib

2019년 11월 10일 일요일

c++ 코드에서 언더스코어 ('_') 사용시 주의

2019년 10월 6일 일요일

template method pattern 에 CRTP 사용하기 (c++)

그동안 개발하면서 template method pattern을 즐겨 사용하고 있는데, virtual 함수를 이용하여 구현했었다. 그런데 CRTP 를 이용해도 비슷한(동일한건 아님) 처리가 가능하다.

예를 들어 다음처럼 template method pattern 구현을 한경우,

2018년 1월 27일 토요일

vim + 정규식을 이용한 smi 파일 일괄 수정

주말이라서 영화를 받았는데,smi 파일은 있는데 자막이 안나온다. 좋아하는 영환데...
smi 파일을 열어보니, 뭔가 알수 없는 규칙으로 작성되있다.

2018년 1월 10일 수요일

libcurl POST 한글 encoding

curl 프로그램을 사용하여 POST 전송 시, 한글 데이터를 endcoding 해서 전송하는 방법은 다음과 같다.

2017년 12월 24일 일요일

oracle PCC-S-02322, found undefined identifier 에러 발생의 어이없는 이유

지금 하고있는 프로젝트에서 오라클을 사용하는 부분이 있어서, 그 옛날의 proc 를 사용해서 개발하는 부분이 있는데, 이런 오류가 발생했다.

PCC-S-02322, found undefined identifier

2017년 12월 3일 일요일

localtime_r 은 thread safe 하지 않다? deadlock발생 경우.

며칠 전 개발하면서 겪었던 상황인데,
fork 된 child process에서는 localtime_r 과 같은 시간관련 함수를 사용할때 유의해야 한다.

2017년 2월 10일 금요일

close(0) 로 인한 stdin close : getline, getchars 동작 이상

왜 getline() 함수가 즉시 리턴되는가? 에 대한 삽질의 기억...


class SomeClass
{
    ...
    int nSockFd_  {0}; //초기화를 0 으로 한 경우.
    ...
};     

void SomeClass::SomeMethod1()
{
    .... 
    //코드 어딘가에서 다음을 호출했는데... 아직 nSockFd_ 가 할당안된 경우 
    close(nSockFd_); //--> close(0) --> stdin 을 닫아버림 - - ;;
    ... 
}

void SomeClass::SomeMethod2()
{ 
   ....  
   std::string line="";
    while(true)
    {  
        std::cin.clear();
        getline(std::cin, line); //여기서 문제 발생, 즉시 리턴됨
        std::cout << "msg:" << line << std::endl;
    }
}

2017년 2월 5일 일요일

Cumbuffer 를 이용한 예제 : ASockLib


https://github.com/jeremyko/ASockLib


CumBuffer 를 사용하는 예제 겸 TCP/UDP/Domain socket 네트워크 라이브러리를 작성해 보았다. 비록 허접하지만 cross platform 에서 동일한 interface 를 지원해보자는 생각이 있어서.... linux 에서는 epoll, os x 에서는 kqueue 를 사용해서 구현 되었다. cmake를 사용해서 cross platform compile 을 지원하게 해보았다. 클래스 상속과 포함(composition) 2가지 방식으로 사용 가능한다. 그리고 비동기 send 호출시 block 되는 경우에는 큐에 저장되었다가 전송 가능한 시점에 재개되는 방식으로 처리했다. 지금 수행중인 SI 과금 프로젝트에서 이걸 적용하면서 개발중이다.

2016년 12월 12일 월요일

CumBuffer : accumulating byte buffer for c++


네트워크 TCP 프로그램인 경우에 임의 길이의 작은 데이터 조각을 수신해서 누적(버퍼링)시키다가 일정 길이가 수신되면 완전한 하나의 packet으로 보고 해당 데이터를 처리하는 경우가 꼭 필요하다. 지금까지는 그냥 new, calloc 등으로 데이터를 수신할때마다 동적으로 할당해서 기존 데이터를 복사하는 방식으로 해왔는데(동적할당 제거에 의한 성능개선이 크지 않았기에), 이번에 동적 할당없이 사용할 수 있는 버퍼를 구현해 보았다. 일종의 ring buffer 라고도 할수 있다.

https://github.com/jeremyko/CumBuffer

2016년 1월 1일 금요일

scott meyer c++ 은퇴


http://scottmeyers.blogspot.kr/2015/12/good-to-go.html

c++에 대해 관심을 가진 개발자라면 누구나 소장하고 있을 effective c++ 시리즈 의 저자 scott meyer가 c++활동을 그만하겠다는 글을 자신의 블로그에 올렸다. 예전과 비교할수 없을 만큼 활발한 커뮤니티 활동, 온라인 정보, 컨퍼런스등이 열리고 있는 상황에서, c++ 언어와 그 사용법을 설명하는 자신의 역활은 여기까지로 이미 충분하다고 느끼는 모양이다.



2015년 12월 23일 수요일

boost c++ library static link 컴파일 방법

막상 필요해서 찾다보니 잘 정리가 안되있어서 나름 정리해본다. boost 라이브러리를 이용해서 작성된 프로그램을 boost 가 설치 안된 환경에서 사용해야 하는 경우, static link 로 컴파일 해서 사용할수 있다.

.bash_profile 설정은 다음과 같다.
       export BOOST_ROOT=/CG/USER/kojh/MyApps/boost_1_57_0
       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BOOST_ROOT/stage/lib

static library 생성 
b2 옵션으로 다름처럼 주면, 기존에 동적 라이브러리가 위치하던 곳(boost 설치시 결정된)에
static 라이브러리 파일등이 생성된다.
b2 link=static
컴파일 
자신이 사용한 boost lib 를 static 하게 link 해서 컴파일 하면 된다( 다음 예는 boost thread 를 사용하는 경우이다).
g++ -pthread -O2 -I $BOOST_ROOT boostQueue.cpp -o boostQueue $BOOST_ROOT/stage/lib/libboost_system.a $BOOST_ROOT/stage/lib/libboost_thread.a -lrt