VSCode로 다른 IDE 부럽지 않은 프로그래밍 언어 만능 컴파일 환경을 만들어보자! (C, C++, Python, Java, Javascript)


VSCode는 제가 요새 애용하고 있는 프로그래밍 도구 중에 하나입니다. 아마 대부분의 프로그래밍 경험에서 이 프로그램의 도움을 받고 있는 거 같네요.

물론 VSCode는 근본적으로 텍스트 에디터기 때문에 IDE 처럼 어떤 한 언어에 특화된 기능이나 컴파일러를 기본적으로 제공하진 않습니다. 그러나 폭 넓은 플러그인 생태계로 익스텐션만 설치해주면 IDE 부럽지 않은, 아니 그 이상의 기능을 지원할 수 있게 해줄 수 있습니다. 또 컴파일러야 그냥 따로 설치해주면 그만이죠.

모든 기능이 무겁게 들어가 있지 않고 사용자가 원하는 플러그인, 컴파일러만 골라서 설치함으로써 가벼움까지 챙긴, 거의 완소 IDE에 버금가는 프로그램이 되겠습니다. 물론 프로젝트 만들고 실행 버튼만 눌러주면 거의 끝나는 IDE랑 다르게 개 삽질이 필요한 경우가 많긴 합니다

오늘은 그래서 요 VSCode로 만능 프로그래밍 개발 환경을 구성하는 방법을 소개하고자 합니다.
확장 프로그램과 조금의 설정을 해주면 VSCode에서 요즘 사용하는 대부분의 프로그래밍 언어를 컴파일 해서 실행해볼 수 있습니다.
ex) C, C++, Python, Java, JavaScript, C#, etc...

시작전에 VSCode로 코딩을 비추하는 환경은 아래와 같습니다.

  1. C# (윈폼, WPF 와 같이 GUI 프로그래밍 해야 하는 경우)
    이 경우엔 그냥 윈도우에서 Visual Studio 로 디자이너로 디자인 하는게 훨씬 낫습니다. (사실상 대체 불가)
  2. Java
    VSCode에서도 설정하면 물론 실행할 수 있긴한데 IntelliJ IDEA 같은 전통적인 강자가 있어서 설정할 시간에 그냥 IDE 설치해다 쓰는게 더 나을수도 있습니다.. jdk 버전 관리나 이런게 상당히 귀찮더라구요. 물론 귀찮을 뿐이지 사실 jdk만 잘 설치하고 VSCode에서 Extension Pack for Java 만 깔아주면 프로젝트 단위로 Java 코드를 아주 잘 실행시켜줍니다. 가벼운 실행 환경이 필요하면 고려해볼만 합니다.
  3. 이외에도 VSCode의 확장 프로그램 지원이 빈약한 경우
    일반적으로 컴파일러는 직접 찾아서 설치하고, 나머지 IDE 에서 지원하는 기능들은 VSCode의 확장 프로그램으로 보충하는데 자신이 쓰는 언어의 확장 프로그램 지원이 빈약하면 그냥 전용 IDE 쓰시는게 낫습니다.

 

시작전에 VSCode로 코딩을 추천하는 환경은 아래와 같습니다

  1. 다양한 스크립트 언어
    ex) Python, Javascript, TypeScript, ...
  2. 웹 프로그래밍
    ex) JS, TS, Vue, React 등
    사실상 VSCode는 웹 프로그래밍 업계 표준 수준이죠. HTML CSS 등의 작성도 당연히 해당되며 이에 대한 자세한 설명은 따로 하지 않겠습니다.
  3. C, C++ (프로젝트 규모가 크지 않은 경우)
    개인적으로 CodeBlock 이나 Dev C++ 같은걸 쓰는것보다 훨씬 만족도가 높았습니다. Dev C++ 은 가벼운 대신에 자동 완성이 제대로 지원되지 않았고, Visual Studio 는 기능 자체가 훌륭 한데 프로젝트 규모가 크지 않은 이상 너무 무겁습니다. VSCode로 코딩시 가볍기도 하면서 Intellisence(자동 완성) 까지 되는 최고의 환경이라고 생각합니다. GitHub Copilot 과 연동도 매우 쉽습니다.
    단 대규모 프로젝트인 경우 생각보다 VSCode의 구문 분석이 느리게 이루어지는 경향이 있어서 C/C++의 대형 프로젝트에선 깐깐하고 편리한 VS 사용을 권장드립니다. ex) Visual Studio + Resharper C++
  4. 이외에도 위에서 비추천 하지 않은 것


