끊임없이 검증하라

나에게 당연할지라도

JAVA

JAVA_1_프로그래밍 입문 언어?(자바와 파이썬)

fadet 2022. 2. 5. 19:32

* 해당 포스트는 실습 과정 중 학습을 정리하는 글이기에 주관적인 내용이 포함되어 있을 수 있습니다.

잘못된 부분이 있다면 걸러들으시거나 댓글로 남겨주시면 감사하겠습니다. 학습이 진행되며 글은 수정될 수 있습니다. 대신 수정한 부분에는 주석을 추가하였으니 이런 생각을 했었구나 정도로 알아주시면 됩니다.

 

* 처음 프로그래밍 입문때 적은 글이라 정말 입문자나 교양으로 보실 분들만 보고 넘어가주세요. 또한 초창기에 작성한 글이라 의욕만 넘쳐서 존댓말로 작성하지 못한 점 양해드립니다.

 


 

😀 이전 글에서 이어집니다. 링크는 https://fadet-coding.tistory.com/3

❗ 이 포스트는 개발을 아예 모르시는 분이나 개발에 막 입문한 분들을 위한 글입니다. 따라서 다소 어려울 수 있는 내용은 거의 넣지 않았기에 개발을 공부 중이신 분들에겐 다소 부족한 내용일 수 있음을 알립니다. 그렇기에 대충 기본적인 공부는 했고 이제 주니어로 회사에 면접을 보는 수준 정도는 지난 분이라면 다른 포스트를 보시는걸 추천합니다.

 


Index
1 어떤 언어로 시작할 것인가?
2 입문자에게 자바와 파이썬
3 그래서 결국 무슨 언어를 배우라는거야?
어떤 언어로 시작할 것인가?

 

개발 입문 언어로 뭘 선택할까?

 

개발자에 대한 인식이 단군 이래 가장 좋다고 할 수 있는 이 시점에 우리의 고민은 '개발 입문 언어로 무엇을 선택할까?'일 듯 싶다. 우선 입문자들이 알아야 할 것은 '자신이 어떤 개발자로 성장할 것이냐'이다. 개발자의 직군 역시 다른 직업이 그렇듯 매우 다양하다. 널리 알려진 프론트엔드, 백엔드 같은 구분은 정말로 직군을 뭉뚱그려서 둘로 나눈 것 뿐이고 실제론 가장 유명한 웹/앱부터 시작해서, 인프라/클라우드, 임베디드/소프트웨어, 네트워크 개발자부터 해커 같은 보안 전문가나 최근 떠오르는 빅데이터/머신러닝까지 정말 다양하다. 언급하진 못했지만 더 많은 직군들이 존재하고 이 직군들만 다 살펴봐도 대충 어떤 흐름으로 IT 생태계가 흘러가는지 대강은 알 수 있을 것이다.

 

이 중 나는 내가 공부하는 웹 백엔드 개발을 위주로 포스팅하려고 한다. 이 글을 보는 대부분의 개발 지망생은 웹/앱을 만들어보고 싶을 것이라고 생각하기에 포스팅이 독자들에게 도움이 될 것이라 생각한다.

 

프로그래밍 언어는 실제 언어만큼이나 다양할뿐만 아니라 시간이 지남에 따라 새로운 프로그래밍 언어가 생겨난다. 하지만 그 수많은 우리가 사용하는 실제 언어들이 그 체계가 조금 다르더라도 의사소통을 목적으로 하는 전체적인 골격은 똑같듯 프로그래밍 언어 역시 그렇다. 표현 방식, 문법, 사용 분야가 다른 것을 떠나서 어느 한 언어에 숙달이 된다면 어차피 어떤 언어를 쓰던 의사코드*를 컴퓨터가 알아먹게 바꾼다는 목적은 똑같기에 다른 언어 역시 익히는데 큰 도움이 된다. 그렇기에 처음부터 어렵고 트렌디한 언어를 선택하기 보단 쉽고 널리 알려진 언어로 입문하는 것이 더 도움이 될 것이다.

* 의사코드(pseudo code) : 프로그램을 작성할 때 각 모듈이 작동하는 논리를 표현하기 위한 코드.
쉽게 말해서 설계하고자 하는 바를 사람 언어로 알고리즘을 적은 코드라고 생각하면 됨

 

