Develop/Python

Python 작동 원리, Python은 어떻게 작동하는가

은세라 2023. 8. 24. 02:25
왜 파이썬은 좋은가

파이썬이 어떻게 동작하는지가 궁금해진 이유는 "왜 파이썬은 좋은가" 라는 질문의 답을 찾고 싶어서 이다.

보통 그 이유를 "문법이 쉽다", "라이브러리가 잘되어 있다" 처럼 편.리.해.서 를 길게 말한 경우가 많다. 물론 편리성도 중요한 조건 중 하나지만 그를 제외하고 어떤 특성으로 인해 어떤 측면에서 효율적인지가 궁금해졌다.

 

Python?!

파이썬은 1991년 귀도 반 로섬이 발표한 고급 프로그래밍 언어이자 인터프리터 언어이고, 객체 지향 언어이자, 플랫폼에 독립적인 동적 타이핑 대화형 언어이다.

파이썬이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python's Flying Circus〉에서 따온 것이다. 이름에서 고대신화에 나오는 커다란 뱀을 연상하는 경우도 있겠지만 이와는 무관하다. 다만 로고에는 뱀 두마리가 형상화되어 있다.

출처 : https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

한국은 기본적으로 자바 왕국이지만 전 세계 기준으로 보면 파이썬은 상당히 많이 쓰인다.

2023 Stackoverflow survey에 따르면 전체 응답자중 50%정도는 python을 사용한다고 응답했다.

SQL 보다 많이 쓰인다니!

그러면 Java와 C를 능가하는 그 어떤 장점이 python에게는 있는 것이 아닐까?

좋은걸 쓴다면 알고 쓰면 좋지 않을까!

 

파이썬은 인터프리터 언어

파이썬은 프로그래밍 언어이다. 너무나 당연하지만!

그리고 프로그래밍 언어를 나누는 기준에는 여러가지가 있겠지만 컴파일 언어 vs 인터프리터 언어로 구분하기도 한다.

 

- 컴파일 언어 : 소스 코드를 기계어로 컴파일해서 실행파일을 만들고 실행하는 컴파일 언어 (ex. C, C++, Java)

- 인터프리터 언어 : 실행 시마다 소스 코드를 한 줄씩 기계어로 번역 (ex. Python, JavaScript)

 

이중 파이썬은 인터프리터 언어이다.

즉, 컴파일 하는 시간이 걸리지 않으며 소스 코드를 한줄씩 읽어서 실행한다. 그리고 컴파일된 실행 파일이 존재하지 않기 때문에 실행 시 마다 인터프리트 과정을 다시 수행하게 되어 태생적으로 속도가 느리다.

(단, 컴파일 언어는 컴파일 하는 시간이 처음에 들고 이 컴파일 시간은 시스템이 커질 수록 오래 걸린다.)

 

인터프리트 언어의 장점은 한줄씩 실행한다는 것이기 때문에 소스 코드를 수정해서 바로바로 실행할 수 있다.

 

개인적으로는 파이썬이 이러한 점에서 장점을 가지고 있었지 않나 싶다.

기본적으로 빠르게 개발이 가능한 언어들은 대부분 스크립트 언어, 인터프리터 언어이다. (어디 증명된건 아니고 경험적으로..)

그리고 import를 하면 바로 까볼 수 있기 때문에 자연스럽게 import 해온 것에 대한 활용이 빨랐을 것 같다.

 

CPython

일반적으로 python이 C로 구현되어있다고 알려져있고 그 구현체가 바로 CPython이다. (가끔 traceback 찍을 때도 보인다)

보통 python을 다운받는다라고 하면 이 CPython을 받는 것이다.

 

이 CPython은 인터프리터이자 컴파일러이다.

python 코드를 C언어로 바꾸는 것이 아니라 컴파일하여 bytecode로 바꾸고 그 다음에 interpreter(virtual machine)가 실행한다. .py 파일을 실행하면 .pyc 라는 파일이 생성되는데 이것이 CPython이 컴파일한 bytecode가 들어있는 것이다. 그 다음 .pyc를 interpret 하는 것도 CPyton이다. dis 라는 패키지를 사용하면 python 코드가 어떻게 bytecode로 변환되는지를 볼 수 있다. 

CPython 인터프리터 실행 중에 단점이 있는데 GIL(global interpreter lock)을 사용한다는 것이다. bytecode를 실행할 때에 여러 thread를 사용할 경우, 전체에 lock 을 걸어서 한번에 단 하나의 thread 만이 python object에 접근하도록 제한한 것이다.

출처 : https://velog.io/@congaweb/compiler-interpreter

 

내가 생각하는 결론

결국 구현체나 인터프리터 언어나 하는 것은 파이썬의 장점이라기 보단 특징인 것 같다.

즉, 얘도 잘하는게 있고 못하는 게 있다. 장점이 있으면 단점도 존재한다.

파이썬 책을 봐도 "다른 언어가 하는거 우리는 이렇게 해"의 느낌이지 독자적인 장점은 인간이 보기에 비교적 편하다이다.

 

파이썬의 경우 계산이 빠른게 아니라 구현이 빠르다. 그것이 인터프리터의 특성이니까!

그리고 현업에서 파이썬으로 백엔드 개발을 해본 결과... 큰 장점을 못느끼겟다^^

 

물론 웹개발 서버 개발이라 프레임워크를 좀 많이 타긴 하지만 결국 그 프레임워크도 파이썬 프레임워크니 파이썬 생태계의 일부이다.

또 모든 것을 생짜로 현업에서 만들지 않고 여러 라이브러리를 사용하는데, Java 생태계보다는 덜 갖춰진 것이 있는 느낌이긴하다.

 

하긴 Silver Bullet은 존재하지 않으니! 파이썬도 내가 사용할 수 있는 도구 중 하나로 생각하면 될 듯


참고

https://velog.io/@congaweb/compiler-interpreter

https://cjh5414.github.io/about-python-and-how-python-works/

https://blog.insightbook.co.kr/2022/09/19/cpython-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-%EB%94%B0%EB%9D%BC-%ED%95%98%EB%A9%B4%EC%84%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%82%B4%EB%B6%80%EC%9D%98-%EB%8F%99/