위 내용을 자세히 읽고 자신이 VSCode 환경으로 작업을 하면 좋을지 안좋을지 잘생각해보고 환경 구성을 시작해봅시다!

Code Runner 확장 프로그램 설치 & 설정

아까도 말했듯이 VSCode는 따로 컴파일러를 주진 않습니다. 언어 별로 컴파일러를 따로 설치한 다음 실행 명령어를 입력해서 컴파일 해주어야 하는데요. 상식적으로 모든 언어의 컴파일 명령어를 외우고 있기란 쉽지 않습니다. 또 알고있더라도 직접 입력하는건 엄청나게 귀찮구요...

컴파일 실행 명령어를 자동으로 입력해주는 'Code Runner' 을 우선 설치해주세요!
VSCode 환경 구성에 있어서 가장 중요한 익스텐션이라고 해도 과언이 아닙니다.

Code Runner에서 지원하는 언어는 아래와 같습니다.
Run code snippet or code file for multiple languages: C, C++, Java, JavaScript, PHP, Python, Perl, Perl 6, Ruby, Go, Lua, Groovy, PowerShell, BAT/CMD, BASH/SH, F# Script, F# (.NET Core), C# Script, C# (.NET Core), VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml Script, R, AppleScript, Elixir, Visual Basic .NET, Clojure, Haxe, Objective-C, Rust, Racket, Scheme, AutoHotkey, AutoIt, Kotlin, Dart, Free Pascal, Haskell, Nim, D, Lisp, Kit, V, SCSS, Sass, CUDA, Less, Fortran, Ring, Standard ML, and custom command

뭐.. 사실상 거의 모든 언어를 지원하는 수준이라고 해도 과언이 아니겠네요.

설치가 완료 됐으면 톱니 바퀴 - 확장 설정으로 이동해서 Code Runner 확장 설정 탭으로 이동합니다.

스크롤을 아래로 내려서 Run In Terminal 탭을 활성화 합니다.

기본적으로 Code Runner 로 코드를 실행하면 코드 출력이 터미널 탭이 아닌 출력(Output) 탭에서 출력됩니다. 기본적으로 출력 탭은 터미널 명령어도 입력할 수 없고 복사가 안되는 등 불편한 점이 많아서 해당 설정을 적극 권장합니다.

Ctrl + Shift + P 를 누른 후 기본 설정 : 사용자 설정 열기(JSON) 탭으로 이동합니다.

// 터미널 출력, 입력 인코딩 설정 (한글 깨짐 방지)
"terminal.integrated.profiles.windows": {
    "mPowerShell": {
        "source": "PowerShell",
        "args": ["-NoExit", "-Command ", "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; [Console]::InputEncoding = [System.Text.Encoding]::UTF8"],
    }
},
"terminal.integrated.defaultProfile.windows": "mPowerShell",

다음 내용을 json 요소 끝에 추가합니다. (꼭 끝이 아니여도 원하는 위치에 추가하면 됨.)

{
요소1,
추가할 내용
}
json 구조상 위에 요소1이 있다면 지금 추가할 내용(위 코드) 의 경우 저렇게 콤마로 구분되있어야 합니다.
위 코드는 Code Runner로 터미널에서 코드를 실행했을 때 터미널 인코딩을 바꿔서 한글을 깨지지 않게 해주는 설정입니다. * 출처
일반적으로 윈도우 환경인 경우에 설정해주시면 되겠고, 특이하게도 우분투 같은 리눅스 환경에서는 한글 언어팩을 받으면 한글깨짐이나 밀림 없이 전부 정상적으로 출력되는걸 확인했습니다. 리눅스가 윈도우보다 편할때도 있구나..?

다시 Ctrl + Shift + P를 누른 뒤 shortcut을 검색해 기본 설정 : 바로 가기 키 열기 탭으로 이동합니다. (JSON 아님. 주의)

code runner 를 검색한다음 Run Code 키 바인딩을 원하는 단축키로 변경합니다.
앞으로 이 키로 코드를 실행해볼 것 입니다.
저는 처음에 Dev C++ 컴파일 단축키인 F11로 했었는데 VSCode의 전체화면 키가 F11이라 중복되어 Ctrl + F11로 설정했습니다.

이렇게 되면 코드를 실행 하기 위한 준비는 끝났습니다.

컴파일러 설치 & 언어별 확장 프로그램 설치

언급했듯이 Code Runner는 각 언어 컴파일 명령과 실행 명령어를 자동화 해서 입력해주는 도구일 뿐 언어에 대한 컴파일러까지 다 설치해주진 않습니다. (애초에 설치도 몇 초 안걸리는게 컴파일러 까지 전부 설치해주면 말이 안되겠죠?)

