글
[프로젝트 RTS] 게임서버를 만들어보자 [1]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
최근 회사 일만으로 개발 실력 향상에 부족한 거 같아 게임을 만들어보자라는 계획을 잡고 후배와 진행중입니다.. (유니티 Client Unix C++ 서버 ) 목표로는 웜즈와 비슷한 UI로 Real Time 대전 액션 게임...인데 현실은... ... 어쩃든! 현재는 로그인/로그아웃만 구현이 되어있습니다. 이제 이동 및 이벤트에 대해 처리해야하는데, 갈길이 머네요 ㅎㅎ... 게임 서버 아키텍쳐에 대해서도 고민이 되고 구현 방식에도 참 다른점을 많이 느꼈습니다. (특히 protobuf가 지옥이었습니다..) 또, real time 서버에서는 구역화를 나누는게 어렵더군요 (전체 유저에게 이벤트 정보를 주기보다 구역을 나눠 근처에 있는 유저에게만 주는?) 현재 위 이슈에서 막혀있습니다... 좀더 노력을 해봐야겠네요 로그인 까지의 코드는 해당 github에 있습니다. ( https://github.com/warguss/ProjectRTS ) 추가로 읽으면 좋을 것
[취업] Kakao 코딩 테스트 문제[3]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
다음 문제는 캐시와 LRU와 관련된 문제입니다. [문제] 지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다. 어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오. 입력 형식 - 캐시 크기(cacheSize)와 도시이름 배열(cities)을 입력받는다. - cacheSize는 정수이며, 범위는 0 ≦ cacheSize ≦ 30 이다. - cities는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다. - 각 도시 이름은 공백, 숫자, 특수문자 등이 없는 영문자로 구성되며, 대소문자 구분을 하지 않는다. 도시 이름은 최대 20자로 이루어져 있다. 출력 형식 [풀이] 이 문제의 경우 LRU(Least Recently Used)알고리즘을 이해하고 있냐를 묻는 문제입니다. LRU는 큐 + cache hit(우선순위)를 섞으신거라 보면되는데, 캐쉬가 가득 찼을 경우, 1. cache hit가 가장 낮은 것 검사 2. 만약 동일 hit 갯수가 있다면, 먼저 들어온 놈이 나가게 되는 형식입니다. LRU에 대해 일단 위 예제로 수행을 한다면.. 밑 케이스 의 출력은 50이고, 캐쉬 크기는 3입니다. (“Jeju”, “Pangyo”, ...
[취업] Kakao 코딩 테스트 문제[2]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
2번째 문제를 한번 풀어보았습니다...! 점수판 계산 문제이며, 대게 파싱에 대한 문제인것 같습니다. 다음은 문제입니다. 2. 다트 게임 (난이도: 하) 카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다. 갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다. 다트 게임은 총 3번의 기회로 구성된다. - 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다. - 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수^1 , 점수^2 , 점수^3 )으로 계산된다. - 옵션으로 스타상(*) , 아차상( # )이 존재하며 스타상( * ) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다. - 스타상( * )은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상( * )의 점수만 2배가 된다. (예제 4번 참고) - 스타상( * )의 효과는 다른 스타상( * )의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고) - 스타상( * )의 효과는 아차상( # )의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고) - Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다. - 스타상( * ), 아차상( # )은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다. - 0 ~ 10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라. 입력 형식 ...
[취업] Kakao 코딩 테스트 문제 [1]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
카카오 코딩테스트를 풀어보자! 한번 풀어보는 것에 대해 많은 도움이 될 것 같아 포스팅 해보려합니다. 저는 단순 풀어보는데에 의의를 두고 있기에, 더 좋은 방법이 있다면 공유 부탁드려요 문제를 사이트에서 직접 풀어보지 않아. 처음부터 끝까지 구현하긴 했는데... Solution에 대한 함수만 짜면 된다는 얘기를 들은 거 같아, 혹시 아신다면 공유 부탁드릴게요 우선 문제에 대한 설명입니다. ( http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/ ) 문제 1에 대해서 풀어보겠습니다...! 문제를 푼 환경은 Linux(Centos) C++로 풀었습니다. 1. 비밀 지도(난이도: 하) 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 1. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 “공백”(“ “) 또는 “벽”(“#”) 두 종류로 이루어져 있다. 2. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 “지도 1”과 “지도 2”라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. 3. “지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다. 4. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. 입력 형식 = 입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다. - 1 ≦ n ≦ 16 -...
[Linux/CentOS/ProtoBuf] Centos - Protobuf 연동[echo 서버][2]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
아래 포스팅에서의 작업은 다음과 같습니다. 1. *.proto 생성방법 2. 간단한 Echo 서버 및 Makefile 작성 3. 통신 테스트 1. *.proto 생성방법 ProtoBuf 통신을 위해서는 *.proto , *.pb 관련 파일을 생성해야 합니다. 이게 무엇인가하면, ProtoBuffer는 객체를 byte화 시키고(Serialize) Client쪽에서도 byte를 객체로(DeSerialize) 변환을 진행합니다. (통신에는 byte stream으로만 통신하기 때문에) [Serialize] [DeSerialize] 즉, Protocol과 같은 역활을 진행하기 때문에, Client - Server간에 Protocol에 해당하는 명세서를 작성한다고 생각하시면 편할것 같습니다. 그럼 이거를 수동으로 만드냐? 그건 아닙니다. ProtoBuffer에 프로그램이 존재하는데, 만드는 방법은 다음과 같습니다. protoc 프로그램을 통해, 정의된 *.proto를 *.pb로 생성하는 역활을 진행합니다. protoc 실행방법은 아래와 같습니다. (경로 = protobuf 메인/src/protoc ) protoc -I=../../../ProjectRTS/ClientRoot/proto --csharp_out=../../../ProjectRTS/ClientRoot/proto ../../../ProjectRTS/ClientRoot/proto/addressbook.proto -I에는 *.proto가 있는 경로 output에는 *.pb로 생성 될 경로 그 뒤의 경로는 어느 *.proto를 바꿀지 정의합니다. 해당 명령어는 C#에 해당하는 건데, c++의 경우는 --csharp_out을 단순 --cpp_out으로 변환하면 됩니다. 해당 명령을 진행하면 어떻게 되느냐? /* 해당 정의된 Package들이 ...
[C/C++] Dangling Pointer란 무엇일까?
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
댕글링 포인터(Dangling Pointer) 란 무엇일까? 막상 이름만 들었을 땐 귀엽지만, 잘못하면 문제를 발생시키기 쉬운 녀석이다. 원인은 다음과 같다. 1. 동적 할당(힙에 할당) 된 메모리가 존재. 2. free or delete를 통해 삭제 3. 삭제된 메모리를 가르키고 있는 상태. 코드 상 예를 들자면 다음과 같다. /* 할당 */ char *str = (char)malloc(sizeof(char) * 4); strcpy(str, "test"); /* str 작업...*/ printf("str[%s]\n", str); /* 해제 */ free(str); /* str 재사용 */ if ( str ) { printf("%p str %p is Not Null [%s]\n", &str, *str, str); } /* 기대값으로, str이 가르키는 값은 해제되었기에 if문을 타지 않겠지? */ /* 허나 수행해버리고 종료되어버린다. */ --- 무슨 말인고...? 1. A 할당 = A에 대한 문자열 첫번째에 대한 주소값을 가진다. 2. A 해제 = A에 대해 주소값을 여전히 가진다. 이 과정에서 NULL로 초기화 해주는 소스코드가 들어가야한다. /* 할당 */ char *str = (char)malloc(sizeof(char) * 4); char *ptr = str; /* str 작업...*/ /* 해제 */ free(str); str = NULL; /* 해제 후엔 꼭 가르키는 주소값(포인터)을 Null로 초기화를 하자 */ /* 재사용 */ if ( str ) { printf("%p str %p is Not Null [%s]\n", &str, *str, str); } 댕글링 포인터가 많아지면 디버깅이 어려워지기에 잘 확인하여야한다. 다음은 다른 포인터 변수에 넣는 경우...
[Linux/CentOS/ProtoBuf] Centos - Protobuf 연동[echo 서버][1]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
https://github.com/google/protobuf에서 clone을 받습니다. $ git clone https://github.com/google/protobuf.git 매뉴얼은 protobuf폴더 내, src/README.md 에 C++용 가이드가 있습니다. 영어로 되어 있으며 utunto 기준으로 설명을 합니다. CentOS로 풀어서 가이드로 해보면 설치 전 필요 Tool은 다음과 같습니다. 1. autoconf , $ yum install -y autoconf 2. automake , $ yum install -y automake 3. libtool , $ yum install -y libtool 4. curl , $ yum install -y curl (gmock을 다운받기 위한 용도) 5. g++ , $ yum install -y gcc-c++ 6. unzip , $ yum install -y unzip 그 다음 protobuf가 clone된 메인에서 $ ./autogen.sh 를 실행합니다. 그 이후 $ (sudo) ./configure [저의 경우는 root유저로 ./configure로 했을 때, configure: error: C++ compiler cannot create executables 가 발생하였고, sudo 를 붙이니 해결되었습니다.(가이드는 sudo없음)] $ make $ make check $ sudo make install $ sudo /sbin/ldconfig // Library를 unit library Cache에 적재 이제 이 Library와 Include들을 상대적이게 할 것 인지, 절대적으로 /usr/경로에 넣을 것인지 를 선택합니다. 저의 경우는 상대적으로 작업을 하였는데, 이유는 git에 올렸을 때, clone시 protobuf 설치 없이 가능하도록 하기 위해서 였습니다. 우선 필요 include...
[Unix/C/C플플] 인클루드 꺽쇠와 따옴표차이
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
꺽쇠와 따옴표의 차이 1. Standard Library Header를 쓰는가? <- 꺽쇠 2. User Defined Header를 쓰는가? <- 따옴표 이렇게 쓰는것이 일반적입니다. 왜 그럴까요? #include <stdio.h>를 예로 든다면 컴파일러가 모든 유저가 참고 가능한 /usr/include 에서 헤더를 찾고 종료합니다. [모든 유저가 include할 수 있는 헤더] 그리고 stdio.h.는 /usr/include 내부에 존재합니다. 하지만 User Defined Header의 경우 /usr/include에 파일이 없기에 빌드에러를 내뿜게 됩니다. 그렇다면 꺽쇠를 사용한 경우는 어떨까요 1. User가 정의한 헤더 경로를 먼저 찾는다. 즉 -I../include 와 같이 상대 혹은 절대경로의 유저가 정의한 경로를 먼저 참고합니다. 2. /usr/include 쪽에서 헤더를 찾습니다. Ex, "" -> <>로 바뀐다고 생각하시면 됩니다. 그 다음 /usr/include에서 헤더를 찾습니다. 이런 차이가 발생하기에, User정의 헤더라면 따옴표를 사용하는 것이 좋습니다.
[Linux/CentOS] git, bash prompt , vim diff수정
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
prompt에서 git 정보를 보기 위한 수정입니다. $ vi ~/.bash_profile parse_git_branch() { git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } export PS1="[\u@\H \[\033[32m\]\W\[\033[00m\]]\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ " // 위 내용 추가 $ source ~/.bash_profile 을 통해 적용 다음과 같이 출력됩니다. 아래경우는 config 수정하여 vim diff를 출력하는 부분입니다. git config --global diff.tool vimdiff git config --global difftool.prompt false git config --global alias.d difftool 저는 색깔을 vimrc에 이렇게 입혀놓고 적용하였습니다. hi DiffDelete ctermfg=Red ctermbg=6 hi DiffAdd cterm=bold ctermbg=6 hi DiffChange cterm=bold ctermbg=6 아래는 결과물입니다.
[Linux/CentOS] Cannot find a valid baseurl for repo: base/7/x86_64
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
CentOS 처음 설치 시, Putty연결을 시도하기 전에, ssh를 설치하는데요, 이때, iptables가 없다면 제목과 같은 오류가 발생합니다. Linux/Centos,Cannot find a valid baseurl for repo: base/7/x86_64, 다음과 같은 작업을 처리하여 수행가능합니다. $ dhclient $ systemctl stop firewalld $ systemctl mask firewalld $ yum install iptables-services $ systemctl enable iptables $ systemctl start iptables $ service iptables save 이후 ssh설치 및 작업을 수행하시면 됩니다.
[C/C++] HTTP Server 요청 처리 [1] (Linux LineParser [readline])
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
HTTP는 기본적인 웹을 위한 프로토콜입니다. [*프로토콜 = 일종의 통신 규약] [ EX) 내가 A-A1-A2 라고 보낼 테니 처리해줘 라는 개념 ] Client -> HTTP 규약의 요청(Request) -> Server Client <- HTTP 규약의 응답(Response) <- Server 을 주고 받는 것이 기본 구조입니다. 엄청 자세한 것은 따로 책이나 문서를 찾아 보시는 것이 좋습니다. 그럼 요청을 어떤 구조로 보내야 기본적인 웹사이트에서 응답을 받을 수 있을까? 가 문제가 됩니다. 기본적인 포맷은 다음과 같습니다. EX] Naver 예 GET / HTTP/1.1\r\n Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n Accept-Encoding:gzip, deflate, sdch\r\n Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4\r\n Cache-Control:max-age=0\r\n Connection:keep-alive\r\n Cookie:npic=qkG66SYW2jtZBlXtH/Wije5Ykpf3CQP+5H+oH3ktJhsKKMuY5MFRbu1UaznPikHHCA==; NNB=22YFY2PRRCLFQ; ASID=7c3565980000015a18ebb3aa00000059; nx_ssl=2; PM_CK_rcode=04190121\r\n Host:www.naver.com\r\n Upgrade-Insecure-Requests:1\r\n User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\n 다음과 같은 포맷을 전달 할 때 다음의 ...
제주도 자전거 여행 계획[17.04.29 ~ 17.05.03]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이번 징검 다리 휴가를 맞아... 휴가하루를 내고 제주도 자전거 여행을 가려합니다. 계획이래봣자 거창한건 없고 경로 , 근처 게스트 하우스, 자전거 대여? 정도로 계획짜려합니다. (완주하면 남다른 하체를 가지는 건지...?) [그림 출처](http://m.post.naver.com/viewer/postView.nhnvolumeNo=4272048&memberNo=472213&vType=VERTICAL} 04.29 (토) 20:30 제주 국제공항 도착 예매를 늦게해서 비행기 표가 저녁시간대 밖에 없어... 우선 도착 후, 근처 게스트하우스에서 하루를 묵고 다음날 부터 시작합니다. 근처 게스트하우스가 두개인데, 어느쪽이 공항에서 가장 가까울지 모르겠습니다. 미라클 게스트하우스 같은 경우, 평이 그렇게 좋지는 않고 B: 고추잠자리게스트하우스 인데, 연예인 오재현씨가 운영한다고 합니다. 남: 6 , 여: 6 예약만 받아서 제가 갈 때, 자리가 있을지 모르겠네요 그리고 먹방파티라고하는 파티를 하는데[필수랍니다] (오후 7 ~ 새벽 1시) 도착시간이 20:30 이라서 받아 줄지 모르겠네요. 일단은 두개의 게스트하우스를 선정합니다. 04.30 (일) 08:00 일어나 준비를 하고 대여를 하러갑니다. 반시계 방향으로 돌 예정이라 가장 가까우면서, 인터넷상 가격이 명시 된 곳으로 찾습니다. (필수 짐받이) 일단 기본적으로 준비할 사항 [스포츠 안경, 팔토시 , 자전거용 목 쿨토시, 다리토시(레깅스) , 고글, 장갑, 자전거 라이트, 우비 정도는 필요합니다] 헬멧 , 자전거, 로프, 스마트폰 거치대 정도는 대여점에서 빌릴 수 있구요 [다른 것도 빌릴 수 있긴 하지만, 가서 고르기에는 좀 애매해서..] 이후 일정...
[C&C++] fseek , ftell, lseek ,사용 정리
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
매번 찾아보는 게 귀찮아서 정리. 함수 int fseek(FILE * stream, long offset, int whence) 헤더 stdio.h 인자 정보 FILE *stream (파일 포인터) long offset (이동할 크기) int whence (어디서 부터 이동할지의 위치) whence의 경우, 정의된 값 혹은 상수값 사용 가능 SEEK_SET = 파일 시작 부 SEEK_CUR = 현재 파일 포인터 위치 SEEK_END = 파일 끝 반환 값 0(성공) or -1(실패) 함수 long ftell(FILE * fp) 헤더 stdio.h 인자 정보 FILE *fp (파일 포인터) 반환 값 현재 파일포인터의 위치(성공) , -1(에러) fseek + ftell을 사용하면 파일 사이즈를 구할 수 있다. fseek(fp, 0, SEEK_END); int file_size = ftell(fp); fseek(fp, 0, SEEK_SET); /* do File Work */ 함수 off_t lseek(int file_des, off_t offset, int whence) (Linux 기반) 헤더 unistd.h 인자 정보 int file_des (파일 디스크립터) off_t offset (이동할 크기) int whence (어디서 부터 이동할지의 위치) 반환 값 현재 파일포인터의 위치(성공) , -1(에러) fseek와 차이점은 FILE 포인터를 쓰냐 디스크립터를 쓰냐의 차이. 파일 Size를 구할 때, int file_size = lseek (fd , 0 , SEEK_END); /* do File Work */ 로 사용 [출처] http://forum.falinux.com/zbxe/index.php?do...
[네트워크] Quality Of Service 개념 [1]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Quality Of Service = 특정 네트워크 대역폭을 보장하는 것 정도로 정의할 수 있다. Ex] - 서버가 특정 사용자에 대해 대역폭 제어하도록 유도 하는 것 현재 기업들에서 사용하는 방법은 주로 사용량을 토대로 구분합니다. 일정 이상 사용하게 된다면, QoS를 적용하여 특정 수치의 대역폭만 사용하도록 유도하는 것이지요. 실시간으로 이것을 조절하는 기업은 못 본것 같습니다. 주로 쓰이는 QoS는 DiffServ / InterServ입니다. 1. DiffServ / InterServ 개념 및 모델 일단 결론 부터 말하면 스위치/라우터 계층에서 가능한 QoS이다. 즉, 라우터/스위치가 우선 전송을 하는 방식인데, App 레벨에서, Type of Service 라고 하는 필드에 표시만 하면 된다. IP 헤더 안, TOS 필드 마킹을 통해 전송 우선 순위를 스위치/라우터가 진행 하는 방식 InterServ의 경우 TOS 필드 중 3bit를 사용 하지만 DiffServ의 경우 TOS 필드 전체 사용 TOS 비트 위치에 따라 DS 필드 라고도 불린다. DiffServ에서는 TOS를 DSCP(DifferServ Code Point) 라고 부른다. 이를 바탕으로 동작하는 것을 PHB(Per-Hob-Behavior) , 홉 단위 동작 구분이라고 한다. 결론 부터 말하면, 대역폭 조절을 라우터 및 스위치에 맡겨버리는 형식 가장 오버헤드가 적은 걸로 알고 있다. 자세한 모델 및 알고리즘은 다음과 같다 InterServ RSVP = Reservation Protocol WFQ = 가중치 큐 장점으로 엄격한 QoS 보장 가능하며, 실시간 지원이 가능하다 (End-to-End 개념으로의 QoS) 단점으로 적용되는 스위치/라우터 모델 기준이 Ve...
[네트워크/Unix] 소켓 통신 개념
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Unix 소켓 통신의 개념을 함수 별로 정리해보려 합니다. --- 1. Application에서 Socket 함수 호출 시, Kernel을 통해 Socket 기술자가 생성됩니다. --- 2. Bind, IP 혹은 Port정보를 통해, 소켓 기술자와 Application을 연결합니다. --- 3. 이후 Listen을 호출하면 해당 소켓에 대한 Back log Queue, 연결 대기 큐가 생기게 됩니다. --- 4. Client 연결 요청에 따라, Backlog Queue 에 쌓이게 됩니다. --- 5. 이후 Backlog Queue에 쌓인 Client를 FIFO 로 가져오게됩니다. 여기까지가 unix 함수를 통해 알아본 소켓 내부 동작과정입니다. 아마 거의 모든 소켓프로그래밍이 이 과정을 거치리라 생각합니다. 추가로 읽으면 좋을 것
[Unix/Linux] Thread Pool 구현 [1]
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Thread Pool을 만들 일이 있어 포스팅 합니다. 일단 Event Driven 형식으로 Epoll Event가 오면, 작업을 시작하는데, Non-Block을 하려하지만 큰 파일 전송 상황을 가정하여 ThreadPool로 구현합니다. 구현을 위해서, thread 작업 클래스가 필요하며, 작업이 끝남을 알기위해, flag를 넣었습니다. 일단 기초 작업이며, 이것을 base로 작업하시면 요긴하실 것 같습니다. 우선적으로 threadPool로 사용할 클래스입니다. 작업 시 필요한 것을 class화 시키고, flag 또한 dataClass에 넣습니다. 작업이 끝남을 확인하기 위한 ch_flag Test입니다. StartService 시, false -> true로 바꾸고 do_work(thread 작업) 시 true -> false로 재변환 합니다. 그리고 endService() 에서 종료를 검사합니다. 다음은 실행 시 결과입니다. 이를 바탕으로 thread pool을 구현하겠습니다. 추가로 읽으면 좋을 것
이 블로그의 인기 게시물
윤석열 계엄령 선포! 방산주 대폭발? 관련주 투자 전략 완벽 분석
## 1. 배경 2024년 12월 3일, 윤석열 대통령이 국가 비상사태를 이유로 계엄령을 선포하였습니다. 계엄령은 전시나 사변 등 국가의 안녕과 공공질서가 심각하게 위협받을 때 대통령이 군사적 권한을 통해 이를 방어하고 유지하기 위해 발효하는 특별한 조치입니다. 이러한 조치는 국내 정치·경제 전반에 큰 영향을 미치며, 특히 주식시장에서는 관련 기업들의 주가 변동이 예상됩니다. 24.12.03 오전 5시 계엄 해제로 아래 관련주 추천 - [윤석열 계엄령 해제! 이재명 관련주 급등? 투자자 필독 전략](https://warguss.blogspot.com/2024/12/yoon-martial-law-lift-lee-jaemyung-stocks.html) --- ## 2. 기업 및 관련주 ### 2-1 식품 관련주 - 계엄령이 선포되면 사회적 불안정성이 증가할 수 있으며, 이에 따라 생필품 및 음식 관련 주식이 단기적으로 강세를 보일 가능성이 있습니다. #### 1. CJ제일제당 (KOSPI: 097950) [시가총액: 약 10조 원] - **주요 산업**: 식품 및 생필품 제조 - **관련주 근거**: 국가적 위기 상황에서 식료품 수요가 증가하며, 즉석밥, 가공식품 등의 판매가 확대될 가능성이 있습니다. - **주가정보**: [네이버 차트](https://finance.naver.com/item/main.nhn?code=097950) #### 2. 오뚜기 (KOSPI: 007310) [시가총액: 약 3조 원] - **주요 산업**: 식품 제조 및 유통 - **관련주 근거**: 라면, 즉석식품 등 비축 가능한 식품 수요가 증가하며, 매출 상승이 기대됩니다. - **주가정보**: [네이버 차트](https://finance.naver.com/item/main.nhn?code=007310) #### 3. 대상 (KOSPI: 001680) [시가총액: 약 2조 원] - **주요 산업**: 식품 제조 및 발효제품 - **관련주 근거**: 계엄...
대통령 퇴진운동 관련주: 방송·통신·촛불수혜주 완벽 분석
--- ## 1. 배경 2024년 12월 3일, 윤석열 대통령이 비상계엄령을 선포했으나, 짧은 시간 내에 이를 해제하면서 정치적 긴장감이 커졌습니다. 이에 따라 대규모 촛불시위와 같은 사회적 움직임이 예상되며, 통신과 관련된 기업 및 촛불 제조와 연관된 산업에 관심이 모이고 있습니다. --- ## 2. 기업 및 관련주 대규모 시위 및 관련 활동으로 인해 통신, 미디어, 그리고 촛불 제조와 관련된 기업들이 단기적인 수혜를 볼 것으로 예상됩니다. ### 2-1. 통신 관련주 #### 1. **KT (030200) [약 12조 원]** - **주요 산업:** 통신 - **관련주 근거:** 시위 생중계 및 대규모 통신 트래픽 증가로 매출 증대 가능성 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code=030200) #### 2. **SK텔레콤 (017670) [약 12조 원]** - **주요 산업:** 통신 - **관련주 근거:** 대규모 데이터 사용 증가로 인한 수익 상승 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code=017670) #### 3. **LG유플러스 (KOSPI, 032640) [약 4.9조 원]** - **주요 산업:** 통신 - **관련주 근거:** 촛불시위로 인한 데이터 및 음성 서비스 사용 증가 예상 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code=032640) --- ### 2-2. 방송 관련주 #### 1. **SBS (034120) [약 2,924억 원]** - **주요 산업:** 방송 및 미디어 콘텐츠 제작 - **관련주 근거:** 시위 관련 특집 방송 및 실시간 보도에 따른 광고 수익 증가 - **주가정보:** [네이버 차트](https://finance.naver.com/item/main.nhn?code...
키움 OPEN API MFC 개발 (1)
* 키움 API 개발 - visual studio 2019 , MFC * Visual Studio Set - 새 프로젝트 만들기 / MFC 검색 - 다음 이후, MFC 설정에서 어플리케이션 종류 변경 (대화 상자 기반) * 기본 적용 Flow ( https://www.kiwoom.com/nkw.templateFrameSet.do?m=m1408000000 ) = 우선 생략하고, Step 2 설치 = Step 3 자료실/ KhOpenApiTest_2.71.zip 다운로드 * Step 2 설치 후, 설치 경로의 OpenAPI 디렉토리 찾기 1. 파일 찾기 2. KHOpenAPI.ocx 를 프로젝트 소스에 복사 * Step 3 자료실/다운로드 1. khOpenApiTest_2.71.zip 다운/압축 풀고, 2. KHOpenAPI.cpp/h KHOpenAPICtrl.cpp/h 프로젝트 소스에 복사 * 내부 소스에 다음추가 header에 class 생성 cpp에 다음 소스 추가 * 리소스 뷰 > IDD_TRADINGAPP_DIALOG 1. 확인 우클릭 > Active X 컨트롤 삽입 2. KHOpenAPI Control 적용 하면 위 화면처럼 적용 이후 실행 시 다음 화면 이후 매수/매도 적용