만약 코드를 빌드(Build)하게 되면, 소스 코드는 다음과 같은 순서로 처리된다.
1. 전처리(Preprocessing)
2. 컴파일(Compile)
3. 어셈블(Assemble)
4. 링킹(Linking)
※빌드(Build)란, 소스 코드를 실행 가능한 파일로 생성하는 전체 과정을 의미함
위 4개의 개념을 이해시키기 위해 최대한 쉽게 설명해보겠다.
1. 전처리
정의 :
소스 코드가 실제로 컴파일러에게 전달되기 전, 소스 코드를 수정하고 준비하는 초기 단계.
라고 설명해도 이 단어를 처음 접하는 사람들은 이해하기 쉽지 않을 것으로 예상된다.
따라서 간단한 예시를 통해 처음 접하는 이들의 이해를 도울 것이다.
"전문가들이 일반인들에게 발표"하는 상황을 예시로 들어보겠다.
누구나 알고 있는 전문가... 일단 "의사"를 예시로 들어보겠다.
의사는 다들 알다시피 일반인들보다 의료쪽 전문지식을 설렵한 사람이다.
당연히 우리들보다 의료쪽 지식은 방대할 것이고, 의료쪽 전문 용어들도 많이 알고 있을 것이다.
그런데 만약 그런 의사들이 일반인들에게 자신이 행한 의료 행위와 관련된 설명을 해야만 하는 상황일 때,
그들이 과연 자신들만 알고 있는 전문적인 용어들로만 설명할까?
특히, 우리의 이해를 바라야만 하는 상황일 때?
절대 아닐 것이다.
우리의 의견이 중요한 순간일 때는 먼저 현재 상황을 우리가 이해할 수 있도록 우리의 수준에 맞춰서
최대한 이해하기 쉽게 설명하기 위해 노력할 것이다.
이를 구두 설명만이 아닌, 발표를 한다고 생각하고 예시를 들어보겠다.
먼저, 의사는 발표를 준비하기 전에 현재 상황을 설명할 수 있는 개념, 지식, 용어 등을
머릿속에 떠올리고서는 관련 자료를 조사할 것이다.
여기서 자료는 우리의 이해를 돕기 위한 자료일 필요는 없다.
그저 현재 상황에 맞는 자료이면 쓰고, 아니면 버리는 식인 단계일 뿐이다.
그리고 이제 필요한 자료만 있고, 필요없는 자료를 치웠다고 가정하면,
이것이 바로 전처리 단계이다.
더 쉽게 설명해보자면,
발표를 하는데 있어서 개념을 정의하고, 도움이 되는 자료면 가지고, 필요 없는 자료면 버리면서 발표를 준비하는 행위가
전처리 단계일 때 실행되는 행동하고 매우 유사한 것이다.
이러한 전처리는 전체 빌드 과정 중 첫 번째 준비 단계이며,
뒤에서 설명할 컴파일과 어셈블이 제대로 동작하도록
소스 코드를 정리하고 필요한 정보만 남기는 과정이라고 볼 수 있다.
2. 컴파일
정의 :
전처리된 소스 코드를 분석하고, 어셈블리 코드로 변환시키는 단계
위 정의를 다시 한번 쉽게 이해할 수 있도록 이전에 사용하던 비유를 계속해서 인용해보겠다.
의사는 이제 현재 상황을 설명할 수 있는 준비를 마쳤다.
하지만 아직은 발표를 하기에는 이르다고 판단했다.
자신이 생각하고 있는 개념이 맞는지 확신이 필요했기 때문이다.
그래서 발표를 하기에 앞서 먼저 같은 의사 친구에게 자신의 자료를 보여주면서 현재 상황을 설명한다.
이때 설명은 전문 용어로 이루어진 일반인들은 쉽게 이해하기 힘든 설명이다.
하지만 같은 의사 출신인 친구는 그런 설명을 이해하는데 있어서 불편함은 없었다.
단지, 의사의 머릿속에만 있던 개념을 의사소통이라는 형태로 변환되어 전달되는 과정만 있을 뿐이었다.
그리고 이러한 과정이 컴파일 단계와 유사하다.
컴파일은 쉽게 말해서, 우리가 타이핑하여 쳤던 코드에 오류는 없는가?를 검사하고,
오류가 없다면 이 코드를 또 다시 다른 형태의 코드로 변형시키는 걸 의미한다.
이제 의사는 친우의 확인을 통해 확신을 얻었으므로,
일반인에게 발표하기 위한 마지막 준비 단계로 넘어간다.
3. 어셈블
정의 :
어셈블리어 코드를 기계어로 변환시키는 단계
위에서 하던 비유를 통해 마저 설명하겠다.
의사는 이제 자신의 발표 내용에 확신을 얻었다.
잘못된 점은 없었고, 이제 이를 청자들이 이해할 수 있도록 변환하기만 하면 됐다.
그렇다면 일단 일반인들의 수준에 맞게 설명할 필요가 있었다.
아무리 자신이 올바른 설명을 해도 정작 듣는 이가 이해를 못한다면 그것은 동물의 울음소리와 다를 바가 없었다.
그렇기에 의사는 발표대본과 자료들을 일반인들이 이해할 수 있는 수준으로,
어려운 자료 구조들을 변경할 수 있다면, 그들이 주로 보는 시청각 자료들 위주로 사용하고,
전문 용어들을 그들이 이해할 수 있는 쉽고 대중화된 언어로 변경한다.
이 행위가 어셈블 단계와 유사하다.
컴퓨터 공부를 하다보면 누구나 한번 쯤 이런 말을 들어 본 적이 있을 것이다.
"컴퓨터는 멍청해서 사람의 말을 곧이곧대로 알아듣지 못한다."
맞는 말이다. 컴퓨터는 우리 인간의 언어를 알아 듣지 못한다.
오직 0과 1로만 이루어진 언어로 대화를 나눌 수 있다.
우리들이 AI에게 말을 걸어 질문하고, 그들이 답하는 과정도 자세히 들여다 보면,
중간에 우리 언어를 0과 1로 번역해서 AI가 이해할 수 있도록 번역해주는 과정이 존재한다.
이러한 상황이 지금 의사가 발표자료를 수정하고 있는 이유와 동일하다.
이처럼 의사가 발표 자료를 일반인이 이해할 수 있도록 변환하는 과정은,
어셈블리 코드를 실제 컴퓨터가 구동할 수 있는 기계어로 변환하는 과정과 동일하다.
결론적으로 어셈블 단계는 컴퓨터가 이해할 수 있는 기계어로 코드를 변환하는 단계라고 할 수 있다.
4. 링킹
정의 :
다수의 목적 파일과 필요한 라이브러리 파일들을 하나로 연결하여 최종 실행 파일(.exe)을 만드는 단계
의사는 이제 기존 자료를 일반인들이 이해할 수 있도록 수정하는 데 성공했다.
그렇다면 이제 의사는 무엇을 해야 할까?
바로 지금까지 자신이 정리해 놓은 자료들을 발표를 진행하는 데 있어 쉽게 사용할 수 있도록,
PPT와 같은 하나의 형태로 통합하여 발표 순서에 맞게 정렬해야 한다.
왜냐하면 발표를 진행하는 입장에서
각각의 자료를 그때그때 개별 파일로 찾아 쓰는 것은 매우 비효율적이기 때문이다.
그렇기에 PPT라는 하나의 파일로 여러 자료를 묶어 두면,
발표를 진행하는 데 어려움도 없고, 발표 흐름에도 불편함이 없을 것이다.
이러한 행위처럼, 링킹은 컴퓨터에서무수히 많은 파일들을 하나로 모아
그것을 쉽게 실행할 수 있도록 실행 파일을 만드는 단계라고 할 수 있다.
'컴퓨터과학(CS) > CS개념 정리' 카테고리의 다른 글
| 인코딩(Encoding)과 디코딩(Decoding) (0) | 2026.02.05 |
|---|---|
| 컴파일 언어와 인터프리터 언어란? (0) | 2026.01.31 |
| CS 공부의 시작 (0) | 2026.01.26 |
