본문 바로가기

반응형

분류 전체보기

(429)
중앙 집중형 deploy tool - "Fabric" 만일 현재 사용하고 계신 바이너리 & 설정 deploy tool이 없다면 'Fabric(http://docs.fabfile.org/en/1.7/)' 이라는 녀석을 한번 살펴 보실것을 권해 드립니다. What is "Fabric"? Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks. - http://docs.fabfile.org/en/1.7/ 간단하게 어플리케이션 배포나 시스템 관리를 위해 사용되는 툴이랍니다. 뭔 말인가 싶어 다른 검색을 좀더 해봅니다. You can use Fa..
gdb - breakpoint [breakpoint 설정](gdb) break 현재줄 breakpoint 설정(gdb) break 22 22라인에 breakpoint 설정(gdb) break func_name func라는 이름의 함수에 breakpoint 설정(gdb) break class_name::func_name class_name 이라는 클래스 func_name 멤버 함수에 breakpoint 설정(gdb) break main.cpp:main main.cpp 파일의 main 함수에 breakpoint 설정(gdb) break main.cpp:10 main.cpp 파일의 10번째 라인에 breakpoint 설정 [regular expression breakpoint 설정](gdb) rbreak fu* fu*를 만족하는 모든 함수..
[C++] 구조체 바이트 패딩 규칙(structure byte padding or align rule in C++) 들어 가며.. 지금 까지 나는 byte padding이 cpu 레지스터 사이즈를 따라 일괄적으로 적용 되는 줄 알고 있었다. 하지만 오늘 exe와 dll 사이에서 일어난 문제를 해결하며 찾아본 자료에서 byte padding은 아래의 네 가지 규칙에 따라 구조체에 따라 다르게 적용 된다는 사실을 알았다. 예를 들어 설명 하자면 지금까지 페이지 사이즈가 4byte인 어플리케이션에서는 byte padding 사이즈를 따로 지정해 주지 않는 한 1 byte 짜리 멤버 변수를 가진 구조체나 4 byte 멤버 변수를 가진 구조체의 sizeof 결과가 모두 4 byte로 같을 것이라고 생각 했으나 실제로는 각각 1 byte, 4 byte로 다르게 align 되고 있었다. 바이트 패딩 규칙 msdn의 align (C..
Visual Studio 2010에서 std::vector<std::string>::insert 메모리 릭 inserting in a std::vector of std::string causes memory leak 위와 같은 보고가 있었군요. 요약을 하자면 아래 코드를 실행 하면 메모리 릭이 발생한다는 것. #include "stdafx.h" #include #include int _tmain(int argc, _TCHAR* argv[]) { // debug memory leaks _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); { std::vector vec; vec.reserve(3); vec.push_back("1"); vec.insert(vec.begin(), 2, "2"); } return 0; } VS 2010 SP1에서 패치 되..
분산 시스템 설계 - 컴포넌트간 공통 기능 분산에 대한 생각 정리 요구 사항 지금 부터 상상을 해보자. 여러분은 게임 서버를 만들고 있는 개발자다. 여러분이 만들고 있는 서버 시스템은 간단한 캐주얼 게임으로써 유저들이 플레이를 하기전에 모여 있는 채널(채널 서버)이라는 곳과 실제 게임 플레이를 하는 게임룸(게임서버)이 있다고 가정하자. 플레이어들은 게임에 접속하게 되면 가장 먼저 채널 서버에 머무르게 된다. 채널서버에서 게임방을 만들고 다른 유저를 초대하거나 다른 유저가 방에 접속하길 기다리다 게임을 플레이 할 수 있는 조건이 완성되면 게임서버로 컨넥션을 옮기고 유저간 인터렉션하며 게임을 즐기게 된다. 지금까지는 "게임 서버"는 유저 인터렉션을 통한 게임 진행만 담당했었다. 아이템 사용과 골드 소모 같은 요소들은 모두 채널 서버에서 담당 했다. 한마디로 "채널 서버와 ..
발로 그리는 분산 시스템 #Day 3 - 채팅 시스템 트래픽이 너무 많이 발생해요!! #Day 3 - 채팅 시스템 트래픽이 너무 많이 발생해요!!! 책상에서 꾸벅꾸벅 졸고 있는데 다시 전화가 왔다. 전화 : "안녕하세요 시스템팀 김미영 팀장입니다. 어제 신규 패치된 채팅 서버가 추가 될때 마다 IDC 내부 트래픽 그래프가 기하급수적으로 상승하고 있습니다. 아직은 괜찮지만 이대로라면 조만간 최대 허용 트래픽을 초과 할것 같습니다. 확인 부탁 드립니다." (읭?! 김미영 팀장 어디서 많이 듣던 이름인데...기분 탓이겠지..) 이 사실을 팀장님께 보고 드리니 아무래도 어제 투입된 채팅 시스템의 브로드캐스팅이 이런 문제를 발생 원인인것 같다고 말씀하시며 팀장님의 생각을 설명 해주셨다. 팀장 : "머신당 수용가능 최대 인원을 1000이라고 가정해보자. 그리고 머신 대수를 M 이라는 변수로 대채 해..
발로 그리는 분산 시스템 #Day 2 - 채팅 서버에 접속이 안되요!! Day 2 - 채팅 서버에 접속이 안되요!! 채팅 서버를 실서버에 반영하고 피로에 지쳐 잠이 들었다. 전지현과 손예진이 서로 나랑 사귀겠다며 싸우는 꿈을 한참 꾸고 있는데 전화가 왔다. 여자다. 전화 : "안녕하세요. 운영팀 김미영 팀장입니다. 12시 부터 게임에 접속 할 수 없다는 메시지와 함께 클라이언트가 다운 되고 있습니다. 조속한 조치 부탁드립니다." 젠장..접속이 안된다니. 게임에 접속해 보니(처음으로 우리 회사 게임에 접속했다!!) 정말 게임에 접속 할 수 없다는 메시지와 함께 클라이언트가 다운된다. 클라이언트 개발자에게 디버깅을 문의하니 채팅 서버에서 더 이상 접속을 받을 수 없다는 에러 코드를 리턴한단다. 우리 게임 평균 동접이 1만인데 채팅 서버는 동접 1천 밖에 받지 못 했던 것이다. ..
발로 그리는 분산 시스템 #Day 1 - 발로 그리는 채팅 시스템 /** 한 대의 머신이 처리 할 수 있는 cpu 파워와 memory, kernel object에는 한계가 있고 이를 극복하기 위해 분산 시스템이라는 것을 구축한다. 이번 포스팅 시스즈에서는 connection 한계를 극복하는 방법과 그러기 위해 고려할 사항들을 생각 해보자. */ 나는 대학을 졸업하자 마자 꿈에도 그리던 게임 업계에 취직했다. 직원이 채 10명도 안되는 작은 회사이긴 하지만 청년 실업 60만에 육박하는 이 사회에서 졸업과 동시에 취업이라니 얼마나 뿌듯한가!! 첫 출근하니 팀장이라는 분이 나를 맞아 주었다. '우리 회사는 출시한 게임은 몇개 안되지만 그래도 최대 동접 네 자리를 자랑하는..' 주저리 주저리..뭔 말인지도 모를 회사 소개가 끝나고 팀원들 소개로 이어졌다..아니..그냥 팀원 소..
분산 시스템 개념(Distributed System Concept) 오래간만에 휴가 기간이다. 아무런 생각도 하지말고 '분산 시스템'이라는 주제에 대해 포스팅을 시작해 보자. 분산 시스템(Distributed System)? 분산 시스템의 교과서 적인 Distributed System Concepts (Andrew S. Tanenbaum) 의 말을 빌리자면 "하나의 시스템 처럼 보이는 독립된 컴퓨터들의 집합"(A distributed system is a collection of independent computers that appears to its users as a single coherent system)이라고 정의하고 있다. 하나의 시스템 처럼 보이는 독립된 컴퓨터들의 집합 위의 정의를 두 가지 주요한 관점으로 바라 볼 수 있다. 한가지는 하드웨어 - 독립되어..
ACL을 이용한 적절한 사용 권한 설정 1. ACL이 중요한 이유는? ACL(Access Control List)은 개개의 사용자들이 디렉토리나 파일과 같은 특정 시스템 개체에 접근할 수 있는 권한을 설정해 놓은 표이다. 공격자(해커)가 리소스에 접근 할 수 있다면 게임 끝이다. “만약 레지스트리키의 ACL이 Everyone에게 모든 권한 허용으로 설정 되어 있으면, 누구나 해당 레지스트리의 키 데이터를 읽고, 쓰고 심지어는 다른 사람의 접근을 차단 할 수 있다” ACL을 이용해 리소스에 대한 접근 권한을 설정 해 두지 않으면 예측하지 못한 다양한 방법 공격이 가능하다. ex) 64byte 로 지정된 버퍼에 더 많은 데이터를 써버려 오버런 발생 대량의 데이터를 읽고 쓰게 강제 2. ACL의 구성 ACE(Access Control Entry) ..

반응형