[webpack v4] 2. Asset Management

들어가며

저번 글에서는 간단한 js 파일 하나를 번들링해서 index.html 파일에서 사용하도록 만들었다. 그런데 우리가 웹 애플리케이션을 만들때 JavaScript 파일만 쓰지는 않지 않은가? 스타일링을 위해 CSS 파일을 만들고, 사진을 보여주기 위해 jpg, png 등의 이미지 파일을 추가하고, 때로는 글씨체를 위해 font 파일이나 json 파일을 사용하기도 한다. 이때 사용되는 모든 종류의 파일들은 CDN과 같은 외부링크로 불러들이지 않는 이상 우리 프로젝트 디렉토리 내에 존재한다. 물론 webpack은 js 이외의 파일들도 번들링 해준다. 이 파일들을 각각 하나의 JavaScript 모듈로 만들어 js 파일과 마찬가지로 dependency graph로 관리한다. 이번 글에서는 이런 asset을 webpack으로 어떻게 관리하는지 알아보자.

CSS를 사용하는 웹을 만들어보자.

이 포스트에 관련된 코드는

https://github.com/brightparagon/webpack-conquer/tree/asset-management

에서 확인해볼 수 있습니다.

 

carbon
index.html
carbon (1)
app.js
carbon (2)
style.css

 

이전 예시와 크게 다르지 않다. app.js는 h1이 들어있는 div를 만들고 body에 붙인다. 몇가지 차이점은 파일 상단에서 style.css 파일을 불러오고 h1에 className을 ‘hello’로 정하고 있다. 그런데 app.js를 보면 css 파일을 import 하고 있다. index.html에는 css 파일을 불러오는 링크는 없는데 어떻게 h1에 css를 적용하는 걸까. 아래의 webpack config를 보자.

carbon
webpack.config.js

entry와 output은 전 예제와 변함없다. module 프로퍼티가 새로 생겼는데 이곳에서 우리가 원하는 파일들을 webpack이 불러올 수 있도록 각 파일에 맞는 loader를 지정한다. 지금 우리는 css 파일을 불러들일 것이므로 .css 확장자를 가진 파일들을 style-loader와 css-loader로 불러들이도록 설정하고 있다. 이때 webpack은 아래에서 위로 loader를 적용한다. css-loader가 먼저 css 파일을 읽어들이고 그 결과물을 style-loader가 index.html의 head 태그에 삽입한다. 그래서 만약 scss를 사용한다면 먼저 scss 파일을 css 파일로 변환해야 하기 때문에 sass-loader를 맨 아래에서 필요한 옵션과 함께 지정해주면 된다. 이제 설정 파일 준비가 끝났으니 npm run  buildyarn build 명령어를 통해 빌드하고 브라우저에서 index.html을 열어보자.

스크린샷 2018-04-08 오후 1.17.43

스크린샷 2018-04-08 오후 1.19.02

css가 적용이 된 h1이 보인다. 개발자 도구를 열어 Elements 탭을 보니 head 태그에 style 태그가 삽입되어 있는 것을 볼 수 있다. 만약 app.js에서 다른 js 파일을 불러와 사용하고 그 파일에서도 css를 사용하면 어떻게 될까? 그리고 이미지 파일은 어떻게 불러올까? json 파일이나 font는?

위에서 만든 js, css 파일들을 수정해보자.

carbon (3)
app.js
carbon (6)
style.css
carbon (4)
bar.js
carbon (5)
another.css
carbon (7)
webpack.config.js

app.js에서 새로 만든 bar.js 파일과 the1975 이미지, data.json 파일을 불러오고 있다. style.css 에서는 이미지에 적용할 center class를 추가했고 새로운 폰트 파일을 불러오고 있다. 이미지, json, font 파일은 컴퓨터에 저장되어 있는 것을 활용했다. bar.js는 app.js와 비슷하게 another라는 css 파일을 사용하고 h3 태그를 만들어 반환한다.

webpack.config.js 파일의 module에 두 부분이 추가됐다. file-loader를 사용해 이미지 파일과 각종 폰트 파일을 불러올 수 있도록 만들었다. 이외에도 csv, tsv 파일 등을 csv-loader로 불러올 수 있다. 다시 빌드해서 브라우저로 열어보자.

스크린샷 2018-04-08 오후 1.40.34스크린샷 2018-04-08 오후 1.40.43

 

the1975(아주 좋아하는 밴드..) 이미지와 bar.js의 결과가 잘 나오고 있다. 그런데 Elements 탭을 보니 head tag에 style tag가 두개가 있다. style-loader는 css 파일을 부르는 js 파일을 만날때마다 style tag를 삽입하는 것을 알 수 있다. 만약 프로젝트가 점점 커지고 css 파일도 많아지면 html 파일도 불필요하게 커지게 될 것이다. 그래서 style-loader는 production으로는 그렇게 좋은 선택은 아니다. 이때 css 파일을 개별적으로 추출하고 caching까지 할 수 있는 extract-text-webpack-plugin 이라는 좋은 플러그인이 있다. 이 웹팩 시리즈에서 이후에 production에서 이 플러그인을 사용하는 것을 다룰 것이다.

CSS Module

지금까지 style.css, another.css 이라는 두 파일을 만들었다. 그런데 만약 style.css에 있던 hello 라는 클래스의 이름이 another로 바뀌게 되면 어떻게 될까? another.css에도 another라는 클래스가 있는데 중복되지 않을까?

carbon (8)
app.js
carbon (9)
style.css

위와 같이 app.js와 style.css 파일을 변경해보고 다시 빌드해서 결과를 확인해보자.

스크린샷 2018-04-08 오후 2.21.50스크린샷 2018-04-08 오후 2.22.04

두개의 another 클래스는 다른 내용을 담고 있지만 style-loader에 의해 두개의 style 태그가 삽입되고 아래에 있는 style 태그의 another 클래스가 위의 클래스를 덮어씌우게 되어(중복된 클래스의 경우 나중에 오는 클래스가 우선순위를 갖는다) h1와 h3 둘 모두 배경색이 coral이 되었다. 프로젝트가 점점 커지면 스타일링도 여러 개발자가 하게 될 수 있고 점점 클래스 네이밍이 중요해진다. 일정한 규칙에 따라 이름을 짓기도 하고 개발자 나름의 묘책을 세워 만들 수도 있다. 그럼에도 파일이 더 복잡해질 수록 트래킹이 어려워지고 결국 중복되는 지점이 찾아오는데 이때 CSS Module을 사용하면 이 문제를 해결할 수 있다. CSS Module은 css 파일 하나하나를 개별적인 모듈로 간주하고 css-loader가 option에 주어지는 규칙에 따라 css 파일의 이름과 DOM에 들어갈 css 클래스명을 결정함을 의미한다. webpack config 파일과 app.js, bar.js 파일을 아래와 같이 수정해보자.

carbon (2)
webpack.config.js
carbon
app.js
carbon (1)
bar.js

webpack.config.js 파일에서 css-loader 설정 부분을 변경했다. modules option을 true로 하고 localIdentName option에 일정한 규칙을 주었다. 이 부분은 css-loader document를 참고하면 된다. localIdentName를 살펴보자. path는 css 파일의 디렉토리 경로, name은 css 파일의 이름, local은 css selector 이름이고 마지막 hash는 매 build 마다 파일에 변경 사항이 있을때 자동으로 변경되는 부분이다. 이 옵션으로 우리는 개발 중일때 파일별로 중복되는 css 클래스명이 있어도 우리 의도대로 스타일링을 할 수 있다. 그리고 app.js와 bar.js에서 css를 불러오고 클래스명을 적용하는 부분이 바뀐 점을 주목하자.

예를 들어, book 화면에 적용할 list class를 만들고, user 화면에 적용할 list class를 만들면 list 라는 이름이 중복되어도 개발 중일때 list-book, list-user 와 같이 불편한 작업을 하지 않아도 되어 직관적으로 스타일링을 할 수 있다. 이외에도 sass-loader(sass-loader에도 동일한 modules option을 사용할 수 있다)를 사용하거나 styled-component를 사용할 수도 있다.

이제 빌드해보고 브라우저에서 결과를 확인해보자.

스크린샷 2018-04-08 오후 3.00.30.png

localIdentName의 규칙대로 css class 이름이 만들어진 것을 확인할 수 있다.

이 포스트에 관련된 코드는

https://github.com/brightparagon/webpack-conquer/tree/asset-management

에서 확인해볼 수 있습니다.

 

Advertisements

나만의 길을 걷는 것

두려움

개발자로 일을 한지 이제 11개월이 되었다. 긴장감이 끊이질 않았다. 하루를 마감할때 쯤이면 다음 날과 그 주에 해야할 일을 생각해보는 버릇이 생겼다. 뭘 해야할지 정리가 안된 상태에서 일을 시작하는 것이 너무 무서웠기 때문이다. 못하면 어쩌지라는 걱정과 함께. 물론 그렇게 했음에도 예상대로 진행된 적은 단 한번도 없었다.

시간이 지나 두려움은 약간의 익숙함으로 변했고 그 안에서 미래를 고민하기 시작했다. 현재 걷고 있는 길에 대해서도 다시 고민하게 되었다. 아마 많은 직장인들도 이런 고민을 하지 않을까?

가령, 이렇게 해서는 발전이 전혀 안될 것 같은데 어떡한담..?, 지금 이렇게 하고 있는 게 맞는 걸까?, 이대로 가면 내가 원하는 방향으로 가는 걸까?, 남들은 이만큼 하고있는 것 같은데 나는 그만큼 하고 있는걸까?, 나는 왜 학습 속도가 늘지 않는걸까?, 공부는 많이 한 것 같은데 왜 삶에 변화가 없는 것 같지?, 지금 몸담고 있는 분야 말고 또 어떤 분야를 터득해야 할까?.. 등

모두 나 스스로 해본 질문들이다. 직장인으로 살았던 3년 가까운 시간동안 끊임없이 나를 괴롭힌 질문들이다. 분명 몇개월 전에 답했던 질문 같은데 어느새 또 질문을 되뇌이고 있는 나를 종종 발견한다. 질문의 수만큼 두려움을 느꼈다. 왜 또 떠오르는 질문은 그렇게 많은지. 그간 수많은 질문을 스스로에게 던지고 답하면서, 답하기 위해 책과 신문을 읽고 글을 쓰면서 다행히 두려움과 불안감을 많은 부분 해소했다. 어느 정도 해답을 찾은 것 같아 그간의 고군분투를 정리해보고자 한다.

좋은 질문을 해야 좋은 답을 얻는다

누구도 가지 않은 길, 사람들이 잘 가지 않는 길 혹은 대부분의 사람들이 가는 길 중 어느 것을 선택해야 할까? 이 문장을 잘 뜯어보면 내 길을 정하는 데 있어 기준은 내 안이 아닌 남들이 어떤 길을 가느냐에 있다. 다시 말해, 이 문장에 답을 하게되면 필연적으로 그 대답은 타율성을 띄게 된다. 내 길을 선택함에 있어 다른 사람들의 행동을 살피고 있기 때문이다. 그래서 결론적으로는 내 길을 선택하는데 있어 이 질문은 큰 도움을 주지 못한다. 그런 의미에서 좋은 질문은 아니다.

본질적으로 중요한 것은 내가 누군지 이해하고, 내 마음을 따라 정말 하고자 하는, 온전히 열정과 에너지와 시간을 쏟을 수 있는, 큰 보상이 없어도 그걸 하는 것만으로도 좋은, 동시에 생계는 해결해줄 수 있는 길을 찾는 것 그리고 그 길을 묵묵히 걷는 것이지 않을까. 어떤 길을 선택하고 그 길을 걷는 이유를 내 안에서 찾는 것이기 때문이다. 그래서 질문을 바꿔야 한다.

  • 나는 어떤 사람일까?
  • 평생 어떤 일을 하면 아무 후회가 없을까?
  • 나는 무엇에 열정이 있을까?
  • 지금 갖고 있는 관점으로 별로라고 판단했던 많은 것들 중에 다른 관점으로 보면 완전히 다른 판단을 내릴 만한 것들이 있을텐데 그것들은 무엇일까?
  • 나는 나의 취향과 편향에 따라 지금껏 내린 가치판단들을 얼마나 신뢰할 수 있을까?

나 자신에 대해 알게 해주는 질문을 많이 던지면 던질 수록 미궁에 빠질 것 같지만 놀랍게도 생각이 훨씬 더 분명해진다. 질문에 하나씩 답하다보면 어느 질문에 답하기 위해서는 다른 질문에 대한 답을 선행해야만 하는 경우가 있다. 그런 것들을 그림으로 그리는 방법 등을 통해 질문들을 연결하고, 얻은 대답들을 모아놓고 구조를 살펴보면 더 전체적인 ‘나’가 보인다.

나만의 보폭

어느 길을 걸을지 정한 뒤 조금 걷다보면 분명히 나아가는 속도에 대해 생각을 하기 시작할 것이다. 그럼 또 아래와 같은 질문 다발을 맞이하게 된다.

  • 모르는게 너무 많은 것 같은데 왜 이 모양이지..?
  • 나는 학습이 좀 느린 것은 아닐까?
  • 이 속도로 가는 건 남들에 비해 좀 느린 건 아닌가?
  • 기반 지식을 넓히면 속도를 개선할 수 있는가? 관련된 책이 있을까?

어떤 질문은 자신을 외부와 비교해보게 하고 어떤 질문은 나에 대해 더 깊이 알아보도록 주문한다. 이 경우에도 앞선 문단과 맥락을 같이 한다. 외부와의 비교를 할때는 참고 수준에서 답을 내리고 나에 대해 이해하도록 만드는 질문을 많이 해야한다. 특히 학습의 속도에 대해 고민할때 남과의 비교는 자신이 최고 반열에 들지 않는 이상 나는 ‘어쨌든 느린’ 사람이 되어버리기 때문에 백해무익하다. 따라서 ‘저 정도 수준의 사람은 저 속도로 나아가니 나는 이 정도면 적당하겠구나’ 식의 참고까지가 좋을 것이다.

조승연의 ‘공부 기술’, Henry Roediger의 ‘어떻게 공부할 것인가’, 이준영의 ‘구글은 SKY를 모른다’, 학습과 교수법에 관한 희대의 역작인 Ken Bain의 ‘What best college students do’, Angela Duckworth의 ‘GRIT’, Anders Ericsson의 ‘1만 시간의 재발견’ 등 여태 읽은 학습에 관련된 책들을 종합해보면 인간의 학습에는 심적 구조물이 활용된다. 실제로 Anders Ericsson은 그의 저서에서 이를 두고 심적 표상이라는 단어로 표현했는데 가령 이런 것이다.

img_0037
이런 심적 구조물을 3차원으로 머릿속에서 그리거나 이미지와 연결지을 수도 있다. 심지어 이 그룹들에 색을 입혀 기억을 도울 수도 있다. 그림은 아이패드로 그렸다.

단어를 기억하는 방법은 여러가지가 있을 수 있다. 단순히 단어별 의미를 기억하는 방법, 단어가 가진 패턴을 분리해 새로운 단어를 패턴 그룹에 묶어서 기억하는 방법, 주제 및 상황 별로 묶어서 기억하는 방법 등 다양하다. 머릿속에 그림을 그려 구조를 만들고 그 안에서 단어들을 이리저리 옮기는 식의 방법이라면 심적 구조물을 활용하고 있는 것이다. 마음에 그림을 그리니까 말이다. 이때 중요한 것은 ‘외국어 잘하기’라는 목표아래 세부 목표로 단어를 많이 익히기로 했다면 더 좋은 심적 구조물을 갖고 있을 수록 더 빠르고 더 정확히 목표를 이룰 수 있다.

