회사는 나에게 선택권을 주지 않는다
“요즘은 파이썬이 대세라던데, 우리도 파이썬 쓸까요?” 신입 개발자가 회사에서 이런 말을 할 수 있을까? 불가능하다.
취업 전에는 내가 사용할 언어를 내가 고를 수 있었다. 코딩 테스트는 파이썬이 유리하니까 파이썬을 쓰고, 웹 개발은 자바가 취업이 잘 된다니까 자바를 팠다. 하지만 막상 취업 시장을 뚫고 들어간 소규모 팀의 현실은 달랐다.
회사의 기술 스택은 이미 정해져 있었다. 레거시 코드는 자바(Spring Boot)로 돌아가고 있었고, 화면은 자바스크립트(Vue.js)로 그려지고 있었으며, 갑자기 안드로이드 앱 유지보수 업무가 떨어져 XML과 또 다른 자바를 만져야 했다.
나는 선택한 적이 없다. 그저 환경(Framework)이 나에게 그 언어를 강요했을 뿐이다. 처음엔 이 낯선 언어와 문법들이 쏟아지는 상황이 두려웠다. 하지만 닥치는 대로 코드를 읽고 쓰다 보니 한 가지 중요한 사실을 깨달았다.
“어라? 이거 예전에 공부했던 자바의 그 개념이랑 똑같네?”

문법은 달라도 본질은 같다 (Concept Transfer)
학창 시절, 나는 C언어를 가볍게 거쳐 자바(Java)를 꽤 깊게 팠었다. 그러다 취업 준비 시즌이 되었을 때 커뮤니티에서 “코딩 테스트는 파이썬이 깡패다”라는 말을 듣고 파이썬 책을 처음 펴봤다.
처음엔 문법이 생소했지만, 놀랍게도 며칠 만에 적응할 수 있었다. 파이썬이 쉬워서가 아니었다. 이미 자바를 통해 ‘프로그래밍의 본질’을 알고 있었기 때문이다.
- 파이썬의 List: “어? 이거 그냥 자바의
ArrayList에다가Stack이랑Queue기능 섞어놓은 거네?” - 파이썬의 Dictionary: “이건 자바의
HashMap이랑 똑같잖아. Key-Value 쌍으로 저장하는 거네.”
내가 한 것은 새로운 언어를 ‘0’부터 배운 게 아니었다. 내 머릿속에 있는 ‘자바라는 지도(Map)’에 ‘파이썬이라는 지명’을 덧씌우는 작업이었다. 이것을 교육학 용어로 ‘학습의 전이(Transfer of Learning)’라고 한다. 언어 하나를 깊게 파두면, 그 깊이만큼 다른 언어를 이해하는 속도가 빨라진다.
UI도 결국은 트리(Tree) 구조다
이 경험은 전혀 다른 영역에서도 빛을 발했다. 학교 다닐 때 용돈 벌이로 학교 홈페이지를 리뉴얼하며 HTML과 CSS를 만진 적이 있었다. 그때는 그게 개발 경력에 도움이 될 거라곤 생각도 못 했다.
그런데 입사 후, 뜬금없이 안드로이드 앱의 UI를 수정해야 할 일이 생겼다. 안드로이드는 UI를 구성하기 위해 XML이라는 마크업 언어를 사용한다. 모바일 앱 개발은 처음이라 잔뜩 긴장했지만, 코드를 까보니 웃음이 나왔다.
<!-- Android XML -->
<LinearLayout orientation="vertical">
<TextView text="Hello World" />
<Button text="Click Me" />
</LinearLayout>
<!-- HTML -->
<div style="display: flex; flex-direction: column;">
<span>Hello World</span>
<button>Click Me</button>
</div>
태그 이름만 다를 뿐, “부모 요소 안에 자식 요소를 넣고, 속성(Attribute)으로 모양을 잡는다”는 구조는 HTML과 완전히 똑같았다. DOM 트리 구조와 박스 모델(Box Model)을 이해하고 있으니, 안드로이드 레이아웃도 금방 내 것으로 만들 수 있었다.

