image0

개발을 하다보면 다양한 언어, 라이브러리 그리고 프레임워크와 마주하게 됩니다. 웹 개발을 예시로 질문을 해보면, React와 Vue와 같은 프레임워크(라이브러리)를 사용하는데있어 우리가 제대로 이해하고 사용하는 걸까요? 정도의 질문일 겁니다. 이 질문은 상당히 어렵습니다. 왜냐하면 React와 Vue가 제시하는 철학에 대한 이해를 동반해야하기 때문입니다. 이런 질문은 “우리는 라이브러리를 그냥 쓰기만 하면 되는 부분이다” 라고 이야기를 할 수 있겠으나 좀 더 잘 쓰기 위해 이런 질문에 대해서 한번 쯤 생각을 해보는 게 좋습니다.

철학

철학의 위키피디아 설명은 이렇습니다.

철학(哲學, 고대 그리스어: φιλοσοφία, 영어: philosophy)은 세계와 인간의 삶에 대한 근본 원리 즉 인간의 본질, 세계관 등을 탐구하는 학문이다. 또한 존재, 지식, 가치, 이성, 인식 그리고 언어, 논리, 윤리 등의 일반적이며 기본적인 대상의 실체를 연구하는 학문이다. 이 말은 프로타고라스에 의해서 만들어졌다고 한다. 철학적 방법이란 질문, 비판적 토론, 이성적 주장, 그리고 체계적 진술을 포함한다.


설명이 너무나 광범위합니다. 실제로 철학에 대한 설명이나 이야기에 대해서 저도 깊게 공부해보지 않았기 때문에, 철학에 대해 깊게 이야기는 해볼 수 없습니다.

다만, 이 글에서 철학이라고 이야기 하는 부분은 근본, 이해, 방향성 정도로 해석을 하여 사용했습니다. 아래와 같은 비유어로의 쓰임새라고 보시면 됩니다.

  • “이번 임원진은 기업 경영에 철학이 없어.” : 여기서 철학은 ‘신념’ 정도의 의미로 쓰였다.
  • “이러한 주장은 경제학의 기본 철학이 됩니다.” : 여기서 철학은 ‘중심 생각(main idea)’ 또는 ‘대전제’ 정도로 쓰였다.
  • “당신이 그런 말도 할 줄 알고, 의외로 철학적인 면이 있네.” : 여기서 철학은 ‘추상적인 개념에 대해 고민하는’ 정도의 의미로 쓰였다.

개인적으로 저는, 개발자로써 중요한 덕목 중에 하나로 개발함에 있어 왜 라고 나한테 질문이 돌아왔을 때, 이유를 말할 수 있어야 한다 를 한 가지로 꼽고 있습니다.

이 이야기는 왜 라고 말할 수 있어야 한다의 한 단계를 올라간 부분이라고 보시면 됩니다. 이 이야기를 갑자기 꺼내는 이유는 이 부분이 제가 이 글에서 이야기하는 철학과 관련되어 있기 때문입니다.

왜라고 말할 수 있는가

개발자에게 있어 는 중요하다고 생각합니다. 사고의 흐름이 무언가를 개발함에 있어 가 동반하지 않는다면 효율적인 결과를 낼 수 없다고 생각하기 때문입니다.

간단하게 웹 프론트엔드 면접에서 많이 질문되는 몇 가지 질문을 해보겠습니다.

  1. React와 Vue의 차이점이 무엇입니까?
  2. React를 사용하는 이유는 무엇입니까?
  3. JavaScript에서 Prototype은 무엇입니까?

그렇다면 위 질문을 하는 까닭이 무엇일까요? 답변을 하기 전에 어떤 까닭으로 이런 질문을 하는지 고민을 해볼 필요성이 있습니다.

  1. React와 Vue 두 프레임워크를 사용을 해보았는가? 그렇다면 어떤 상황에서 React와 Vue를 사용해야할 지 알고 있는가?
  2. 기존 JavaScript 개발과 React 라이브러리(공식 사이트에서 라이브러리라고 하므로, 여기서도 라이브러리라고 정의하겠습니다.)를 사용하여 개발을 했을 때 어떤점이 이점이고, JavaScript 생태계에 대한 이해가 있는가?
  3. JavaScript에서 객체의 생성이나 내부 동작에 대해서 이해하고 있는가?
  4. 생각하는 흐름을 알기 위해서

물론 위의 질문 뿐만 아니라, 면접을 열심히 준비했는가에 대한 척도로써 쓸 수도 있겠으나 이건 너무 오만하기 때문에 제외하도록 하겠습니다.


개인적으로 생각하기에, 이런 질문이 의미있는가? 를 한번 고민을 해볼 필요가 있을 것 같습니다. 불과 얼마 전까지 면접에서 저는 이런 질문을 하곤 했었습니다. 당시의 의도는 위에 작성한 이유를 알기 위해서 였습니다. 그런데, 지금와서 생각해보면 이러한 질문은 의미가 없어 보입니다

왜 의미가 없냐면 아래와 같은 이유입니다.

  1. 위의 질문은 실제로 개발 실력과 대다수가 거의 무관합니다.
  2. 면접 하루 전에만 외워도 답변할 수 있는 수준의 질문입니다.

웹 상에서 몇 분만 서치해보면 나오는 보다, 본인이 정말 고민해보고 생각할 수 있을만한 질문을 하는게 더 좋은 질문임은 자명합니다. 그러면 아까까지 이야기를 게속 했었던 철학을 바탕으로 질문을 조금 돌려보도록 하겠습니다.

  1. React와 Vue에서 추구하는 개발론이 뭐가 다르기에 저마다 React와 Vue를 사용하나요?
  2. JavaScript는 왜 Prototype을 사용하나요?

