logo

시작하기

프로그래밍을 시작하려면...

46 조회

0 추천

2,725 단어

14분 예상

2025. 01. 20. 게시

2025. 02. 23. 수정

luasenvy 작성

CC BY-NC-SA 4.0

시작하기전에

이 글은 프로그래밍을 처음 시작하는 사람을 대상으로 작성하고 어떠한 작업들을 필요로 하는지를 주로 다루고 있다. 프로그래밍을 시작하려는 사람이라면 이 글을 읽고 자신이 어떤 작업을 해야하는지에 대한 감을 잡을 수 있을 것이다. 배운게 도둑질이라 이 문서는 Debian 계열 리눅스에서 nodejs를 사용하여 프로그래밍을 시작하는 방법을 소개하고 있다. IDE는 vscode를 사용한다.

Copilot을 활용하여 편리하게 프로그래밍을 진행해보자는 취지에서 눈높이에 맞춘 입문용 웹 어플리케이션을 만들어보려고 하였으나 문서를 작성하면 작성할 수록 Copilot에서 대한 설명을 하기가 난감하였다.

애초에 이런 고기능 보조도구를 활용하여 작업을 한다는 것 자체가 이미 프로그램에 대해서 견문이 있는 사람이어야 한다는 점이 상충하였기 때문이다. 애초에 상용프로그램을 통하여 입문을 하자는 것도 참 부당하지만 Copilot이 제공하는 코드 조각들을 이해하고 결정하기에는 상당히 큰 부담이 될 것이 자명하다. 결국, Copilot을 제외하고 입문자를 대상으로한 입문서 정도로 문서의 목적을 바꾸게 되었다.

최신 기술을 통하여 아주 쉽게 웹 어플리케이션을 구성해볼 수 있지만 이번 시리즈에서는 고전적인 방식으로 구성하여 웹 어플리케이션이 근본적으로 어떻게 동작하는지 이해해볼 수 있도록 작성하였다.

목적과 목표 설정하기

프로그래밍을 시작하기에 앞서서 자신이 왜 프로그래밍을 배우려고 하는지에 대한 목적과 목표를 설정해보자. 흥미에 이끌린 경우라면 그대로 재미있게 진행하면 되겠지만 업으로 삼기 위해 배우는 것이라면 조금 더 깊게 생각해볼 일이다.

직업을 위한 경우라면

프로그래밍을 업으로 선택하기 위하여 배우는 경우라면 어떤 분야를 선택할 것인지를 가장 먼저 선택해야할 것이다. IT 산업은 그 분야가 매우 다양하다. 당장 생각나는 것만 해도 S/W와 H/W계열이 있고, S/W만 하더라도 시스템 프로그래머, 응용 프로그래머, 웹 프로그래머 등으로 나뉠 수 있다. 이것 보다 더 세세하게 나눌 수도 있고 계열별로 특징적인 부분으로 더 나뉘기도 한다.

이렇게 세세한 분야마다 두각을 나타내는 언어들은 더 다양하게 존재하며 그 언어로부터 파생되는 수 많은 프로그램, 함수, 프레임워크, 기법들이 존재하기 때문에 어떤 분야를 선택하느냐에 따라서 배워야할 언어와 기술들이 천차만별로 달라진다.

웹 프로그래밍이라고 하더라도 이 문서에서 소개하고 있는 nodejs, javascript 스택과는 다른 기술들이 필요한 경우도 부지기수이다. C, C++, Python, Java, Rust, Ruby, PHP, ASP 등등 웹 기술을 구현할 수 있는 방법은 거의 모든 언어에서 제공되고 있으며 그 쓰임새도 조금씩 다를 수 있다.

오래된 언어들을 여전히 사용하는 경우도 있는데 이것은 기술이 대안책을 찾지 못해 남아있는 것이 아니라 요즘 인기있는 언어만으로는 한계가 있다는 반증이기도 하다. 값 싸고 좋으면 원숭이라도 고용할 회사가 놓지 않는다는 것은 다 이유가 있기 때문이다.

예를 들면 큰 데이터를 다루어 성능이 매우 중요시되는 웹 서비스가 필요한 경우에는 아무래도 nodejs보다 python이나 C를 사용하여 구성하는 편이 더 질 좋은 서비스를 제공할 수 있다. 이러한 선택의 문제는 곧 고객의 선택으로 이어지기 때문에 자신이 무엇을 목표로 하는지 정하고 한정된 시간을 효율적으로 투자하는 것이 아주 중요하다.

해외라면 사정이 다를 수 있겠으나 지난날 뛰어난 두각을 나타낸 분야가 없다면 안타깝게도 하나를 깊게 파고들 기회가 아주 한정적일 확률이 높다.1 대한민국 땅을 딛고 컴퓨터로 밥벌이를 해볼 생각이라면, 나아가 커리어에 대하여 고민한다면 반드시 한 번쯤은 고민해야 할 주제이다.

물론, 이런 중대한 선택은 가볍게 경험해 보고 이런저런 사전조사를 한 후에 깊게 생각해보는 것도 좋은 방법이다. 우선은 프로그래밍에 입문해보자.

언어 선택하기

