3. 프로그램의 런타임 뷰
- 이번 챕터에서는 타겟 머신에서 프로그램이 실행되는 구조와 프로그램의 어떤 파일들이 메모리에 올라가는지 설명한다.
- 실행 프로그램: CPU에서 실행되는 명령 집합과 데이터값, 메모리에 로드되어 실행되는 코드 전체가 컴파일된 프로그램
- 라이브러리: 여러 프로그램에서 공통으로 사용되는 오브젝트 코드의 집합. 라이브러리 단독적으로 메모리에 로드될 수 없으며, 반드시 실행프로그램과 링크된 후 로드되어 사용된다.
- 설정 파일과 데이터 파일: 명령으로 이루어지지 않은, 데이터와 설정 정보. 프로그램이 디스크에서 로드하여 사용
3.1 실행 프로그램
- 우리가 보통 프로그램을 작성하면 최종 산출물로써 생각하는 프로그램.
- 네이티브 기계어 코드: C/C++로 만들어낸 머신코드로 이루어진 프로그램. 실행 속도가 빠른 방법. 일반적으로 이를 실행 파일, 바이너리 파일이라고도 부름.
- 모놀리식 시스템 이미지: 타겟머신에 운영체제 없이 프로그램 실행. 임베디드 프로그램 중 로우레벨의 프로그램들이 해당
- 전체가 인터프리트되는 프로그램: Shell script
- 인터프리트된 바이트 코드: 먼저 컴파일된 바이트 코드로 구성되어 있지만, 이는 CPU에서 바로 실행할 수 있는 머신코드로 구성되어 있지는 않음. 가장 많이 사용되는 예로는 Java가 있는데, Java VM(Virttual Machine)으로 바이트코드를 인터프리트해 사용하는 방법과 JIT(Just In Time) 컴파일 방식으로 네이티브 기계어 코드로 변환해 실행하는 방식이 있다. 이 방법은 바이트코드로 컴파일하는 과정이 플랫폼 독립적인 성질을 가지게 해준다.
또 파이썬과 펄 언어를 실행할 때, 이에 해당한다. 소스코드로 실행하면, 실행 중에 바이트 코드로 변환하고 이를 다시 인터프리터를 통해 실행하게 된다. 이 방법으로 미리 컴파일하지 않아도 실행할 수 있다. 하지만, 실행하기 전까지 syntax error(구문 에러)를 발견하기 어렵다. 특히 내 경험에서는 그저 실행뿐만이 아니라 에러가 있는 라인에 도달하지 못하면 syntax error를 내보내지 않기 때문에, 배포 전에 코드 커버리지가 높은 테스트를 필수로 요한다. (사실, 테스트의 높은 코드 커버리지는 항상 중요하다, 하지만 매우 기본적인 실수를 파이썬 코드에선 놓칠 수 있다.)
3.2 라이브러리
- 빌드 시스템에서의 라이브러리와 관련된 두 가지 중요한 작업은 다음과 같다.
1) 새로운 라이브러리 생성: 소스 파일을 컴파일해 오브젝트 파일을 생성하는 일. 생성된 오브젝트 파일은 링커나 아카이브를 사용해 하나의 라이브러리 파일로 만들고, 라이브러리에 포함된 함수의 인덱스를 생성한다.
2) 라이브러리 링크해 사용하기: 실행 프로그램을 생성할 때, 빌드 시스템이 라이브러리 리스트를 제공하고 실행 프로그램이 사용한 라이브러리의 오브젝트 파일을 실행 프로그램 안에 복사해주어야 한다.
- 정적 링크: 정적 방식에서의 라이브러리는 오브젝트 파일의 묶음이다. 빌드 과정에서 링커는 실행 파일에서 사용한 코드의 오브젝트 파일을 찾아 실행 파일 안에 복사한다. 최종 실행 파일에 라이브러리가 포함되는 구조이다. 최종 실행 파일이 만들어진 후 라이브러리와 분리가 불가능하다.
- 동적 링크: 라이브러리를 프로그램과 별도로 메모리에 로드하고 동적 링커가 프로그램이 사용하는 함수와 메모리에 로드된 함수에 연결한다. 동적 라이브러리는 오브젝트 파일을 결합해 만든 파일이고, 릴리스 패키지에 담아 타겟 머신에 설치된다. 본 책에선 2가지 장점을 제시하였는데, 동적 라이브러리의 업데이트를 하는 과정에서 실행 프로그램은 업데이트할 필요가 없고, 라이브러리를 한 번만 메모리에 올리면, 여러 프로그램이 사용할 수 있으므로 메모리 사용에 이점이 있다.
3.3 설정 파일과 데이터 파일
- 디스크에서 읽어오는 파일들. 릴리스 패키지에 포함되어 배포하게 됨.
3.4 분산형 프로그램
- 서버/클라이언트 모델, 이 조합이 한가지의 기능을 지원.
- 네트워크 통신에서 API가 일괄적으로 잘 유지시키는게 중요한 과제.
출처: "소프트웨어 빌드 시스템 원리와 활용", 피터스미스, 역 김선일 외 3명
'소프트웨어 빌드 시스템' 카테고리의 다른 글
소프트웨어 빌드 시스템 원리와 활용 요약 (2) - 2. Make 기반 빌드 시스템 (0) | 2023.05.13 |
---|---|
소프트웨어 빌드 시스템 원리와 활용 요약 (1) - 0. 서론, 1. 빌드 시스템 개요 (0) | 2023.05.12 |
소프트웨어 빌드 시스템 원리와 활용 요약 (0) (0) | 2023.05.11 |