그런데 문제는 사람마다 갖고 있는 심적 구조물이 서로 다르고, 가진 갯수도 다르며 각각의 질 또한 다르다는 것이다. 영어 뿐만이 아니라 모든 종류의 학습에서 심적 구조물이 활용된다. 수학, 스포츠, 의학, 과학, 예술, 컴퓨터 공학 등 인간이 하는 모든 종류에 적용된다. 위상 수학에서 새로운 모델을 생각할때, 방사선과 의사들이 엑스선 사진 판독을 할때, 음악가가 선율을 머릿속에서 그릴때, 심지어 연주할때, 엔지니어가 딥러닝 모델 구조를 생각할때 등을 예로 들 수 있다.

학습의 속도가 걱정이 된다면 문제를 바라볼때 활용하는 내가 가진 심적 구조물을 생각해야 한다. 속도에 영향을 미치는 거의 유일한 변수이기 때문이다(여기서 지능은 의미가 없다. 지능이 낮아서 심적 구조물을 많이 생각해내지 못할 것 같은 걱정이 든다면 1만 시간의 재발견을 꼭 읽을 것을 권한다.). 따라서 내 생각의 방식의 구조와 틈새 그리고 한계를 면밀히 살펴보는 것이 우선이며 그 뒤에 한 단계씩 나아가야 한다. 아마 이렇게 걷는 것부터 ‘나만의 보폭’으로 걷고 있다고 말할 수 있을 것이다. 이런 점에서 남보다 늦고 빠르고 또한 별 의미가 없다. 이러한 보폭을 생각하는 일의 궁극적인 목표는 위 문단에서 얻은 나만의 길을 오래도록 걷는 것이기 때문이다. 남보다 더 잘 나가고 빠른 것을 원한다면 이 글은 소용이 없을 것이다.

개발자로서의 나는

글 전체의 흐름은 이어지지만 문단 별로 어느 정도 독립적인 내용을 담고 있으니 건너 뛰면서 읽으셔도 좋습니다.

Angular로 시작해 지금은 React 위주의 개발을 해오고 있다. 아주 많은 사람들이 이 분야에서 일하고 있기 때문에 이게 나만의 길이라고 말하기는 어렵다. 다양한 배경과 동기에 의해 이 분야를 택했을 것이고 나도 그들 중 하나다. 이 분야에서 왜 일을 하고 있는지, 나에 대한 이해와 개발자로 일하는 것이 서로 어떤 관련이 있는지 묻는다면

  1. 하다보니 너무 재미있고
  2. 재밌어서 더 하다보니 프로그램 자체가 아름다워서 신기하고
  3. 이걸로 해결할 수 있는 사회, 환경, 문화적 문제들이 많다는 걸 깨달았고
  4. 나 혼자만 잘 사는 것에 관심이 없기 때문에 더 멋지고 나은 세상을 만드는데 활용하고 싶고
  5. 가장 큰 관심사 중 하나인 교육 문제에 큰 영향력을 미칠 수 있다는 것을 깨달았기

때문이라고 현재까지는 이렇게 답할 수 있을 것 같다. 가장 근본적인 이유를 오랫동안 생각해온 것이기 때문에 아마 거의 변하지 않을 거라고 생각한다.

개인적으로는 이런 이유에서 이 일을 하고 있다. 단순히 돈을 벌고 커리어를 만들어나가는 관점도 있겠지만 그것만으로는 부족했기 때문에 근본적인 이유를 찾아 헤매온 것이다. 그럼 이대로 나아가면 될 것인가?, 이것만 계속 할 것인가? 라는 질문을 해볼 수 있는데 선뜻 그렇다고 대답하기는 어렵다. 당분간은 맞겠지만 10년, 20년을 생각해보면 그림이 잘 그려지지 않는다.

다행히 최근 우연히 머신러닝 분야가 위의 다섯가지 이유와 완전히 맞아떨어진다고 생각하게 되었고 이쪽 공부를 계속 해오고 있다. Tensorflow나 Keras 같이 ML/DL 모델을 빠르게 프로토타이핑 할 수 있는 걸출한 오픈소스들이 이미 엄청난 인기를 누리고 있고 이에 따라 굳이 이 분야를 병행하기 위해 반드시 대학원 진학을 해야만 하는 것은 아니기 때문에 계속 해나갈 수 있는 분야라고 판단했다. 앞으로는 블로그에 개발 외에도 모델링이나 수학에 관련된 글들도 많이 올려야할 것 같다. 개발 글도 거의 못쓰고 있는 형국이지만.. 먼산..

나의 이런 판단을 듣고 ‘굳이 프론트와 머신러닝을..?’ 이라는 반응이 더러 있었다. 의기소침할 뻔 했으나 생각해보면 또 안될 이유는 없지 않은가? 그래서 요새 페이스북에서 Sung Kim 교수님과 조대협님의 글들을 보면서 많은 용기를 얻고 있다(감사합니다!).

능숙해지기

아직은 개발과 공부에 엄청난 몰입을 하고 있는 것 같지는 않다. 위에서 나를 이해하네 어쩌네 했어도 남과의 비교에서 완전히 자유롭지는 못하…다. 인간이란.. 근래에 탁월함에 관한 어떤 글에서 Kobe Bryant는 자는 시간 6시간을 제외한 거의 모든 시간을 농구를 위해 사용했고, 월마트의 창업자인 Samuel Walton은 억만장자가 되어서도 항상 같은 태도를 유지했다는 내용을 보았다. 그럼 나는 그렇게 할 수 없는가? 라는 질문이 떠올랐다.

그들은 어떤 동기가 있었기에, 어떻게 동기를 계속 유지했기에 그렇게 엄청난 몰입을 했을까? 나는 하루에 자고 일하는 시간을 제외하고 거의 모든 시간을 개발과 공부에 쏟을 수 있을까? 나는 그들처럼 몰입할 수 있는 내적 동기를 갖추었는가? 내적 동기는 먼저 나를 이해해야 찾을 수 있는 것인가? 그럼 찾기만 한다면 그 뒤로는 실행과 correction만 남는 것일까? 그들은 그들의 분야에서 어디까지 가고 싶은 걸까? 아마 가고자 하는 목표에 따라 동기를 부여받는 방식과 빈도가 달라지지 않을까?

자신의 분야에 매우 능숙해지고 싶은 사람이 아주 많을 것이다. 잘하게 되면 얻을 수 있는 보상들이 많기 때문이다. 나는 왜 능숙해지고자 하는지 생각하기 전에 보상에는 어떤 것들이 있는지 생각해보자. 누군가는 자신의 꿈을 더 분명히 이뤄줄 길을 더 잘 보게될 것이고, 누군가는 더 많은 돈, 누군가는 사회적 인지도, 누군가는 기술과 지식 자체를 깊이 이해하고 갖고 노는 것에서 오는 희열감 자체를 원할 수 있다.

책, 페이스북, 링크드인 그리고 주위에서 유명하거나 아주 실력있는, 가히 괴물이라 부를 수 있을만한 사람들을 계속 보다보니 위에서 언급한 내적 동기와 보상은 능숙함의 정도와 무관하지 않음을 알게되었다. 그리는 꿈이 선명할 수록, 원하는 것과 이루고자 하는 것이 분명할 수록 더 많은 집중을 하게 될 거고 더 많은 시간과 에너지를 투자할 여지가 크다. 그것은 자연스레 능숙함의 향상으로 이어질 것이다. 무언가에 매우 능숙해지고자 한다면 내적 동기를 찾고 원하는 보상의 형태를 생각하고 그 이미지를 더 선명하게 만들어 보는 것이 도움이 되지 않을까 생각한다.

능숙해질 수 있는 대상은 참 많다. 내가 하고 있는 일, 타인과의 소통과 협업, 대인관계, 가정 꾸리기 등등. 그리고 놀랍게도 이 관계없어 보이는 것들 또한 서로 관련이 있다. 사랑하는 사람과의 관계는 분명 오늘 집중하는 일에 큰 영향을 미친다. 가정을 이루고 안정감과 행복을 느끼고 싶은 마음이 강하다면 가정을 이루는데에 관심이 가기 마련일 것이다. 또 자신이 대인관계와 다양한 분야의 타인과 소통하는 것에서 어려움을 느낀다면 그것 또한 커리어에 있어서의 능숙함에 영향을 미칠 것이다. 거대하거나 복잡한 서비스의 아키텍쳐를 설계하는 사람, 섬세한 미술 작품을 만드는 사람, 복잡한 의술을 행하는 의사, 연주할 모든 곡들의 흐름과 선율을 머릿속에서 끊임없이 그려가며 연주에 몰두하는 피아니스트와 같이 장인이라 부를 수 있는 대부분의 사람들 중에서도 롱런하는 사람들의 공통적인 특징은 위의 능숙해질 수 있는 네다섯가지의 영역 거의 모두 다에서 능숙하다는 점이다. 이 점을 절대 간과할 수 없다. 한번 반짝이고 사라진 장인들은 저 영역 중 한두가지가 아주 부족했다. 대인관계에 아주 서툴다던지, 다른 분야의 사람들과 소통이 잘 안된다던지 등이 이런 경우에 속한다. 이 소통에 관련된 부분은 전에 쓴 이 글에서도 다룬 적이 있다.

따라서 이런 생각을 해볼 수 있다. 아직 또래보다 기술적인 것에서 한참 뒤쳐져 있다고 생각이 든다면 내가 다른 이보다 좀 더 능숙한 영역에서의 장점을 적극 활용해보고, 이런 사고를 바탕으로 꾸준히 성장할 수 있는 장기적인 계획을 꾀할 수 있다. 예를 들어, 기술적 능숙함은 부족하지만 대인관계 및 네트워킹에서 능숙하고, 지식에 대한 호기심이 남달라 습득 속도가 빠르다면 기술 커뮤니티, 컨퍼런스 등에 적극 참여해 그 사람들과 교류하며 모르던 것을 배우고 함께 공부하거나 혼자 공부할때 조언을 얻을 수 있다. ‘능숙해지기’에 대해서 이와 같은 관점으로 살펴본다면 남과의 비교와 사회적 압박에서 자유로운, 좀 더 안정적인 마음으로 성장 계획을 세우고 나아갈 수 있다.

이에 관련해 Tai Lopez라는 기업가의 블로그에서 도움이 되는 몇가지 팁을 찾았다.

  • Mentor: 선망하는 누군가를 찾고 직접 연락해보라. 할 수 있다면 그와 교류하고 조언도 구해보라. 배우고자 찾아온 사람을 매정하게 내칠 사람은 많지 않다.
  • Read more: 좋은 책은 여러번 읽는다. 1회독 때는 정독하고 2회독 때는 1회독때 표시해두었던 주요 포인트만 읽으며 속독하고 3회독 때는 본인에게 제일 중요한 몇 부분만 읽는다. 대부분의 책은 일부분만 읽어도 될 정도의 가치를 갖는다. 따라서 엄청난 양의 책을 비교적 적은 시간을 들여 읽는다. 양이 쌓이고 정리가 되어가면 전체적으로 볼 수 있는 능력이 매우 향상될 것이고 그 뒤부터 더 현명하고 가치있는 결정을 내릴 수 있을 것이다.
  • Be humble: 자만, 오만하지 않는다는 것은 인생, 세계, 사물, 사람에 대해 쉽게 판단을 내리지 않는다는 것이고 이는 바꿔말하면 겸손하면서도 호기심이 있는 것이다. 그런 사람만이 오래 학습하고 오래 성장하여 인간 지식의 미개척 영역을 한톨 넓히는 사람이 된다. 내 의견이 아니라 역사가 그렇다. (낮은 자세를 취하는 것은 도덕이 아니라 이쯤 되면 과학인듯)
  • Persevere: Bill Gates도 스무살부터 서른살까지 거의 쉬지 않았다. 그만큼 집중할 것이 뚜렷했다는 것이고 그렇게 할 수 있으려면 인내해야 한다. 될때까지. 나(Lopez)는 내가 선망하는 기업가의 비서를 17번 찾아갔다.
  • Stoic: 정말 재밌는 미래를 꿈꾼다면 그걸 위해 준비하고 조금만 참자. 오늘의 즐거움을 살짝 양보하고 스스로를 단련한다. 뭐 그렇다고 즐거움을 다 버리라는 것은 아니다. 다만 현재를 희생하면서까지 즐겨버리면 그만큼 성장해있을 미래는 없다. 성장에 관심이 없고 이대로만 행복하게 살고싶다면 현재를 마음껏 즐기자.

나를 믿는 것

그리고 나만의 생각을 키워나가는 것.

나만의 생각을 키워나가는 것은 답이 정해진 문제를 해결하는 나만의 방식일 수도 있고, 비구조적 문제를 이해하고 해결하는 나만의 방식일 수도 있고, 남들은 생각하지 못하거나 전통적인 생각의 방식에서 벗어나 비록 그것이 기존의 것과 충돌하더라도 나만의 방식으로 접근하는 것일 수도 있다. 남들이 절대 아니라고 해도 내가 확고하게 믿는 것이 있으려면, 그걸 갖고 강하게 밀고 나갈 수 있으려면 이러한 나만의 생각이 잘 진전되어 있어야 한다.

앞서 프론트 영역에서 개발을 시작해 머신러닝으로 영역을 넓혀간다고 했을때 ‘왜 굳이’라는 반응을 들었다고 소개했다. 만약 내가 그리는 미래가 분명치 않았다면, 내가 한번 주어진 인생에 무얼 하다 갈지, 어떤 사람으로 기억될지 구체적으로 상상해보고 정해놓지 않았다면 나는 분명히 흔들렸을 것이다. 왜? 남들의 기준, 사회의 일반적인 기준에 따르면 내가 가고자 하는 길은 전도유망하지 않기 때문이다. 그들의 관점으로는 머신러닝을 처음 시작했으면 했지 굳이 프론트로 이미 시간을 보낸 뒤 진입하는 것은 그리 큰 메리트가 없었을 것이다. 동의하지 않는 것은 아니다.

나는 다행히 여기서 나를 믿고 나만의 생각을 키워온 것에서 큰 힘과 방향을 얻었다. 어쩌면 이것은 인생을 대하는 나의 태도일지도 모른다. 그리고 나는 이 태도를 얻으려 부지런히 노력했다. 얻기까지 너무 힘들었고 좌절했던 적도 많았다. 그래서 그 얻은 힘과 방향이 무엇인고 하니, 머신러닝은 모델링 및 학습보다 데이터 전처리 및 가공에 더 많은 힘을 쏟아야 하는 성질의 분야이고, 내가 시작한 분야인 프론트 영역에서는 무엇을 데이터로 간주하고, 언제 어떻게 저장하고 가져올지 생각해볼 수 있는 곳이기 때문에 둘 간의 연결지점을 분명히 생각해볼 수 있었다. 자연스레 학습할 분야도 데이터와 관련된 분야로 옮아갔고 나는 미래를 더 분명히 그려볼 수 있는 기회를 갖게 되었다.

몇달전 읽은 Airbnb 스토리라는 책에 이런 내용이 있다. ‘이렇다, 저렇다 식의 남 얘기에 집중하지 마라. 나만의 생각을 키우는 것이 중요하다.’ Warren Buffett이 한 말이다. 그는 출근하고 대부분의 시간을 독서하는데 사용했다고 한다. 분명 사회에는 노이즈가 많다. 듣기 싫은 것도 있고 뭐만 하려고 하면 안된다고 초를 치는, 하등 도움이 안되는 말들도 많다. 그래서 흔들리지 않고 내 길을 올곧게 오래 나아가기 위해서는 남의 이야기에 경청할 줄도 알아야 하지만 반대로 듣지 않아야 할때도 있음을 깨달았다. 둘이 상충하는 것 같지만 자동차의 기어에 D와 R이 공존하는 것과 같은 이치다. 경청과 무시. 둘 중 아무래도 그간 사회가 이야기해온 것에 따르면 경청이 더 좋은 자세 같다. 경청만 해야할 것 같다. 그렇다고 차에 D만 있으면 막다른 길에서 빠져나올 길이 없을 것이다. 앞만 보고 달리는 것만큼 바보같은 것이 또 없다.