보통 일반인들이 접할 수 있는 언어에는 크게 C, 파이썬, JAVA, Javascript(JAVA와는 아에 다른 언어다) 등이 있을 것이고 그보다 더 쉽게 접할 수 있는 html, css도 존재하지만 이 둘은 프로그래밍 언어가 아닌 마크업 언어라 한다. 이런 개념조차 잘 모르는 일반인이라면 교양으로 보는게 아닌 한 포스트 중간을 건너뛰고 포스트 맨 끝을 읽어보길 권장한다.

 

입문자들에게 이쯤에 생기는 의문이 있다. 어느 포스트를 봐도 파이썬, 자바, Javascript 정도를 입문 언어로 추천하는데 그럼 그 사람들은 그 언어들이 가장 쉬우니까 추천하는 것인가? 다른 선택지는 없나?라는 것일텐데 일단 저들은 난이도 면에서만 봐도 꽤나 쉬운축에 속하기에 추천할 법한 이유로 충분하다. 하지만 난이도로만 치면 정말 단순한 Scratch부터 Visual Basic까지 다른 언어도 있기 때문에 난이도만이 이들을 추천하는 이유가 되지 못한다.

 

진짜 이유는 '이 언어들이 다재다능하게 사용되며 인기가 많고 전망도 밝기때문'일 것이다. 파이썬, 자바의 경우 뒤에서 다룰 것이고 JavaScript는 웹 개발에서 필수불가결한 존재인데 백엔드, 웹 개발까지 가능한 다재다능한 녀석이다. 또한 인기만 따져도 이 셋은 매년 1~3위를 오르락내리락하며 최상위권에 위치해 있다. 뒤에서 소개하겠지만 자바는 국내 웹 레거시(이미 구축되어 있는 어플리케이션이라고 생각하면 됨)에서 압도적인 점유율을 자랑하며 파이썬은 최근 떠오르는 분야들에서 널리 쓰이며 웹의 기반이 되는 JavaScript는 그 인기만큼이나 전망도 좋다. 이것들을 종합해봤을때 저 셋은 Ruby나 Perl 등 기존에 인기 있었지만 전망이 어두운 언어들이나 C++처럼 입문장벽이 비교적 큰 언어들과 비교했을때 배워두면 정말 좋은데 배우기도 좋은 언어들이다.

 

이 글을 읽는 사람 중엔 정말 개발에 입문하고 싶어 어떤 언어로 개발 공부를 시작할까 관심을 가지는 사람도 있을 것이라 생각하는데, 만약 쌩 입문자로 내가 어떤 언어를 선택해야할지 막막하다면 나는 개인적으로 파이썬과 자바스크립트를 먼저 배울 것을 추천한다.

 

웹 개발을 처음 시작한다면(앱은 보통 정해진 언어가 있다) 자신이 프론트엔드와 백엔드 크게 두 방향성에서 고민할 가능성이 농후한데 파이썬은 나중에 주력 언어를 바꾸더라도 생산성이 높기때문에 서브 언어로 사용할 수 있고 간결한 문법으로 입문이 쉽다. 자바스크립트는 파이썬과 달리 선택이 아닌 필수다. 정확히 말하면 백엔드 개발 언어는 여러 종류가 있지만 프론트엔드 개발자라면 이 언어 밖에 선택지가 없다. 그런데 Node.js 등 백엔드 개발도 가능하고 모바일 앱을 만드는 것 역시 가능하다. 또한 명령형, 객체지향, 함수형 프로그래밍(이는 다른 포스트로 더 자세히 다루겠다) 등의 여러 프로그래밍 패러다임을 동시에 익힐 수 있다.

 

