본문 바로가기
개발/Python

Python) 컴파일러 vs 인터프리터

by LILO 2021. 5. 17.
반응형

Intro

 

개발 쪽 글은 정말 책이나 구글에 많은 선생님들이 올린 자료를 공부하고 있는 중에 정리하는 글입니다.

 

처음 System Engineer라는 직종을 선택했을 때 사실 개발에 흥미가 있다기 보다는 Linux가 재밌고 흥미로운 OS 같아서 선택을 했었습니다. 하지만, 이 Linux 구축 부분만 알기에는 기술적으로 한계가 부딪히도 하고 Coredump 분석 시에도 소스 파일을 열어보면 언어 해석하기도 힘들고 Web이나 WAS를 구축 및 운영을 하려면 알아야 되는 필수적인 요소라는 생각이 들었습니다.

 

그래서 처음 공부하기에 좋은 언어가 무엇이고 Linux를 하면서 가장 유용하게 쓰일 것은 무엇인지 생각해본 결과 Python응 공부하자는 결론이 나왔습니다. 

추후에는 Python을 이용해 동적 스크립트도 짜보는 포스팅하는 것도 재밌겠다는 생각이 들기도 했구요.

 

 

 

 

 

컴파일러 (Compiler) vs 인터프리터 (Interpreter)

 

컴파일은 컴파일러에 의해 실행이 됩니다.

 

컴파일은 C, C++과 같은 프로그래밍 언어를 실행하기 바로 직전의 기계어로 해석하는 작업을 하는 것을 말합니다.

 

사람이 "ABC, 가나다, 123"과 같은 이러한 문자나 숫자를 컴퓨터에게 보내면 컴퓨터는 그것을 인식하지 못합니다.

왜냐면 컴퓨터는 기계라서 "1,0" 밖에 모르는 녀석이기 때문입니다. 

즉, 컴퓨터에게 내가 작성한 싶은 코드를 잘 알아 듣게 전달하기 위한 과정이라고 생각할 수도 있습니다.

 

컴파일하기 전의 언어는 원시 코드라고 부릅니다. 컴파일 후는 목적 코드(Object Code)라고도 불리고요.

 

컴파일은 일단 런타임 이전에 Assembly(저급) 언어로 변환하기 때문에 구동 시간이 오래 걸리지만 구동된 이후로는 하나의 패키지로 빠른 속도로 작동합니다. 

 

여기서 또 가장 중요한 것은 런타임 이전에 이미 해석을 마치고 결과물들이 바로 기계어로 전환되기 때문에 OS 및 빌드 환경에 매우 종속적입니다. 

예를 들면 AIX에서 사용하던 IBM JDK를 사용해서 WAS를 올릴 때는 잘 되었는데 CentOS의 OpenJDK를 이용해 WAS를 올리면 문제가 생기는 것과 같습니다. 같은 JAVA를 쓴 JDK지만 운영 환경이 다르고 빌드 환경이 다르기 때문입니다.

 

JAVA 역시 Byte Code로 변환하기 위한 과정에서 컴파일을 수행해야 합니다.

 

 

 

 

인터프릿은 인터프리터에 의해 실행됩니다.

 

인터 프릿은 기계어로 바꾸는 작업을 하지 않고 중간 단계를 거친 뒤 런타임에 바로 해석됩니다.

실제로 실행 시간은 컴파일보다는 느리지만 중간 중간에 실시간 디버깅 및 코드 수정에 매우 용이합니다.

 

컴파일처럼 따로 메모리를 별도로 할당 받아 수행하지 않으며 내가 필요할 때만 할당하여 사용합니다.

 

대표적인 언어는 Python, Javascripts, RUBY 등이 있습니다.

 

여기서 재밌는 내용이 나옵니다. 대다수의 언어의 인터프리터는 해석을 위한 VM을 두고 해당 VM 위에서 인터프릿을 수행합니다.

여기서 해석할 떄 기반이 되는 VM들이 OS 환경들을 지원해줌으로써 특정 OS나 플랫폼에 종속되지 않게 구동이 가능하다는 것입니다. 

이의 대표적인 예는 JAVA의 JVM, Python의 Analyzer입니다.

반응형