뭔가 하고싶은데 남이, 사회가 그걸 두고 별로라고 하는가? 본인이 봐도 별로라고 생각이 들면 안하는게 맞지만, 분명히 좋다고 생각한다면 기쁘게 남을 무시하자. 한국 사회는 지나치게 남에게 관심이 많다. 예의있게 무시하고 오래 성장하고 전진해서 멋지게 살자.

정리하며

이제 막 커리어를 계획하고 다듬어나가는 입장에서 보면 앞날이 까마득하고 배울 것은 왜이리 많은지 답답하기만 하다. 이걸 다 언제하지 라는 조바심도 나고 이렇게 해서 정말 내가 원하는 레벨의 엔지니어가 될 수 있을지도 의심스럽다.

이럴때 상상력을 적극 활용해보자. 영화를 보다보면 온갖 일을 겪고 은퇴해 노년기를 보내며 지난 날을 회상하는 장면이 간혹 나온다. 이런 장면들을 보면서 이런 생각이 들었다. 지금 아무리 치열하고 앞이 안보이고 어쩌고 해도 삶의 끝에 가면 결국 남는 것은 돈도 명예도 아닌 곁에 있는 사랑하는 사람들이다. 그렇지 않은가? 치열하게 살아온 젊은 나날들이 무의미하다는 것이 아니라 중요하고 어려워 보이는 모든 것들도 끝에 가서는 아련함, 시원섭섭함, 아름다움, 그리움으로 남는다는 것이다.

아마 사람들이 꿈을 갖고, 무언가를 만들고, 고군분투하는 모든 것의 존재 이유는 진행하는 당시에는 모르겠지만 그저 그것이 재밌어서일 것이다. 그리고 그것이 아름다워서일 것이다. 편리, 재미, 환경을 위한 모든 일과 사업들. 당시엔 사명감, 욕심 등 여러 이유를 갖고 그것에 따라 생각하고 무언가를 해나가겠지만 끝에가서 남는 것은 추상적 감정들일 것이다. 그러니 지금 하는 것이 어렵고 힘들고 앞이 보이지 않아도 풀어나갈 한가지의 실마리만 있다면 그걸 쥐고 하나씩 알아나가는 과정들을 기꺼이 받아들이고 즐기면 되지 않을까.

이 글을 쓰기까지 도움이 된 책들, 써온 글조각들, 만들어온 것들, 공부한 흔적들

img_4114

img_4134
1만 시간의 재발견: 2018년에 읽은 최고의 책(아직까지는)

img_4136

img_4118
Surely You’re Joking, Mr. Feynman!: 학습에 대해 유쾌하게 풀어내는 파인만의 재밌는 사연들이 감명 깊었다. 리처드 파인만은 정말 사랑스러운 과학자다.
img_4140
이 글의 바탕이 되는 첫 의식의 흐름
img_4054
심적 표상에 대한 정리
img_4141
이글과 연관이 있는 그간 써온 학습에 관련된 글조각들: 이 조각들은 이 글을 구성하는데 쓰였다.
스크린샷 2018-03-11 오후 5.39.34
입사하고 참여한 프로젝트의 결과물(React.js): dcode 앱의 웹 버전인 itsdcode
스크린샷 2018-03-11 오후 5.37.54
ML 분야의 hello world: tensorflow로 mnist 학습시키기

img_4138img_4139img_4137

KakaoTalk_2017-12-31-16-28-51_Photo_6
작년에 들었던 Coursera Stanford Machine Learning Course

KakaoTalk_2017-12-31-13-58-06_Photo_38

[webpack v4] 1. webpack v4 시작하기

들어가며

2016년 초반 즈음 react에 입문해 개발을 시작하게 되었다. 웬걸, react를 하려고 봤더니 이것만으로는 웹을 만들기가 번거로워 여러(꽤 많은…) 도구들이 거의 필수적으로 사용해야 함을 알게되었다. redux도 redux지만 그중에서도 오랜 시간에 걸쳐 머리를 지속적으로 아프게 했던 것은 단연 webpack이다. 처음 사용했을때 버전이 1이었는데 해가 바뀌기가 무섭게 메이저 버전이 2로 뛰더니 여러 부분에서 사용 방식이나 문법 등이 바뀌어서 잊을만하면 재학습을 요구했다.

그래서 쓴다. 나를 위한 webpack v4 정리 시리즈. 이제와 생각해보니 redux도, redux-saga도 참 어려웠지만 유독 webpack이 골치아팠던 이유는 특히 UI Library인 react를 사용함으로써 개발 과정에서 필요한 UI 이외의 많은 부분들을 webpack이 커버하기 때문이었다. 프레임워크를 생각해보면 이해가 쉽다. 프레임워크가 제공하던 인터페이스가 없으므로 예를 들어 MVC에서 V만 지원되는 상태에서 다른 라이브러리들로 MC를 구성하고 이것을 V와 함께 일관된 패러다임 하에 서로 꿰매고 컨트롤해야 한다. 다시 말해, webpack은 개발 사이클의 전반적인 부분에 관여하기 때문에 웹 개발의 큰 구조를 어느정도 이해하고 있지 않은 경우엔 쉽고 직관적으로 활용하기가 어렵다. 갈 수록 더 많은 option과 보조하는 plugin들이 많아지는 것은 react의 활약을 포함한 Modern Web Development의 흐름 변화와 무관하지 않다.

이런 배경에서 webpack 활용에 대해 아주 기초적인 것부터 복잡한 것까지 천천히 그리고 아주 자세히 정리해보고자 한다. 버전이 또 바뀌어 사용법이나 문법이 바뀌더라도 정리한 것을 바탕으로 내 머리를 업데이트하면 되므로 이 시리즈를 webpack 활용에 대한 형상관리라고 해두면 되겠다.

아주 간단한 웹을 bundle 해보자

이 포스트에 관련된 코드는

https://github.com/brightparagon/webpack-conquer/tree/getting-started

에서 확인해볼 수 있습니다. 작은 예제부터 모두 실행해보며 학습해보고 싶으신 분은 위 링크에서 레파지토리를 fork 하거나 zip 파일을 다운로드해서 활용해보세요.

시작하기 전에 준비물이 몇가지 있다.

  • 코드를 작성할 적절한 에디터 like Sublime Text, Atom, VS Code
  • 외부 모듈을 설치하고 관리해줄 npm 또는 yarn

이제 간단한 웹을 구성해보자.

carbon
앞으로 계속 고생해줄 우리의 index.html
carbon (2)
indext.html에서 불러와 사용할 app.js

app.js를 번들해 index.html에서 사용할 것이다. 이때 app.js 말고도 다른 파일들도 함께 번들될 수 있고 이렇게 번들된 결과를 지금은 bundle.js라고 부르자. 그래서 index.html에서 app.js 대신 bundle.js를 불러오고 있다.

app.js에서는 h1 tag를 만들어 body에 붙이고 있다. 이 간단한 웹을 앞으로 점점 커져갈 우리의 프로젝트라고 생각하자.

이제 이것을 번들 해볼건데 이때 번들되는 대상은 우리의 web application을 동작하게 해줄 요소들이다. 이 요소들에는 js, css, image 등이 있다. 여기서 js 파일이 확장되면 react나 vue로 만들어진 앱도 webpack으로 번들될 수 있다.

이제 번들하기 위해 webpack을 설치해보자.

carbon (4)

webpack을 설치할때 -g 옵션 등을 주어 글로벌로 설치하는 것보다 프로젝트 내부에 설치하는 것을 권장한다. webpack의 버전, 나아가 프로젝트 dependencies의 버전들이 서로 의존적일 수 있기 때문이다. 더불어 이렇게 하는 것이 다른 개발자나 다른 팀이 프로젝트 셋업을 빠르게 하는데 수월하다.

carbon (5)
package.json

webpack을 글로벌로 설치하지 않았다면 터미널에서 webpack 명령어를 사용할 수 없다. 따라서 package.json의 scripts에 위와 같이 입력해 npm run build 혹은 yarn build로 webpack 명령어를 사용할 수 있도록 하자. 이때 webpack 명령어를 실행할 수 있는 것은 node_modules에 있는 webpack을 npm이 찾아주기 때문이다.

그 다음 webpack이 무엇을 어떻게 번들할 것인지에 대해 정해줄 수 있는 설정 파일을 작성해보자.

carbon (6)
webpack.config.js

당장 지금은 9줄로 아주 간단하다. webpack으로 할 수 있는 것이 아주 다양한 만큼 이 파일은 앞으로 더 복잡해질 것이니 지금부터 기초를 단단히 잡아두자.

이 파일에서는 객체 하나를 내보내고 있다. 이를 webpack이 읽어 사용할 것이다. 객체 안의 속성을 하나씩 살펴보자. 먼저 4번째 줄의 entry는 webpack이 번들을 진행할 첫 진입 파일을 명시한다. webpack은 진입 파일을 시작점으로 이 파일과과 import 혹은 require로 연결된 모든 파일들 간의 관계를 dependency graph로 만들어 이것을 기준으로 번들링을 진행한다. 따라서 만약 app.js 에서 const bar = require(‘./bar.js’)와 같이 다른 파일을 불러들이면 이를 의존 관계로 보고 bar.js까지 번들 결과에 포함시킨다. 그럼 당연히 여러 파일을 작성하더라도 index.html에서 여러 script tag로 그 파일들을 일일이 불러주지 않아도 된다. 그 다음, 5번째 줄의 output은 번들링 결과를 저장할 경로(path)와 파일 이름(filename)을 결정하고 있다. 즉, entry에서 명시된 진입 파일을 기준으로 모든 파일을 하나로 묶고 이름을 bundle.js로 지어 path에 명시된 경로로 저장하게 된다.

이때 entry와 output path에서 Node.js의 path 내장 모듈(webpack은 Node.js 환경 위에서 움직인다)을 사용해 path.resolve(__dirname, …)와 같이 경로를 지정하고 있는데 여기에 대해서는 다른 글에서 다뤄보도록 하겠다. __dirname은 현재 프로젝트의 경로를 의미한다. 현재 경로가 /Users/brightparagon/Documents/workspace/webpack-conquer라면 entry의 결과는 /Users/brightparagon/Documents/workspace/webpack-conquer/src/app.js가 되고 output path의 결과는 /Users/brightparagon/Documents/workspace/webpack-conquer/build가 된다. 이제 번들을 해볼 차례다. 아래 명령어를 실행해보자.

carbon (7).png

build 폴더 내부를 보면 bundle.js이 생성되어 있을 것이다. 아래는 현재 프로젝트의 디렉토리 구조다.

스크린샷 2018-02-22 오후 11.21.54
디렉토리 구조

index.html이 build 폴더 내에 있고 webpack에 의해 생긴 bundle.js가 함께 있다. 이렇게 우리의 첫번째 번들링 과정이 완성되었다. 이제 브라우저를 열고 index.html을 열어보자.

스크린샷 2018-02-22 오후 11.25.37.png

정상적으로 동작하는 것을 확인할 수 있다!

웹에서의 module과 webpack의 역할

위의 예제를 이어서 생각해보자. 지금은 app.js 파일 하나만 있고 이 파일 마저도 코드의 양이 많지 않다. 그런데 이제 로그인 기능을 붙이고, 홈페이지에서 사진을 보여주고, 네비게이션을 붙여 여러 페이지로 이동시키는 등 필요한 기능이 늘어감에 따라 한 js 파일에서 다루는 코드의 양이 점점 늘어날 것이다.

여러 기능을 한 파일에서 다루면 기능 추가나 수정이 필요할때 쉽게 접근하기 어렵다. 그래서 기능별로 파일을 나눌 필요가 생기고 어느 파일이 어느 파일을 불러 사용하는 등의 의존 관계가 생기게 된다. C++이나 Java에 익숙하다면 JavaScript에 모듈 시스템이 따로 없는 것을 받아들이기 힘들 것이다. 필자는 처음 JavaScript를 접하고 공부할때 require()가 언어가 자체적으로 지원하는 함수인줄 알았는데 브라우저에서는 지원되지 않는 것을 알고 문화컬쳐에 빠졌다.. 이에 JavaScript를 범용적 언어로서 활용하기 위한 움직임이 일었고 표준화 작업에 있어 CommonJS와 AMD가 이끌어가고 있다. Node.js도 이런 움직임에 영향을 받았다. 더 자세한 것은 14만번 정도 조회된 스택오버플로 링크에서 찾아보자.

이것이 어떤 의미인지 알아보기 위해 위 예제에서 src 폴더에 아래와 같이 bar.js를 만들고 app.js에서 불러오는 코드를 만들어보자.

carbon (8)
app.js와 bar.js

이번엔 webpack을 활용하지 않고 index.html에서 script 태그의 src 속성 값을 “../src/app.js”로 수정하고 브라우저로 다시 열어보자.

스크린샷 2018-02-23 오전 12.02.56.png

개발자 도구를 열어 Console 탭을 확인해보면 이와 비슷한 에러를 볼 수 있다. 저 Unexpected identifier는 import from 구문을 의미한다. 만약 require를 사용했다면 require is not defined와 같은 에러를 뱉는다. 그렇다. 브라우저엔 정말 당연히 있을 것 같은 모듈 시스템이 없다.

Modern Web Development의 많은 비중을 JavaScript가 잠식해가고 있는 만큼 webpack이 건네는 도움의 손길은 더욱 크게 느껴진다. 부족한 모듈 시스템을 브라우저가 알아듣게끔 대신 설명해주고, 동시에 개발자인 우리에게는 모듈 시스템을 이용해 손쉽게 파일들을 모듈화할 수 있도록 도와준다. 벌써 v4의 베타 버전이 올라왔고 더 많은 개선 사항이 포함되어 있다. webpack은 모듈화 말고도 훨씬 더 멋진 기능들을 갖고 있다. 가령,  bundle.js가 너무 비대해지면 이것을 쪼개 parallel로 불러오게끔 만들어 초기 로딩 속도를 개선시킬 수도 있고, 심지어 SPA의 경우엔 라우팅 경로를 구분해 처음엔 필요한 번들만 불러오고 경로에 따라 알맞은 파일만 그때그때 불러와 앱을 가볍게 느껴주게 할 수도 있다. 또, 개발 과정을 단순화하고 코드 변경에 따른 앱 리로딩을 자동으로 해주며 Progressive Web Apps를 지원하는 플러그인을 사용할 수도 있다. 걸작이다. 근데 이 모든 것을 사용하려면 많이, 아주 많이 복잡하다. 그래서 요새 많이 parcel로 넘어가는 듯 하지만.. 필자는 webpack이 더 프로덕트 친화적이라 생각해 webpack에 잔류할 생각이다.. 앞으로 연재할 webpack 포스트들에서 이런 멋진 기능들을 예제로 직접 만들어보면서 사용해보도록 하자.

이 포스트에 관련된 코드는

https://github.com/brightparagon/webpack-conquer/tree/getting-started

에서 확인해볼 수 있습니다. 작은 예제부터 모두 실행해보며 학습해보고 싶으신 분은 위 링크에서 레파지토리를 fork 하거나 zip 파일을 다운로드해서 활용해보세요.

되돌아보는 2017년

 

File_000 (1)

벌써 2018년이라니!

그동안 글을 써오면서 한 해를 돌아보는 글을 남긴 적이 없어 다사다난 했던 해였던만큼 이번 글에서는 2017년에 무엇을 했는지 굵직하면서도 구체적으로 되돌아보자.

KakaoTalk_2017-12-31-13-57-26_Photo_52
욕심은 커서 많이 적었는데 대부분 세모 아니면 fail..

무엇들을 되돌아보아야 할까. 2017년 1월에 작성한 위의 플랜을 바탕으로 굵직한 포인트를 먼저 뽑아보면 개발, 특히 React, 머신러닝, 영어, 독서, 공부, 운동 등이 있다. 좋아라 하면서도 시간을 많이 쏟은, 내게 많이 중요한 것들 위주로 돌아보며 무엇을 왜 했는지, 하고 난 결과는 어땠는지, 좋았는지 그렇지 않은지, 어떤 감정을 느꼈는지 등에 대해서 풀어내보자. 2년, 5년, 10년 뒤 이 글을 다시 보며 내가 누군지를 계속 상기하기를 바라며..!

