1-1. 개발 필수 용어
このコンテンツはまだ日本語訳がありません。
LIQUID 哲学評価総合スコア: 7.7 / 10
프로그래밍을 배울 때 자주 접하게 될 핵심 용어를 정리하고, 코드가 하드웨어에서 동작하기까지 거치는 과정을 설명한다.
빌드 파이프라인 (Build Pipeline)
섹션 제목: “빌드 파이프라인 (Build Pipeline)”인간 중심의 텍스트 파일이 CPU가 처리 가능한 기계어로 변환 및 결합되는 일련의 과정
- 소스코드 (Source Code)
- 소프트웨어를 제작하기 위해 사람이 작성하는 원본 텍스트.
- 0과 1의 기계어를 사람이 직접 다루는 것은 어렵기 때문에, 사람이 이해할 수 있는 고수준 언어로 소스코드를 작성한다.
- 컴파일 (Compile) & 컴파일러 (Compiler)
- 고수준 언어의 문법을 분석하고 최적화하여 컴퓨터가 이해할 수 있는 저수준 언어로 번역하는 과정 및 프로그램.
- AST (구문 트리, Abstract Syntax Tree)
- 소스코드를 쪼개 변환시킨 문법적 계층 구조(트리).
- 문법 오류를 검사하고 불필요한 연산을 최적화하기 위해 사용된다.
- 어셈블리어 (Assembly Language) & 어셈블러 (Assembler)
- 기계어 명령어와 1:1로 대응되는 최소한의 저수준 언어와 이를 기계어로 치환하는 프로그램.
- 고수준 언어(C, Rust 등)를 기계어로 직접 변환하려면 각 하드웨어별 변환기를 따로 만들어야 하므로 번거롭다. 따라서 어셈블리어를 중간 단계로 두어 컴파일러 설계의 복잡성을 줄인다.
- 목적 코드 (Object Code)
- 기계어로 번역되었으나, 외부 참조 주소가 확정되지 않아 단독 실행이 불가능한 중간 산출물.
- 링커 (Linker)
- 여러 목적 코드 파일과 외부 라이브러리를 결합해 완성된 실행 파일을 생성하는 프로그램.
- 정적 링크 (Static Linking)
- 필요한 라이브러리 코드를 실행 파일 내부에 통째로 복사해 넣는 방식.
- 독립 실행이 가능하지만, 파일 크기가 커지는 단점이 있다.
- 동적 링크 (Dynamic Linking)
- 실행(런타임) 시 메모리에 적재된 외부 파일을 연결하여 사용하는 방식.
- 파일 크기를 절약하고 라이브러리를 공유할 수 있다.
- 기계어 (Machine Language)
- CPU가 별도의 번역 과정 없이 즉시 실행할 수 있는 0과 1의 바이너리 명령어 집합.
흐름 요약: 소스코드 컴파일러 어셈블리어 어셈블러 목적 코드 링커 최종 실행 파일(기계어)
컴파일러와 어셈블러 차이
섹션 제목: “컴파일러와 어셈블러 차이”컴파일러와 어셈블러는 소스코드를 기계가 이해할 수 있는 형태로 변환한다는 점에서 유사하다. 하지만 어디서 시작해서 어떻게 번역하는지에 차이가 있다.
| 구분 | 컴파일러 | 어셈블러 |
|---|---|---|
| 입력 코드 | 고수준 언어 | 어셈블리어 |
| 출력 결과 | 어셈블리어 또는 목적 코드 | 기계어 |
| 변환 방식 | 복잡한 문법 분석 및 코드 최적화 | 명령어 기호와 기계어의 1:1 단순 치환 |
컴파일 타임과 런타임
섹션 제목: “컴파일 타임과 런타임”프로그램의 개발과 실행에 따라 분류되는 단계로, 오류가 발견되는 타이밍과 원인을 구분하는 기준이 된다.
컴파일 타임 (Compile-time)
섹션 제목: “컴파일 타임 (Compile-time)”작성한 소스코드를 기계어로 번역하여 실행 파일로 만드는 시점.
- 컴파일 타임에 수행되는 작업
- 구문 분석: 코드의 문법적 오류 검사. (괄호 누락, 세미콜론 누락 등)
- 의미 분석: 변수와 함수의 타입의 일관성 등 검사. (숫자 변수에 문자 대입 등)
- 코드 최적화: 프로그램의 성능 향상을 위한 소스코드 최적화.
- 컴파일 타임 에러
- 프로그램이 실행조차 되지 않고 번역 단계에서 발생하는 오류.
- 예) 철자 오타, 정의되지 않은 변수 사용, 문법 오류 등
런타임 (Runtime)
섹션 제목: “런타임 (Runtime)”번역이 완료된 실행 파일이 메모리에 적재되어 CPU에서 실제로 동작하는 시점.
- 런타임에 수행되는 작업
- 메모리 할당 및 해제
- 사용자의 입력 처리
- 외부 데이터(파일, 네트워크 등) 접근
- 실제 연산 수행
- 런타임 에러
- 컴파일은 완료했으나 프로그램이 실행되던 도중 강제 종료되는 오류.
- 예) 0으로 나누기, 존재하지 않는 파일 열기, 메모리 부족 등
컴파일 타임 VS 런타임
섹션 제목: “컴파일 타임 VS 런타임”| 구분 | 컴파일 타임 | 런타임 |
|---|---|---|
| 의미 | 번역하는 시점 | 작동하는 시점 |
| 검사 주체 | 컴파일러 | 컴퓨터 하드웨어 및 운영체제 |
| 오류 발견 | 실행 전 (빌드 실패) | 실행 중 (프로그램 강제 종료) |
오류 검출을 컴파일 시점으로 당길수록(정적 검사) 프로그램이 안전해지며, 런타임으로 미룰수록(동적 검사) 유연한 코드 작성이 가능해진다.
오류 시점 비교
섹션 제목: “오류 시점 비교”- ‘int x = “text”;’ 컴파일 에러
- 정수로 선언된 변수 x에 문자열이 입력되어 파일 생성이 거부된다.
- ‘int x = 10 / 0;’ 런타임 에러
- 문법 오류는 없지만 CPU 실행 중 0으로 나누는 예외가 발생한다.
개발 환경
섹션 제목: “개발 환경”코드를 작성하기 위해 사용하는 작업 도구.
- 텍스트 에디터
- 텍스트를 편집하고 저장하는 데 집중된 가벼운 소프트웨어.
- 코드를 작성할 수 있지만 자체적으로 컴파일하는 기능은 없으며, 컴파일 및 실행을 위해 별도의 컴파일러 설치나 터미널 명령어 입력이 필요하다.
- 예) VS Code, 메모장 등
- IDE (통합 개발 환경, Integrated Development Environment)
- 코드 작성부터 컴파일, 실행, 디버깅까지 모든 기능을 포함한 소프트웨어.
- 예) Visual Studio 등
코드의 재사용과 제어권
섹션 제목: “코드의 재사용과 제어권”- 라이브러리 (Library)
- 자주 사용되는 기능(수학 연산, 그래픽 출력 등)을 미리 구현해 모아둔 코드들의 묶음.
- 내가 작성한 코드에 주도권이 있으며, 필요한 시점에 호출한다.
- 프레임워크 (Framework)
- 소프트웨어 개발을 쉽게 할 수 있도록 미리 만들어진 구조.
- 프레임워크가 코드의 제어권을 가지고 내 코드를 호출한다.
- API (Application Programming Interface)
- 프로그램이나 시스템이 다른 프로그램에서 사용되기 위해 규정해 놓은 인터페이스.
- 내부 구현 코드를 몰라도, 정해진 규약에 따라 시스템과 상호작용할 수 있다.
결함 추적
섹션 제목: “결함 추적”- 버그 (Bug)
- 프로그램이 작성자의 의도와 다르게 오작동하거나 멈추는 결함.
- 프로그램 실행을 멈추는 치명적인 오류부터 계산 결과가 잘못 나오는 논리적 결함까지 모두 포함한 개념이다.
- 디버깅 (Debugging)
- 코드에 존재하는 버그의 발생 위치와 원인을 찾아내고 수정하는 작업.
- 디버거 (Debugger)
- 디버깅을 효율적으로 수행할 수 있도록 돕는 소프트웨어.
- 중단점 (Breakpoint): 코드 실행을 특정 지점에서 강제로 멈춰 메모리나 변수 상태를 검증할 수 있게 하는 기능.
- 단계별 실행: 코드를 한 줄씩 실행하며 흐름을 추적하는 기능.
- 변수 감시: 멈춘 시점의 메모리와 변수에 저장된 실제 값을 실시간으로 확인하는 기능.
AI 批評総評
The document provides a remarkably clean and frictionless entry point into essential software concepts, using well-structured comparison tables and a clear pipeline flow. Crucial core principles like why assembly serves as an intermediate compiler target and the compile-time vs. runtime safety trade-offs are articulated effectively. However, as an introductory primer, it stays at a high conceptual level without diving into lower-level architectural mechanics or execution binaries.