이렇게 말만 들어보면 입문 언어로 파이썬보다 자바스크립트를 선택하는 것이 백번은 옳다. 하지만 훌륭한 무기를 모든 사람이 다룰수 없듯이 JS를 실무에서 소화하기까지의 난이도를 생각하면 입문자에게 마냥 추천할 순 없다. 그래서 개인적으로도 또 일반적인 의견도 난이도에 있어선 셋 중 파이썬이 입문하기엔 가장 쉽다고 평가되며 그렇기에 두 언어를 추천하는 것이다. 그런데 사실 정말 코딩과 상관없는 일을 하다가 입문하는 사람이라면 파이썬도 어려울 수 있다고 생각하기에 그런 경우 이 두 언어에 앞서 마크업언어*(html, css) 등 더 쉬운 언어로 자신이 코딩에 흥미가 있는지 테스트하는 것을 추천한다.

* 마크업언어 : 태그 등을 이용해 데이터 구조를 명기하는 언어로 쉽게 프로그래밍 언어와 비교하면 조건문, 분기문이 없다고 생각하면 됨. 최근에는 기능이 추가된 마크업 언어도 나오기에 이런 경우 둘의 명확한 구별이 힘듦

 

일반인들이 접하기 쉬운 쇼핑몰, 홈페이지 제작 대행을 하는 직종은 보통 '웹 퍼블리셔'라고 합니다.
이들은 Html, CSS로 디자인을 웹에 이식하고 JavaScript를 이용해 상호작용들을 추가하는 업무를 주로 맡습니다.
마크업을 능숙히 다루는 것도 물론 힘든 일이지만 이 포스트에선 더 다루지 않겠습니다.

 

입문자에게 자바와 파이썬

이제 입문 언어에 대한 얘기를 짤막하게 마치고 내가 공부하는 분야인 웹 백엔드 개발을 본격적으로 시작하려는 사람에게 자바라는 선택지를 하나 더 추가하겠다. 왜 갑자기 자바스크립트와 파이썬만 줄창 얘기하다 자바를 끼워넣느냐라고 할 수 있다. 모르는 사람은 아마 자바에서 기능이 추가된게 자바스크립트인가할 수도 있을 것이다.

 

일단 얘기하자면 자바스크립트와 자바는 이름만 같고 그냥 아예 다른 언어다. 그리고 이후 서술할 내용에서 자바스크립트 내용은 그냥 빼버릴 예정이다. 왜 그렇냐면 자바스크립트는 사실 백엔드 개발자로 입문할 때 선택하기엔 그렇게 적절친 않다고 생각하기 때문이다.

 

아니 처음엔 웹 개발 입문에 자바스크립트를 추천한다며!

 

물론 웹 개발에 있어서는 추천한다. 하지만 웹 백엔드 개발에서는 글쎄...다. 사실 정확히 자바스크립트는 백엔드로 쓸 때 기본적으로 Node.js라는 환경을 사용한다. 원래 자바스크립트는 브라우저에서 동작하기 위해 개발된 언어다. 이를 컴퓨터에서도 작동하도록 하려고 만든 방식이 Node.js라고 생각하면 편하다. 그렇기에 같은 언어지만 백엔드에서만 사용하려고 Node.js를 배우려는 것은 꽤나 비합리적이라고 생각한다. 예를 들어 html, css를 배우고 자바스크립트를 조금 배운 사람에게 Node.js를 가르치면 많이 헤매는 경우가 대부분이다.

 

그렇기에 웹 백엔드 개발에 입문하려는데 언어를 선택해야하는 사람에게 말해주고 싶은건 자바와 파이썬 두 언어에 대해서다. 만약 자신이 웹 프론트엔드(혹은 웹을 혼자 다 만들어보고 싶은 풀스택 개발자)나 Node.js에 관심이 있는 사람이라면 javaScript를 공부해보는 것도 매우 좋은 선택일 것이지만 우선 이번 포스트에선 자바와 파이썬을 다룰 예정이기에 javaScript에 대해 알고 싶다면 다른 포스트를 읽어보길 바란다.

 

이제 두 언어에 대해 얘기할텐데 자신이 본격적으로 개발 공부를 시작하겠다고 생각하는 사람만 이 항목을 보고 그게 아닌 코딩을 배워보고 싶은데 어떤걸 해야하나 고민인 정말 하나도 개발 관련 지식이 없는 사람이라면 포스트의 마지막 부분으로 스크롤을 내리는 것을 추천한다. 


 

 