어휘가 조금만 달라졌을 뿐인데, 풍성하게 답변할 수 있는 질문으로 변경이 되었습니다. 이 질문은 위의 질문처럼 의미가 없지 않습니다.

  1. React, Vue가 역설하는 철학에 대해서 이해를 한다면 그 철학을 이해한 코딩을 하도록 노력하므로 관련된 지식 습득을 했을 가능성이 높습니다.
  2. Prototype의 사용 목적에 대해서는 일반적으로 “상속을 이용한 …” 으로 대답을 할 텐데, 왜 사용하냐고 물어보면 상속의 장점을 이야기 해야하므로 기본기에 대해서 파고들 수 있습니다. 이러한 기본기는 개발을 하는데 중요합니다.
  3. 만약 해당 질문에 대해 고민해 본 적이 없다면, 생각나는데로 이야기를 해달라고 요청하고, 생각의 흐름을 이끌어 낼 수 있습니다.

“왜”를 말 할줄 아는 것은 중요합니다. 하지만 그 “왜”가 다른 사람들이 모두 이해한 “왜” 수준이면 조금 아쉽습니다.

왜라고 말할 수 있되, 조금 더 깊이

모두가 말할 수 있는 정도로 이야기를 하는 것도 나쁘지는 않습니다. 그렇다면 왜 더 깊이 알아야 할까요? 예시로, 자바스크립트에서 프로토타입에 대해서 이야기를 조금 더 해보도록 하겠습니다.

자바스크립트가 프로토타입 기반 언어라고 불린다고, 객체지향이 아닌게 아닙니다. 객체지향의 한 갈래가 프로토타입 기반 인 것이죠. 객체의 단위는 class일 수도 있고 function일 수도 있습니다. 객체의 단위는 저마다 다르게 정의할 수 있기 때문이고, 구현하는 방법에 따라 다르기 때문입니다.

따라서, 프로토타입 기반- 는 소프트웨어 디자인 패턴 중 하나인 프로토타입 디자인 패턴과 연관이 있습니다. 그렇다면, 이 프로토타입 디자인 패턴이 왜 쓰이는 지 이해하면 JavaScript에서 채택한 이유도 알 수 있겠군요.

프로토타입 디자인 패턴은 여러 장점이 있지만, 그 중에서도 객체의 생성 비용을 효과적으로 줄일 수 있습니다 그렇다면 프로토타입 기반에서 추구하는 것 중 하나는 객체의 생성 비용을 효과적으로 줄일 수 있기 때문 이라고 볼 수 있겠군요. 그렇다면 JavaScript가 적용되던 환경은 객체의 생성 비용을 줄여야하는 환경이었음을 파악할 수 있습니다.

JavaScript가 도입되던 옛 환경은 메모리가 적었기 때문에 자바스크립트에서 추구하는 프로토타입 기반의 프로그래밍은 타당할 수 있습니다. 하지만 지금으로 와서는 그다지 와닿지 않는 것은 사실입니다. 왜냐하면 웹이 활동하는 영역이 너무나 커졌고, 그리고 디바이스의 발전으로 크롬에서는 툭하면 6기가를 먹질않나, 환경이 너무 좋아졌거든요.

그래서 함수 기반으로 개발하는 프로토타입 기반 시스템보다 클래스 기반 객체 모델이 더 많은 호응을 현 시점에도 얻고 있고, 자료형 관점에서 JavaScript는 너무나 많은 욕을 먹고있죠. 그렇기 때문에 ECMA Script 표준 4버전에서는 자바스크립트를 클래스 기반의 언어로 만드려 하고 있고, 그마저도 시원찮아서 TypeScript와 같은 언어가 나와 어셈블리가 JavaScript가 되어버리는 형태가 되어 버렸습니다. (이러한 형태의 이야기는 추후 글로 따로 만들어 이야기를 해보도록 하겠습니다.)


자바스크립트 프로토타입으로 이야기를 해봤습니다. 물론 여기에 적은 내용보다 훨씬 더 많은 내용을 이야기 할 수 있겠으나, 이 글에서 이야기하고자 하는 내용이 아니므로 패스한 것들이 있습니다.

이 처럼 자바스크립트의 철학인 프로토타입에 대해 접근하고, 프로토타입에서 이야기하는 철학에 대해 접근하니 어떤 부분이 장점이고 어떤 부분이 단점인 지 알게 되었습니다. 그러면서 현재 자바스크립트가 나아가는 방향성도 알게 되었네요.

철학을 이해한다는 것은 처음에 언급한 근본, 이해, 방향성 을 보는 것입니다. 그렇기 때문에 앞으로 내가 어떤 방향으로 뭘 준비해야할 지 알게 됩니다.

정리

무작정 무언가를 공부하기 보다, 그 공부하는 대상의 철학을 고민해보면 의외로 쉽게 답을 낼 수 있습니다. 이 글을 황급히 작성하는 이유도 저희 팀 웹 프론트엔드 개발자를 뽑을때 어떤걸 봐야할까 고민을 하는 중 의미있는 질문을 하고 있을까? 라는 질문을 제게 되뇌이게 되었는데요 이 글은, 그런 고민을 정리한 글입니다.

면접은 사람을 평가하는 자리가 아니고 그 사람을 더 알기 위해서 있는 자리라고 생각합니다. 이러한 고민이 더 좋은 팀원을 얻는 과정이길 기대합니다.