본문 바로가기

분류 전체보기

(772)
default 값에 대하여 [1. 개요].proto 작성 시 default 값을 사용하는 문제에 대하여 개인적인 견해를 정리한다.[2. syntax 버전].proto 작성 시 기본적으로 syntax 버전을 명시하는데, 각각 아래와 같다.버전특징syntax = "2"default 사용 가능syntax = "3"default 사용 불가능 (v3.12 ~ ) 기본적으로 .proto 파일에 명시 된 message 는 cpp 기준 기본적으로 protoc 를 거쳐 class 화 된다.이 때, 각 클래스는 멤버 변수들을 갖기 때문에 이미 default 값을 갖게 된다. (0, null, false, ... )syntax = "2" 에서 default 는 0, false 외 값을 명시할 수 있는 것이다.(이러한 기능이 큰 의미가 있는지는 잘 모..
bash shell 실행 옵션 [1. 개요]bash 쉘 스크립트 실행 시 단순하게 ./myjob.sh 로 실행하는 것 외에다양한 옵션을 주어가면서 실행할 수 있다. 여기서는 몇가지 옵션과 유용한 상황을 같이 정리하도록 한다.[2. 옵션]-c 옵션문자열을 bash 코드처럼 실행 할 수 있게 해줌다른 셸 환경에서 bash 문법 강제 실행 SSH/원격 실행 (SSH 로 실행 시 기본 쉘이 bash 가 아닐 수 있음)-x 옵션명령어 추적 (trace)쉘 스크립트 내 실행한 명령어를 출력 $ ls ${anypath}위와 같이, ${anypath} 가 실제 값으로 치환 되어 ls /home/user 와 같이 출력됨쉘 스크립트 디버깅(?) 할 대 유용-e명령어 실패 시 즉시 종료쉘 스크립트 내 에서 특정 명령어의 exit code 를 직접 체크하..
함수의 중복 정의 방지 [1. 개요]C++ 에서는 함수는 반드시 하나의 정의만 가져야 한다.이렇게 함수를 하나만 정의하는 방법은 아래와 같다.[2. .cpp 파일에 정의]가장 일반적인 방법으로, .hpp 파일에 함수의 선언을 명시하고.cpp 파일에 해당 함수를 정의 함.[3. .hpp 파일에 정의]기본적으로 .hpp 에 함수를 선언 및 정의 하는 경우 중복 함수 정의로 인해 컴파일 에러가 발생하게 된다.그러나 아래와 같은 경우는 중복 함수 정의로 처리하지 않는다.템플릿 함수 (컴파일 시점에 인스턴스화 해야 함)클래스의 멤버 함수 나 static 함수inline 함수여기서 inline 함수는 중복 함수 정의로 처리하지 않는 점을 유념하도록 한다.
버퍼에 안전한 문자열 함수 [1. 개요]기존 strcpy 나 strcat 등은 버퍼 길이를 체크하지 않아서, 버퍼 오버플로우에 취약 함.그래서 버퍼 길이를 인자로 받는 버퍼에 조금 안전한 문자열 함수가 있어,가급적 이러한 함수를 사용하는 것이 권장 됨 함수 목록strncpystrncatsnprintfstrncmp마지막 NULL 문자로 채워지는 것을 보장하지 않음.const char* cstr = "Hello" 를char buf[5] 에 복사 시, buf[4] = 0; 이 아님 가급적, (총 버퍼 길이 - 1) 을 넘기는 편이 좋아 보임 또한, strncat 에서는 (concat 위치 부터 남은 버퍼 길이 - 1) 을 넘기는 편이 낫다.[2. 예제]#include #include int main(){ const char* st..
스레드에 안전한 localtime() [1. 개요]localtime() 함수는unix timestamp 에 대해서, 연/월/일 시간/분/초/밀리초 단위로 구할 수 있다. 그러나, 리턴 값에 대해서 리소스를 해제하는 코드가 없기에 내부적인 정적 버퍼의 주소를 리턴 하는 듯 한데,실제로 그러하다. 따라서 이 함수는 스레드에 안전하지 않다.스레드에 안전한 함수는 플랫폼 별로 아래와 같다.Linux 계열 : localtime_r()Windows 계열: localtime_s()[2. localtime_r 예제]#include #include int main(){ const std::time_t ntime = std::time(nullptr); const struct tm * tm0 = localtime(&ntime); std::cou..
libcurl 빌드 [1. 개요]윈도우(Windows10, 32bit 용 라이브러리) 와 리눅스 (Centos7 기준) 에서 libcurl 을 소스코드에서 빌드 하는 방법을 정리한다.libcurl 빌드 시, 별도의 옵션을 명시하지 않으면, https 통신은 되지 않는다.여기서는 https 통신을 위해 openssl 을 이용하여 빌드 하도록 한다.openssl 빌드 방법은 아래 참조https://testkernelv2.tistory.com/792https://testkernelv2.tistory.com/791CMake 를 이용하는 방법도 있으나, 아래 방법을 사용하는 편이 더 좋아 보임[2. 리눅스 기준]github 등에서 소스코드 압축파일 해제 후, 폴더 진입 한 곳을 현재 디렉터리가 가정하면,$ autoreconf -fi..
js. [1002] [1. 문제 설명]https://www.acmicpc.net/problem/1002[2. 풀이 접근]중심 좌표가 있고, 거리가 있다 => 중심 좌표로 부터 동일한 거리 => 원두 개의 원이 있고, 이 원의 관계성을 이용하여 해의 개수를 판별 한다. 두 원의 중심 간의 거리의 제곱을 d 라하면 (정수 값으로 비교하기 위함)1) 두 원의 중심이 같을 때 => 두 원의 반지름이 같으면, 해의 개수가 무한대 (특수해) => 두 원의 반지름이 다르면, 해의 개수 없음2) 작은 원의 중심이 큰 원 바깥에 있을 때 => 두 원이 만나지 않음, 해의 개수 없음 (d > r1+r2) => 두 원이 접함, 해의 개수는 1개 (d == r1+r2) ..
grep [1. 개요] [3. grep 이 파일을 binary 로 판단하는 기준]내부적으로 NULL 문자가 포함되어 있는지로 판단 함.이 경우, -a 옵션 이나 --text 옵션을 사용하여 강제로 텍스트 파일 형태로 인지하게 한다.grep -a "abcd" result.loggrep --text "abcd" result.log
service 파일 [1. 개요].service 파일 (systemd 서비스 파일) 은 특정 프로세스를 systemd 에 등록하여자동 실행 및 관리하도록 하는 설정 파일이다. 보통, 아래 경로에 위치한다./etc/systemd/system/usr/lib/systemd/system이 파일은 보통 3개의 섹션으로 구성 된다.[Unit][Service][Install][2. Unit]이 섹션에는 메타데이터 와 의존성 관해서 기술한다.DescriptionDocumentationRequires# network.target : 네트워크 스택을 요구한다.# network-online.target : 네트워크 연결이 실제로 가능한 상태WantsAfter# network.target : 네트워크가 준비된 이후 실행하도록 한다.# netwo..
Index Lifecycle Management [1. 개요]Index Lifecycle Management (이하 ILM) 에 관하여 정리한다.ILM 은 4단계로 구성 된다.HotWarmColdDelete[2. Hot phase] [2. Warm phase]이 단계에서는 보통 index 에 더 이상 write 가 거의 발생하지 않는다고 볼 수 있다.warm phase 를 40일 정도 뒤에 되도록 설정하고index 는 월 단위로 rotate 하는 경우라면, write 없이 read 만 발생한다고 볼 수 있다. 여기서 효율적인 read 를 위해 index 의 shard 개수를 shrink 옵션을 통해 조정 할 수 있다. 보통 read 성능 향상을 위해 shard 개수를 줄이는 방향으로 설정함.여기서, 현재 적용 중인 ilm 의 shrink 옵션에서 sh..