빌드 시스템을 사용해야 하는 이유

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

이 페이지에서는 빌드 시스템의 정의, 역할, 빌드 시스템의 기능, 컴파일러와 빌드 스크립트가 최적의 옵션이 아닌 이유를 설명하겠습니다. 조직들이 확장되기 시작했습니다. Cloud Storage를 사용하는 것이 도움이 될 것입니다

빌드 시스템이란 무엇인가요?

기본적으로 모든 빌드 시스템의 목적은 명확합니다. 엔지니어가 읽을 수 있는 실행 가능한 바이너리로 작성한 소스 코드가 학습합니다. 빌드 시스템은 사람이 작성한 코드만을 위한 것이 아닙니다. 그들은 또한 빌드하려는 머신의 머신 종류와 상관없이 테스트용이나 있습니다 수천 명의 엔지니어가 있는 조직에서는 대부분의 빌드는 엔지니어가 직접 트리거하지 않고 자동으로 트리거됩니다.

그냥 컴파일러를 사용하면 안 되나요?

빌드 시스템의 필요성이 바로 명확하지는 않을 수도 있습니다. 대부분의 엔지니어 코딩을 배우는 동안 빌드 시스템을 사용하지 않습니다. 대부분은 도구 호출로 시작합니다. 예를 들어 명령줄에서 직접 gcc 또는 javac, 또는 통합 개발 환경 (IDE)입니다. 모든 소스 코드가 다음과 같은 명령어가 적합합니다.

javac *.java

이 명령어는 Java 컴파일러가 현재 바이너리 클래스 파일로 변환합니다. 가장 간단한 경우 필요한 모든 기능을 갖추고 있습니다.

그러나 코드가 확장되자마자 정보 표시가 시작됩니다. javac은(는) 똑똑합니다. 현재 디렉토리의 하위 디렉토리를 살펴보고 가져올 수 있습니다 그러나 이 모듈의 다른 부분에 저장된 코드를 찾을 수는 없습니다. 여러 프로젝트에서 공유하는 라이브러리일 수 있습니다. 또한 Kubernetes는 코드 빌드 방법을 살펴봤습니다 대규모 시스템은 종종 해당 조각 사이에 종속성이 있는 다양한 프로그래밍 언어를 이해하는 것이 중요합니다. 즉, 단일 언어를 위한 어떤 컴파일러도 전체 시스템을 빌드할 수 없습니다.

여러 언어 또는 여러 컴파일의 코드를 다룰 때 이제 건물 코드를 만드는 것은 더 이상 한 단계가 아닙니다. 이제 여러분은 코드에 종속 항목이 있고 이를 올바른 순서로 빌드합니다. 각 부품마다 다른 도구 세트가 있습니다. 종속 항목이 변경되면 오래된 바이너리에 의존하지 않도록 이 프로세스를 반복하세요 짝수의 코드베이스의 경우 이 프로세스는 지루하고 오류가 발생하기 쉽습니다.

또한 컴파일러는 외부 IP 주소를 처리하는 방법과 종속 항목(예: Java의 서드 파티 JAR 파일) 빌드 시스템이 없으면 인터넷에서 종속 항목을 다운로드하고 하드 드라이브의 lib 폴더에 저장하고, 컴파일러를 사용하여 삭제할 수 있습니다 시간이 지남에 따라 외부 종속 항목의 업데이트, 버전, 소스가 포함됩니다

셸 스크립트는 어떨까요?

