Here's my dents in the universe

개발자가 된다는 것, 개념의 깊은 곳까지 들어가기


프로그래밍 분야만큼 그 직종 종사자들에게 빠른 학습을 요구하는 분야는 거의 없을 것이다. 빠르게 변하는 트렌드와 새롭게 등장하는 기술스택을 미리 알고 대비할 수 있는 사람은 드물기 때문에, 기업들은 ‘빠르게 배우고, 성장할 수 있는 사람’을 원한다. 사람들의 학습능력은 대개가 엇비슷하다. 그렇다면 좋은 학습 전략을 가지는 것이 중요하다. 빠르게 배울 수 있으려면 어떤 학습 전략을 가져야할까?

C/C++ 언어를 잘 이해하고 사용하는 사람이 Java를 다루지 못하는 모습은 상상하기 어렵다. C/C++이 Java 언어의 근간이 되었기 때문이다. 마찬가지로 UDP, TCP 헤더에서 port에 할당된 비트가 16 bit임을 아는 사람은 포트의 최대 개수가 65,535개임을 어렵지 않게 유추할 수 있다. 근간의 동작 원리를 알고 있는 사람은 한 단계 추상화된 대상을 보다 쉽게 이해할 수 있다. 이처럼 새로운 기술스택을 좇아 공부하기보다, 지금 하고 있는 분야를 더 깊이 알아보면서 지평을 넓혀가는 것이 효과적인 학습법이라 하겠다.

현재 팀에서 사용하고 있는 기술스택은 Node.js 기반의 프레임워크 Nest.js다. (노드와 이름이 비슷한 것 주의) Java/Spring 진영에서 영감을 받았다는 이 프레임워크는 프로젝트가 OOP의 구조를 따라 모듈화될 수 있도록 하는 장치를 곳곳에 비치해놓았다. 프레임워크가 강제하는 모듈화만 잘 따라도, 어느정도 모듈화된 프로젝트를 만들어낼 수 있다.

나의 학습전략은 다음과 같다. Nest.js 프레임워크부터 시작하자. ‘상위 레이어에서 하위 레이어로 내려가면서 그 안에 숨겨진 것들을  조사한다’는 전략을 취한다.

  1. 먼저 Nest.js를 사용하는 방법에 대해 알아본다. Nest.js의 동작에 대한 심적 표상이 머릿 속에 그려져야한다. 이 프레임워크는 이럴 때 이렇게 동작한다. 이 부분은 이렇게 처리해준다. 이리저리 가지고 노는 느낌이 중요하다.
  2. 한 단계 아래로 내려가보자. Nest.js가 풀고자했던 Node.js의 문제는 무엇이었을가? 왜 Nest.js는 Node.js에 비해 제약이 많은가? 왜 특정한 프로젝트 구조를 강제하는가? 이 구조는 어디에서 영감을 받은 것인가? 프레임워크의 철학에 대해 고민해본다.
  3. Nest.js의 아키텍쳐 구성 전략이 OOP임을 알아냈다. OOP는 어떻게 모듈간 의존도를 낮출까? Dependency injection, Inversion of Control 등의 키워드를 확인하고, SOLID 원칙에 대해 생각해본다.
  4. 아키텍쳐는 그것을 구현해내는 언어에 영향을 받는다. Type/Javascript가 가진 언어적 특성이 OOP에 어떻게 영향을 줄까? ‘객체지향언어’로 평가받는 Java와 Javascript는 어떤 차이가 있고, 그 결과물은 어떻게 달라지는가?

하나의 프레임워크로 시작했지만, 프로그래밍 산업 전반을 꿰뚫는 패러다임인 OOP와 아키텍쳐 전략, 스크립트 언어와 컴파일 언어의 차이에 대해 알 수 있었다. 프레임워크, 언어는 빠르게 변할지라도 그 깊숙한 곳에 흐르는 철학은 쉽게 변하지 않는다. 그 패러다임은 현재까지 채택된 아이디어 중 가장 좋은 것이었기 때문이다.

빠르게 변하는 트렌드에 조급해하지 말고, 그 안에 흐르는 큰 철학을 보라. 그 안에 모든 답이 있다.