입문자를 위한 기초적인 기술을 배우기 위해서 nodejs를 추천한다. 또한 웹 프로그래밍이라는 전체적인 작업을 연장선상에 놓고 보았을 때 웹 브라우저에서도 동일한 언어로 프로그래밍이 가능하여 학습대비 생산성에 있어서 매우 큰 장점을 가지고 있다.

이것은 nodejs라는 언어가 나온 배경이기도하다. nodejs가 나오기 이전에는 웹 브라우저를 구성하기 위한 HTML, CSS, JavaScript 외에도 웹 서버를 구성하기 위하여 Java나 PHP와 같은 서버측 언어와 프레임워크를 별도로 학습해야만했다.

JavaScript라는 언어도 시간이 흐름에 따라 jQuery를 필두로 Bootstrap과 같은 고기능 프레임워크들이 속속 출시되면서 점점 더 학습비용이 증가했다. 서버와 클라이언트의 전문성이 점점 깊어지게 되면서 프론트엔드백엔드가 각각 전문인력이 필요한 큰 비용을 요구하는 구조가 되어갔다.

그래서 인지 nodejs에서 최근 빠지지 않는 기술들인 typescript, tailwind, webpack, vite와 같은 패키지들은 대부분 이러한 학습비용을 최소화할 수 있는 기술들이다. 한 명의 프로그래머를 고용하여 서버와 클라이언트를 모두 쉽게 작업할 수 있도록 도와준다.

개인적으로는 그렇게 생산성을 극대화했다고 느끼진 않는다. 단순한 프로그램이라면 분명히 생산성에 효과를 보인다만, 그런 프로그램이라면 산업에서 살아남기 힘들거나 돈벌이가 되는 일이 아닌 경우가 많았다. 조금이라도 깊이있는 기능을 구현하려면 서버의 작동을 모두 이해해야하며 언어의 깊이가 생겨야만 이해되는 문제들이 여전히 산재해 있다.

환경 구축하기

nodejs 설치하기

nodejs 공식홈에서 제공하는 스크립트를 통하여 nodejs를 설치하자. 작성일 기준 22.13.1 (LTS) 버전이 최신이다. 이 버전에서는 nvm을 통하여 리눅스 환경에 nodejs를 설치한다. 설치가 완료되면 node -v, npm -v 두 명령을 통하여 nodejs와 npm이 정상적으로 설치되었는지 확인할 수 있다.

테스트 프로젝트 만들기

run nodejs

디렉토리 ~/Documents/first 를 만들고 디렉토리내에서 npm init -y 명령으로 package.json 파일을 초기화한다. 이 파일은 nodejs 프로젝트의 정보와 패키지의존성를 관리하는 파일이다. code . 명령으로 vscode로 열고 index.js 파일을 만들어 간단한 프로그램을 작성하고 node index.js 명령으로 프로그램을 실행해보자. 정상적으로 실행되었다면 프로젝트 작성을 위한 가장 기초적인 환경이 구축된 것이다.

IDE

통합 개발 환경은 콘솔, 에디터, 프로젝트 익스플로러 같은 개발에 필요한 편의기능들을 한 곳에 묶어 놓은 소프트웨어를 말한다. vscode가 점유하기 전에는 Eclipse, Sublime Text, Jetbrain, webstorm 등과 같은 여러가지 툴들이 많이 있었지만 최근에는 거의 vscode로 수렴하는 추세... 라기보다는 이미 점유되어있다. 개인의 기호에 따른 선택 외에는 거의 vscode를 사용한다.

Copilot

코파일럿은 생성형 AI의 응용으로 vscode의 확장 프로그램으로 설치되어 동작한다. 개발자가 어느정도 힌트를 주면 제시되는 코드를 선택하여 빠른 프로그래밍을 지원해준다. 프로젝트 설정을 통해 채팅형식으로 물음을 주고받을 수도 있으며 개발에 있어서 높은 수준의 지원을 받아볼 수 있다.

단, Github에서 제공하는 Copilot은 구독제 서비스로 개인 개발자 수준의 구독료는 1달에 $10 이다. 1년에 $120 이니 게시글 작성시점 1400원 환율로 1년에 168,000원 정도이다.

개인적인 작업경험으로는 써볼만하다. Github에서 제공하는 코드 어시스트로 방대한 프로그래밍 스펙트럼을 지원해주기 때문에 프로그램 작업에 있어서 매우 도움이 되었다. 월 14,000원 이라면 점심 한 끼 가격으로 한 달간의 높은 수준의 작업 편의성을 얻을 수 있다. 한 달 무료 체험기간을 활용해보는 것도 좋은 방법이다.

입문자와 Copilot

시리즈를 작성해나가면서 결국 입문자가 생성형 AI만을 사용하여 하나의 웹 어플리케이션을 구성한다는 것은 힘든 일이라는 결론을 내렸다. 웹 어플리케이션을 구성할 수 있는 기본 작업들과 경험을 먼저 소개하고 Copilot을 통해 다시 자신만의 작업을 할 때 답을 얻을 수 있는질문을 할 수 있는 방법으로 소개하기로 했다.

Footnotes

  1. 이 글을 쓰는 나도 마찬가지지만... 🥲