1. 컴파일
1.1 컴파일이란
compile
1. [동사] (여러 출처에서 자료를 따와) 엮다, 편집[편찬]하다
2. [동사][컴퓨터] 명령어를 번역[컴파일]하다
컴파일은 여러 출처에서 자료를 따 와서 편집한다는 뜻을 가지고 있다. 컴퓨터 용어 측면에서는 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 즉 인간이 이해할 수 있는 고급 언어(C, Java)로 작성된 프로그램 소스 코드를 컴퓨터가 이해할 수 있는 기계어 또는 바이트 코드로 번역해 주는 것을 말한다. 이러한 컴파일을 해주는 프로그램을 컴파일러라고 한다.
컴파일 방식을 사용하는 가장 대표적인 언어는 C, 자바이다. 두 언어는 컴파일 방식이지만 정확히는 중간 코드인 바이트코드를 만드는 부분까지만 컴파일러고, 바이트코드를 다시 기계어로 번역해서 실행하는 과정은 인터프리터에 가까웠다. 다만 이제는 속도 향상을 위해서 바이트코드→기계어 번역 과정에서 JIT 컴파일 방식을 사용하고 있다.
1.2 컴파일의 장점
- 한번 컴파일을 하면 그대로 사용이 가능하며 반복 작업을 처리할 경우 시간 소모를 매우 줄일 수 있다.
- 컴파일 과정에서 단계별로 주기억장치로 들어가기 때문에 메모리의 크기가 조정이 가능하다.
- 전체 실행 시간을 매우 효율적으로 절약할 수 있다.
- 컴파일러는 일일이 매번 따로 번역할 필요가 없다.
즉 인터프리터 보다 속도 측면에서 빠르다.
1.3 컴파일의 단점
인터프리터의 비해 컴파일은 수정이 용이하지 않다. 수정 사항이 발생하면 다시 컴파일을 해야 되는데, 규모가 큰 프로그램에서는 몇 시간씩 소요될 수도 있다. 특히 수정 사항이 빈번하게 발생할 경우에는 큰 문제가 된다. 이런 경우 수정 사항이 빈번하게 발생할 것 같은 부분은 인터프리터를 쓰는 방법으로 따로 빼는 기법을 사용한다.
1.4 컴파일러의 종류
- 원시 코드를 바로 기계어로 변환하는 정적 컴파일
- 원시 코드를 바이트코드로 변환하는 바이트코드 컴파일
- 바이트코드 등의 중간 코드를 기계어로 변환하는 AOT 컴파일
- 실행 시 최초 한 번에 한해 컴파일을 거치는 JIT 컴파일
1.5 컴파일 과정
컴파일 과정에 대한 자료를 찾다가 잘 정리해주신 글을 찾아서 남긴다.
https://bradbury.tistory.com/226
1.6 JIT 컴파일이란?
Just-in-time compile 우리말로 풀어보면 '적시 컴파일', 즉 적절한 시점에 컴파일하는 것을 뜻한다. 보통 컴파일이라고 하면 프로그램을 만들고 나서 개발자가 컴파일러를 돌려서 기계어로 된 실행 파일을 만들거나 중간 파일, 또는 다른 프로그램이 언어 코드로 변환한다. 하지만 JIT 컴파일은 개발자가 컴파일을 하는 게 아니라, 사용자가 프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일이 이루어진다.
보통 인터프리터 방식의 언어 구현들이 성능 향상을 목적으로 도입하는 경우가 많다. 그렇다고 컴파일 방식에서 안 쓰인다는 말은 아니다. Java도 JIT 컴파일 방식을 쓴다. JIT 컴파일러는 같은 코드를 매번 해석하는 대신 처음 실행될 때 인터프리트를 하면서 자주 쓰이는 코드를 캐싱한 뒤, 이후에는 캐싱된 코드를 쓰기 때문에 인터프리터의 느린 실행 속도를 개선할 수 있다.
단점은 프로그램을 처음으로 실행할 때에는 컴파일 과정 때문에 초기에 실행이 시작되는 속도가 많이 느리다. 또한 소스 코드 혹은 바이트코드 파일과 실행 파일 코드가 같이 있기 때문에 메모리를 많이 차지한다. 소스 코드나 바이트코드가 바뀌었을 경우에 컴파일을 다시 해야 하므로 그 변화 여부를 체크하고 있어야 한다.
참고
1. https://bradbury.tistory.com/226
2. https://www.newiki.net/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC
3. http://wiki.hash.kr/index.php/%EC%BB%B4%ED%8C%8C%EC%9D%BC
5. https://www.newiki.net/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC
'Python' 카테고리의 다른 글
WSL2 환경에서 Poetry 사용하기 (0) | 2023.01.16 |
---|---|
[Python] GIL이 뭐죠? (0) | 2022.12.21 |
[Celery] - 시작하기 (0) | 2022.12.08 |
Python 알아보기(1) - 파이썬의 특징 (2) | 2022.12.06 |
[Python] - 정규표현식을 이용한 문자열 처리 (0) | 2022.11.19 |