일단 자바와 파이썬의 비교를 나열함에 앞서 인터프리터 방식과 컴파일 방식에 대한 언급을 할텐데 그 전에 컴파일타임과 런타임에 대한 간단한 이해가 필요하다. 자세한 내용은 이후 포스트에서 다룰 것이고 대략적으로 컴파일타임은 개발자의 코드를 컴퓨터가 읽을 수 있게 변환하는 시간을 의미하고 런타임은 코드가 실제로 실행되는 시간을 의미한다고 생각하면된다. 다음으로 자바의 구동 방식에 대한 간략한 소개를 할텐데 이를 알고 있거나 알기 싫다면 넘어가면 된다.

 

run을 하면 인터프리터가 코드 한줄 한줄 해석하여 콘솔에 결과가 나오는 파이썬과는 달리 자바인터프리터 방식과 컴파일 방식이 혼합되어 있는데, 자바는 내가 소스코드를 .java 파일에 작성하고 컴파일하면 javac를 통해 바이트코드(어셈블리어에 가깝게 고급 언어를 중간 언어로 바꾼 코드)로 바꾸고 .class 파일로 변환하며 이를 자바 인터프리터가 파이썬과 같이 한 줄 한 줄 읽어내려가며 어셈블리어로 해석한 뒤 코드를 실행한다. 참고로 인간이 읽기 쉬울수록 고급 언어일 가능성이 높다고 생각하면 된다.

 

단순히 이것만 놓고 봤을때 C와 같은 전통적인 컴파일방식에 비교하면 파이썬은 한줄한줄 읽는 인터프리터기에 느릴 것 같고 자바 역시 컴파일을 하더라도 인터프리터를 사용하기에 빠르진 않을 것 같다. 사실 기존 JVM(이후 설명)은 이 예상대로 파이썬과 같이 기본적인 인터프리터 방식을 썼었기에 성능 이슈가 있어왔는데 이를 JIT 컴파일 방식(Just-in-time)으로 바꾸며 성능을 개선했다. 어떻게 한줄 한줄 바로 읽는 방식은 같은데 성능을 개선했을까? JIT 방식은 위에 설명한 대로 바이트코드로 코드를 변환하는 과정까지는 기존 방식(이에는 AOT, 정적컴파일 등이 있다)과 다를게 없지만 변환된 바이트코드를 런타임에 인터프리터 방식으로 읽기 때문에 최초 한 번 컴파일을 한 이후의 속도는 크게 개선된다. 아주 쉽게 말하면 코드 전체 내용을 컴퓨터에 최초 한 번 알려주면 이후 실행되는 코드들을 모두 컴퓨터가 가공해놓은 방식으로 사람이 읽을 수 있다고 이해하면 될 것 같다.

 

근데 이상하지 않은가? 개발자가 입력하는 코드는 바뀌면서 계속 컴파일할텐데 최초 한 번의 컴파일만으로만 그것이 가능할까? 이 문제는 컴파일러가 자주 사용하는 코드를 캐싱(일시저장이라고 생각하자)하여 컴파일마다 똑같은 코드를 매번 해석하는 과정을 생략 가능함으로 해결된다. 

 

확실히 예제 수준의 간결한 코드에선 코드 작성 후 처음 컴파일할때는 파이썬과 별 차이 없지만 위에 말했듯 첫 컴파일 이후 필요하면 메모리에 자주 쓰는 부분을 캐싱하여 두기에 코드가 길어지면 성능 차이가 확연하다. 이처럼 이런 성능에 영향을 주는 컴파일 방식의 차이가 프로젝트에 둘 중 어느 언어를 채용할 것인가에 가장 중요한 요소지만 이 글을 보는 입문자들에겐 성능 차이는 크게 와닿지 않을 것이라 생각하기에 이제 다른 차이점들을 보다 쉽게 설명하고자 한다.


 

 

# 확연히 드러나는 간결함으로 생산성이 높음 vs 타입 선언, 모듈화를 통해 코드 유지보수에 강함

 

- "Hello World"를 출력하는 매우 기본적인 코드도 파이썬에선 print("Hello World") 한 줄이면 ok지만 자바는

public class Hello_world {
  public static void main(Stirng[] args) {
    System.out.println("Hello World");  } }

