본문 바로가기

분류 전체보기

(774)
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..
git merge [1. 개요]git merge 는 기본적으로 다른 branch 의 커밋 사항을 현재 branch 에 반영하는 것으로여기서는 git merge 시 사용 가능한 여러 옵션을 정리하도록 한다. 현재 branch: master다른 branch: develop[2. --no-ff]$ git merge --no-ff develop --no-ff 는 fast forward(=ff) 가 가능하더라도 하지 않고, 새로운 commit 으로 생성한다는 의미이다.merge 후 에도, master 와 develop branch 는 서로 다른 HEAD 를 가리키게 된다.fast forward 가 가능한 경우에는 master 의 HEAD 가 develop 의 HEAD 와 같아지게 됨.[3. --squash]$ git merge -..
ansible-playbook 설치 [1. 개요]ansible 을 설치할 때, yum 이나 apt 같은 패키지 매니저를 이용하여 설치할 수 도 있지만,pip 를 이용하여 설치 할 수 도 있다.[2. 설치 방법]python 버전 3.8.10 이고,이 때, pip 버전 24.3.1. 에서 python3 -m pip install --user ansible 시,설치 된 ansible 버전은 2.13.13 ## ansible 설치 실패 시 아래 실행을 고려해보도록 한다.## python3 -m pip install --user upgrade pip
pip 모듈 옵션 [1. 개요]pip 모듈 사용 시, 다양한 옵션이 존재[2. --user]특정 패키지 install 시 이 옵션을 사용하면,해당 패키지가 현재 파이선 버전 및 현재 사용자를 대상으로 만 설치가 된다. 전역적으로 설치되지 않는다는 점 (root 권한이 필요 없음)[3. --upgrade]
update-alternatives [1. 개요]데비안 계열에서는 update-alternatives레드헷 계열에서는 alternatives 라는 유틸은 /etc/alternatives/ 디렉토리에 심볼릭 링크를 만들어서, 여러 버전의 프로그램 중 하나를 기본값으로 지정하는 기능을 제공 한다. 즉, 실행 할 프로그램의 버전을 관리해주는 유틸이다.[2. --install]update-alternatives --install 최종적으로 만들어질 심볼릭 링크 위치 이 파일은 자동으로 /etc/alternatives/ 으로 링크된다. alternatives 시스템에서 관리할 그룹 이름 /etc/alternatives/ 아래에 이라는 링크가 생김.관례상 의 파일명과 동일하게 사용한다. 대체 후보 프로그램의 실제 실행 파일 경로 ..
리눅스 크래시 로그 파악하기 [1. 개요]프로그램이 비정상 종료하게 되어 dmesg 를 체크 한 경우,비정상 종료한 프로그램에서 crash 난 위치를 대강 파악할 수 있다. 보통 그 크래시 로그는 아래와 같은 형태이다.segfault at 1d ip 00000...508b30 sp 00007f93474f19838 error 4 in MyApp[400000+33f000]# at 다음에는 주소 값 (0 인 경우는 NULL 포인터를 접근 한 경우라 볼 수 있다.)# ip 는 instruction pointer 로 실제 진행 한 명령어의 주소 값 (이 명령어, 코드가 충돌 지점이다)# error 는 오류 코드# sp 는 stack pointer 로 아직 써본 경우는 없음.# MyApp ~ 는 base_address + offset 으로 구..
libcurl 관련 사용 예제 [1. 개요]curl_global_init() - 대부분의 플랫폼에서 스레드 안전 할 수 있으나, 보장하지 않는다. curl_easy_init() curl_easy_cleanup() curl_list_append() - 최초 NULL 인 경우 리소스를 할당해준다. - 반환 값이 NULL 일 수 있다. curl_slist_free_all() curl_easy_setopt()- CURLOPT_URL- CURLOPT_POST- CURLOPT_POSTFIELDS- CURLOPT_POSTFIELDSIZE- CURLOPT_HTTPHEADER- CURLOPT_USERAGENT- CURLOPT_WRITEDATA # CURLOPT_WRITEFUNCTION 를 사용하지 않는다면 # 반드시, FILE* 를 넘..
boost 비동기 이론 [1. 개요]boost 에서 비동기 프로그램 작성에 대한 배경 지식을 정리하도록 한다.io_contextstrandstd::enable_shared_from_this논블로킹 IO 와 달리 비동기 IO 는 별도의 스레드로 동작하는 이벤트 루프가 필요하다.논블로킹은 일종의 폴링 과 같은 방식이기 때문이다.[2. io_context]boost 에서 io_context 는 내부적으로 큐를 갖고 있고, 이 큐에 비동기 작업이 등록되며io_context.run() 을 호출하면 큐에 쌓인 작업을 하나씩 꺼내서 실행하게 된다.std::vector> threads;for (unsigned i = 0; i thread = std::make_shared( // 멀티 스레드를 통해 // io_con..
segmentation fault 사례 6 [1. 개요]C++ 표준에 근거한 멤버 변수 초기화 순서를 지키지 않음으로 인해 발생한 fault 사례 정리[2. 참조자]어떤 객체가 참조자를 멤버 변수로 포함하고 있는 상태에서,이 참조자가 제대로 초기화 되지 않고, 이 참조자를 접근 할 때 문제가 발생 할 수 있다. 일반적으로 참조자가 포인터 처럼 NULL 값 이 들어오는 상황은 거의 없지만, (컴파일 오류..)아래와 같은 C++ 표준 상, 참조자가 유효하지 않은 메모리를 가리키는 상황이 발생 할 수 있다.- 멤버 변수는 선언된 순서대로 초기화 된다.- 생성자 이니셜라이저 리스트 순서와 관계 없다.- ISO/IEC 14882, 12.6.2[3. 예제]#include class A{ public: int a; A(cons..