JavaScript Based Development: 이게 다 뭐야..?

먼저 가장 머리가 아픈 개발 이야기부터 시작해보자. 어느덧 자바스크립트로 웹 개발을 시작한지 2년이 되어간다. 2015년 말 AngularJS로 모던 웹을 접하고 전 직장에서 나오기 전인 작년 9월까지 앵귤러로 이것저것 만들어 보았다. 그 다음 접한 것이 React. 앵귤러 때도 그랬지만 React를 할때 디렉토리 구조부터 잘 이해가 가지 않았다. 공식 홈페이지의 다큐먼트, React 관련 책, 블로그들을 보며 이것저것 시도할 때마다 디렉토리 구조가 모두 달랐다. 무엇이 무엇을 불러와 사용하고 최종적으로 어떻게 빌드되어 어떤 폴더가 deploy 되는지 등 전반적인 개념이 많이 부족했었다. 그때 깨달았다. 아, 난 웹에 익숙치 않은 게 아니고 그냥 개발 자체가 익숙치 않구나.. 사실 구조야 편리성에 따라, 취향에 따라 만들기 나름인데 당시엔 아득했다.

그 뒤 React로 좀 더 복잡한 것을 만들어 보려고 찾아보니 Flux가 나오고 Webpack, Babel이 나오더니 Redux, React Router… 등이 갑자기 쏟아져 나왔다. 이때 몇개 공부 해보다가 소리를 질렀다. 아니 난 React를 해보고 싶은데 뭐가 이렇게 많아! 입문자 중 나만 그러지 않았으리라 짐작.. 아니, 빌어본다.. 그렇게 찔끔찔끔 필요한 것들을 공부해가며 만들어 보기도 하면서 익혀나갔다. 그런데 생소한 내용이 양까지 많으니 하루에도 머리에 과부하가 몇번이고 찾아왔다. 그때 몇번 뵈었던 개발자분이 React를 두고 알면 알 수록 헬이라고 했던 게 떠올랐다. 시간이 흐른 지금은 이때보다는 느껴지는 헬의 정도가 덜하긴 하지만 react-router가 v4로 버전이 올라가고, redux-thunk에서 redux-saga로 옮기고, webpack으로 안하던 code splitting 등을 해보면서 과부하 챗바퀴는 또 시작되었다..

React + Redux + Babel + Webpack = Awesome? Nah, headache..

프론트엔드는 적응이 좀 됐다 싶으면 갑자기 새로운 것들이 쏟아진다. 그리고 그것들은 매번 큰 변경 사항을 내포한다. 기능이 변하기도 하고 패러다임이 뒤바뀌기도 해서 따라가기 벅찬 것이 솔직한 심정이다.

그렇게 공부하다보니 React는 프레임워크가 아닌 UI Library 인지라 이 모든 것들이 필요에 따라 혹은 취향에 따라 조합되어 사용된다는 걸 이해 하기까지 오랜 시간이 걸렸다. 어느 정도는 넓게 보아야 이것들이 다 무어고 왜 이렇게 되어있는지 이해를 하는데 이건 적당히 넓게 보기까지 너무 많은 계단이 있는 것처럼 느껴졌다. 그래서 혹시 이걸로 진입장벽을 만든 것은 아닐까 생각하기도 했다.

React: 높은 자유도

React로 그렇게 1년 가까이 개발을 해보고나니 React는 마치 개발자로서 스스로를 돌아보게 만드는 선생님 같다고 느꼈다. 라이브러리인 만큼 자체적으로 지원되지 않는 것이 많아 조금이라도 복잡한 것을 설계해야 할때 무엇이 필요한지, 필요한 것들을 어떻게 조합해서 사용해야 할지에 대해서 개발자가 충분히 알고 있어야 한다. 몰라도 만들 수 있지만 앱이 기능하는 범위나 특징에 비해 과도하게 많은 기술들이 사용되었다면 그것을 사용해봤다는 점을 제외하고는 오버 엔지니어링이자 시간과 에너지의 낭비일 것이다. 특히 실제 운영되는 서비스라면 그 결과의 크기는 더욱 커질 것이다.

React와 관련 기술들로 개발을 해보니 어떤 서비스를 만들지, 이 서비스가 어떤 것인지 등 그 특성을 명확히 이해한 뒤 내가 편하면서도 적합하다고 생각하는 기술의 조합을 이용해 앱을 설계하고 작성하는데 큰 도움이 되는 것을 느낀다. 아마 다른 프레임워크처럼 React가 앱을 만드는데 있어 강력한 틀과 constraints를 갖고 있었다면(자유도가 낮았다면) 이런 느낌은 덜 받았을 거라는 생각이 든다. 높은 자유도를 지닌 만큼 많이 허덕였고 허덕인 만큼 갭을 메우면서 알게 된 점들이 많았다.

이런 점에서 고맙지만 참 고된 시간이었고 지금도 고되기는 마찬가지지만 이 많은 정보의 범람 아니, 정확히는 기술의 범람 속에서 무얼 보고 무엇에 관심을 가져야할지 잘 모르겠는 것은 매한가지다. 다만 여기서는 최근에 읽은 Paul Graham‘해커와 화가’라는 책에서 힌트를 얻을 수 있었다. 책에 따르면, 어떤 언어가 좋다고해서 꼭 그 언어가 유명해지지는 않는다. 다만 영향력 있는 소수의 개발자들(폴형은 해커라 칭했다)이 판단하기에 충분히 좋은 언어라면 그 언어는 유명해지고 그 언어보다 기능적으로 더 우월한 언어가 있더라도 이 언어가 더 많은 인기를 누리고 더 오래갈 것이다. 즉, 최소한 여기서 얻을 수 있는 확실한 사실은 유명한 것은 충분히 좋고오래갈 수 있을 가능성이 크다는 것이다. 논외지만 이것은 개발자에게 꽤 중요한 포인트라고 생각한다. 기껏 시간과 노력을 투자한 기술이 인기를 잃어 더 이상 쓰이지 않는다면 커리어에 있어서 분명 악영향을 끼칠 것이기 때문이다. 물론, 많은 기술들이 그렇듯 큰 형태와 패러다임을 같이 하는 경우라면 내가 쓰던 기술이 당장 없어져도 큰 무리없이 다른 기술로 옮겨갈 수 있을 것이다.

나는 어떻게 공부했는가

위에서 React와 프론트엔드 진영에서 공부하고 만들며 느낀 것들에 대해 이야기했는데 입문자였던 내가 어떻게 공부를 했었는지 되돌아보는 것도 좋을 것 같다. 2~3년차가 되었을때 이때 공부했던 방식을 보며 좀 더 진화된 방식으로 공부하기를 바라며..! 근데 뭔가 React를 처음 공부한 것에  대한 회고라 분노로 가득 찰 것 같다.

먼저, 누구나 그렇듯 React의 공식 문서를 보았다. 이해가 안됐다. 지금도 이때 이해가 안됐을 때의 그 느낌을 생각하면 부들거린다. tender 말고 oscillate다. 정말 몸이 진동했음. 주먹쥐고 모니터를 노려봐서.. 도대체 저때는 무엇 하나 처음부터 단박에 이해되는 것이 없었다. 지금 돌이켜보면 AngularJS가 제공해주던 MVC적인 사고방식과 양방향 데이터 바인딩에 익숙해져 있었고 그전에도 Java로만 개발했었기 때문에 React의 Component Composition과 Unidirectional Data Flow 사상은 너무나 신세계였다. 아마 사고의 전환에서 느낀 생소함과 어려움이 원인이라면 원인이 되지 않았을까 추측해본다.

그렇게 공식 문서로 조금 감을 잡은 뒤(Thinking In React 파트가 도움이 컸다) Pro React라는 책을 훑으며 다시 고통받았다. 꽤 충실한 배경 설명과 많은 코드랩이 있어 React를 익히는 데에 좋은 책이라 생각한다. 물론 양이 많아서 문제다. 좀 적당히 했으면 좋겠는데..

그리고 책을 조금씩 보면서 궁금한 것이 생길때마다 아래와 같은 블로그들과 공식 문서를 참고했다.

이외에도 모르거나, 어렵거나, 헷갈리거나, 단순히 궁금한 것이 생기면 구글링을 한뒤 여러 문서를 보고 마음에 드는 것을 골라 에버노트에 정리해놓고 필요할 때마다 찾아보며 공부했다. 처음에는 부분 부분 골라서 보고 바로 적용해보는 방식으로 공부했으나 이내 공부하는 이 기술이 어떤 배경에서 생겼고 어떤 함수나 API가 왜 이런 형태로 생기게 되었는지 등의 맥락에 대한 이해가 많이 떨어지는 것을 느끼고 배경지식이 많이 부족한 지식일 수록 가능한 문서 전체를 읽고 맥락을 이해한 뒤 다시 모르는 것이 생기면 부분적으로 재학습하고 사용해보는 방식으로 공부하는 방식을 바꾸었다. 물론 또 시간이 지나 배경지식이 더 쌓이고나서 내게 더 알맞은 방식을 찾게 되면 다시 방식을 바꾸게 되지 않을까싶다.

그 다음은 스터디. MERN 스택을 공부하고 이것저것 함께 만들어보는 스터디 두개를 만들어 각각 4개월, 6개월 정도 운영했다. 각자 아는 것의 내용과 정도가 다르지만 같은 것을 함께 공부함으로써, 매주 공부하고 만든 것에 대해 코드 베이스로 이야기를 나눔으로써 혼자 공부하면 알기 어려웠을 것들을 알게 되고 다른 사람들의 생각을 알 수 있어 좋은 경험이었다. 그래서 앞으로도 React를 비롯해 다른 공부하고 싶은 것이 생기고 여유가 생긴다면 다시 스터디를 만들어보거나 다른 스터디에 참여해 공부하면 좋을 것 같다. 아 그리고 좋은 사람들도 알게 되는 점도 빼놓을 수 없다. 다들 잘 지내시죠!

이렇게 조금은 React에 대해 알게 되고 재미를 더 느끼게 되었을때 개인 프로젝트를 조금씩 만들기 시작했다. 아무래도 앞으로 만들게 될 프로젝트들도 대부분 Node 기반에 React를 사용하게 될 것 같아 Velopert님의 강의를 참고해 간단한 React-Node 보일러플레이트를 만들었다. 그리고 최근에는 React Native에 관심이 생겨 프로젝트를 하나 만들어 공부해보고 있다. 이전에 만든 프로젝트들은 커밋을 안한지 너무 오래되어 가슴이 아프다… 보일러플레이트도 그 중 하나다. 추석 내내 삽질한 webpack v3 config 설정 관련 프로젝트도 아직 병합하지 못했다. 빨리 업데이트를 하자. 해가 바뀌어 가는데 큰일이다. 이번 회고록을 통해 다음 해에는 기존 프로젝트들을 가다듬고 공부하고 싶은 것들을 바탕으로 또 어떤 새로운 개인 프로젝트를 해나갈지 정하고 꾸준히 커밋을 해야겠다.

마지막으로 알고리즘을 빼놓을 수 없는데, 직장을 옮기기 전에 Leetcode에서 조금씩 문제들을 풀며 자료구조와 알고리즘을 가다듬었는데 회사를 옮기고 스프린트를 시작하면서 멀어지게 되었다. 이미 React 만으로도 머리는 너덜거렸던 것이다..라고 변명을 해보지만 일주일에 하나씩 풀었으면 56 문제는 풀었을텐데 아쉬움이 크다.

알고리즘에 대해서는 한가지 더 이야기하고 싶은데, 알고리즘에 대한 중요성은 절절히 느끼지만 서비스를 만드는 것에 집중하다보면 어느새 뒤로 밀려나있는 경우가 많았다. 왜 그런 경우가 많이 생겼는지, 어떻게 지속적으로 환기시키며 가다듬어 나갈 수 있을지 고민을 해야할 것 같다. 진짜 2018년이다 이제.

말 많은 Algorithm

자연스럽게 다음 주제는 알고리즘이다. 요새 페이스북이나 여러 개발 관련 글들에서 알고리즘이 그렇게 많이는 중요하지 않다는 뉘앙스의 내용을 보았다. 그간 서비스를 만들면서 연쇄적으로 동작하는 기능이나, 여러 백엔드 시스템과 연계해야 하는 기능 등을 작성해야 하는 일들이 생겼다. 이때 Brutal하게 생각나는대로 만들어보니 결과적으로 작동은 했으나 가독성과 구성 면에서 잘 짜여진 코드가 아닐 때가 있었고 나중에 다른 기능과 연계하거나 개선 및 수정하는 등의 경우가 생겼을 때 이 코드 때문에 더 많은 시간을 들여야 했던 일들이 생겼다.

알고리즘을 어느 범위로까지 확장시켜 생각하느냐에 따라 이야기가 많이 달라지겠지만

  • 무엇을 만들지 혹은 문제가 무엇인지 정의하고
  • 필요한 것을 도출한 뒤
  • 원하는 결과를 얻는다

라는 맥락에서 보면 알고리즘을 꼭 코드 레벨에 국한시켜 생각할 필요는 없지 않을까싶다. QED(양자전기역학)를 만든 Richard Feynman이 말한 알고리즘에 관한 글이 이것을 잘 설명해준다. 무엇을 만들어야 하는지, 이 코드가 어디까지 영향을 미치는지, 다른 도메인과 어떻게 연계해서 만들어야 하는지 등을 잘 생각한 뒤 만들었다면 조금은 다른 결과를 얻지 않았을까 생각해본다.

코드로서 기능하던, 아키텍쳐 레벨에서 기능하던 큰 맥락에서는 궤를 같이 하므로 좋은 서비스를 잘 만들고 잘 운영하기 위해서는 이러한 알고리즘 혹은 알고리즘적인 사고가 어느 정도는 수반되어야 하지 않을까.

그리고 Machine Learning

개인적으로 머신러닝에 호기심이 있었다. 데이터를 갖고 어떻게 학습하는 걸까? ‘학습한다’는 것의 구체적인 의미가 뭘까? 데이터들에서 패턴을 찾아내어 수식화하는 것일까? 그럼 일종의 방정식을 유추하거나 만들어낸다는 것인가? 그렇다면 통계학과 큰 차이는 무엇일까? 통계학적 분석 작업을 사람이 하는 것에서 기계가 하는 것으로 옮겨가는 것을 의미하는 것인가? 학습한 것을 서비스에서 활용하려면 파이프라인 같은 것으로 시스템을 설계하는 것일까?..

이런 종류의 질문들이 떠올랐고 뭘 어떻게 학습한다는 것인지 전혀 모르겠지만 통계적인 관점을 일상 생활이나 관심 분야에 적용했을때 예상치 못한 재미있는 결과들을 책을 통해 여럿 접했던지라 자연스럽게 머신러닝에 관심을 갖게 되었다. 그래서 결국 Coursera를 오랜만에 열어 Andrew Ng 교수의 Machine Learning Course를 등록했다. 시작한지 2주만에 후회를 했다.. 프론트엔드만 해도 공부해야할 것들이 넘쳐나 허덕이고 있었는데 갑자기 안하던 미적분에 생소한 머신러닝 개념까지(아무리 Introduction level이라 해도..) 이해하느라 힘들었다. 그렇게 거금 79$를 들여 강의를 듣기 시작해 세달 정도가 지나 다행히 모든 시험을 마치고 해당 과목의 Certificate을 얻을 수 있었다.

스크린샷 2017-12-31 오후 3.05.04
79$를 결제하고 들으면 더 잘 듣게 된다는 남세동님의 말을 적극 따랐다.

 