이처럼 3줄이 필요하다. 당연히 파이썬의 이러한 코드 간결함은 빨리 빨리 코드를 설계할 수 있어 개발자들이 필요에 따라 빠르게 기능을 수행할 수 있는 SW를 코딩할 수 있는 등 높은 생산성으로 이어진다. 또, 앞서 말했듯 입문에 있어 엄청난 강점이 존재한다. 입문에 있어 예제를 실습한다는 것은 매우 중요한데 파이썬은 매우 빠르고 쉽게 실습이 가능하지만 자바는 이와 비교할때 코드 길이, 클래스 위주 문법 등에서 불리한 요소를 갖고있다.

 

하지만 자바는 코드가 왜 파이썬보다 길까? 당연히 길어야 할 이유가 있으니까.

 

우선 타입을 선언함으로 타입 안정성을 보장하는데 파이썬은 일반적으로 변수에 값을 넣었을때 런타임에 변수가 숫자인지 문자인지 같은 type이 결정된다. 더 나아가 Javascript는 내가 숫자로 선언한 변수도 실행이 안되면 문자로 바꿔버린다. 하지만 자바는 변수의 type체크는 기본이고 메소드의 parameter/return type, 객체의 refer type까지 거의 모든 type을 반드시 선언해야한다. 이 타입 체크는 개발자들에게 엄청난 이점을 가져다주는데 특히, 런타임까지 타입을 끌고오지 않는다는 점이 디버깅에 있어서 너무나도 큰 차이를 가져다준다. 런타임에 타입이 결정된다는 것은 곧 컴파일타임에 타입이 결정되지 않는다는 것이고 이는 조금만 코드가 길어져도 버그의 발생할 확률이 비약적으로 상승한다는 뜻이다.

 

개발자들에게 너무 많은 자유를 보장하는 것은 몇몇 소수를 제외하면 그 자유는 억압이 된다. 이해가 쉽게 조금 예시를 들어보겠다. 자바스크립트는 실행이 되면 안되는 코드도 실행을 해버리는데

function plus(a, b) {
	return a + b;
}

plus(ab);

위 코드에서 plus가 인수 두개를 더하라는 함수인 걸 안다면 plus(ab)는 실행되선 안되는 것을 알 것이다. 이런 경우 대부분 코드를 치다가 쉼표 하나를 빼먹는 실수이지 않나? 하지만 위 함수는 그냥 실행되어버린다.

 

바닐라에선 타입을 소스 코드상에 명시하지 않는 대표적인 언어인 JavaScript를 예시로 들었는데 예시처럼 타입 안정성은 개발자들이 코드를 작성할때 버그의 존재를 알지 못하다 실행해보고나서야 버그를 찾게되고 심하면 출시 이후에 버그를 알게할수도 있다. 당장은 와닿지 않을 수 있지만 이는 개발자들에게 엄청난 비용을 치르게한다.

 

물론 조금 공부하다보면 자바에서도 var를 사용하는 등 무조건적으로 타입 안정성이 이득인 것은 아니다. 하지만 이 포스트에선 입문자를 기준으로 설명하기에 우선은 넘어가겠다.

 

다음은 자바가 Class 위주 언어라는 것이다. 같은 객체지향언어이지만 파이썬은 py파일 내에서 코드가 어디있든 실행이 가능하다. 하지만 자바의 .java 파일은 클래스명과 같아야하는 것부터 시작해서 모든 것이 class로 구성되어 있고 객체 중심으로 사고해야한다. 물론 파이썬처럼 명령을 하면 바로 실행된다는 것은 설계가 보다 쉽고 생산성이 높다는 장점도 있다. 하지만 모든 것이 class 위주기에 자바는 앞서 말했듯 클래스마다 자바 파일이기에 모듈화로 인한 관리에 있어 큰 이점이 있고 변수간의 간섭이 일어날 수 있는 scope(유효 범위)에 대하여 보다 safe하고 각 클래스로 코드들이 모듈화되어 후에 유지보수를 할 때 에러가 발생하면 예상 위치를 안다하더라도 수정이 번거로운 파이썬과 달리 에러 예상 Class만 수정하면 되듯 유지보수에 있어 매우 유리하다. 또한 여러 객체가 불필요하게 호출되 있을 수 있어 메모리 누수가 발생하기 쉬운 파이썬과 달리 호출될 때 해당 객체만 생성하는 동적 로딩(Dynamic Loading)이 가능한 자바는 보다 효율적인 메모리 관리가 가능하다. 

 

 

