Study: ComputerScience(CS)/CS: Linux

    [Linux] C++ 컴파일러에 대하여 (feat. clang/LLVM, clang-format, clang-tidy)

    💡 본 문서는 '[Linux] C++ 컴파일러에 대하여 (feat. clang/LLVM, clang-format, clang-tidy)'에 대해 정리해놓은 글입니다. C++ 파일을 컴파일하기 위해서 많이 사용하는 컴파일러는 gcc와 clang입니다. 본 문에서는 clang에 대한 설명 및 관련 도구들에 대해 정리하였으니 참고하시기 바랍니다. About clang C, C++, Obejctive-C, Obejctive-C++ 프로그래밍 언어를 위한 컴파일러 프론트엔드이며, LLVM을 백엔드로 사용하며 LLVM 2.6 이후로 릴리즈의 일부로 자리잡으며, GCC(GNU 컴파일러 모음)를 대체하는 것을 목표로 하고 있습니다. 현재 GCC가 GPLv3를 적용한 이후 소스 코드 공개를 꺼리는 기업들이 하나둘씩 LL..

    [Linux] Executable and Linkable Format(ELF): 실행 및 링킹 파일 포맷 (feat. readelf)

    Executable and Linking Format(ELF) UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷을 ELF라 하며, 하나의 ELF Header와 파일데이터로 구성됩니다. ELF header : ELF 파일의 Metadata를 가진 Header Segment : 동일한 메모리 속성(read-only, writable, ...)을 가진 하나 또는 그 이상의 섹션의 집합 Section : 특정 정보(machine instructions, symbol table, ..)를 포함하고 있는 ELF file의 작은 조각 Symbol : ELF file내에 저장된 함수 또는 변수의 디스크립션입니다. 간단한 함수 또는 변수의 정보를 포함하고 있습니다. Object file : 컴퓨터에서 읽..

    [Linux] 일정 시간마다 작업 실행시키기(crontab)

    crontab 이란? 특정 시간을 주기로 원하는 작업을 계속 실행시켜 주는 리눅스 전용 작업 스케쥴러입니다. 크론탭에 등록된 작업들은 커맨드 창(Shell)이 실행 여부와 상관없이 동작하기 때문에 서버 등을 운영할 때 편리합니다. ​ 현재 크론탭에 등록된 스케줄 확인 $ crontab -l 현재 등록되어 있는 스케줄을 확인합니다. 하나도 등록되지 않았다면, no crontab for 을 출력하며 끝납니다. ​ 스케줄 등록하기 스케줄은 다음 명령어를 사용하여 등록할 수 있습니다. 해당 명령어를 실행하면, -l 옵션으로 보게 되었던 스케줄 목록을 텍스트 에디터(vi, vim, nano) 등으로 열 수 있게 되고, 해당 스케줄을 직접 작성해주면 됩니다. $ crontab -e ​스케줄의 등록 형식은 다음과 같..

    [Linux] ln 명령어(feat. 리눅스 파일 링킹): 하드링크(Hard Link) VS 심볼릭링크(Symbolic Link)

    리눅스 파일 링킹: 하드링크(Hard Link) VS 심볼릭링크(Symbolic Link) 하드 링크(Hard Link) 와 심볼릭 링크(Symbolic Link) 는 운영체제 파일시스템을 이해하는데 기초적인 개념입니다. 아마 윈도우를 많이 사용한다면, 원본 - 바로 가기 개념이 떠오를 수 있지만 다소 차이가 있으며, 리눅스 환경에서는 개발 환경 구성 시, 심볼릭 링크를 사용해서 파일 경로를 간편하게 관리하기도 합니다. 루트 디렉토리 내에 심볼릭 링크를 구성해서 마운트한 파일 시스템을 연결시킨다던지 Link 조회 ln -l 명령어로 현재 폴더 내 링크를 조회할 수 있습니다. Link 생성(ln) Hard Link 원본 파일과 동일한 inode 를 가지며 원본 파일이 삭제되더라도 링크 파일을 여전히 사용 ..

    [Linux] Graceful Shutdown이란? (feat. SIGINT/SIGTERM/SIGKILL + signal handler)

    Graceful Shutdown 이란? 우아한 종료라고 직역하면 뭔가 어색하지만, 그 역의 경우를 생각해보면 제법 어울리는 표현이라는 생각이 듭니다. 우아한 종료는 프로그램이 종료될 때 최대한 side effect가 없도록 로직들을 잘 처리하고 종료하는 것을 말합니다. Gracueful Shutdown Hard Shutdown hard shutdown: 종료 시그널과 동시에 모든 작업을 중단합니다. e.g. 그대로 컴퓨터를 바로 끄고 퇴근하는 것 graceful shutdown: 하고있던 작업을 적절히 마무리한 뒤 종료되는 것이 핵심입니다. e.g. http 요청을 처리하는 웹서버라면 서버가 종료되기 전, 기존 처리 중이던 요청들을 모두 처리하고 사용했던 리소스(파일, 소켓, DB 연결등)를 닫은 뒤 종..