취미 프로젝트가 구축할 수 있을 정도로 간단하게 시작되었다고 가정해 보겠습니다. 코드를 사용한다고 해도 Cloud SQL에서 설명하는 일부 문제에 직면하게 되며 확인할 수 있습니다 어쩌면 여전히 빌드 시스템이 필요하지 않다고 생각하고 작업을 처리하는 몇 가지 간단한 셸 스크립트를 사용하여 지루한 부분을 없애고 올바른 순서로 빌드하는 것입니다. 이것은 한동안 도움이 되지만 곧 더 많은 문제에 직면하게 됩니다.

  • 그러면 지루한 일이 일어납니다. 시스템이 복잡해질수록 지출이 증가하기 시작함 빌드 스크립트 작업에 실제 코드만큼 많은 시간이 걸립니다. 디버깅 셸 스크립트는 고통이며, 점점 더 많은 해킹이 애플리케이션 위에 있습니다.

  • 속도가 느립니다. 실수로 비활성 라이브러리에 의존하지 않도록 하기 위해 종속 항목을 빌드할 때마다 빌드 스크립트가 실행해 보겠습니다 어떤 부분이 필요한지 감지하기 위해 몇 가지 로직을 추가한다고 생각합니다. 이는 끔찍하게 복잡하고 스크립트에 오류가 발생하기 쉬운 것처럼 들리는 것입니다. 또는 매번 어떤 부품을 재구축해야 하는지를 지정하는 것에 대해 생각할 수 있지만 다시 정사각형으로 돌아갑니다.

  • 좋은 소식을 전해드립니다. 모든 인수를 알아내는 것이 좋습니다. jar 명령어에 전달해야 합니다. 그리고 기억하세요 중앙 저장소로 푸시하는 방법입니다 그리고 빌드와 문서 업데이트를 푸시하고 사용자에게 알림을 보낼 수 있습니다. 음, 다른 스크립트가 필요할 수도 있습니다...

  • 큰일이에요! 하드 드라이브가 다운되어 파일 전체를 다시 만들어야 합니다. 있습니다. 모든 소스 파일을 버전 내에 유지할 만큼 제어할 수는 없지만 다운로드한 라이브러리는 어떨까요? 찾을 수 있나요? 다시 시도했을 때와 동일한 버전인지 확인합니다. 무엇을 다운로드했나요? 스크립트는 아마도 특정 툴에 의존하는 것 같고 동일한 환경을 복원하여 스크립트가 다시 작동하는지 확인합니다. 클러스터에 설정한 모든 환경 변수는 어떻게 해야 할까요?

  • 문제가 있음에도 불구하고 프로젝트가 성공적이어서 더 많은 엔지니어를 고용하기 시작했습니다. 이제 재해가 아니라는 사실을 깨닫게 되었어요 고통스러워하는 동일한 과정을 겪어야 합니다. 부트스트랩 프로세스를 거쳐야 합니다. 또한 최선의 노력을 했음에도 불구하고 압도합니다. 한 사람의 컴퓨터에서 작동하는 것이 효과가 없는 경우가 종종 있음 디버깅 도구 경로에서 몇 시간이 걸릴 때마다 차이점을 알아낼 수 있습니다.

  • 빌드 시스템을 자동화해야 하는 경우 이론적으로는 새 컴퓨터를 구입하여 빌드를 실행하기 위해 설치하는 것만큼이나 간단합니다. 크론을 사용하여 매일 밤 스크립트를 작성합니다. 여전히 고통스러운 하지만 지금은 인간의 두뇌가 도움이 되지 않습니다. 사소한 문제를 감지하고 해결할 수 있습니다. 이제 매일 아침 어제 개발자가 빌드한 작업 때문에 어젯밤의 빌드가 변경 시 자체 시스템에서는 효과가 있었지만 자동 시스템에는 적용되지 않은 경우 빌드할 수 있습니다 간단한 해결책이지만, 문제가 너무 자주 발생하여 매일 많은 시간을 수정할 수 있습니다

  • 프로젝트가 커질수록 빌드가 느려지고 느려집니다. 1일, 기다리는 동안 한참을 기다리면서 유휴 상태의 데스크톱을 슬프게 바라보게 됩니다. 휴가 중인 동료와 함께 업무 효율을 개선할 수 있는 방법이 있으면 컴퓨팅 파워를 낭비하게 됩니다.

확장성이라는 전형적인 문제에 직면했습니다. 한 명의 개발자가 최대 몇백 줄의 코드를 막 졸업한 주니어 개발자의 모든 경험이었습니다. 컴파일러만 있으면 됩니다. 스크립트를 사용하면 더 멀리 떨어집니다. 하지만 여러 개발자와 함께 작업해야 하는 경우 완벽한 빌드 스크립트조차도 충분하지 않습니다. 이러한 기계의 사소한 차이를 설명하기가 어렵습니다. 이 시점에서 이제 이 간단한 접근 방식이 무너집니다. 이제는 실제 빌드 시스템에 투자해야 할 때입니다.