프레임워크, 학교에선 가르쳐주지 않았다
사실 언어보다 나를 더 당황하게 만든 건 ‘프레임워크(Framework)’라는 존재였다.
학교에서는 C언어 문법, 자료구조, 알고리즘, 언어론 같은 ‘기초 체력’만 가르쳤다. 물론 ‘리액트(React)’나 ‘스프링(Spring)’이라는 이름을 못 들어본 건 아니다. 커뮤니티에서 “요즘은 리액트가 짱이다”라는 말을 듣고, 무작정 서점에 가서 리액트 책을 사보기도 했다.
하지만 책을 반도 못 읽고 덮었다. 도대체 왜 이렇게 코드를 짜야 하는지 이해할 수 없었기 때문이다. “아니, 그냥 함수 만들어서 호출하면 되지, 왜 Component를 상속받고 render 함수 안에 넣어야 해? 제어권이 왜 나한테 없어?”
그때는 몰랐다. ‘라이브러리(Library)’와 ‘프레임워크(Framework)’의 결정적 차이를.
- 학교에서 배운 것 (Library 식): 내가 코드를 짜고, 필요할 때 도구(함수)를 가져다 쓴다. (내 마음대로 집 짓기)
- 회사에서 쓰는 것 (Framework 식): 도구(프레임워크)가 나를 부른다. 나는 정해진 칸에 코드를 채워 넣기만 해야 한다. (모델하우스 조립하기)
학교에서 배운 것이 자유롭게 망치질을 하는 법이었다면, 실무의 프레임워크는 “망치질은 우리가 할 테니, 너는 이 구멍에 못이나 끼워 넣어”라고 강요하는 거대한 공장 같았다. 이 ‘제어의 역전(Inversion of Control)’ 개념을 모르니, 책을 아무리 봐도 외계어처럼 느껴졌던 것이다.
언어를 알면 프레임워크가 보인다
하지만 실무에 던져져서 억지로라도 프레임워크를 쓰다 보니 역설적인 진실을 마주하게 되었다. 스프링 부트가 아무리 복잡한 마법을 부려도, 결국 그 안은 ‘자바 코드’로 이루어져 있다는 사실이다.
@Autowired 같은 어노테이션이 마법처럼 의존성을 주입해주지만, 뜯어보면 결국 자바의 리플렉션(Reflection) 기술을 응용한 것이다. 뷰(Vue.js)의 반응형 시스템도 결국은 자바스크립트의 객체(Object)와 프로퍼티 감시 기능을 활용한 것이다.
‘언어(기초)가 튼튼하면 프레임워크(응용)의 동작 원리가 보인다.’ 나는 입사 초기 스프링의 MVC 구조가 뭔지도 모르고 뛰어들었지만, 자바에 대한 이해가 있었기에 “아, 프레임워크가 내 코드를 대신 실행해주는구나. 나는 이 규칙대로 객체만 던져주면 되겠네”라며 빠르게 적응할 수 있었다.
만약 내가 리액트 책을 덮었던 시절에 ‘자바스크립트 기초’가 더 탄탄했다면, 리액트가 왜 그렇게 생겨먹었는지 이해할 수 있었을 것이다.
[Tip] 결정 장애를 겪는 학생들을 위한 처방전
“어떤 언어를 공부해야 할까요?” 커뮤니티에 가장 많이 올라오는 질문 중 하나다. 언어든 프레임워크든 꼭 한 가지만 평생 파야 하는 것은 아니다. 하지만 역설적이게도 여러 개를 잘하려면, 처음엔 ‘하나를 확실하게 파야 한다.’
만약 지금 공부 방향을 잡지 못해 고민하는 학생이라면, 책을 덮고 당장 ‘채용 사이트’를 켜라.
- 본인이 가고 싶은 회사, 혹은 마음에 드는 회사의 채용 공고(JD)를 찾아본다.
- 그곳에 적힌 ‘기술 스택(언어 및 프레임워크)’ 하나를 정한다.
- 그 스택 하나를 정말 깊이 있게 공부한다.
“이 회사는 스프링을 쓰고, 저 회사는 노드를 쓰는데 어떡하죠?” 상관없다. 무엇이든 하나를 제대로 익혀두면 된다. 앞서 말했듯이 프로그래밍의 본질은 통하기 때문이다. 스프링을 마스터한 사람은 입사 후 회사가 노드(Node.js)를 쓰라고 해도 금방 적응한다. 하지만 이것저것 조금씩 간만 본 사람은 어떤 프레임워크를 던져줘도 밑바닥부터 다시 헤매게 된다.
고민할 시간에 ‘시장(채용 공고)이 원하는 기술’ 하나를 골라 깊게 파라. 그게 가장 빠른 길이다.
[Code Verification] 언어는 달라도 메모리는 하나다
언어가 달라도 결국 컴퓨터 내부에서 벌어지는 일은 같다는 것을 코드로 확인해보자. 자바의 ArrayList와 파이썬의 list는 문법은 다르지만, 메모리를 늘리는 방식(Dynamic Array)은 동일하다.
Java:
// Java: 꽉 차면 크기를 1.5배 늘리고 이사간다.
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
// 내부적으로 배열 생성 -> 데이터 추가 -> 공간 부족 시 더 큰 배열 생성 후 복사
Python:
# Python: 꽉 차면 크기를 약 1.125배 + @ 늘리고 이사간다.
my_list = []
my_list.append(1)
# 내부 동작 원리는 자바와 거의 동일 (C언어의 배열 재할당 로직 사용)
우리가 어떤 언어를 쓰든, 디지털 물류 센터(컴퓨터)의 작업 방식은 변하지 않는다. 작업자(CPU)와 창고(메모리)를 쓰는 규칙은 만국 공통이기 때문이다.
마치며: 두려움 대신 호기심을
개발자로 살아가다 보면 원치 않는 언어와 프레임워크를 써야 할 순간이 반드시 온다. 그때마다 “나는 자바 개발자니까 파이썬은 싫어”라고 도망칠 것인가?
언어는 종교가 아니라 ‘도구’다. 그리고 프레임워크는 그 도구를 사용하는 ‘작업장’이다. 하나의 언어(모국어)를 깊이 있게 파본 경험이 있는 사람은, 새로운 도구를 쥐여줘도 금방 사용법을 익힌다.
그러니 지금 당장 회사에서 낯선 기술 스택을 강요받더라도 겁먹지 말자. 껍데기만 다를 뿐, 그 안에 들어있는 알맹이는 당신이 이미 알고 있는 그것과 같을 테니까.
이제 언어에 대한 두려움을 없앴으니, 다음 글부터는 코드가 살아가는 진짜 세상, ‘메모리(Memory)’의 깊은 곳으로 들어가 보자. 내가 짠 코드가 램(RAM) 어디에 박혀서 어떻게 굴러가는지 알게 되면, 언어의 장벽은 더 낮아질 것이다.