이제 사용을 원하시는 언어 별로 컴파일러를 따로 설치해주셔야 하는데 본 글에서 모든 언어 컴파일러 설치 방법을 다룰 순 없으므로 본 글에서 자세하게 다루진 않겠습니다.
일단 저는 C와 C++ 을 컴파일 목적으로 gcc와 g++ 컴파일러를 미리 설치해주었습니다.

리눅스 환경에선 일반적으로 아래와 같이

sudo apt-get install [패키지 이름]

필요한 패키지 설치를 해주기만 하면 끝나게 됩니다.

그러나 윈도우의 경우 아래처럼

cmd 창이나 어느 터미널을 가도 gcc 나 g++ 명령어를 쳤을 때 인식할 수 있어야 합니다. 왜냐면 vscode에서 code runner로 실행할 때도 터미널로 컴파일 명령을 자동 실행하기 때문입니다.

이는 윈도우에서 환경 변수라는 설정을 해야 하는데 아마 gcc랑 g++ 컴파일러 설치 방법에 대해 인터넷에 찾아보면 분명 환경 변수 까지 같이 설정하는 방법을 친절하게 알려주기 때문에 큰 걱정은 안하셔도 됩니다.

code runner 확장 프로그램 설정 탭으로 가서 잘 찾아보면 "code-runner.executorMap" 라는 곳에서 code runner가 해당 언어를 실행시킬 때 어떤 명령어를 자동으로 입력해주는지 알 수 있습니다.

다음 명령어를 잘 보면서 어떤 프로그램(컴파일러) 로 실행시키는지 잘보고 인터넷에서 잘 찾아서 설치해준 다음 환경 변수를 등록해주시면 됩니다.

우선 C/C++을 기준으로 실행 명령어를 다음과 같이 수정해주겠습니다.

 

// "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"c": "cd $dir && gcc *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
// "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

 

주석의 경우 기존 명령어를 백업하기 위해서 뒀고 주석 아래에 있는게 변경한 명령어 입니다.
이렇게 수정하는 이유는 기존에 code runner 가 C/C++ 을 실행해주는 명령어에서 컴파일을 할 때 "현재 열린 파일 딱 하나" 만을 컴파일 하기 때문에 *.c 나 *.cpp 와 같이 모든 파일을 컴파일 하도록 변경해야 합니다.

왜냐면 파일 하나에 모든 코드를 다 때려박을땐 문제가 없겠지만 규모가 커져서 파일이나 헤더파일 단위로 분리한 경우 그 파일들은 컴파일 되지 않고 지금 열린 파일 하나만을 컴파일 하기 때문에 문제가 발생합니다. 주의해주세요.

그리고 언어에 맞게 VSCode 확장 프로그램도 잘 설치해줍니다. 이건 VSCode에서 자동완성이나 편의성을 위한 부분이라 거의 필수에 가깝습니다. 이런건 인터넷에 "C언어 VSCode 확장 프로그램 추천" 과 같은 식으로 검색하면 잘 나오니 잘 찾아보세요. 저는 요새 Copilot 이나 GitLens, IntelliCode 같은걸 같이 쓰고 있는데 정말 좋습니다 ㅎㅎ

위 목록은 제가 C/C++ 프로그래밍을 위해 사용하고 있는 익스텐션 입니다. (Better Comments 제외)

코드 실행

위에서 컴파일러 설정까지 제대로 끝마쳤으면 이제 코드를 실행해볼 순간입니다.
test.c 에 다음과 같이 코드를 작성해주었습니다.

이후 빈 화면에 오른쪽 클릭 - Run Code를 누르거나 Ctrl + F11을 누르면 이제 코드를 드디어 실행해볼 수 있습니다!!

생각해보니 출력을 빼먹었군요. Hello World! 를 출력 해보겠습니다.

깔끔하게 출력이 잘 되는걸 확인해볼 수 있습니다. Code runner 가 알아서 실행 명령어를 입력해줍니다.
아까전에 변경한 컴파일 명령 *.c 가 제대로 들어간 걸 볼 수 있습니다. 물론 이렇게 하면 한 폴더의 모든 *.c 파일을 컴파일 하기에 안에서 main() 함수 여러개를 만들 수 없다는 단점이 생겼습니다만 프로젝트 개념이 없고 폴더로 여는 VSCode 특성 상 폴더 하나가 일종의 프로젝트 개념이 된 거라서 오히려 더 좋을 수도 있습니다.

물론 언제든지 code runner 실행 명령은 바꿀 수 있으니 필요에 따라 잘 설정해주세요 ^^.

COMMENT WRITE