당연한 이야기지만 아직 데이터 전처리를 어떻게 해야하는지, 서비스에 적용하려면 어떤 과정을 거쳐야 하는지 모른다. 그럼에도 이 수업을 끝까지 듣게 된 것에 대해 보람차게 느낀다. 여기엔 두가지의 이유가 있다.

첫째로, 너무 재밌다. 멋진 테크 기업들 덕분에 TensorFlow를 비롯해서 많은 wrapper들이 나왔고 그만큼 다양한 방식으로 높은 추상화가 되어있어서 머신러닝의 수학적인 부분까지 정확히 모르더라도 함수 두세개만 연달아 쓰는 것만으로도 Andrew Ng 교수의 집값 예측 예제처럼 꽤 재미있는 결과를 만들어낼 수 있다. 어떤 데이터를 어떻게 학습시켜 어떤 결과물로 보여줄지를 신박하게(?) 잘 생각해보면 전문가 수준이 아니어도 재미있고 유용한 것을 만들어볼 수 있을 것 같다. 당장 Tensorflow Korea 페이지나 Reddit을 보아도 작지만 재밌는 것들이 많다. Sung Kim 교수님 재밌는 것들 많이 올려주셔서 감사합니다.

둘째로, 지식만을 똘똘 뭉쳐 전달하는 강의나 수업 보다도 아주 복잡하고 어려운 지식일지라도 이것이 얼마나 재미있고 세상에 도움을 줄 수 있는지 등을 쉬운 언어로 잘 풀어내는 강의가 어떤 관점에서는 더 의미있고 강력하다. 이런 강의는 그 분야에 수강자로 하여금 큰 내적동기를 불러 일으킬 수 있고 흥미와 호기심을 간직한 체 오랫동안 재미있게 공부할 수 있는 원동력을 제공한다. 그래서 나도 세달이라는 시간을 들여 출퇴근 시간을 이용해 공부해서 당장 실질적으로 할 수 있는 것은 없지만 앞으로도 계속 관심을 갖고 공부하고 여유가 있을때 이것저것 만들어보고 싶은 큰 내적동기를 얻었다. 그래서 보람차다. 또 재밌다. 사랑해요 Andrew..

스크린샷 2017-12-31 오후 3.51.59
2017년 제일 멋있는 형이다.

2018년에는 남세동님의 멋진 가이드라인을 보고 Python과 Keras를 공부해보고 이것저것 만들어볼 생각이다. 여기에 대해서는 다른 글을 통해 무엇을 어떻게, 어떤 순서로 공부할 것인지 그리고 무얼 만들어 볼지에 대해 다뤄야겠다. 그리고 만들고 나서는 결과에 대한 회고 또한 작성하는 시간을 가져봐야 하겠다.

요새는?: 무얼 하는가?, 무얼 공부하고 있나?

최근에는 webpack을 이리저리 뜯어보고 있었다. 기존에 설정한 Hot Module Replacement가 바로 반응하지 않았고 최종 bundle size도 너무 커서 손을 봐야했다. 그리고 Code Splitting, Lazy Import, Tree Shaking 등을 공부하고 적용해보았다.

webpack이야기가 나와서 말인데 이 모든 멋진 기능들을 사용할 수 있어서 참 좋다. webpack 형들 너무 멋있다. 그런데 이것이 동작하는 원리를 파보지 않고 Document만 공부하며 ‘아 이런 거구나. 그럼 이렇게 쓰면 되겠구나.’ 라며 사용만 하고 있는데 무언가 가끔 찝찝하다. 내가 이걸 ‘안다’고 말할 수 있는 걸까? 내가 이걸 정말 ‘학습’한 걸까? 라는 의문이 의식 저편에서 스멀스멀 올라오고 그걸 끝내 외면하지 못한다.

그래서 자문해보았다. 카레이서 선수들도 람보르기니가 제공한 새 자동차를 타보고 새 기능의 원리를 이해하지 않은 체 운전대를 잡는 자신을 보며 나와 같은 찝찝함을 느낄까? 그렇지 않다면 새 기능의 작동 원리를 정확히는 모르더라도 그것이 무얼 위해 있는 건지, 사용할때 어떻게 해야하는지만 잘 이해하고 질주하기만 하면 되는 것은 아닐까? 새 기능이나 엔진같은 것은 그걸 만드는 엔지니어에게 맘편히 맡겨두고..!

여기서 다시 나의 입장으로 돌아와 생각해보면, webpack이 어떻게 이런 기능들을 가능하게 하는지 등의 원리에 대한 이해보다도, 물론 이것을 무시할 수는 없지만 우선 무엇을 활용해야 하는지, 그걸 어떻게 사용하는지 잘 이해하고 프로젝트에 적용해보고 결과를 살펴보는 것이 낫지 않을까? 그렇게 당분간은 학습과 적용에 집중하고 어느정도 익숙해진 다음 webpack의 부족한 점이나 오류 등을 발견하면 그때 webpack의 내부를 뜯어보아도 늦지 않을 것이다. 아마 오픈소스를 접하게 되는 자연스러운 흐름이 이렇지 않을까라고 생각이 드는데 아직은 잘 모르겠다.

webpack 외에는 PWA와 SSR, React Native를 조금씩 공부하고 만들어보고 있다. 이 역시 하나하나 공부할 때마다 찝찝함을 느끼나 언젠가 조금은 통달하기를 바라는 마음이다(커밋이나 해야할텐데 이놈아). 그리고 최근 Reselect를 공부하다가 Redux에서 불필요한 재계산이 생각보다 많이 일어나는 것을 깨닫곤 갑자기 내부가 궁금해서 조금씩 살펴보고 있다. 여기에 대해서도 살펴본 경험에 대해 코드 베이스로 글을 써봐야겠다. 진지하다. 2018년이다.

Blog: 더 공부하고, 더 읽고, 더 경험하고, 더 남기자

WordPressMedium 두 플랫폼에서 블로그를 하고 있는데 2017년 블로그는 가히 뭇매를 맞아 마땅한 수준으로 글을 썼다. 워드프레스엔 개발, 경험, 커리어, 문화, 과학, 철학 등 가장 관심있는 분야들에 대해, 미디엄엔 영어로 개발 위주의 글을 쓰려고 했는데 재료가 많이 부족하기도 했지만 생각보다 너무 글을 못남겨서 아쉽게 올해를 마무리짓게 됐다. 미디엄은 3월에 하나 쓰고 끝났다니..

처음 결심했던 바 그대로 살아있는 동안 더 많이 읽고, 더 경험하고, 다양한 사람들을 만나고, 더 만들어서 많이 남기자. 그렇게 해서 조금이라도 다른 이들이 나로 인해 도움을 얻고 용기를 얻고 지식을 얻기를 바란다.

4개국어는 하고싶다

대망의 외국어 회고다. 첫 회고이니 내 인생의 외국어는 어떻게 시작했는지 돌아보자. 아 점점 글이 길어지는데? 스마트한 독자는 단락별 소제목만 보고 흥미가 당기는 것만 읽었기를 간절히 바란다. 벌써 이 글은 너무 길어져서 아무도 안볼 것 같다. 그냥 쓰자.

대학교 2학년때 막연히 미래에는 세계를 마음껏 누비는 사람이 되고 싶다고 다짐했다. 무엇이 되고자 하는 목표도 없이 일단은 세계를 돌아다녀야 한다는 이상한 제 1원칙을 세웠다. 껌을 팔더라도 해외에서 사고 팔아야 한다는 해괴한 욕망이었다. 학원은 절대 다니기 싫었고 그렇다고 단어, 문법책을 혼자 보기는 더 싫었다. 그래서 2010년, TIME지와 뉴욕타임즈를 무작정 읽기 시작했다.

결과는? 중간에 느낀 건 없다. 그렇게 6년을 읽고나니 다행히 신문이나 분야 상관없이 읽고 싶은 책을 읽을 정도는 되었다. 근데 치명적인 문제가 있었다. 읽기만 했더니 듣고 말할 수 없었다. 신개념 벙어리가 되었다.

그래서 2017년 부터는 듣고 말하기에 집중했다. 집중이랄 것도 없다. 단순히 방식을 바꿨다. 원서를 소리내서 읽고 좋아하는 미드를 볼때 안들리는 문장 몇개를 원어민이 하는 발음, 억양, 감정, 강조, 표정 등을 똑같이 재현하는 연습을 했다. 드문드문 했기 때문에 전체적으로는 두달이 안되는 것 같다. 그리고 TED를 보고 이야기를 나누는 영어회화 스터디를 7개월 정도 참석했다.

결과는 꽤 희망적이다. 전보다는 많이 들을 수 있고 더 말할 수 있게 되었다. 무엇보다 작은 소통은 무리없이 되는 것을 확인하니 듣고 말하는데서 오는 스트레스가 줄게 되어 무병장수에 한걸음 다가간 것 같다. 난 오래 살거다. 아 그리고 처음으로 갑자기 미드가 청크로 명확히 들리는 경험을 했는데 올해 가장 기분 좋은 경험 중 하나였다. Netflix로 Designated Survivor(지정생존자)를 보다 그랬는데 이거 명작이다. 진짜 재밌다.

그 다음은 프랑스어다. 서른 중반이 되기 전 4개국어는 무리없이 하고싶다. 2020년의 노경모야 보고 있나? 4개국어를 하란 말이다. 이유는 딱히 없다. 다만, 분명 어족이 같거나 비슷한 언어 두세개를 익히면 패턴을 느껴 그 이상의 또 다른 언어를 습득하는 것이 쉬워질 거라는 느낌을 받았다. 지금은 Busuu라는 앱을 활용하고 있는데 뭔가 이름 때문인지 부수적인 것 같고 Duolingo로 갈아탈 예정이다.

마지막으로, 지금껏 외국어를 공부하며 느낀 것은 생각보다 책이 필요 없다는 점이다. 여기서 말하는 책이란 단어나 문법 책이다. 물론 멋진 단어책 한권 떼고 시작하면 굉장한 부스트를 받게 되는 것은 무시할 수 없으나 본질은 언어를 몸으로 ‘익히는’ 것이 아닐까 한다. 가령, 꼭 책을 보며 머리만 이용해 언어를 습득하지 않아도 몸에도 작업 기억이 있듯 영어의 호흡을 하고, 한국어를 사용할 때와는 다른 종류의 근육을 써가며 발음을 내뱉고 감정 표현을 하다보면 영어만이 주는 패턴이 온몸에 새겨진다. 호흡과 입 근육부터 시작해서 이후에는 영어가 주는 프레임으로 사고하게 된다. 한국어는 끝까지 듣고 보라는데 영어는 앞만 들으면 되는 것도 여기서 비롯된 것이다.

그래서 새로이 공부하는 프랑스어는 소리만으로 공부하고 있다. 기본적인 단어야 소리로 공부하면 되므로 우선은 이 방식을 고수하고 있다. 또 한두 분기 공부해보고 회고를 남겨봐야 알겠지만 지금까지의 경험에 의하면 이렇다. 물론, 아직 확신은 없다. 6개월 뒤에 다른 깨달음을 얻을 수도 있을 것이다. 다만, 이 멋진 영상에서 큰 힌트를 얻었다. 외국어 학습은 계속 책과 영상을 통해 이해해야 할 것 같다.

Read books: 나도 모르는 나를 발견하는, 전혀 새로운 나를 알게 되는 수단

이런 생각으로 처음 책을 읽었다. 이걸 쓴 사람은 대체 무슨 생각으로 이렇게 두꺼운 책을 썼을까? 그렇게 읽고 책의 내용을 이해하고 나니 이런 생각이 들었다. 만약 내가 2년에 걸쳐 깨달은 것을 책으로 낸다면 이걸 읽은 사람은 간접적일 지라도 그 2년의 지식과 통찰을 반나절만에 가져가는 것이 아닌가? 도둑놈인가?

내가 블로그를 하는 마음과 비슷하게, 더 멋지고 똑똑한 선대의 형들도 여러 해에 걸쳐 알게 된 모든 것을 잘 정리하여 세상에 알리고자 하지 않았을까. 이런 생각을 하니 책을 읽지 않을 수 없었다. 새로운 걸 알게 된 시점에 그 시각으로 새로이 보는 세상은 매번 바뀌어 왔다. 열권을 읽었다면 적어도 여덟번은 바뀌었다.

회고를 해보자. 지금 읽는 책의 분야는 철학, 물리학, 생물학, 인류학 및 GRIT과 같은 self-motivated 류의 책들이다. 과학에 치중되어 있는데 아무래도 경제/사회와 소설 쪽도 골고루 읽어야 할 것 같다. 인간에 대한 이해가 결여된, 감성 없는 기술 발전은 쓸모 없다는 나의 믿음을 위해서라도 밸런스를 맞춰야 하겠다. 2018년에 읽어볼 도서 목록을 정해보고 이에 관한 글을 따로 써보자. 그리고 블로그에 새로운 카테고리를 만들어 읽은 책에 대한 리뷰를 남기도록 해야겠다.

KakaoTalk_2017-12-31-16-13-38_Photo_14

KakaoTalk_2017-12-31-16-14-14_Photo_70

KakaoTalk_2017-12-31-16-14-18_Photo_66

이 재밌는 것들을 오래 하려면

위에서 다룬 이 모든 재밌는 것들을 오래 하기 위해선 건강이 무조건 뒷받침되어야 한다. 아직 스물일곱인데 이런 얘기해서 설득력이.. 하나도 없지만 시간이 더 지나기 전에 한번 습관을 만들어야겠다는 느낌이 들었다. 그래야 서른, 마흔이 되어서도 운동의 재미를 느끼며 꾸준히 하지 않을까.

그래서 시작한 것이 철봉과 푸쉬업 위주의 맨몸 운동이다. 일단 너무 힘들다. 철봉은 정자세로 풀업 한개를 채우기까지 한달이 걸렸다. 작년 가을부터 시작해 올해 여름까지 조금씩 꾸준히 해보니 드디어 사람같은 생김새를 얻었다. 그 전엔 너무 체구도 작았었고 무엇보다 조금만 힘써도 쉽게 피로감을 느꼈다. 요새는 춥다는 핑계로 실내에서 푸쉬업만 하고 있는데 내년엔 유산소 운동을 꼭 해야겠다는 생각이 들었다. 땀흘리지 않으니 몸이 정말 삐걱거린다. 재밌는 것들 오래 하려면 일단 건강하고 봐야 한다. 다음주에 올림픽공원 옆으로 이사가니 이제 더는 댈 핑계도 없다. 운동 열심히 하자.

앞으로는?

드디어 마지막 단락이다.

공부해야 할 것도 산더미고 하고 싶은 것도 산더미라 이 시점부터는 선택과 집중 그리고 우선순위 부여가 정말 중요해질 것 같다. 내가 내린 지금의 선택이 시간이 지나면 지날 수록 내게 미치는 영향이 너무 커지기 때문에 어떤 선택을 선뜻 내리기가 어렵다.

그래도 큰 가닥에는 변함이 없는 것 같다. Web Frontend와 Machine Learning 두가지의 큰 줄기로 공부와 개인 프로젝트를 이어나가고 싶다. 두 분야를 공부하다가 나중에는 대체 어떻게 연결시켜 하나의 커리어로 만들어나갈지 전혀 감이 오지 않지만 인생은 저지르고 보는 것 아니겠는가? 2018년에도 열심히 저지르고 열심히 회고하자. 아쉬운 2017년 안녕!

 

2017년을 나타내는 사진들

옷, 개인 그리고 패션테크 스타트업

얼마전 김정운 작가의 Editology를 읽었을때 책에 이런 구절이 있었다.

공간의 형태에 따라 생각하는 방식도 달라진다.

facebook new building에 대한 이미지 검색결과