# 일반인에게의 확장성/개발자에게 높은 호환성

 

- 이 항목은 자바가 대체적으로 유리함만 나열될 수 밖에 없음을 참고하자. 파이썬을 배우기 시작했을때 봤던 파이썬의 단점을 나열하는 글에 소개된 영상(https://www.youtube.com/watch?time_continue=1&v=jDRhsqi7jOg&feature=emb_logo)을 봤을땐 크게 느끼지 못했는데, 지금 보면 크게 체감된다. 간단히 영상 내용을 소개하자면 일반인에게 6줄의 파이썬 코드로 짠 프로그램을 보여주는 건데, 그 과정에서 일어나는 불편함을 소개하는 영상이다.

 

이 말대로 파이썬은 개발자끼리는 파이썬이 깔려있을테니 논외겠지만 빌드한(개발한) 결과를 일반 사용자에게 배포하기 위해선 여러 과정이 필요한데 그 중에서 특히 제일 힘든 점은 개발할때 사용한 환경을 일반 사용자의 컴퓨터에도 동일하게 깔아줘야한다는 것이고 이 부분을 제일 체감한 것은 사용을 위해 파이썬 기본 라이브러리인 tkinter를 사용해 GUI에서 작동하는 스탑워치를 만들었는데 막상 내가 쓰기엔 좋지만 만들었다고 친구한테 말하고 써보라고 할 수가 없었다는 것이다.

 

이처럼 파이썬은 운영체제에 따라 실행 환경이 변경되기에 각 환경마다 버전 호환성을 고려하여 개발 환경을 꾸려야하지만 자바의 경우 JVM과 바이트코드만 있으면 어디서나 런타임이 가능하다 것이 자바의 매우 큰 장점이다. 물론 JVM 사용으로 인해 전통적인 컴파일 방식보다 상대적으로 무거울 수 밖에 없고 런타임에 동적으로 코드를 실행하기 때문에 런타임 과정에서 해킹당할 여지가 있어 보안 상 허점도 존재하는 등 단점이 없는 것은 아니다.

*JVM(Java Virtual Machine)은 자바 바이트코드를 해석하여 실행하는 가상 머신으로 내 컴퓨터에 바이트코드를 언제든지 실행할 수 있는 일종의 가상 컴퓨터를 소프트웨어로서 설치한다고 생각하면 쉬움.

 

JVM이라는 가상환경에서 구동이 된다고 하지만 그래도 일반 사용자는 JRE라는 실행환경을 설치해야 하긴 한다. 하지만 이 과정은 파이썬과 달리 복잡한 과정 필요 없이 1분이면 끝난다. 실행 환경이 웹인 자바스크립트는 말할 것도 없고 C#의 경우 같은 가상환경을 필요하지만 엄청난 윈도우의 점유율을 생각해보면 윈도우가 깔리면 자동으로 있는 .Net이라는 환경 덕분에 일반 사용자 입장에선 JAVA, JS나 C# 등 컴퓨터를 사용하다보면 한 번 쯤은 마주치는 이들과 달리 파이썬을 들어보기는 했어도 접근성이 이들보다 매우 떨어지기에 1번에서 언급한 높은 생산성과 대비되게 일반사용자 친화성은 자바에 비해 낮다.

 

더 나아가 개발자에게의 호환성에 있어서도 자바가 유리하다. 자바는 바이트코드만 같다면 어떤 개발 환경이든 JVM으로 구동시 같은 실행결과를 반환한다. 이는 엄청난 장점인데  다른 언어의 경우 최근에는 많이 개선되었지만 운영체제에 따라서 int형의 크기가 달라지는 등의 메모리, 레지스터(cpu의 저장소라고 보면됨)같은 진행중인 개발 이외의 환경에 대하여 체크해야할 요소가 많아진다. 

 


 

나열한 특성들을 종합해보면 자바는 파이썬에 비해 정적이다. 또한 자바와 파이썬은 둘다 C계열의 절차지향 언어의 특성을 띠고 있지만 자바가 좀 더 class 지향적이다. 이 밖에도 스레드나 FP(함수형 프로그래밍)적인 특징이 더 많지만 입문자 입장에서 가장 크게 다가올 부분은 문법적으로 자바가 좀 더 장황하고 더 배울게 많다.

 

그렇기에 자신이 프로그래밍을 입문하기엔 앞서 말했듯 파이썬을 추천한다. 하지만 이와 별개로 이후 취업 환경을 생각했을때는 조금 이야기가 다른데 우선 앞에 언급했듯 파이썬이 좀 더 진로 분야가 다양할 수는 있다. 주로 자바는 안드로이드, 웹 백엔드 개발에 특화되어 있는데 반해 파이썬은 과학 및 공학 연구, 빅데이터, 머신러닝부터 django, flask(웹 프레임워크)를 위시한 웹 백엔드 개발까지 진출 분야가 넓다.

 

하지만 웹 개발에 있어선 압도적으로 국내에선 Java가 유리하다고 얘기할 순 있다. 최근들어 공고에 파이썬, 장고 개발자를 구하는 글이 몇 개 올라오긴하지만 국내 대부분의 웹 개발, 더욱이 백엔드 분야는 자바 개발자가 많다고 생각하는게 편하다. 우선 가장 큰 이유는 전자정부표준프레임워크가 유명한 Java라이브러리들과 스프링을 기반으로 구성되어 있기 때문이다. 사실 이 부분은 개발자들 사이에서도 호불호가 매우 갈리는 부분이니 너무 자세한 얘기는 하지 않겠다. 하지만 그런 논의를 떠나서 현실은 이런 연유로 대부분의 국내 SW 산업에 있어 자바 개발자의 수요가 매우 높다는 것이다.

 

두번째는 스프링 부트의 존재다. 사실 국내가 아닌 해외에서 스프링을 사용한다면 대부분은 스프링 부트를 사용하고 사실 국내에서도 스프링을 사용할 줄 안다고 하는 사람들의 대부분은 스프링 부트를 말하는 것일 정도로 부트는 많이 쓰인다. 스프링 부트란 쉽게 말해서 스프링을 매우 쉽게 사용할 수 있도록 각종 설정 등 구성 요소를 조정한 웹 개발 도구라고 할 수 있다. 실제로 많은 국비 학원들에서 가르치는 것도 이 스프링 부트며 나 역시도 장고를 배우다 부트를 배울 때 더 편리하게 느껴졌었다.

 

그런 이유로 사실 어떤 언어나 프레임워크, 라이브러리든 정해진 표준이 아닌 환경에 맞춰 개발자들의 옵션이 되어야 맞다고 생각하지만 국내에서는 아무래도 자바가 유리하다고 생각한다.

 

 

그래서 결국 무슨 언어를 배우라는거야?

 

 

최근 IT 산업 규모가 커지고 개발자에 대한 오해가 널리 퍼져있는데
'개발자는 취업이 잘된대!', '연봉이 엄청나다던데?'
와 같은 말들이 심심치 않게 나오는 듯 합니다.

 

 

하지만...

 

물론 개발에 관심을 갖고 공부를 하려는 것은 당연히 좋은 일이다. 하지만 경험적으로 보통 저 소리를 하면서 JAVA로 개발에 입문한 사람들은 십중팔구 중도포기하는 사례가 많다(...) 사실 컴퓨터에 관심이 있어 컴공으로 진학한 사람들의 절반 이상이 1학년때 C를 배우다 포기하고(사실 범인은 포인터) 전공을 바꾸거나 전공과 상관없는 일을 하기 마련인데 그보다 다소 쉽다하더라도 배경지식 없이 자바를 공부한다 쳤을때 개발에 소질이 있는게 아니라면 흥미가 떨어질 것이다. 사실 개발과 관련이 1도 없던 사람에게 문법이 간결하고 난이도가 다소 쉽다고 알려진 파이썬을 소개해줘도 시작부터 절반 이상 나가떨어진다. 또한 개발자의 연봉이 최근 높아진건 엄연한 사실이지만 그건 '실력있는 개발자' 한정이다. 개발자 신입은 오히려 연봉을 따졌을 때 평균과 같거나 그 이하이며 대우를 제대로 받을 수 있는 건 경력 3~4년차부터란 걸 알아야한다.

 


 

포스트를 마치며 개발 공부중인 필자가 이런 말을 해도 될지는 모르겠지만 만약 이 포스트를 읽는 당신이 개발을 처음 접하는 사람이라면 취업 전망이나 진로를 위해 이 분야를 선택하기보다는 개발에 흥미가 있거나 소질이 있는지를 먼저 체크해보길 추천한다. 앞에 자바가 아무래도 국내 웹개발에선 유리할 수밖에 없다고 했지만 사실 취업때문에 자바를 공부해야한다는 것은 차후에 생각할 것이고 그것보다 우선적으로 생각해야할 것은 과연 이 분야를 업으로 내가 삼을 수 있을 것이냐이다.

 

아무리 일머리가 뛰어난 사람이더라도 컴퓨터를 다룰 수 없는데 컴퓨터로 작업을 시킬 수 없듯 다른 전공들도 그렇겠지만 프로그래밍이란 분야는 더욱 개인의 취향이나 가진 역량에 많이 의존한다. 흥미가 없는데 전망이 좋다고해서 남들하는 것처럼 시작해서 남들 하는 만큼만 공부하면 재미도 없는 코드나 들여다보며 남들이 받는 연봉보다 못 받으며 지낼 가능성이 높다. 심지어 개발을 배우기 시작할 때 흥미가 있었고 재능이 있었더라도 시간이 흐르면 결국 이 직업도 다른 직업이랑 다를바 없이 누구에게든 '일'이 되기에 힘들텐데 그게 아니라면 더더욱 힘들 것이다.

 

마지막으로 '그래서 결국 무슨 언어를 배우라는거야?'에 대한 내 대답은 '그런 질문을 할 수준이면 우선 흥미가 있는지 먼저 알아보자'이다. 개발 관련 취업을 준비함에 있어 장벽이 되는 알고리즘이나 그런 건 개발 공부가 현재 진행중인 사람에게나 해당하는 것이고 저런 질문을 할 수준이라면 맨 앞에서 말한 html이나 파이썬으로 간단한 어플리케이션(todo list, 계산기 등)을 만들어보거나 기초 강의 10강만 들어봐도 취향에 맞을지 대략적으로 감이 올 것이다. 이런 게 꼭 아니더라도 평소에 자신이 시뮬레이션 게임을 좋아하거나 스타크래프트, 마인크래프트같은 게임의 맵제작을 즐겨하거나 ppt, 블로그 등의 환경을 꾸미는 것을 좋아한다면 당장 파이썬, JS 둘 중에 한 언어를 시작해보고 성향이 맞는지 확인하는 것도 나쁘지 않다고 생각한다.

 

사실 이 글은 입문자의 시선에서 작성한 포스트기에 그것과는 조금 다른 관점 하나를 소개하고자 합니다.
시작부터 취향에 잘 맞고 프로그래밍 언어 학습에 어려움을 겪지 않는 분들이라면 오히려 자바나 파이썬보다
C, C++로 입문하면 직접 메모리를 관리하며 코드를 짜야하는 만큼 언어 자체만이 아닌 컴퓨터 전반에 있어서 많은 지식을 쌓을 수 있고 실제로 이 이유때문에 지금까지 대학에서 전공자들의 입문 언어로 C를 많이 써온 것이라 생각합니다. 만약 C를 차근차근 공부하셔도 어려움이 없으신 분이라면 개발자로의 길이 편하실 거라 생각합니다.
하지만 난이도가 상당하다보니 대학들도 C가 아닌 Python, JAVA를 입문 언어로 선택하는 추세니 이 주제에 대해선 특히 말이 많습니다. 그렇기에 이 포스트만이 아닌 다른 글들도 참고하셔서 꼭 좋은 선택을 하셨으면 좋겠습니다.