2025-11-04 21:17
Tags: 리액트 넥스트 웹 데브옵스
빌드 (Build)
- 개발자의 코드를 사용자가 실행할 수 있는 파일로 변환하는 과정.
| 단계 (Step) | 설명 | 비유 (요리) |
|---|
| 의존성 관리 (Dependency Management) | 코드 실행에 필요한 외부 라이브러리나 패키지를 다운로드하고 설치한다. (예: npm install, gradle build) | 필요한 모든 재료와 조미료를 장바구니에 담는 것 |
| 컴파일 (Compile) | 사람이 이해하는 고급 언어(Java, C++)를 컴퓨터가 이해하는 기계어(바이트코드, 바이너리)로 변환한다. | 날고기를 불에 익혀 먹을 수 있는 상태로 만드는 것 |
| 트랜스파일 (Transpile) | 특정 버전이나 환경에서 작동하도록 한 언어의 코드를 비슷한 수준의 다른 언어 코드로 변환한다. (예: TypeScript → JavaScript, ES6 → ES5) | 한국어 레시피를 영어 레시피로 번역하는 것 |
| 린팅 & 정적 분석 (Linting & Static Analysis) | 코드의 문법 오류, 잠재적 버그, 코딩 스타일 위반 등을 실행 전에 검사하여 코드 품질을 높인다. | 재료에 상한 부분이 없는지 미리 확인하는 것 |
| 통합 테스트 (Unit Test) | 작성된 코드의 각 기능(함수, 모듈)이 의도대로 정확히 작동하는지 독립적으로 검증한다. | 각 재료의 맛(단맛, 짠맛)이 정상인지 하나씩 맛보는 것 |
| 번들링 (Bundling) | 여러 개로 나뉜 JavaScript, CSS 파일 등을 하나 또는 몇 개의 파일로 합쳐 네트워크 요청 횟수를 줄인다. (예: Webpack, Rollup) | 밥, 반찬, 국을 하나의 도시락 통에 담는 것 |
| 압축 & 최적화 (Minification & Optimization) | 코드에서 불필요한 공백, 주석 등을 제거하고 변수명을 짧게 바꿔 파일 크기를 최소화한다. 이미지 파일 크기를 줄인다. | 도시락 통의 불필요한 공간을 줄여 부피를 최소화하는 것 |
| 패키징 (Packaging) | 모든 결과물을 하나의 실행 가능한 파일(예: .jar, .war, .exe)이나 배포 가능한 아카이브(예: .zip, Docker Image)로 묶는다. | 완성된 도시락을 배달 가방에 넣는 것 |
| 단계 | 주요 활동 | 설명 | 대표 도구 |
|---|
| 1. 의존성 관리 (Dependency Management) | 라이브러리 다운로드, 버전 관리 | 프로젝트가 필요로 하는 외부 라이브러리나 프레임워크를 지정된 저장소(Repository)에서 다운로드하고, 버전 충돌이 발생하지 않도록 관리한다. | Maven, Gradle, npm, Yarn |
| 2. 전처리 (Preprocessing) | 매크로 확장, 헤더 파일 포함 | C/C++와 같은 언어에서 #include나 #define 같은 전처리기 지시문을 처리하여 실제 컴파일할 소스 코드를 생성한다. | C/C++ Preprocessor |
| 3. 컴파일 (Compilation) | 소스 코드 → 중간 코드/오브젝트 파일 | 프로그래밍 언어로 작성된 소스 코드 파일을 컴파일러가 읽어 어셈블리어나 기계어에 가까운 오브젝트 파일(.o, .obj) 또는 중간 코드(예: Java의 바이트코드)로 변환한다. | GCC, Clang, Javac |
| 4. 링킹 (Linking) | 오브젝트 파일 + 라이브러리 → 실행 파일 | 컴파일된 여러 오브젝트 파일과 시스템 라이브러리, 외부 라이브러리들을 하나로 묶어 운영체제가 실행할 수 있는 단일 파일(실행 파일 또는 라이브러리 파일)을 생성한다. | ld, LINK.exe |
| 5. 패키징 (Packaging) | 실행 파일 + 리소스 → 배포 가능한 형태 | 실행 파일과 함께 이미지, 설정 파일, 문서 등 필요한 모든 리소스를 묶어 사용자에게 배포할 수 있는 형태(예: JAR, WAR, MSI, DMG, Docker 이미지)로 만든다. | Jar, Tar, Docker |
| 6. 테스트 (Testing) | 단위 테스트, 통합 테스트 실행 | 코드의 품질을 보장하기 위해 사전에 작성된 테스트 코드를 실행하고, 빌드 성공 여부를 결정하는 기준으로 삼는다. | JUnit, pytest, 제스트 |
| 7. 배포 (Deployment) | 결과물을 서버나 스토어에 업로드 | 빌드된 최종 결과물을 실제 사용자가 접근할 수 있는 서버, 앱 스토어, 패키지 저장소 등으로 업로드하고 배포하는 과정을 자동화한다. | 젠킨스, GitLab CI CD, Ansible |
언급한 노트 (Outgoing Links)
백링크 (Backlinks)