그래서 위 사진과 같이 Facebook도 자신들의 미션에 따라 새로운 공간에서 일하기 시작했는데 사방이 탁 트이고 천장도 매우 높은 공간이다. 그럼 그들의 미션이 뭐길래 탁 트인 공간에서 일하기를 원했을까? 이미 Zuckerberg가 Y Combinator에서 언급해 많이 유명해진 그들의 미션은 사람들을 더 연결시키는 것이다. 이런 미션에 따라 일하는 것이 업무 공간과 어떤 연관성을 갖는지 생각하기 전에 먼저 이 미션에 따라 일한다면 사람들이 어떤 방식으로 생각하게 될지에 대해 알아보는 것이 좋겠다. 그래서 아래와 같은 질문들을 떠올려봤다.

  • 전세계의 사람들을 연결시키고자 하는 이들은 일을 할때 생각이 어떻게 흐를까?
  • 한 국가에 한정된 서비스를 만드는 사람들의 사고 흐름과 비슷할까?
  • Facebook의 엔지니어들은 엔지니어링 부서 이외에 어떤 팀들과 소통을 얼마나 자주하고 어떤 과정으로 기능에 대한 아이디어를 얻어 설계하고 만들까?
  • 그럼 마케팅팀 직원들은?
  • 디자인팀 직원들은?
  • CEO와 경영진은?
  • 이 몇만명의 직원들이 어떻게 미션과 가치를 서로 공유하고 그에 따라 태스크를 구상할까?

질문을 하면서 답변이 동시에 저절로 나오는 걸 느꼈다. 국가, 종교, 문화, 기후, 언어, 인종 그리고 가치관이 서로 다른 사람들을 연결 시키려면 그에 걸맞는 서비스가 필요할 것이고 그 서비스를 이루기 위한 기능과 디자인이 필요할 것이다. 누구를 대상으로 어떤 서비스를 하느냐는 그 회사의 정체성을 나타낼 것이고 그에 따라 팀들 간의 유기적 협업 방식도 달라질 것이다. 즉, 일의 목적에 따라 그에 적합한 업무 방식이 필요하게 될텐데 그 방식이 회사 곳곳에 잘 정착되기 위한 문화나 공간이 필요하지 않을까? 이런 서비스를 하는 회사의 업무 공간이 팀별로 지나치게 구분되어 있거나 넓은 회의실이 몇 군데 없고 건물 곳곳에 배치되어 있지 않으면 팀들이 서로 협업하기 어렵지 않을까?

위에서 든 예는 업무 형태에 따라 적합한 공간 형태를 생각하는 순서였지만 반대로도 설명이 가능하다. 자연을 벗삼아 사는 사람과 건물이 빽빽하게 들어선 도시에 사는 사람의 사고 방식과 흐름이 전혀 다른 것처럼 업무 공간의 형태에 따라 같은 일을 하더라도 사고의 방식과 흐름에서 차이가 생길 것이다. 물론 업무에 적합한 공간에서 일하지 못한다고 해서 생산성이 급격하게 낮아지거나 하는 것은 아닐 것이다. 어디까지나 공간까지 생각하는 것은 생산성을 최대한 끌어올리고 자신들의 미션과 문화에 맞는, 직원들을 한껏 고무시킬 수 있는 환경을 만드는데 목적이 있기 때문이다. 98%에서 99%로 나가기 위함일 것이기 때문이다.

 


 

서론이 참 길었는데 패션테크 스타트업에서 일하면서 옷도 이와 비슷하다고 생각하게 됐다. 내가 좋아하는 옷을 입은 날은 집을 나설때부터 다르다. 아침에 하는 생각의 내용도 조금 달라진다. 오늘 있을 일을 생각하고 누굴 만나 어떤 이야기를 나눌지까지 생각이 이어진다. 뭘 입을지 생각이 안나 대충 입은 날은 종일 찝찝하다. 옷에도 생각이 반영되지만 어떤 옷을 입느냐도 생각에 영향을 미친다.

옷은 생각과 행동에 영향을 미친다.

심지어 옷을 구경하면서 이건 어떨까, 저건 어떨까 생각해보고 입다보면 내가 몰랐던 나의 모습을 알게 될 때가 있다. 전에는 한번도 생각해보지 못했던 디자인이나 스타일의 옷을 입어보면 되게 어색하지만 ‘어 뭐지 이런 모습도 있었나?’ 하고 생각하게 된다. 직장인이 되고나서 이런 경험을 서너번 했다. 이쯤 되니 사실 패션은 자기이해를 필요로 하는 자기표현인 거구나! 하고 깨닫게 되었다.

패션은 자신을 찾아가는 길이다.

그래서 패션테크 스타트업에서 일하는 사람으로서 패션을 자기이해의 수단으로 보는 관점이 사회에 얼마나 만연한가가 패션 사업성에 어떻게 영향을 미칠지 그 관계성에 대해서 다뤄보고 싶어졌다.

Fashion – 너에 대해 얼마나 알고 있니?

나는 나에 대해서 얼마나 이해하고 있을까? 정확히 말할 수 있다. 나는 아직도 나를 잘 모른다. 아직 찾지 못한 부분이 많다. 물론, 아는 범위 안에서는 누구보다 나를 더 잘 안다. 하지만 모르는 부분이 있는 것은 사실이고 인생은 어쩌면 자기를 찾고 이해하는 자아성찰의 여행일지 모른다. 마틴 하이데거도 죽기 전까지 자신에 대해서 완전히 이해하지 못했을 것이다.

The Sartorialist – 사진으로 가득 채워진 이 책은 패션에 대해 그리고 패션이라는 창으로 새로운 나를 보게 해주었다.

 

아마존 베스트셀러 중에 The Sartorialist라는 책이 있다. www.thesartorialist.com 라는 사이트의 도서 버전이다. 이 책은 텍스트가 반도 안된다. 전체가 인물사진이고 모두들 완전히 다른 옷을 입고 있다. 한명 한명 사진을 보면서 ‘내가 저 옷을 입고 있다면 어떤 기분일까’ 라며 계속 나를 대입시켜 보았다. 찌릿찌릿 했다. 어떨때는 부끄럽기도 했고 어떨때는 기분이 좋아지기도 했다. 단순히 멋진 옷을 자기만의 스타일로 입은 사람의 사진을 보았을 뿐인데 나는 거기서 오히려 나에 대해서 알게 되었고, 심지어는 가까운 미래에 어떤 커리어를 쌓으면서 어떤 옷을 입고 일을 하고 싶은지, 어떤 옷을 입고 회의에 참석하고, 연단에 올라 발표하고 싶은지를 생각해보게 되었다. 물론 지금은 너덜하게 막 입고 다닌다..

sartorialist에 대한 이미지 검색결과 sartorialist에 대한 이미지 검색결과sartorialist에 대한 이미지 검색결과sartorialist에 대한 이미지 검색결과

관련 이미지

사토리얼리스트에 있는 사진들이다. 요새 너무 formal하지 않은 정장에 관심이 많아서 이런 사진들을 가져왔다. 아.. 저 일본 아저씨들 너무 멋있다. 이 사진들을 보고 어떤 생각이 드는가? 그냥 저런 옷을 입은 외국인에 불과한가? 아니면 ‘내가 저 옷을 입고 출근을 하면 어떤 기분일까’ 라며 자신을 대입시켜 보고 상상해보았는가?

나는 단순히 옷을 입은 사람을 본 것이 아니었다. 패션 도서를 읽은 것이 아니었다. 나는 패션이라는 도구를 접함으로써 자기이해의 과정을 걷고 있었던 것이다. 몇년전의 내가 이 문장을, 이런 생각을 보고 엿듣게 된다면 코웃음을 쳤을 것 같다. 그런데 한번 관심을 갖게 되니 안보이던 것들이 보이기 시작하고 이 분야의 사람들이 이해되기 시작했다. 그리고 나도 모르던 나의 모습과 내가 어떤 모습이길 바라는가에 대해서도 서서히 알아가기 시작했다. 책을 읽고 여행을 떠나 모르던 곳을 탐방하고 새로운 모임에 나가 새로운 사람들을 만나 이야기하는 것만이 자기성찰의 방법이 아니었던 것이다. 나를 알아가는 새로운 루트를 찾은 것이었다. 옷을 통해서 나와 주변 그리고 우리를 감싼 문화 전반에 대해서 새로운 관점으로 이해하기 시작한 것이다. 문화에 따라, 오늘의 느낌에 따라, 충동에 따라, 만날 사람에 따라, 나갈 모임에 따라, 생각에 따라 옷을 골라 갖춰 입는 것은 그저 옷을 집어 걸치는 행위가 아닌, 충분한 자기이해를 바탕으로 한 자기표현의 행위인 것이다.

혹자는 이렇게 생각할 수도 있겠다. ‘나는 옷을 잘 입는데 그렇게까지 나에 대해 이해하면서 옷을 입지는 않는데?’ 어디까지나 자기이해는 메타인지의 영역이다. 옷을 잘 입는다고 꼭 자기이해가 수반 되었다고는 할 수 없다. 그러나 옷을 잘 입고 싶은 그 이유를 내 안에서 찾기 시작하면 그때부터 자기이해가 시작된다. 나 자신이 어떻게 생각하고, 어떻게 느끼고 반응하는지에 대해 알아가기 때문이다. 그렇다고 옷을 잘 입지 못한다고해서  자기이해가 덜 된 것도 아니다. 앞서 이야기했듯 패션은 자기이해와 자기표현에 이르는 하나의 길이기 때문이다. 내가 과도가 없다고 사과를 못깎아 먹는 것은 아닌 것처럼 말이다. 과도 없어서 못깎아 먹으면 인생에 대해서 한번 되돌아 볼 필요가 있다…

그리고 사업성

생각이 여기까지 이르고 나니, 패션테크 스타트업에서 일하는 사람으로서 사업성을 생각하지 않을 수 없었다. 지금까지 살펴본 바로는 패션은 개인의 취향과 생각, 가치관에만 그 영향이 국한되어 있지 않다. 사회와 문화에도 관련이 있고 둘은 서로 끊임없이 영향을 주고 받는다. 개인이 사회에서 갖는 역할을 중요시하는 문화에서는(성숙한 문화에서는) 많은 사람들이 다양한 활동을 하며 계속 자신을 이해하는 과정을 반복한다. 선진국에 작가와 블로그 문화(like WordPress and Medium)가 잘 발달되어 있는 것도 같은 맥락으로 볼 수 있다. 자신이 경험한 것과 알게된 것에 대해서 서로 공유한다. 도대체 이게 패션의 사업성과 무슨 연관성이 있단 말인가?

이 부분이 아주 중요하다. 옷은, 패션은 그냥 옷 걸치는 것이 아니다. 개인 문화가 성숙한 사회에서는 개개인이 스스로의 인생에 대한 관심과 애정이 높고 자신의 취향 또한 분명(확고)해질 수 밖에 없다. 자신이 뭘 원하고 앞으로 어떻게 살고 싶은지 이해하고 있는 개인들이 매우 다양하게 그리고 많이 존재한다는 의미다. 이것이 옷으로 옮겨가면 앞서 이야기했던 다양한 상황 속에서 자신이 어떻게 보여지고 싶은지 즉, 어떤 옷을 입어 자신을 나타내고 싶은지로 연결된다. 당연히 이런 곳에서, 이런 개인이 많은 곳에서 다양한 옷이 더 자주, 더 많이 팔리지 않을까? 옷에 정말 개미 코딱지 만큼도 관심없는 사람을 붙잡고 옷이 이래요, 추천이 어째요, 감성이 오져요라며 백날 설명하고 광고해도 통하지 않을 것이다. 특히 그런 개인이 많은 지역 혹은 국가일 수록 더 그럴 것이다. 물론, 아직은 옷에 관심이 없지만 이제 천천히 알아가고자 하는 사람이 있을 수 있듯 경우의 수는 매우 다양할 것이다. 하지만 분명한 것은 그 여러 카테고리에 속한 사람의 수는 많지 않을 것이다. 중요한 것은 어떤 카테고리들이 주류를 이루는가에 대해 알아내는 것이지 않을까?

이미지 검색결과
The Millennials – X 세대의 뒤를 잇는 밀레니얼 세대

 

airbnb에 대한 이미지 검색결과

 

 

 

Airbnb는 사업이 궤도에 오른 후 시인했다. 자신들이 성공할 수 있었던 가장 큰 이유 중 하나는 밀레니얼 세대였다고. 밀레니얼 세대는 디지털에 익숙하고 자금이 그리 넉넉치 않지만 여행을 떠나기 좋아하며 새로운 인연을 만들어 나가는데에 거리낌이 없는 세대다. 앞서 설명한 내용에 비추어보면 이 세대는 자기이해의 여정을 달가워하고 즐기는 세대인 것이다. 초창기의 Airbnb는, 현재도 그러하지만, 이 세대가 견인했다고 해도 과언이 아니다. 남의 집에 모르는 사람을 들여 숙박하게 한다? 새로움과 창의성이 샘솟는 실리콘 밸리에서도 Airbnb의 이런 아이디어는 철저히 무시당했다. 그러나 그들의 사업과 아이디어는 돈이 궁핍하지만 전세계로 여행하길 원하는 밀레니얼 세대에 의해 처음으로 환영받았고 지지 받았다. 그렇게 사업이 성장하기 시작했고 안정화 되어갔다. Airbnb가 이후 어떤 고난과 역경을 딛고 지금에 이르렀는지는 The Airbnb Story라는 책이 아주 잘 설명해 놓았다.

다시 패션으로 돌아와, 이 Airbnb의 이야기를 패션에 적용해보면, 현재 우리가 시장으로 삼고 있는 사회에 속한 사람들이 어떤 사람들인지를 알아보는 것이 필요해진다. 물론 Airbnb는 사업을 시작할때 밀레니얼 세대는 생각조차 안했지만 말이다. 적어도 서비스를 제공할 대상에 대해 알아본다면 사업을 진행하고 전략을 수립하는데 큰 도움이 되지 않을까? 우리가 만들 서비스를 쓸 사람들에 대해 알아보기 위한 질문들을 아래와 같이 생각해보았다.

  • 이들은 어떤 사람일까?
  • 자신에 대해 알기를 꺼려하지는 않을까? 그럴 준비는 되었을까?
  • 아직 그 정도로 문화가 성숙하지는 못하지 않았을까?
  • 2, 3, 4, 50대 각각은 어떤 생활 양식으로 대변될 수 있을까?
  • 지금 그들의 상황은 어떠한가?
  • 앞으로 더 잘 벌 수 있으리라는 분위기가 사회에 만연한가?
  • 이들은 미래를 낙관하는가? 아니면 반대인가? 그에 대한 이유는?
  • 이들은 여행하기를 좋아하는가?
  • 이들이 명품에 대해 또는 어떤 브랜드에 대해 어떤 인상을 갖고 있을까?
  • 또 그 인상의 강도는 강한가? 혹은 약한가?
  • 강하다면 어느 방향으로 강하고, 그 방향이 우리가 알리려는 방향과 다르다면 어떻게 이해시킬 수 있을까?
  • 이해시키는데에는 얼마만큼의 시간이 걸릴까? 그 시간을 우리가 견뎌낼 수 있을까?
  • 거부감이 들지 않도록 바꾸고 이해시키려면 어떤 마케팅과 홍보 전략을 어떤 스텝으로 수립하고 실행해야 할까?

타겟을 이해하고 좁혀 사업을 진행하는 것은 중요할 것이다. 그런데 그 타겟이 속한 사회와 이를 대변하는 개인을 이해하지 못한다면, 위와 같은 질문들에 대한 대답이 선행되지 않는다면 뭘 어떻게 좁힐지 정하는 것이 어렵지 않을까? 적어도, 위와 같은 질문 및 이해가 뒷받침 된다면 좀 더 수월하게 사업을 진행하고 여러 전략들도 시장에 대한 이해를 바탕으로 수립할 수 있지 않을까라는 생각이 든다. 이 이해를 바탕으로 또 다시 아래와 같은 질문을 해볼 수 있다.

  • 우리가 제공하려는 패션 서비스의 가치가 무엇인가?
  • 그 가치가 소비자 주류에게 얼마나 다가갈까?
  • 다가가지 못하고 있다면 그 이유가 성숙한 개인 문화의 부재 때문은 아닐까?
  • 다른 이유가 있다면 개별적인 영향은 얼마나 될까?
  • 현재 소비자 카테고리는 어떻게 나눌 수 있을까?
  • 각각에 대한 상황은?

