베이스 아카이브

기본 개발 용어 알아보기 - 디버그, 컴파일러, 인터프리터 본문

IT/지식정보

기본 개발 용어 알아보기 - 디버그, 컴파일러, 인터프리터

반키 2022. 1. 19. 23:31

안녕하세요!

요즘 IT 개발에 대한 관심이 나날이 높아지고 있습니다.

처음 개발을 배우시거나 개발에 대한 지식이 필요하신 분들을 위해

개발에서 꼭 알아야 하는 몇 가지 용어들에 대해 소개해보려고 합니다!

 

오늘 포스팅에서는 디버그, 컴파일러, 인터프리터에 대해 알아보겠습니다.

 


디버그

디버그, 디버깅이란 말은 프로그래밍을 하기 전에도 한 번쯤은 들어보셨을 겁니다.

어떤 종류의 개발을 하건 디버깅은 꼭 하게 됩니다.

프로그래밍에 쓰이는 시간의 80% 이상은 디버깅에 사용된다고 하기도 합니다.

 

디버깅이란 간단히 정의하자면 

소프트웨어에 발생하는 문제의 원인을 찾는 것입니다.

 

디버깅은 꼭 프로그램에 무슨 문제가 터졌을 때만 하는 것은 아닙니다.

프로그램도 사람이 짜는 거고

소프트웨어가 기능이 많을수록 코드도 복잡하기 때문에

만드는 과정 중에 갖은 오류들을 마주치기 마련입니다.

 

짜는 사람에 따라 다르지만 코드라는 게

보통 한 번에 의도한 대로 다 작동하지는 않기 때문에

코딩을 하는 시간의 상당 부분은 디버깅에 해당하게 됩니다.

 

어떤 새로운 기능을 만들어 넣거나,

기존 기능을 수정하는 작업도 이를 완료하는 과정까지

많은 디버깅 과정을 거치게 됩니다.

완성 후 오류가 발생하면 말할 것도 없습니다.

디버그 <-> 배포

(개발중) <-> 배포

그래서 이 '디버그'란 단어는 다음 포스팅에 나올 '배포'와 대비돼서

개발 중인 상태를 나타내는 의미로 쓰이기도 합니다.

 

초창기 컴퓨터에는 기계에 벌레가 들어가서 고장을 일으키곤 했는데 

이 벌레, bug를 찾아 치우는 일에서 debugging이 유래했습니다.

 

코드로 짠 프로그램에 에러가 나는 원인은 다양합니다.

코드에 오타나 문법적인 오류가 있을 수도 있고,

논리적으로 설계가 잘못되어 있을 수도 있고,

코드가 실행될 컴퓨터와 맞지 않는 부분이 있거나

수많은 데이터들과 입력이 오가는 프로그램의 경우,

프로그래머가 예상하지 못한 데이터가 문제를 일으키기도 합니다.

 

때문에 프로그램이 복잡해질수록 디버깅을 하는 방식도 다양해집니다.

 

공장을 건설하고 제품을 생산하는데

공장이 돌아가다 멈춰버리거나 제품이 의도와 다르게 만들어지면

공장 어디에 문제가 있는지 살펴봐야겠죠?

빠른 방법은 공장의 설계도, 코드를 살펴보면서

규격이 맞지 않거나 메커니즘이 잘못된 부분들이 있는지 따져보는 겁니다.

 

코드량이 많지 않고 설계가 복잡하지 않다면

웬만한 오류들은 그렇게 잡아낼 수 있을 겁니다.

 

하지만 공장 규모가 크고, 단계마다 변수가 다양하다면

공장주가 직접 공장에 들어가서 공장을 가동해보고,

단계마다 진행과정을 살펴보면서

어느 지점에서 문제가 발생하는지 살펴봐야 할 때도 있겠죠.

 

프로그래밍 코드도 마찬가지입니다.

머릿속에서 모든 코드들을 다 돌려볼 수 없다면

코드의 특정 단계들마다 상태를 확인할 수 있도록 해서

어느 지점에 오류를 발생시키는 요소가 있는지 찾아가는 것입니다.

 

이 작업은 보통 엄청난 시간과 에너지를 소모하기 때문에

프로그래머의 디버깅을 도와주는 코딩 툴들도 꾸준히 발전해왔습니다.

Visual Studio Code나 Eclipse, IntelliJ 등 코딩을 할 때 사용되는 프로그램들에는

디버깅을 위한 여러 기능들이 갖춰져 있습니다.

 

이를테면 코드 중간중간에 검문소를 둬서

