Public 131

IT장애 왜 반복되는가?

[지디넷코리아]IT조직에게 ‘장애’는 두려운 존재다. 장애가 발생하는 경우 IT조직의 무능함을 질타하는 사용자 측의 비난을 만나게 된다. 들 불처럼 일어나는 장애에 대한 관심도 IT조직의 입장에서 부담스럽다. 그런데 이렇게 두려운 장애임에도 불구하고, 장애에 대응하는 일부 IT조직의 접근법은 나이브(naïve)하기 그지없다. 이들 IT조직들은 장애의 직접적인 발생원인을 찾아내는 데에만 집중할 뿐, 장애가 발생하게 된 다양한 원인들을 찾아내는 활동은 게을리하고 있다. 장애에 대한 단순한 대응은, 유사한 원인으로 인한 장애의 재발을 막을 수가 없다. 단순한 장애 대응으로 IT장애를 반복하고 있는 IT조직에 대해서 이야기 해보겠다. ■ 장애 대응의 사례 A회사 IT조직의 장애 기록을 검토하면서 발견한 장애 대..

Public/tip & tech 2009.04.17

strchr()

strchr() 두 가지 버전이 있다. const char * strchr ( const char * str, int character ); char * strchr ( char * str, int character );VC++ 2005에서 char* isDigit(char _nextChar) { return strchr("0123456789", _nextChar); } 이렇게 하면 아래와 같이 에러가 난다. error C2440: 'return' : 'const char *'에서 'char *'(으)로 변환할 수 없습니다. 그러면 두 가지 방법이 있다. 하나는 isDigit() 함수의 리턴형을 const char*로 바꿔주던가(위에 첫번째 프로토타입처럼) 아니면 아래와 같이 하는 방법이 있다.(위에 두..

Public/tip & tech 2009.04.13

C++ Programming HOW-TO

C++ Programming HOW-TO Al Dev (Alavoor Vasudevan) alavoor (at) yahoo.com 정지용 ways (at) gon.kaist.ac.kr 이 문서는 C++에 관한 URL과 C++ online 책에 대한 링크, C++ 프로그래밍 팁 등을 포괄적으로 제공한다. 이 문서는 C++에서 겪는 다양한 메모리 관련 문제를 해결해주는 Java와 비슷한 library도 제공한다. 이 library를 이용하면, java 소스코드를 C++로 컴파일 할 수도 있다. 이 문서는 "C++ 언어의 집"역할을 한다. 이 문서에서 제공되는 정보는 C++ 언어를 적절히 사용하고 모든 운영체제 - 리눅스, MS-DOS, BeOS, Apple Macintosh OS, Microsoft Wind..

Public/tip & tech 2008.07.08

Wait Child process termination & Zombi process

부모프로세스는 자식 프로세스 종료에 대해 정보를 얻고 싶다. (왜 죽었나, 에러가 있었나 등등..) 그래서 자식이 종료될 때 좀비로 만들어 부모 프로세스가 자식의 상태를 체크할 수 있도록 해준다. 소위 waiting on zombie process라고한다. 종료된 자식 프로세스를 기다려 상태를 얻어오는 함수가 wait()인데 아래같이 생겼다. #include #include pit_t wait(int *status); 이 함수를 실행하면 자식이 죽을 때까지 블럭 된다. 종료될 때 받은 status값을 아래 매크로?함수?를 통해 상태를 파악할 수 있다. int WIFEXITED(status) : 정상 종료인지 int WEXITSTATUS(status) : 종료시 상태값 (0, 에러...) int WIFSI..

Public/tip & tech 2008.06.24

Resource Limits

시스템의 리소스 제한값을 보거나 설정하는 것은 아래 함수를 통해 할 수 있다. #include #include struct { rlim_t rlim_cur; // soft rlim_t rlim_max; // hard }; int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim); 리소스 제한 값에는 soft limit과 hard limit 두가지가 있는데, soft limit는 hard limit 한도내에서 자유롭게 변경할 수 있다. 각 값들은 0인 경우 disable이고, RLIM_INFINITY(-1) 인 경우 무한대이다. limit 값들의 flag 이름들은 아래와 같다...

Public/tip & tech 2008.06.24

Threads Condition variable

Thread를 동기화하는 다른 방법 중의 하나로 Condition variable을 사용하는 것이 있다. condition variable을 잘 사용하면 race-free한 thread 코드를 만들 수 있다. condition variable자체는 mutex 에 의해 보호된다. 때문에 condition 상태를 바꾸기 위해서는 먼저 mutex lock을 걸어줘야한다. condition variable(이하 cv) 초기화는 두가지 방법이 있는데, cv가 static이면 PTHREAD_COND_INITIALIZER를 넣어주면 되고 dynamic 이면(동적 할당되었으면) pthread_conf_init()을 쓰면된다. 사용이 끝나면 pthread_cond_destroy()를 호출해준다. #include // 0..

Public/tip & tech 2008.06.24

TCP Status

TCP연결시에는 알다시피 3way handshaking을 한다. close시에는 client, server 가 각각 FIN을 보낸 후 ACK를 받는다(총 4번의 트랜젝션). TCP연결에는 여러개의 상태가 있는데, netstat으로 확인할 수 있는 상태들에 대해 간단히 정리해보면, 서버에서 listen()이 호출되면 상태는 LISTEN으로 바뀐다. 이 때 client에서 SYN을 보낸 후 SYN_SENT로 상태가 바뀌면 서버에서 이를 받고 SYN_RCVD로 바뀌고 SYN ACK를 보내준다. 그리고 client에서 SYN을 다시 받게 되면 비로소 ESTABLISHED로 바뀐다. 이 후 send(), recv()군의 함수들로 계속 통신을 하다가 client에서 close()호출로 인해 FIN 을 보내고 FIN..

Public/tip & tech 2008.06.24

Socket Option

소켓 사용시 여러 옵션을 줄 수 있는데, 아래 함수를 통해 set, get이 가능하다. int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); 설정할 수 있는 옵션은 영역이 매우 다양한데(이를 테면, TCP에서의 옵션이라던가, IP레이어에서의 옵션이라던가 등...), 어느 영역에서의 옵션을 설정할 것인지를 두번째 인자인 level에서 선택할 수 있다. 몇개의 옵션들은 아래와 같다. SOL_SOCKET SO_BROADCAST SO_REUSEADDR TCP의 TIME_WAIT상태의..

Public/tip & tech 2008.06.24