지금까지 패션이 개인의 자기이해와 어떤 관련이 있는지 그리고 그 관련성이 패션 서비스를 만드는 관점에서 어떻게 사업성에 영향을 미칠 수 있는지 살펴보았다.

자기이해의 관점에서만 보면 우리는 음악을 들으면서, 옷을 사고 입으면서, 여행을 하며 새로운 곳에 가보면서, 새로운 분야를 공부하면서, 새로운 사람을 만나면서, 새로운 언어로 소통하면서 끝없이 자기이해의 과정을 걷는다. 나는 이 각각이 서로 분리되어 있다고 믿지 않는다. 아직은 보수적인 사회 분위기에 의해 이 연결고리들이 군데군데 끊어져있다. 남자가 화장을 하네, 여자가 저런 옷을 입네, 저 사람은 저런데를 가네.. 등 온갖 편견들이 도사리고 있다. 이 편견들이 자취를 감출때, 모든 개인이 각자의 성향과 하고자 하는 일에 대해 존중을 받을때 개인들의 활동은 더욱 다양해지고 풍성해질 것이라 믿는다. 그리고 그렇게 되었을때 옷에 대한 사람들의 관심 또한 훨씬 더 다양하고 많이 생길 것이라 생각한다. 그때 우리 서비스는 사람들이 자신을 찾아가는 여정을 돕는 건강한 서비스로서 더 큰 성장을 할 수 있을거라 믿는다.

SK에서 난 무엇을 배웠나

이 회사에서 난 무엇을 배웠나. 그리고 스타트업으로 오기까지 난 무엇을 했나!

지난 2년을 정리하고 되돌아볼 때가 왔다. 그 2년을 크게 3 부분으로 나눠볼 수 있겠다.

  • 회사에 입사했고
  • 퇴사를 했고
  • 회사에 입사했다

2015년 2월 졸업을 하고 회사가 뭔지, 일이란게 무엇인지 아무것도 모르는 상태에서 같은 해 7월 1일, SK C&C에 입사했다. 그리고 정확히 15개월 뒤인 2016년 9월 30일에 퇴사를 했다. 지금 생각해도 아찔한 나날들이다.😨 너무 많은 변화가 짧은 기간에 일어나 무슨 일이 일어날 때마다 적절한 대처가 무엇인지 알기 위해 부딪치고 헤맨, 고된 학습의 시간이었다. 컴퓨터공학엔 관심을 가진지 2년도 안되는, 그저 철학 서적을 탐독하던 스물다섯 새파란 rookie였으니 옆구리만 찔러도 놀라고 뭘 갖다줘도 모든게 새로운 때였다. 물론 지금도 공부할 게 산더미다(..).

그래서 무얼 배웠나?

이것도 아래와 같이 크게 세가지로 나눠볼 수 있겠다.

  • 조직이 어떻게 구성되고 업무가 어떻게 부여되는가
  • 조직 문화가 갖는 회사에서의 역할
  • How to communicate efficiently!

조직, the organism constantly moving forward

팀에 부서 배치를 받고 사무실에 처음 들어간 날을 잊을 수 없다. 오우 이게 회사구나. 그렇게 첫 여섯달을 배우고 일하면서 가장 먼저 눈에 들어온 것이 이 정도 규모의 큰 조직이 어떻게 구성되어 있고 그 구조에 따라 개인에게 업무가 어떤 형태와 과정으로 부여되는가였다. 물론 신입사원의 눈으로 보는 것이었기에 많은 것을 다 파악하기엔 한계가 있었다. 그럼에도 그 구조를 알아보려 부단히 노력했다.

가장 중요해 보였던 것은 사업부다. 사업부란 말 그대로 어떤 회사가 생존하고 성장하기 위해 중점적으로 일으키고 있는 모든 경제적 행위들을 실행하는 세부 조직의 집합이다. 그리고 이것을 중심으로 사업과 직접적으로 관련된 세부 조직이 구성되고, 이 조직이 원활히 운영되기 위해 필요한 인적, 물적, 문화적 자원을 관리 및 배분하고 경영에 관련한 변경 사항이나 공지할 사항을 전 조직에 알리는 역할을 하는 지원 조직이 구성된다. 단순히 구분하자면 Running / Support로 나눌 수 있겠다. 이 Support 조직을 회사마다 다르게 부르고 구성한다. 이중에 인적 자원에 집중하는 조직을 대표적으로 부르는 이름이 HR 일테다. 그리고 돈을 벌어다주는 영업 조직. 사업의 형태와 성격에 따라 팀으로 있을 수도 있고 Running 조직의 부분으로 존재할 수도 있다. 그 다음으로 회사의 규모, 재정 상태 혹은 종류에 따라 부가적으로 생기는 조직들 중 하나가 R&D다. 이 연구개발 조직 또한 사업의 특성에 따라 완전히 독립적인 형태로 존재할 수도 있고 각 사업부마다 귀속된 형태로 있을 수도 있다.

이쯤 파악하고 나서 든 생각은 회사는 완전한 유기체라는 것이다. 가장 기본이 되는 단위 조직이 마치 움직이는 레고 같았다. 위 단락에서 본 바와 같이 어느 것 하나 글로벌하게 정해진 틀이 없다. 어떤 사업을 하느냐에 따라 Support 조직의 규모가 클 수도, 작을 수도 있고 R&D 조직이 독립적일 수도 있고 특정 사업부에만 존재할 수도 있다. 회사의 가치, 사업의 형태에 따라 이 레고들은 유기적으로 배치되고 조립된다. 더 높은 차원에서 이야기하면, 당연히 회사 또한 국가와 국제사회라는 더 큰 조직의 세부 조직이므로 회사의 레고들은 사회-회사에 걸쳐 이중으로 영향을 받는 셈이다. 이렇게 이중적 영향을 받아 생기고 있는 대표적인 레고 중 하나가 AI branch다. 애초에 회사의 사업을 구성할 때 AI 및 Machine Learning은 고려조차 하지 않았지만 시대적 흐름을 무시할 수 없어 만들어졌기 때문이다. 즉, 처음부터 ML로 돈을 벌기 위해 설립된 회사가 아닌데 회사 내에 ML related 팀이 있다면 그 레고는 이중적 영향을 받은 것이다.

나이 서른, 늦더라도 마흔에 북미권에서 스타트업을 꼭 만들고 싶은 나로서는 조직을 어떻게 구성해야 하는가에 대해 알아볼 수 있었던 소중한 배움들이었다. 조직에 대해 한 문장으로 정리해보면, 조직은 실행하려는 사업의 특성과 형태에 따라 적절히 구성하고 회사의 핵심 가치에 따라 끊임없이 개선 및 발전시켜야 한다는 것이다. 사업의 특성에 맞지 않게 Support 조직이 비정상적으로 비대하거나, Running 조직들 간의 조립 이음새가 시원찮거나, 외부의 흐름에 따라 유기적으로 조직 구성의 변화를 꾀하지 못한다거나, 조직의 구성이 사업의 특성에 맞지 않는다거나 하여 레고들이 잘 조립되어 굴러가지 않는다면 회사는 언젠가 삐걱거릴 것이라고 생각한다.

조직 문화의 역할과 중요성

다음에 배운 것이 조직 문화이다. 이것의 결핍을 회사에서 많이 느꼈기 때문에 그 필요성과 중요함이 매우 크게 다가왔다. 조직 문화는 실체가 없다. 그래서 만질 수도 없고 누군가에게 ‘여기 있어요~’ 라며 건네줄 수도 없다. 다만, peer colleague들이 서로를 어떻게 대하고 소통하는지, 서로 다른 직급에서는 어떻게 소통이 이루어지는지, 구성원들이 서로를 어떻게 부르는지, 구성원들이 회사를 어떻게 생각하는지, 경영진과 모든 구성원이 회사의 Service로 고객에게 어떤 가치를 주고싶은지, 경영에 관한 중대한 결정을 할때 구성원들이 어떻게 참여하고 의견을 내는지, 한 가지 사안에 대해 다같이 참여해야할 상황에 회의를 어떤 가치에 따라 진행하는지, 그 방식은 어떤지 등 회사 내에서 이루어지는 모든 행위에 추상적으로 깃들어있다.

만질 수 없고 보이지 않아서 쉽게 간과되고 무시될 수 있다. 그래서 더욱 중요하다. 보이지 않지만 회사 구석구석 모든 곳에 존재하고 그 영향을 끊임없이 끼치기 때문이다. 따라서 ‘우리가 하려는 일은 이러한 거에요. 이 일을 통해 이런 가치를 만들고 있어요. 우리는 이런 일을 하기 때문에 서로를 이렇게 생각했으면 좋겠어요. 그래서 일대일, 다대다 소통을 할때는 이런 방향으로 하길 원해요. 그 방식이 우리가 추구하는 가치를 더욱 풍성하게 하고 서비스를 더 좋게 만들 것이라 믿어요.’ 라는 식의 정언적 문장들이 지속적으로 갈고 닦아져야 하며 구성원들 또한 그것을 좋아하고 그것에 깊이 공명하고 그것에 따라 행동할 수 있어야 한다. 회사를 구성하는 아주 작은 개인들에게도 큰 영향을 끼치고 이는 곧 사업의 질과도 연결되어 있기 때문이다. 물론 뚜렷한 조직 문화가 없다고 해서 제품 혹은 서비스가 꼭 안좋지는 않을 것이다. 하지만 분명한 것은 그저 좋은 제품이 아닌, 사랑받는 제품과 서비스를 만드는 회사를 보면 하나같이 좋은 조직 문화를 갖고 있고 그것을 끊임없이 개선시키고 있다. 여기에 대해 생각할 때마다 문화가 좋으면 사내에 선순환적인 고리가 생길 것 같은 직감을 꾸준히 받는다.

소통이 뭐에요? 😲

그 다음은 소통. 가끔 인스타를 하다보면 누군가가 내 사진에 좋아요를 누르고 ‘잘 봤어요. 소통해요~’ 라며 댓글을 다는 것을 심심찮게 본다. 대체 난 저들과 무슨 소통을 해야한단 말인가.. 들어가보면 죄다 네일샵이다.. 이런 실체가 잘 와닿지 않는 소통을 회사에서도 적절히 잘 해야함을 느꼈다. 너무 당연한 말인가? 하지만 ‘잘’ 하는 것은 그리 쉽지 않다. 그것도 회사에서는 더욱. 결론적으로 ‘커뮤니케이션에 능하다’ 를 먼저 정의하자면, ‘상대가 어떤 심정, 상태, 맥락에서 어떤 메세지를 전달하려는지 의도를 파악하고 경청한 뒤, 나의 메세지 또한 상대가 잘 이해할 수 있도록 상대의 언어로 표현하는 것‘이다. 너무 조건이 많아 보이는가? 하지만 아주 필요한 것들로만 구성한 문장이다. 그만큼 잘 소통하는 것은 무척 어려운 일이다. 살아보니 실제로 그렇고 이것의 결핍때문에 크고 작은 불상사를 겪는 사람들을 주변에서 아주 많이 왕왕 봐왔다. 그래서 적어본다. 내가 겪은 소통이 참 어려웠던 불통 케이스들.

  1. 듣는 것 같긴 한데 말이 너무 없는 사람
  2. 듣지도 않고 말도 없는 사람(…)
  3. 잘 듣지도 않는데 자기 말이 너무 많은 사람
  4. 상대의 말을 아무렇지 않게 끊는 사람
  5. 듣기는 하는데 상대의 심정, 상태, 맥락 파악이 안되는 사람
  6. 말할 때 상대의 언어로 말하지 못하는 사람

모두 회사에서 만나면 골치아픈 건 매한가지인 사람들이다. 1, 2번은 매우 답답하고, 3번은 annoying하고, 4번은 매우 불쾌하며, 5, 6번은 안타깝다. 1~4번은 눈에 너무 띄기 때문에 웬만해선 주변에서 다 인식하고 있다. 그래서 협동(?)하여 잘 대처할 수 있다. 5, 6번은 안타깝다고 했는데 이유는 다음과 같다. 먼저 5번은 정상적인 소통은 가능하나 상대에 대한 이해를 바탕으로 이야기하지 못하기 때문에 메세지 전달력이 낮을 뿐더러 상대의 마음을 움직이는 데에는 십중팔구 실패한다. 상대의 심정을 알고 그의 말하는 전후 맥락을 파악하는 것이 어떻게 메세지 전달력과 설득력에 도움이 되냐고 묻는 사람이 더러 있다. 상대가 어떤 심정인지 알면 그에 맞춰 나의 말하는 stance를 정할 수 있다. 당연히 나의 stance에 따라 말하는 양태 또한 달라지고 이를 듣는 이도 느끼고 반응한다. 같은 내용의 메세지이더라도 어떤 방식과 형태를 취하느냐에 따라 분위기가 달라지고 듣는 이의 수용력에 영향을 미칠 수 있다. 그래서 5번은 그 이해의 폭만 넓히면 괜찮은 소통을 할 수 있기 때문에 안타까운 것이다. 6번도 안타깝지만 조금은 답답한 케이스다. 가끔 자기 분야의 용어로 뒤범벅된 언어를 구사하는 사람이 있다. 대화 중에 말이다. 모두가 같은 분야 사람이고 회의를 하는 경우에는 문제가 되지 않는다. 하지만 다양한 분야의 사람들이 모인 자리나 그런 개인과 소통할 때엔 문제가 된다. 듣는 이가 화자의 말에 공감할 수 없기 때문이다. 이런 경우, 듣는 이도 화자가 적어도 무슨 말을 하는지는 이해하지만 결론적으로 와닿지 않기 때문에 서로 좋은 소통을 하는 데엔 실패한다.

어디든 좋은 소통이 이루어지기 어려운 곳은 별로 있고 싶은 곳은 아니다. 좋은 소통이 되는 곳에 있으면 일과 대화에 완전히 몰입하고 시간 가는 줄 모르고 집중하게 되는 일이 빈번하게 일어난다. 그런 일이 잦으면 잦을 수록 직장 생활 뿐만 아니라 삶에 대한 만족도 또한 상승할 것이라 생각한다. 아니, 거의 그렇게 믿는다. 김정운 작가의 책을 읽다가 이런 구절을 본 적이 있다. 소통을 정말 잘하는 사람은 공감(sympathy), 감정이입(empathy)을 하고 나아가 공명(resonance)한다는 것이다. 정말 공감하는 바이다. 이 말은 앞서 설명한 ‘상대의 심정, 상태, 맥락을 이해’하지 않고서는 성립되지 않기 때문이다. 입사하기 전엔 이런 여러 종류의 불통러들을 회사 내에서 만났을 때 어떤 일이 일어날지 전혀 예상하지 못했고 생각할 겨를도 없었다. 1년 넘게 다니면서 이런 불통러들이 회사와 일에 어떤 영향을 미치는지 골고루 보아왔다. 그래서 참 고맙고(?) 좋은 소통을 하기란 쉬운 것이 아니고 그것엔 자기 개선이 필수적으로 수반된다는 사실을 알게 된 시간들이었다.

무엇이 나를 퇴사로 이끌었는가?

대학교 2학년때 처음으로 꿈이 생겼다. 당시엔 ‘세계적인 엔지니어가 되어 세상에 무언가 도움이 되는 걸 만들고 싶다’ 라는 다소 추상적인 형태의 꿈이었다. 다행히 전에 쓴 글 나, 주체적으로 살고 있는 걸까? 에서 설명한 것처럼 이 추상적인 꿈은 현재 나의 가장 근원이 되는 꿈이 되어 지금도 길라잡이 역할을 하고 있다. 입사를 할때에도 이런 삶의 방향성에 입각해서 계획을 세워야 했다. 그래서 생각한 것이, 개발 부서에 배치되면 최대 3년, 이외의 부서는 2년을 다니는 것으로 정했다. SI 회사였기 때문에 기간 산정이 저렇게 나왔고 대기업에서 배울 수 있는 것을 최대한 습득하고 service를 만드는 개발을 하기 위함이었다. 그래야만 최대 3년을 다녀도 스물여덟에 나와 다른 도전을 할 수 있다는 계산이 나왔기 때문이었다.