이를 통과하는 값들을 살펴볼 수 있도록 하는 기능들을 말합니다.

코드가 원하는 결과물을 내지 않는다면

이 디버깅 툴의 기능들을 사용해서 어느 지점에 어떤 문제가 있는 건지 찾아볼 수 있도록 하는 것입니다.


컴파일러 vs 인터프리터

컴퓨터는 0과 1이란 신호들을 사용해서 돌아간다는 것을 알고 계시나요?

컴퓨터가 알아듣는 명령어들은 이처럼 0과 1의 기나긴 조합들로 이루어져 있습니다.

사람이 이걸로 프로그램을 짜려면 정말 힘들겠죠?

때문에 오늘날 널리 사용되는 프로그래밍 언어들은

사람들이 보다 알아보고 작성하기 수월하도록 설계되어있습니다.

 

 

나날이 쉬워지고 간결해지고 기능도 강력해지는 이 언어들 덕분에 우리는 손쉽게 코딩을 할 수 있는 것입니다.

하지만 기계들은 이 코드들을 알아보지 못하기 때문에 이를 기계들의 언어로,

또는 그 중간 단계로 번역해주는 작업이 필요합니다.

이걸 언제 하느냐에 따라 이 둘 중 한 범주에 들어가게 됩니다.

 

 

C, C++, 자바 등의 언어들은 개발자가 코딩을 마치고

완성된 프로그램을 출시하는 단계에서 컴퓨터에게 일을 하나 시킵니다.

이 일이 컴파일입니다.

 

개발자가 작성한 프로그래밍 코드를 출시 전에 번역하는 것을 말합니다.

'컴파일러'라 불리는 번역가(프로그램)가

컴퓨터에게 건네줄 책을 미리 컴퓨터의 언어로 번역 작업을 하는 것입니다.

 

때문에 이 언어들을 '컴파일 언어'라고 부릅니다.

 

자바 코드로 예를 들어보겠습니다.

이렇게 자바 언어로 코드를 작성하고,

컴파일러에 명령을 내리면 오른쪽처럼 class라는 확장자를 가진 파일이 생겨납니다.

 

이 class 파일은 자바 가상 머신(JVM)이라는 프로그램이 설치된 모든 종류의 기계에서 통용되는 기계 언어입니다.

프로그래머는 자바 언어로 짠 코드를 이 JVM용 언어로 번역시킨 뒤,

이 기계들에 보내서 소프트웨어가 동작하도록 하는 것입니다.

 

 


이처럼 프로그래머가 쓴 책을 미리 번역하는 언어들도 있지만

 

 

그대로 가져가서 그때그때 통역사가 읽어주는 언어들도 있습니다.

자바스크립트, 파이썬, 루비 등의 언어들이 대표적입니다.

이들을 인터프리터(interpreted) 언어라고 합니다.

다른 말로는 '스크립트' 언어라고도 부릅니다.

 

 

 

소프트웨어를 출시할 때 컴파일을 하는 과정이 필요 없기 때문에

코드 수정이 잦은 서비스의 경우 업데이트가 훨씬 수월하지만,

그때그때 통역사가 미리 굴리며 책을 읽어야 하기 때문에

실행 속도는 컴파일러 언어에 비해 느리다는 단점이 있습니다.

 

그리고 프로그래머가 짠 코드가 그대로 배포되어 사용되기 때문에

프로그래밍 코드가 보다 쉽게 누출되기도 합니다.

 

이런 특성들을 고려해서,

개발자들은 자신이 만들려는 서비스에

적합한 종류의 언어를 선택해서 프로그래밍을 합니다.

 

정리하자면, 코드를 미리 번역해서 출시하면 컴파일 언어

실행할 때마다 통역을 쓰면 인터프리터 언어인 것입니다.

 

 

오늘은 디버그, 컴파일러, 인터프리터에 대해 알아보았습니다.

 

개발 용어에 관련된 포스팅은 여러 개로 나누어서 포스팅을 할 예정입니다!

많은 기대 부탁드립니다 :)

 

오늘 포스팅이 많은 분들에게 도움이 되셨길 바랍니다.

감사합니다.


https://base-archive.tistory.com/entry/컴알못도-알아야하는-기초해킹상식

 

컴알못도 알아야하는 '기초 해킹 상식'

오늘날 거의 모든 디바이스는 인터넷에 연결되어 있다고 해도 과언이 아닙니다. 프로그래머들은 네트워크를 통한 해킹을 막는 기술을 늘 고민하고 적용하기 마련인데요, 하지만 해커는 항상 가

base-archive.tistory.com

Comments