일반 운영관리 - 라이브러리 관리

2022. 2. 7. 03:13리눅스마스터 1급 - 필기/리눅스 시스템 관리

라이브러리 : 사전적 의미로는 도서관이라는 뜻으로 컴퓨터에서도 비슷한 의미로 사용됩니다. 예를 들어 코딩을 할때 같은 코드가 반복적으로 사용될 경우 일일히 코드를 작성하는 것이 아닌 해당 코드를 재사용한 형태로 만들어 필요할 때마다 꺼내 사용하는 것이 라이브러리의 기능입니다. 또한 어떠한 기능이 필요할 때 그 기능을 직접 코딩할 수 있어도 이미 잘 만들어진 라이브러리를 사용하는 것이 더 효율적이기 떄문에 이러한 경우에도 라이브러리를 사용합니다.

 

라이브러리는 사용자가 프로그램을 개발할 때 프로그램과 링크하여 사용 가능한 형태가 됩니다. 링크에는 정적 방식, 동적 방식 두가지 방법이 있습니다.

 

1. 정적(Static) 링크 라이브러리

- 일반적으로 사용되는 방식입니다.

- 실행 파일(프로그램)에 항상 라이브러리가 포함되어 있는 방식입니다.

- 항상 라이브러리가 포함되어 있기 때문에 속도는 빠르나 실행 파일의 크기가 커지고 메모리에 항상 적재 되어 있어 메모리를 많이 차지하게 됩니다.

 

2. 동적(Dynamic) 링크 라이브러리

- 실행 파일에 항상 포함되어 있는 정적 링크와는 달리 필요할 때만 라이브러리를 메모리에 적재 시키는 방식입니다.

- 프로그램을 실행 할 때만 라이브러리를 가져다 사용하기 때문에 메모리 효율이 매우 좋습니다.

- 운영체제에서 주로 사용하는 방식입니다.

 

운영체제에서 동일한 라이브러리를 정적으로 링크된 상태로 사용하는 프로그램들이 실행 될 경우 메모리를 많이 낭비하게 됩니다. 그렇기 때문에 많은 프로그램들이 동적 링크를 사용합니다.

많은 프로그램들에 동적으로 링크되어 사용되는 라이브러리를 공유 라이브러리라고 합니다.

 

공유 라이브러리의 특징

1. 의존성 : 동적으로 링크된 프로그램은 적어도 하나 이상의 공유 라이브러리가 필요합니다. 프로그램 실행시 필요한 라이브러리가 존재하지 않을 경우 해당 프로그램은 실행되지 않습니다.

 

2. 링크 : 동적으로 링크된 프로그램은 실행시 동적 링커인 ld.so에 의해 검사됩니다. ls.so는 프로그램을 점검하고 필요한 라이브러리를 찾아주는 역할을 합니다. 필요한 라이브러리를 찾지 못할 경우 프로그램은 실행되지 않습니다.

 

리눅스에서 사용되는 공유 라이브러리는 파일명 뒤에 .so 라고 붙여지고 /lib, /usr/lib 디렉터리에 나누어져 저장되어 있습니다.

ls, cat, cp 와 같은 기본 명령어 또는 시스템 관련 라이브러리는 /lib에 저장되어 있고 응용 프로그램과 관련된 라이브러리는 /usr/lib에 저장되어 있습니다.

CentOS7 이후부터는 라이브러리 파일들을 /lib64 디렉터리 안에 두고 같이 관리 하고 있습니다.

 

방금 위에서 다룬 기본 공유 라이브러리 디렉터리인 /lib, /usr/lib, /lib64 이외에 추가로 디렉터리를 공유 라이브러리 디렉터리로 등록하고 싶을때는 /etc/ld.so.conf 파일에 디렉터리를 절대 경로로 저장한뒤 ldconfig 명령어를 사용해서 시스템에 적용 시켜주면 됩니다.

 

또 다른 방법으로는 라이브러리 관련 환경 변수인  LD_LIBRARY_PATH를 사용하는 것입니다. 이 환경 변수에 등록하고자 하는 디렉터리 경로를 입력하는 것입니다.

 

특정 프로그램이 의존하고 있는 라이브러리 정보를 출력할 때는 ldd 명령어를 사용하면 됩니다.