그렇게 입사하고 인프라 팀에서 일한지 13개월이 되었을 때 머릿속에 스멀스멀 피어오르기 시작했다. 이 이상 더 머무를 이유가 없다는 생각. 때마침 고객사였던 SK Hynix의 책임님께서도 새로운 도전에 대해 이야기해주셨다. 그래서 퇴사한 것은 아니다.. 3년이 되었든, 2년이 되었든 퇴사를 해야할 시점에 적절히 퇴사할 수 있도록 입사를 한 시점부터 퇴근 후 개인 포트폴리오를 위한 공부와 개발을 하기 시작했다. 그 공부와 개발의 행적을 남기기 위해 Github에 프로젝트를 만들고 꾸준히 commit 했다. 별거 아니지만 그땐 그 별거아닌 것이 필요했고 중요했고 간절했다. 그렇게 하루 두시간씩 매일을 공부하고 15개월이 지나 적절한 때(?)에 퇴사할 수 있었다.

스타트업으로 오기까지

그럼 퇴사를 하고 스타트업으로 오기 전까지 난 무엇을 했는가? 퇴사하기 전 다음 행보를 밟기 위해 필요한 것이 무엇인지 정리할 필요가 있었다. 그래서 아래와 같은 목록이 나왔다.

  1. 국제적 커리어를 위해 세계를 좀 더 직접적으로 경험해볼 필요가 있다
  2. 당연히 이를 위해 영어가 더 세련될 필요가 있다
  3. 관심을 쏟기 시작한 Web Development를 위해 React.js와 같은 신기술을 공부하고 이것으로 개발해 볼 필요가 있다
  4. 이력서를 국문/영문으로 각기 다른 버전으로 잘 다듬을 필요가 있다

1번을 위해 호주에 가기로 결정했다. 캐나다는 교환학생때 경험했고 때마침 친한 친구가 Gold Coast 부근 Griffith University에서 졸업을 앞두고 있었다. 그래서 오랜 친구를 만날 겸, 친구에게 호주 전반과 이민에 대한 이야기도 들을 겸, 직접 호주 IT 회사들을 살펴보고 문화를 경험해볼 겸, 다시 한번 방향 설정을 견고히 할 겸, 그간 못본 책을 마음 껏 볼 겸 그렇게 호주로 떠나 8주 넘게 지냈다.

IMG_3044UNADJUSTEDNONRAW_thumb_1553UNADJUSTEDNONRAW_thumb_1536

완벽한 시간이었다. 호주에서도 개발을 했고 책을 읽고 글을 썼다. 호주에도 IT 회사가 꽤 많고 Software Engineer가 꽤 괜찮은 것 같았다. 호주에서 캐나다 친구를 사귀게 되었는데 그 또한 Software Engineer였고 캐나다와 호주의 IT에 대해 많은 이야기를 나누었다. 그렇게 해외의 IT 업계에 대해서 조금씩 감을 잡기 시작했다.

늦은 겨울, 귀국을 하고나서 본격적으로 React.js, Webpack, Redux, Node.js로 Web app을 만드는 프로젝트 두개를 만들어 멤버를 모집하고 시작했다. 영어는 TIME이나 논문을 읽고 쓰는데는 편했지만 네이티브와 자연스럽게 듣고 말하는 데는 한계가 있어 회화 스터디를 시작했다. 그 무렵이 12월 말이었고 그렇게 넉달을 보냈다. 춥고 꽤나 고단스러운 시간이었으나 무엇보다 재밌었기 때문에 꾸준히 할 수 있었다. 이후 2주에 걸쳐 이력서를 다듬었고 여러 스타트업에 Wanted를 통해 지원하기 시작했다. 몇몇 한국 스타트업과 미국계 스타트업의 면접을 거치면서 어떤 회사에 가고 싶은지가 점점 명확해졌다. 미국계 스타트업은 면접을 영어로 5시간을 해서 실신할 뻔 했다.. 그렇게 d.code라는 앱을 서비스하고 있는 지금의 회사로 오게 되었고 좋은 배움의 나날들을 보내고 있다.

여기까지가 지난 2년간 SK에서 배운 것들과 스타트업으로 오기까지의 여정이다. 지금 또한 추상적 목표에 따라 끊임없이 방향 설정을 하고 재밌게 개발 공부를 하고 있다. 이제 스물일곱, 앞으로 어떻게 삶이 펼쳐질지는 어느것도 예측할 수 없지만 적어도 새로움을 추구하고 끊임없이 도전하고 공부하는 이 방향 아래에서만 나아간다면 행복하고 성장하는 삶을 살 수 있지 않을까 싶다.

무례란 무엇인가

최근에 페이스북을 보다가 예의없는 사람에 대해 쓴 글을 보게 되었는데 간결하고, 관점이 재밌고 무엇보다 무릎을 치게 되는 시원함이 있어 그 글을 공유하고 내 생각을 얹어 글을 조금 확장해보고자 한다. 근래에 정의란 무엇인가(Michael Sandel), 죽음이란 무엇인가(Shelly Kagan), 국가란 무엇인가(유시민) 등 ‘~란 무엇인가’ 류의 책을 많이 읽어 제목을 따라해봤다(..).

아래는 신상철님의 글이다.

https://www.facebook.com/shinestory/posts/1279056888889466

결론은 딱 11자다. 예의 없는 사람은 멍청하다.

27년 밖에 살지 않은 내 인생에서도 별의별 이상한(..) 사람, 예의 없는 사람, 눈에 뻔히 보이게 남을 이용하려는 사람, 상대를 없는 사람 취급하는 사람 등 갖가지 종류의 사람들을 봐왔다. 내가 직접 겪은 것도 있고 목격한 것도 있다. 글 쓰면서 주마등처럼 그때의 기억들이 스쳐지나가고 있다. 지금 회사 입사 전에 했던 면접도 떠오르고 전 직장 사람들도 떠오른다. 후후.. 열이 오르네. 다 사람구실 하면서 살고는 있으려나 그게 제일 궁금하다.

거두절미 하고, 내심 어떻게 저런 인간들(?)이 세상에 존재하는가에 대해서 누군가 설명해주길 바랐다. ‘저런 사람들은 이러한 환경적, 문화적, 개인적, 사회적 요인에 의해 그런 사고방식과 행동양식을 갖게 되었으리라~’ 식의 해석이 필요했다. 그래야만 편안하고 안정된 마음으로(…) 앞으로도 있을 이런 상황에 잘 대처할 수 있을 것 같았다. 그런데 11자라니! 단지 멍청한 거였어?.. 단순히 정신승리적인 통쾌함 뿐만 아니라 간결하고 똑 부러지는 논리가 뒷받침하고 있기에 난 드디어 해석이라 할만한 걸 얻게 되었다. 그래서 이왕 이렇게 예의 없는 사람에 대해 논리적 해석을 득하게 된거 한번 더 깊게 생각해 보기로 했다. 지능과 정서 개념에서부터 시작해보자. 단순히 예의 없음은 지적 능력의 결함이 아닌 나쁜 정서에서 나올 수 있다고 생각할 수 있기 때문!

분류하기 좋아하는 인류는 자연을 분해하고 분석하다가 언제부터인가 스스로를 이해하고자 자신을 분해하기 시작했다. 그래서 초기 심리학의 고군분투로 탄생한 것 중 하나가 인지능력과 정서의 분리이다. 상황에 따라 시시각각 변하는 정서를 학문의 범주로 끼워맞출 수 없었기 때문이다. 인간 마음에 대한 과학적 분석의 시도이므로 폄하할 생각도, 폄하할 위치도 아니지만 분리할 수 없는 걸 분리하려고 시도했다고 생각한다. 그 시도의 여파로 정말 우리 마음 어딘가에는 지능과 정서가 따로 움직인다고 생각하게 되는 부분이 많다. 이걸 정말 분리할 수 있을까? 세상과 사람에 대해 좋은 마음 혹은 나쁜 마음을 갖게 되는 것이 인지능력과 정말 서로 독립적일까?

단순한 예를 들어보자. 주어진 정보를 잘 분석하고, 편재되어 있는 정보들 사이에서 흐름과 패턴을 객관성있게 잘 읽어내는 사람이 있다고 하자. 이런 사람은 주변에 일어나는 일들, 사람들, 나아가 사회가 어떻게 작동하고 흘러가는지를 마냥 지켜보고 흘려보내지 않을 것이다. 인간은 언제나 자신에게 주어진 상황에 대해 합리적인 해석을 해야하는 존재이기 때문이다. 이 사람은 상황을 잘 주시하고 있고 또 어느정도 이해도 하고 있다. 반대로 정보들 사이의 관계성과 흐름을 판단하지 못한다면, 다른 말로 인지능력이 부족하다면 전체를 보지 못해 객관성이 떨어지게 된다. 즉, 편견이 여러 부분에서 점점 심해지게 되고 이를 두고 ‘편협’하다고 한다. 이게 대체 무슨 말인가? 이걸 현실의 예로 치환해보자. 근처의 사람만 봐도 객관성이 두드러지는 사람과 편협한 사람이 각각 어떻게 행동하는지 보이지 않는가? 편견이 심한 사람일 수록 어떤 사람을 대할 때에도 그 차이가 심해진다. 이런 사람은 어떤 사람이든 비슷하게 대할 수 없기 때문이다. 사람을 대하는데에도 정보 분석이 동반된다. 가령, 이 사람은 어떤 사람인가, 무엇을 하는 사람인가, 어디 출신인가, 말하는 습관이 어떠한가, 어떤 옷을 입는가, 최근 무슨 일을 겪었는가 등등 사람에 따라 누군가를 대하기에 앞서 자신의 가치관을 바탕으로 수 많은 정보 분석과 가치 판단이 선행된다. 그래서 위의 편협한 사람은 객관적 분석 능력이 부족한 것이고 – 한쪽으로 치우쳐 생각하게 되는 경향이 심하고 – 누군가를 대할 때에도 합리적으로 대할 줄을 모르고 – 인지능력이 뒤떨어지는 것이다. 지금 대쉬(-)로 표현한 구절은 논리적으로 거의 동등한 것들이다. 그래서 이를 한마디로 바꿔 말하면, 편협은 인지능력의 결함으로 설명해낼 수 있다.

나 또한 이렇게 설명해놓고 보니 이 이론이 꽤나 설명할 수 있는 부분이 많은 것 같다. 신기한걸..? 여기까지 써놓고 보니 인지능력의 부조화가 심한 환자들이 편협성이 커지고 사회성이 급격히 후퇴한다는 내용의 책도 떠오른다. 그렇다. 편견이 심한 것은 인지능력이 뒤떨어지거나 의식적으로 정보를 선택적으로 받아들인다는 것이다! 벌써 많은 정치인들이 떠오르는 것은 기분 탓만은 아닐 것이다(..).

다시 지능과 정서의 분리로 돌아와, 따라서 이 둘은 분리할 수도 없고 분리되어 있지도 않다. 다만 분리해서 생각은 해볼 수 있다. 분리하여 심리학적으로 논지를 전개해 나갈 수는 있다. 그런데 딱 거기까지다. 인간 정신에 대한 설명과 해석의 한가지 관점을 추가시킨 것 뿐 그 이상도, 그 이하도 아니다. 이를 상철님의 글처럼 실생활에 적용해보면, 예의가 실종된 사람, 자신보다 경제적, 육체적, 정신적, 지적으로 약해보이는 사람을 얕잡아보는 사람, 나아가 무시하는 사람, 함부로 대하고 하대하는 사람, 이용하려는 사람, 속이려는 사람 등 이 모든 카테고리의 사람들(인간들이라 하고 싶다)은 결론적으로 멍청하거나 알고는 있지만 연유야 어찌 되었든 의식적으로 그렇게 행동하는 것이다. 어쨌거나 두가지 경우 모두 씁쓸하다..

그런데 여기서 혹자는 정말 철저하게 남을 속이고 이용하는 사람이 어쨌든 이득을 많이 보고 잘 살게 될 가능성이 크니까 더 똑똑한거 아니냐고 의구심을 품을 수 있다. 남을 쉽게 무시하고 할 말 못할 말 다 내뱉고 사는 사람이 마음 후련하게 사는 것이니 정신적으로도 더 편한 삶을 사는 것 아니냐고 반문할 수 있다. 아니다. 그런 사람들은 시야가 좁은 것이고 편협한 것이다. 단기적으로 보면 맞을 수 있지만 결국 멀리 보면 그 방식은 실패한다. 행복한 삶도 아니다. 이제까지의 역사가 보여주듯 그런 사람들의 거의 전부는 말로가 좋지 못하다. 멍청하다는 거다. 멀리 보는 것도 지적 능력이다. 멍청하든 의도적으로 그렇게 살든 이래나 저래나 피곤한 삶이고 사랑받는 삶도 아니다. 별로 추천(?)하고 싶지 않은 방식이다..

위의 경우들을 수도 없이 본 선대의 사람들이 이것을 대상화시킨 개념이 바로 도덕과 윤리이다. 이 개념들이 괜히 나온게 아니다. 도덕이란 개념이 역사적으로 어떻게 구성되었는지를 찾아보면 상당 부분 이런 내용이다. ‘그냥 사람 좋게 사는게 좋은거지 암~’ 이러고 나온 개념이 아니란 거다. 그래서 타고난다고 생각했던 이 인성 혹은 도덕성을 ‘교육’하는 것이다. 마음의 태도와 인성 모두 지적 능력이라는 말이다. 좋은 마음과 예의 바름이 인생의 마지막까지 미칠 영향을 수도 없이 보고 집대성한 이 윤리를 그렇게 주변에서 보고 듣고 학교에서, 가정에서 교육받았음에도 그 이치를 깨닫지 못해 예의없이 행동하고 쉽게 남을 얕잡아보는 것은 멍청하다고 밖에 설명할 수 없다. Edward Wilson의 On Human Nature와 Richard Dawkins의 The Selfish Gene이라는 책을 보면 동물 세계에서도 ‘처음엔 남에게 좋게 대하기, 나에게 잘해주면 그 상대에게 잘 대하기, 나에게 해를 끼치면 무시하거나 되갚아주기’라는 소위 호혜주의 혹은 Tit for tat 전략이 가장 장래있는 생존 전략이다. 이 전략을 따르지 않은 개체 혹은 종은 종족 번식에 어려움을 겪는다. 심지어 이 호혜주의가 유전적 형질로 생기게 되었다는 이론도 있다. 동물도 안다는 거다 예의가 가져올 좋은 영향을. 이쯤되면 예의 없는 사람은 편협하고 지적능력이 떨어질 뿐더러 동물만도 못한 사람이 된다(…). 그렇다고 미안해 할 필요는 없을 것 같다(!).

그래서 예의 없는 사람을 보면 어떡하란 말인가? 상철님의 말씀대로 무시하면 된다. 설득할 수도 없고, 싸울 수도 없고, 그렇다고 교화시킬 수도 없다. 그리고 그렇게 할 수 있다고 해도 거기에 들일 시간과 노력, 에너지가 너무 아깝다. 그래서 정중히(?) 무시하고 할 일을 묵묵히 하면 된다.

이제 마무리지을 때가 왔다. 주변에 쉽게 고함지르고, 무시하고, 남을 얕잡아보는 사람이 있는가? 멍청한 거니까 무시하면 된다. 물론 ‘예의있고 나이스’하게 무시해야 한다. 그래야 지적이니까. 이제 예의없는 사람을 깨끗이 무시할 이론적 토대가 구색을 갖추었으니 실컷 무시하고 다니자. 아 정리가 잘 된 느낌이다!