개발자가 된다는 것, 개념의 깊은 곳까지 들어가기
프로그래밍 분야만큼 그 직종 종사자들에게 빠른 학습을 요구하는 분야는 거의 없을 것이다. 빠르게 변하는 트렌드와 새롭게 등장하는 기술스택을 미리 알고 대비할 수 있는 사람은 드물기 때문에, 기업들은 ‘빠르게 배우고, 성장할 수 있는 사람’을 원한다. 사람들의 학습능력은 대개가 엇비슷하다. 그렇다면 좋은 학습 전략을 가지는 것이 중요하다. 빠르게 배울 수 있으려면 어떤 학습 전략을 가져야할까?
C/C++ 언어를 잘 이해하고 사용하는 사람이 Java를 다루지 못하는 모습은 상상하기 어렵다. C/C++이 Java 언어의 근간이 되었기 때문이다. 마찬가지로 UDP, TCP 헤더에서 port에 할당된 비트가 16 bit임을 아는 사람은 포트의 최대 개수가 65,535개임을 어렵지 않게 유추할 수 있다. 근간의 동작 원리를 알고 있는 사람은 한 단계 추상화된 대상을 보다 쉽게 이해할 수 있다. 이처럼 새로운 기술스택을 좇아 공부하기보다, 지금 하고 있는 분야를 더 깊이 알아보면서 지평을 넓혀가는 것이 효과적인 학습법이라 하겠다.
현재 팀에서 사용하고 있는 기술스택은 Node.js 기반의 프레임워크 Nest.js다. (노드와 이름이 비슷한 것 주의) Java/Spring 진영에서 영감을 받았다는 이 프레임워크는 프로젝트가 OOP의 구조를 따라 모듈화될 수 있도록 하는 장치를 곳곳에 비치해놓았다. 프레임워크가 강제하는 모듈화만 잘 따라도, 어느정도 모듈화된 프로젝트를 만들어낼 수 있다.
나의 학습전략은 다음과 같다. Nest.js 프레임워크부터 시작하자. ‘상위 레이어에서 하위 레이어로 내려가면서 그 안에 숨겨진 것들을 조사한다’는 전략을 취한다.
- 먼저 Nest.js를 사용하는 방법에 대해 알아본다. Nest.js의 동작에 대한 심적 표상이 머릿 속에 그려져야한다. 이 프레임워크는 이럴 때 이렇게 동작한다. 이 부분은 이렇게 처리해준다. 이리저리 가지고 노는 느낌이 중요하다.
- 한 단계 아래로 내려가보자. Nest.js가 풀고자했던 Node.js의 문제는 무엇이었을가? 왜 Nest.js는 Node.js에 비해 제약이 많은가? 왜 특정한 프로젝트 구조를 강제하는가? 이 구조는 어디에서 영감을 받은 것인가? 프레임워크의 철학에 대해 고민해본다.
- Nest.js의 아키텍쳐 구성 전략이 OOP임을 알아냈다. OOP는 어떻게 모듈간 의존도를 낮출까?
Dependency injection
,Inversion of Control
등의 키워드를 확인하고,SOLID
원칙에 대해 생각해본다. - 아키텍쳐는 그것을 구현해내는 언어에 영향을 받는다. Type/Javascript가 가진 언어적 특성이 OOP에 어떻게 영향을 줄까? ‘객체지향언어’로 평가받는 Java와 Javascript는 어떤 차이가 있고, 그 결과물은 어떻게 달라지는가?
하나의 프레임워크로 시작했지만, 프로그래밍 산업 전반을 꿰뚫는 패러다임인 OOP와 아키텍쳐 전략, 스크립트 언어와 컴파일 언어의 차이에 대해 알 수 있었다. 프레임워크, 언어는 빠르게 변할지라도 그 깊숙한 곳에 흐르는 철학은 쉽게 변하지 않는다. 그 패러다임은 현재까지 채택된 아이디어 중 가장 좋은 것이었기 때문이다.
빠르게 변하는 트렌드에 조급해하지 말고, 그 안에 흐르는 큰 철학을 보라. 그 안에 모든 답이 있다.