컴파일과 빌드, 그리고 디버깅

Kevin·2023년 8월 3일
1

Computer Science

목록 보기
2/2

나는 이번 프로젝트를 진행하면서 아직도 디버깅과 컴파일, 그리고 빌드에 대한 개념이 잘 잡혀있지 않았음을 알게되었다.

팀원들간 소통하는 과정에서 내 스스로가 어 이게 이렇게 불리는게 맞나? 라는 생각이 들어서, 스스로 부끄러움을 느꼈다.

하지만 모르면 알면 되는 법이기에 내 스스로 정리를 해보고자 한다.

먼저 사전적 정의에 대해서 알아보면, 위키 피디아에서는 각각의 개념을 아래와 같이 정의 하였다.


디버깅의 사전적 정의

디버깅 또는 디버그는 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작업 과정을 뜻한다.


컴파일의 사전적 정의

고급 프로그래밍 언어를 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어(예, 어셈블리 언어, object 코드, machine code)로 바꾸는 데 사용된다.


빌드의 사전적 정의

소스 코드 파일을 컴퓨터나 휴대폰에서 실행할 수 있는 독립(standalone) 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물을 일컫는다. 소프트웨어 빌드에 있어 가장 중요한 단계들 가운데 하나는 소스 코드 파일이 실행 코드로 변환되는 컴파일 과정이다.

그러면 여기서 궁금한 점은 내가 주로 사용하는 자바의 컴파일 과정은 어떻게 진행되는걸까?


자바의 컴파일 과정

  1. 컴파일
  2. 링크
  3. 패키징
  4. 테스트

자바는 위의 빌드 단계를 거친다. 좀 더 각 단계에 대해서 자세하게 이야기 해보자.

자바에서 컴파일은 아래와 같은 단계를 거친다.

  1. 내가 자바 코드를 작성한다.
  2. 자바 컴파일러가 자바 소스 코드(.java)를 읽어서 바이트 코드(.class)로 컴파일한다.
    1. .class는 JVM은 이해할 수 있지만, 아직 컴퓨터가 이해할 수는 없다.

    2. 이 과정에 의해서 인텔리제이에서 빌드(망치 모양)를 눌렀을 때 .class 파일로 변환된다.

  3. 컴파일된 바이트 코드(.class)를 JVM의 클래스 로더에게 전달한다.
  4. 클래스 로더는 동적 로딩을 통해 필요한 클래스(외부 라이브러리 포함)들을 로딩 및 링크하여서 JVM의 메모리에 올린다.
  5. 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다.

여기서 생기는 부수적인 궁금증이 있었다. 컴파일과 빌드는 어떤 차이를 가지고 있을까?


컴파일과 빌드의 차이점

개념들은 위에서 충분히 살펴보았고, 간단하게 설명을 하면 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일이 빌드이다. 즉 컴파일은 빌드의 단계 중 하나라는 것이다.


결론

Build = Complie + 그 외 작업

Run = Build + 실행 = (Complie + 그외작업) + 실행

참고 레퍼런스

https://junroot.github.io/programming/Java의-빌드와-배포/

https://velog.io/@minseojo/Java-자바-컴파일-과정-JVM-내부-구조

https://choseongho93.tistory.com/296

profile
Hello, World! \n

1개의 댓글

comment-user-thumbnail
2023년 8월 3일

잘 읽었습니다!!

답글 달기