[CS/운영체제] 소프트웨어 설치 및 관리 - 4부

황제연·2025년 5월 31일
0

CS학습

목록 보기
91/193
post-thumbnail

라이브러리 개요

컴퓨터 분야에서 말하는 라이브러리는 프로그램에서 특정한 기능을 하는 루틴들을 모아놓은 것입니다
하나 이상의 서브 루틴, 함수, 클래스로 만듭니다
프로그램 작성 시에 동일한 기능을 여러 곳에 사용할 경우 반복적인 코드 작성이 필요한데,
이렇게 불필요한 코드 작성을 없애기 위해 재사용이 가능한 형태로 만든 것이 라이브러리입니다

라이브러리들은 프로그램을 개발할 때 사용자의 프로그램과 링크되어 실행 가능한 형태로 완성됩니다
라이브러리는 링크 방식에 따라 정적 링크 라이브러리(Static Link Library)와
동적 링크 라이브러리(Dynamic Link Library)로 분류됩니다

정적 링크 라이브러리

일반적으로 사용되는 정적 링크 라이브러리는 프로그램을 컴파일할 때 실행 파일에 포함되어 배포되는 방식입니다

정적 라이브러리 방식이 속도가 빠르다는 장점이 있으나 실행 파일의 크기가 커지고 메모리를 많이 차지합니다

동적 링크 라이브러리

동적 링크 라이브러리는 실행 프로그램에 항상 라이브러리를 포함하는 것이 아니라
필요할 때만 라이브러리를 메모리에 적재하는 방식입니다

공유 라이브러리

운영체제에서도 수많은 명령어가 같은 루틴을 공유하는 것을 공유 라이브러리(Shared Library)라고 합니다

정적 링크 라이브러리는 컴파일할 때 관련 라이브러리를 프로그램에 넣지만
동적 공유 라이브러리는 실행 파일 내부에 넣어두지 않고 프로그램을 실행할 때 사용하기 때문에
메모리의 효율성이 매우 좋습니다

따라서 운영체제에서 주로 사용하는 방법은 동적 공유 라이브러리이며,
디스크의 공간이 효율적으로 사용하는데 크게 기여하고 있습니다

공유 라이브러리 개요

운영체제에서 동일한 라이브러리가 정적으로 링크된 상태로 여러 프로그램이 실행되면
메모리가 낭비됩니다

이 문제를 해결하기 위해 많은 프로그램이 동적 링크를 사용합니다
이때 프로그램은 동일한 루틴을 사용하지만 파일에 라이브러리 코드가 포함되어있지 않고
대신 실행시에만 링크가 됩니다

동적 링크는 여러 프로그램이 메모리에서 동일한 라이브러리를 이용할 수 있게 지원하고
실행 파일의 크기도 작게 만듭니다

운영체제에서는 많은 응용프로그램에 동적으로 링크되어 공유되는 라이브러리를
공유 라이브러리라고 합니다

공유 라이브러리 특징

의존성

동적으로 링크된 프로그램은 적어도 하나 이상의 공유 라이브러리가 필요합니다
만약 필요한 라이브러리가 존재하지 않거나 찾을 수 없으면 프로그램은 실행되지 않습니다

링크

동적으로 링크된 실행 파일은 실행 시에 공유 오브젝트에 대한 동적 링커인
ld.so에 의해 검사됩니다
프로그램은 실행 파일을 점검하고 시스템 공유 라이브러리에 대한 의존성 문제를 해결합니다
만일 ld.so가 지정된 라이브러리를 찾지 못하면 파일은 실행되지 않습니다

공유 라이브러리 관련 디렉토리 및 파일

리눅스 운영체제에서 사용되는 공유 라이브러리는 shared object라는 의미로
파일명 뒤에 .so(ld.so, ld-linux.so 등)라고 덧붙여져 있습니다

공유 라이브러리 파일들의 위치는 전통적으로 /lib와 /usr/lib 디렉토리에 나뉘어져 있습니다
/lib 디렉토리에는 ls, mv등과 같은 기본 명령어 및 시스템과 연관된 라이브러리가 위치했고,
/usr/lib 디렉토리에는 주로 응용 프로그램과 관련된 라이브러리가 위치했습니다
또한 추가적으로 특정 디렉토리의 위치를 라이브러리 관련 디렉토리로 등록하려면,
/etc/ld.so.conf 파일을 사용했습니다

CentOS 7버전부터는 X86_64용으로만 배포되면서 대부분 공유 라이브러리 파일들을
/lib64 디렉토리 안에 두고 같이 관리하고 있습니다

공유 라이브러리 관련 환경 변수

공유 라이브러리 관련 환경 변수에는 LD_LIBRARY_PATH가 있습니다
특정 프로그램 실행 시 라이브러리 등록이 필요하면 이 변수에 디렉토리 경로를 등록하면 됩니다

공개 소프트웨어의 소스파일 검증 방법

공개 소프트웨어들은 대부분 무료이고 소스파일 형태로 배포됩니다
따라서 해커들이 백도어 같은 악의적인 코드를 삽입하여, 실제 배포되는 이름과 동일하게 유포시키는 경우가 있습니다

이러한 문제점을 해결하기 위해 정상적으로 배포된 파일임을 증명하기 위해 검증이 요구되는데
MD5 및 SHA 해시 알고리즘을 사용합니다

리눅스에서는 관련 소스파일 다운로드 후 명령행에 md5sum, sha1sum, sha256sum, sha512sum등과 같은 명령으로 검증할 수 있는데,
공개 소프트웨어들은 해시 알고리즘을 이용해서 공인된 파일임을 증명하고 있습니다

참고

  • CentOS 7로 이해하는 리눅스 관리 및 시스템 보안 - 도서
profile
Software Developer

0개의 댓글