스토리 홈

인터뷰

피드

뉴스

조회수 3277

콜드 네트워킹이 어떻게 한 사람의 인생을 바꿔놓는가?

일반적으로 콜드 네트워킹이라는 용어보다 콜드콜이라는 용어를 많이 쓰는 듯 하다.근데 필자는 네트워킹이라는 말을 더 좋아해서 낯선 사람에게 도움을 요청하는 모든 것들을 콜드 네트워킹으로 그냥 부른다.현재 필자는 지난 몇년 사이 정말 많은 부분에서 성장을 했다.실무적인 면에서 인간적인 면에서 굉장히 많이 성장을 해왔다고 생각한다.그러나 이 성장은 온전히 나의 열정만으로 나의 노력만으로 이루어진 것은 절대 아니다. 항상 정체되었을 때 슬럼프일 때 해매고 있을 때 항상 누군가의 도움이 있었다. 근데 그 도움은 누가 갑자기 우연히 도와준 것이 아니라 "이 낯선 사람이 나에게 해답을 줄지도 몰라"라는 생각에 무작정 도움을 요청했다. 정중하게 내 상황과 고민을 밝히고 원하는 답에 대해서 조언을 해줄 수 있냐는 식의 요청이였다.나는 이러한 방식의 도움 요청이 인생을 살아가는데 있어서 굉장히 굉장히 중요하다고 생각한다.스티브 잡스도 콜드 네트워킹에 대해 굉장히 강조한 바 있다.필자는 3년전 22살때 굉장히 고민에 빠져 있었다.열정은 충만했고 목숨을 걸어서 무엇인가 하고 싶었다. 근데 내가 좋아하는 것이 무엇인지 사실 잘 모르겠고 내가 잘하는 것이 무엇인지도 몰랐고 어떤 일이 나에게 어울릴지 고민이 많았었다.우연히 IT칼럼을 보다가 인사이트 있는 글이라고 생각했고 그 글의 작성자에게 무작정 진로에 대한 고민을 털어놓았다.돈 한푼 들지 않았던 갑작스러운 이메일 요청으로 내가 어떤 미래를 그려야될지 꽤 명확해졌다.그리고 그것이 현재 나를 만드는 것에 크나큰 기여를 했다.이런 식의 콜드 네트워킹은 굉장히 많았고 그 순간 순간마다 나는 엄청난 성장을 했었다. 그리고 꿈과 열정이 가득했던 한 청년의 이메일에 정성스럽게 답변주신 전혜경님에게 다시 감사의 말을 전하며 식사한 끼 대접할 수 있는 시간을 마련해달라고 메일을 드렸다.필자의 콜드네트워킹 방식은 다음과 같다.1.전화를 하거나( 메세지나 , 메일로 전화번호를 받은 뒤) - ex12.직접 만나거나 & 그 오프라인에서 질문을 직접 한다거나 - ex13.페이스북이나 인스타로 메세지를 한다거나 - ex14.메일로 요청을 한다거나 - ex1 ex2 ex3 ex4(부끄러운 사례들이 정말 많지만.... 공유하기로.....ㅠㅠ)(참 저때 어렸구나 그런 생각.......)사실 콜드 네트워킹 요청했을 때 거절 당한 경우도 꽤나 있었다. 그러나 그런 걸로 상처받을 필요는 없다.그리고 거절 당할 것 같으니깐 안할 필요도 없다.낯선 사람이 도움을 요청하는데 무응답을 하는 것은 어찌보면 당연한 것일 수도 있고 그런데도 불구하고 도와주는 것은 정말 고마우신 분들이기도 하다.콜드하기에 앞서서 상대방을 배려하고 있다는 느낌을 줘야된다. 무작정 요청하기보다 현재 내 상황을 잘 설명하고 원하고자 하는 결과가 무엇인지를 깔끔하고도 명료하게 상대방에게 알려주는 것이 중요하다. 상대방은 어쨌든 답장을 하는데에 시간을 써야하기 때문이다. 그 요령은 한국인으로 구글에서 최연소 상무를 하셨던 김현유님의 팁들을 참조하면 될 듯 하다. 1)콜드콜 노하우  2)네트워킹 이야기누군가에게는 낯선 사람에게 도움을 요청하는 것이 사실 용기를 필요로 한다.그러나 그것도 잠시라고 생각하자.유명한 심리학자 중 프로이트만큼의 명성이 있는 벤듀라는 자기 효험 이론을 내놓았다. 사람들은 어떤 것을 추측할 때 두려운 감정을 느끼지만 실질적으로 그것을 마주하고 나면 두려웠던 경험을 극복하는 것은 물론이며 더 다양한 경험들도 두려움 없이 마주할 수 있다는 것을 실험을 통해 밝힌 바 있다.사실 이러한 것은 virgin의 회장 리처드 브랜슨이 말한 "한가지의 분야에서만 사업을 성공시키면 다른 분야에서 사업도 성공시킬 수 있다고 확신했다." 라고 말하는 것처럼 한번 콜드 네트워킹을 실제로 해보면 그리고 인사이트까지 얻는다면 앞으로 자기가 힘들 때 고민하고 있을 때 슬럼프일 때 정말 잘 헤쳐나갈 수 있는 하나의 유니크한 기술을 가지게 되는 것과 같다고 생각한다.운과 기회, 사람을 기다리지 말고 직접 행동하고 도움을 요청하고 낯선 사람에게도 조언을 충분히 구해보자.앞으로 필자도 이런 것에 대한 두려움과 망설임을 더욱 없애고 자신있고 당당한 삶을 살아갈려고 한다. 단 잊지 말아야할 것은 우리가 그렇게 누군가에게 낯선 도움을 구하듯이 누군가가 나에게 낯선 도움을 요청한다면 정말 감사한 것으로 느끼고 그 사람에게 다시 베풀자.pay it forward !#페오펫 #peopet #인사이트 #꿀팁 #경험공유 #조언
조회수 1432

잉여와 SW 개발의 관계...

IoT의 관점과 함께 최근에 주목을 받는 시계열 DB들이 있다. OpenTSDB나 인플럭스 DB, Graphite와 같은 것들이다. 신기한 것은 최신의 기술이나 플랫폼이라고 불리는 것들은 국내에서는 거의 등장하지 않는다. 대부분 미국이나 유럽, 이제는 중국이나 러시아에서 등장한다. 물론, 일본에서는 새로운 언어도 많이 등장했다.집안의 전기 사용량을 측적하건, 공기 측정이 되었건 1초에 한번 측정하는 센서에서 만들어지는 데이터를 자세하게 분석하려면 이 데이터를 수집하고 모아야 한다. 그리고, 최소 연단 위 정도는 모아서 무언가를 분석하거나 추이를 살펴보아야 할 것이다.더군다나, 센서가 하나가 아니라 여러 개 라면 모여지는 데이터의 량은 상당할 것이다. 기존의 RDB에 축적하는 것은 이런 경우에 좀 맞지 않는다. 데이터가 계속 용량을 늘려나가는 구조이기 때문에 NoSQL형태의 데이터 스토어를 생각하게 된다. 코치이건 하둡이건 몽고이건 여러 가지가 생각난다. 실시간으로 추적 분석하려면 Apache Storm이나 spark도 생각날 것이다.일단, 센서가 시간의 추이에 따라서 데이터를 모으는 형태에 적합한 시계열 DB에 적합한 방법들에 대해서 나름 적합한 형태로 개발되는 구조를 가진 DB들을 어렵지 않게 찾아볼 수 있다. 이 글 가장 앞에 언급한 것들이다.관련 자료를 찾아보고 싶으면, OpenTSDB는 http://opentsdb.net , InfluxDB는 https://influxdb.com을 찾아보라. 나름 매력적으로 시계열 형태의 데이터를 모으기 좋은 구조로 디자인되는 설루션을 만날 수 있다.오늘 글에서 언급하고 싶은 것은... 이러한 특정 요점에 맞는 설루션들이 왜? 국내에서는 나타나지 않는가에 대해서 끄적거려 보고 싶어서이다. 과연, 이러한 태도와 행동, 행위가 특정 개발자의 탁월함 때문일까? 아니면, 국내에 있는 개발자들이 게으르고, 자신의 이익만을 위해서 일하는 것 때문일까?삐딱한 아키텍트는 그 부분을 이렇게 해석한다.하나. 잉여가 없는 부가가치가 적은 일을 매번 수행하는 국내의 경영자들의 문제.둘. 반복적인 작업이나 자신의 일의 미래에 대해서 큰 관심 없는 개발자의 자세셋. SI형태로만 진행되는 국내 프로젝트이기 때문에 만들어진 플랫폼이나 유틸리티 성의 서비스를 외부에 오픈하지 못하는 경우가 빈번함.이 3가지의 가장 큰 이유 때문에 국내에서는 특정 용도나 특정 의미의 환경에 잘 어울리는 설루션들이 오픈소스로 발전되고, 더 넓게 쓰이는 플랫폼까지 진화하지 못한다고 생각한다. 하나씩 나름대로 이유를 이야기해보자.하나. 잉여가 없는 부가가치가 적은 일을 매번 수행하는 국내의 경영자들의 문제일단, 부가가치가 높은 소프트웨어나 서비스를 개발한다면, 적절하게 배분되어진 팀과 일정, 부가가치가 높기 때문에 피드백을 통해서 품질을 높이기 위한 시도들이 반복되어진다. 하지만, 대부분 1회성으로 끝나거나, 단기적인 일거리를 해결하기 위해서 소프트웨어를 개발하는 경우가 대부분이기 때문에 사소한 잉여도 발생하기 어렵다.고품질을 지향하는 소프트웨어 개발을 추구한다면 매우 당연하게 잉여시간과 잉여 일정, 잉여인력이 투입되는 것이 정상이다. 매우 당연하게 소프트웨어 개발자들은 게으르기 때문에 반복적인 일을 싫어하고, 게으르기 때문에 소프트웨어의 품질을 높이기 위해서 공을 들인다.이런 게으른 소프트웨어 개발자들이 품질 높이기를 포기하는 이유는 간단하다. 그 소프트웨어가 재사용될 가능성이 거의 존재하지 않고, 또다시 요구사항에 따라서 난도질을 해야 하는 경우에 품질 높이기를 시도하지 않는다.결론적으로 소프트웨어 개발자들이 고품질을 만들지 않는 이유는 처음부터 비즈니스 기획과 부가가치에 대한 이윤과 투입되는 비용에 대해서 잘못된 비즈니스 모델을 만든 기획자나 경영자가 그 책임을 져야 한다. 물론, 그런 환경을 주었더라도 잘못된 개발자를 뽑은 '인력관리'의 미스에 대해서도 그 역시... 경영자가 책임져야 한다.대부분 고품질의 소프트웨어가 나타나지 않거나, 잉여가 만들어지지 않는 이유는 경영자가 미 숫하고, 비즈니스 모델을 잘못 디자인해서 그러하다.둘. 반복적인 작업이나 자신의 일의 미래에 대해서 큰 관심 없는 개발자의 자세하지만, 경영자의 잘못과 거의 비슷한 수준의 개발자의 관심 없는 자세인 경우가 문제가 되는 경우도 많다. 잉여가 주어졌음에도 빈둥거리거나, 자신만의 놀이를 위해서 그 시간과 비용을 투자하는 경우도 간혹 있다. 하지만, 필자가 만나본 대부분의 개발자들은 그런 자세가 된 소프트웨어 개발자의 행태 또한 그 소프트웨어 개발자가 걸어온 그 전회사의 경영자의 문제라고 지적하고 싶다.반복적인 일을 줄이고, 미래의 코드에 대해서 신경 쓰는 자세는 소프트웨어 개발자가 기본적으로 갖추어야 하는 자세임에도 불구하고, 이러한 자세를 파괴하는 형태의 업무 구조와 생각 자체를 파괴하는 형태로 일을 구성하는 경영진과 같이 일한 개발자들은 슬프게도 잉여를 빈둥거리게 하는데 익숙하게 된다.필자가 개발자 구인 시에 가장 주목하고, 관심을 가지면서 걸러야 하는 개발자는 그러한 회사를 거쳐왔거나 그러한 프로젝트에 매몰되었던 사람들은 피하는 것이다. 한번, 그런 자세가 파괴된 개발자는 다시 자세를 정상으로 복구하는데 엄청난 리소스와 시간이 투입된다.냉정한 사람들이라면 이러한 사람들을 '동료'로 받아들이는 것을 싫어할 것이다.셋. SI형태로만 진행되는 국내 프로젝트이기 때문에 만들어진 플랫폼이나 유틸리티 성의 서비스를 외부에 오픈하지 못하는 경우가 빈번함.슬프지만, 3번째의 경우가 사실은 한국에서는 50% 이상 의미 있는 형태로 개발되었음에도 불구하고, 사장되거나 외부에 노출될 수 없는 형태가 되는 경우를 빈번하게 경험했다. 필자 역시, WebService개발 초기에 3 Tier개발에 어려움을 겪는 개발자들을 위해서 SQL 문장을 그대로 WebService에서 CRUD형태로 전송하고 데이터셋과 DB커서를 2 Tier의 형태로 손쉽게 개발할 수 있는 플랫폼과 컴포넌트를 개발했지만, 이 역시, SI에 종속된 결과물이 되면서 외부에 오픈할 수 없는 경우가 되는 것을 빈번하게 경험했다.슬프지만... 이 3가지의 큰 이유 이외에도 '잉여'가 없는 개발 일정이나 개발자에게 여유가 없어지면서, 정말 더럽게 재미없는 소프트웨어 개발이 반복되는 경우를 많이 보았다. 하지만, 필자의 경험은 그럼에도 불구하고 개발을 총괄하고 있다면, 자신의 팀에 있는 개발자에게 약간의 잉여와 고품질을 위한 리소스에 대한 배려를 취하면서 동료직원이 오픈소스를 창출하거나 외부에 오픈할 수 있는 정도의 다듬는 여유를 만들어 줄 수 있다고 생각한다.가장 훌륭한 CTO나 개발 총괄의 역할은 그 시간을 정말 즐겁다고 생각하는 동료 개발자에게 약간의 잉여와 여유를 허가하는 것이며, 그 잉여가 결론적으로 자신이 속한 개발 조직의 효율이 향상되고, 개발 문화가 부드러워지는 아주 의미 있는 개발 조직으로 완성되어가는 첫 번째 단추라는 것을 알기를 바란다.현재 훌륭한 개발 조직일수록, 카페와 같은 공간만을 만드는 것만으로 끝나는 것이 아니라, 개발 공정이나 개발 프로세스 상에 리뷰와 의미 있는 문서화 작업, 피드백과 리팩터링과 같은 시간을 배분하는 이유도 그 때문이라는 것을 잊지 않기를 바란다.훌륭한 하드웨어 적인 공간 위에 재미를 추구하고 의미를 추구하는 잉여가 존재하는 개발 공정을 탑재한 개발 조직이야말로 성공할 수 있는 전제조건을 하나 더 갖춘 곳이라는 것을...
조회수 1898

파이썬의 개발 “환경”(env) 도구들

안녕하세요. 스포카 프로그래머 홍민희입니다.파이썬 패키징 생태계에서 개발 환경을 구성하기 위해 널리 쓰이는 virtualenv나 pyvenv, virtualenvwrapper 같은 각종 도구가 왜 필요한지 (또는 자신에게는 큰 도움이 안 되는지) 알려면 그 이전의 파이썬 라이브러리 배포 방식에 대한 이해가 많은 도움이 됩니다. 여기서는 필요한 몇 가지 역사적 사실과 파이썬 패키징 개념 중 현재의 생태계 이해에 필요한 것들을 위주로 정리하고, 최종적으로 각자의 필요에 따라 어떤 도구를 활용하면 될지 지침을 제안합니다.sys.path패키징이고 뭐고 아무것도 없던 90년대 말에는 라이브러리 소스 코드 파일들을 타르볼(tarball)로 압축해서 배포했습니다. 쓰는 사람은 그걸 자신의 애플리케이션 소스 트리 안에 풀어서 사용했습니다.파이썬에는 지금도 sys.path라는 인터프리터 전역적인 상태가 존재합니다. PATH 환경 변수가 실행 바이너리를 찾을 디렉터리 경로들의 목록인 것과 비슷하게, sys.path도 import foo를 하면 foo.py (또는 foo/__init__.py) 파일을 찾을 디렉터리 경로들의 목록을 담습니다. 그리고 기본 동작으로 그 목록의 맨 처음에는 현재 디렉터리(./)가 들어갑니다. 따라서 라이브러리 타르볼을 애플리케이션 소스 트리에 풀어두면 import해서 쓸 수 있습니다.하지만 자신이 작성한 애플리케이션 코드와 남이 작성한 라이브러리 코드를 같은 소스 트리에서 관리하는 것은 여러모로 불편합니다. 따라서 라이브러리는 애플리케이션 소스 트리와는 별도의 디렉터리(예: ../libs/)에 풀어서 관리하고, 애플리케이션 소스 코드 맨 위에 아래와 같이 써두는 패턴이 많았습니다.import sys sys.path.append('../libs') 또는 sys.path를 소스 코드를 건드리지 않고 조작하기 위해 PYTHONPATH 환경 변수를 활용하는 경우가 많았습니다.세기말, 파이썬 1.5를 쓰던 때의 이야기입니다.site-packages새 천 년이 밝았고 파이썬 2.0이 나왔습니다. 표준적인 라이브러리 배포 방식 및 설치 방식이 제안되었고, 표준 라이브러리에 distutils도 들어왔습니다. (지금도 setuptools는 distutils에 의존하고, pip는 setuptools에 의존합니다.) 제안된 방식은 이랬습니다.애플리케이션 코드가 아닌 라이브러리 소스 코드는 모두 /usr/local/lib/pythonX.Y/site-packages/ 디렉터리 안에 둡니다. X.Y는 파이썬 인터프리터 버전이고, 경로는 인터프리터를 빌드할 때 (./configure) 정합니다. 데비안 계열은 site-packages 대신 dist-packages라는 이름으로 바꿔서 빌드하는 등, 파이썬 인터프리터의 설치 방식에 따라 달라집니다. 어떻게 정하든 이를 site-packages 디렉터리라고 부릅니다. 파이썬 인터프리터를 빌드할 때 경로가 결정되므로, 파이썬 인터프리터 별로 각자의 site-packages 디렉터리를 갖게 됩니다. (한 시스템에서 여러 파이썬 버전을 설치했을 때 pip 역시 pip2.7, pip3.6 등과 같이 버전 별로 명령어가 생기는 것도 같은 이유입니다.)기본적으로 sys.path 목록에는 맨 앞에 현재 위치(./), 뒤쪽에는 site-packages 경로가 들어있습니다. import를 하면 현재 위치에서 찾고, 없으면 site-packages를 찾아본다는 뜻입니다.표준 라이브러리의 distutils.core.setup() 함수는 라이브러리 파일들을 시스템의 site-packages 디렉터리에 복사해주는 함수입니다. 라이브러리 타르볼 파일 맨 바깥에는 이 함수를 이용해 라이브러리를 시스템 site-packages에 설치해주는 스크립트를 setup.py라는 파일명으로 포함하는 관례가 있었습니다. pip 같은 게 없던 때에는 라이브러리 타르볼을 받아서 푼 다음 python setup.py install 명령을 실행하는 것이 일반적인 라이브러리 설치법이었습니다. 지금도 pip는 *.whl 파일이 아닌 *.tar.gz/*.zip 파일인 패키지를 설치할 때 내부적으로 python setup.py install 스크립트를 실행합니다.참고로 이때 정립된 파이썬 패키징 표준은 리눅스에서 쓰이는 dpkg나 RPM 같은 일반적인 패키징 방식을 의식하며 만들어졌습니다.1 당시는 도커는 커녕 가상화 자체가 보편적이지 않던 때로, 한 시스템에 여러 애플리케이션을 함께 설치해서 쓰는 멀티테넌시 환경이 일반적이었기 때문입니다.workingenv파이썬으로 작성한 애플리케이션 여럿이 한 시스템에 설치되면 공통으로 의존하는 라이브러리의 버전을 결정하는 게 문제가 됩니다. A 애플리케이션은 foo >= 1.0.0, < 2>에 의존하고 B 애플리케이션은 foo >= 1.5.0에 의존하면 시스템에 설치할 수 있는 foo의 버전은 >= 1.5.0, < 2>으로 한정됩니다. 만약 C 애플리케이션을 설치하려는데 foo > 2.0.0에 의존한다면, A나 C 중 하나는 포기해야 합니다.시스템에 파이썬 애플리케이션을 단 하나만 설치한다 해도, 설치하는데 시스템 관리자 권한이 필요하다는 것도 문제였습니다. 일반적으로 site-packages 디렉터리는 시스템 관리자만 수정할 수 있고 나머지는 읽기만 가능한 /usr 아래 어딘가로 정해졌기 때문입니다. 이를 우회하려고 사용자가 시스템에 설치된 파이썬 인터프리터를 쓰지 않고 직접 파이썬 인터프리터를 빌드해서 사용하는 편법도 쓰였습니다.이런 문제를 해결하기 위해, 애플리케이션·프로젝트마다 별도의 site-packages 디렉터리를 두는 방식이 제안됐습니다. 나중에 virtualenv을 만들게 되는 이안 비킹이 그 전신인 workingenv를 만들어 이 아이디어를 실현했습니다. 현재의 virtualenv 사용 방식은 workingenv에서 만들어진 것입니다.애플리케이션마다 별도의 “환경”(env)을 만듭니다.애플리케이션을 실행하기 전에 우선 그 “환경”을 “활성화”(. bin/activate 또는 Scripts\activate.bat)합니다.workingenv가 만들어주는 활성화 스크립트는 PATH와 PYTHONPATH 환경 변수를 재정의하여 시스템에 설치된 파이썬 인터프리터의 실행 바이너리 디렉터리 및 site-packages 디렉터리를 가리키는 대신, “환경” 내의 bin/ 및 site-packages 디렉터리를 바라보도록 해줍니다. 이안 비킹은 이렇게 분리된 실행 파일들(bin/)과 site-packages 등을 묶어서 “환경”이라고 명명했는데, workingenv 이후로 파이썬 패키징 및 배포 분야에서 이 용어가 정착됩니다.최근에 만들어진 신생 언어의 패키지 관리자는 대부분 파이썬과 달리 애플리케이션·프로젝트마다 별도의 환경을 두고 설치되는 경우가 많습니다. 예를 들어 npm은 -g 옵션을 일부러 켜지 않는 한 현재 디렉터리를 기준으로 ./node_modules 디렉터리에 라이브러리를 설치하게 되어 있고, 별도의 “활성화” 없이도 노드 인터프리터가 해당 경로에서 라이브러리를 찾습니다. 하지만 파이썬의 패키징 표준은 앞서 언급한 것처럼 멀티테넌시 환경이 일반적이었던 시대에 만들어졌고, 또 많은 라이브러리가 실행 파일도 함께 제공하기 때문에2 PYTHONPATH 뿐만 아니라 PATH 환경 변수도 재정의해야 해서 activate 과정이 필요합니다.workingenv는 파이썬 웹 프로그래머 사이에서 빠르게 퍼지기 시작했습니다. 웹 애플리케이션은 정통적인 CLI 및 GUI 애플리케이션과 달리 FHS 표준 같은 것에 크게 구애될 필요가 없었고, 웹 애플리케이션의 배포도 점차 가상화 기술을 통해 완전히 격리된 시스템에 설치되는 식으로 보안 문제에서 많이 자유로워졌기 때문입니다.무엇보다 workingenv는 프로그래머가 여러 프로젝트를 동시에 작업하는 경우 골치 아팠던 라이브러리 버전 충돌 문제를 우회했기 때문에, 배포 도구보다는 개발 도구로 정착되는 면이 컸습니다.virtualenv이안 비킹은 PYTHONPATH를 조작하여 별도의 site-packages 공간을 두는 workingenv의 방식이 복잡하게 패키징된 기존 라이브러리 및 프로젝트에서 호환되지 않는 문제로 골머리를 썩이다, 아예 PYTHONPATH를 이용하지 않는 방식으로 새 도구를 만듭니다.새로운 방식은 아예 파이썬 인터프리터 실행 바이너리를 복사한 뒤, sys.path 기본값에 박힌 시스템 site-packages 경로를 환경 내 site-packages 경로로 바꿔버리는 것이었습니다. 이러한 동작 원리의 차이는 이용자 입장에서 크게 중요한 것은 아닙니다.하여튼 이안 비킹은 virtualenv라는 이름으로 새 도구를 만들었고, workingenv를 빠르게 대체했습니다.virtualenvwrapper앞서 언급한 것처럼, workingenv와 그 후계자인 virtualenv는 저자의 의도와 무관하게 애플리케이션 배포보다는 개발 용도로 더 널리 쓰입니다. 파이썬 프로그래머가 새로운 프로젝트를 시작할 때는 항상 “환경”도 생성합니다. 또 개발을 시작할 때마다 “활성화” 과정도 거칩니다. 너무나 반복적이기 때문에 당연히 이를 자동화하는 도구도 만들어졌습니다. virtualenvwrapper는 바로 그런 목적으로 만들어진 bash/zsh/fish 스크립트 모음입니다.여러 단축 명령을 제공하지만, 핵심 기능은 다음의 두 가지입니다.A라는 프로젝트 작업을 시작할 때마다 cd ~/projects/a; . .venv/bin/activate라고 쳐줘야 했던 것을 workon a 명령으로 줄여줍니다.프로젝트 디렉터리마다 .venv/ 또는 .env/ 등의 이름으로 환경 디렉터리를 생성해두고 버전 관리 시스템에서는 제외되도록 .gitignore 목록에 해당 디렉터리를 넣었어야 했습니다. 예를 들어 ~/projects/a/.venv/, ~/projects/b/.venv/ 같은 식이었습니다.virtualenvwrapper를 쓰면 환경 디렉터리들을 일정한 위치로 모아줍니다. 위치는 기본값이 없으며 virtualenvwrapper 설치할 때 WORKON_HOME 환경 변수를 통해 입맛대로 정할 수 있습니다. 예를 들어 WORKON_HOME을 ~/.virtualenvs/ 디렉터리로 정했다면, 프로젝트별 환경은 ~/.virtualenvs/a/, ~/.virtualenvs/b/ 같은 식으로 저장됩니다.pyvenv파이썬 3.3부터는 virtualenv가 아예 파이썬에 내장됐습니다. 환경을 만드는 명령어는 virtualenv가 아닌 pyvenv로 좀 다르지만, 그 이후의 과정은 같습니다. 파이썬 3만 사용한다면 이제 virtualenv를 따로 설치할 필요가 없어진 것입니다.참고로 아래에서 설명할 pyenv와는 다른 도구입니다. 철자의 “v”에 주의해주세요.pyenv애플리케이션을 개발할 때는 하나의 파이썬 버전을 정하면 되지만, 라이브러리는 여러 파이썬 버전과 호환되어야 합니다. 그러다 보니 라이브러리 개발자는 여러 버전의 파이썬을 시스템에 동시에 설치할 필요가 있습니다. 데드스네이크스 PPA나 데드스네이크스 홈브루 탭 같은 것을 이용해서 설치할 수도 있지만, 보통은 pyenv를 많이 씁니다.pyenv는 동시에 여러 버전의 파이썬을 시스템에 설치해주며, 이렇게 설치된 파이썬은 시스템의 패키지 시스템(데비안·우분투의 APT나 맥OS의 홈브루 등)을 통해 설치되는 것이 아니라, pyenv가 다운로드와 빌드 및 설치를 직접 하여 별도로 관리합니다. 설치된 파이썬들은 PEP 394에 따라 일정한 형식으로 이름지어진 명령어(예: python2.7, python3.6)로 실행할 수 있게 됩니다.또한, 여러 파이썬 버전 중에 하나의 시스템 기본 파이썬 버전도 선택 가능하며, 특정 프로젝트 디렉터리 안에서만 기본 파이썬의 버전이 달라지게 할 수도 있습니다.pyenv-virtualenvpyenv가 여러 파이썬 버전을 동시에 설치해주기는 하지만, 그렇다고 자동으로 site-packages가 프로젝트마다 격리되는 것은 아닙니다. 예를 들어 pyenv로 파이썬 3.6을 설치한 뒤, 파이썬 3.6으로 두 프로젝트를 한 시스템에서 개발할 경우 두 프로젝트는 시스템 site-packages를 함께 쓰게 됩니다.따라서 pyenv를 쓰더라도 virtualenv는 따로 써야 하는데, 따로 사용할 수도 있지만 pyenv-virtualenv를 쓰면 pyenv virtualenv 명령으로 프로젝트에 쓸 파이썬 버전 지정과 가상 환경 생성을 한 번에 할 수 있게 됩니다.비슷하게 pyenv와 virtualenvwrapper를 통합해주는 pyenv-virtualenvwrapper 같은 도구도 있습니다.마치며여러 파이썬 개발 환경 관리 도구를 소개했지만, 여기 있는 모든 도구를 꼭 써야 하는 것도 아니고, 가장 최근에 나온 도구로 하루빨리 갈아타야 하는 것도 아닙니다. 글을 쓴 저 자신도 pyenv 같은 도구가 나온 지 몇 년이나 지났고 주변에서 쓰는 사람이 많음에도 쓰지 않고 있습니다. virtualenvwrapper를 대체하는 Pipenv 같은 실험적인 방식3도 생겨나고 있지만, 어느 쪽이든 동시에 여러 파이썬 프로젝트를 작업하는 사람이 아니라면 굳이 쓸 필요가 없는 도구입니다. 각자의 용도에 따라 필요한 수준의 도구를 이용하면 됩니다. 2017년 10월 현재, 아래의 지침으로 정리할 수 있겠습니다.파이썬 프로그래머가 아니지만, 파이썬 애플리케이션을 설치해서 이용합니다.시스템에서 제공하는 패키지 관리자(APT나 홈브루 등)를 통해 애플리케이션을 설치하세요.파이썬 프로그래머가 아니지만, 파이썬 애플리케이션을 유난히 많이 이용합니다.pipsi를 이용해 파이썬 애플리케이션을 설치하는 것을 권합니다.파이썬 프로그래머이고, 하나의 애플리케이션을 개발합니다.파이썬 3.3 이상을 이용할 경우 pyvenv로 개발 환경을 만들어서 개발하세요. 그 이전의 파이썬 버전을 이용할 경우 virtualenv를 활용하세요.파이썬 프로그래머이고, 여러 애플리케이션을 개발합니다.virtualenvwrapper를 활용하세요.파이썬 프로그래머이고, 여러 애플리케이션을 다양한 파이썬 버전으로 개발합니다.pyenv-virtualenvwrapper를 활용하세요.파이썬 프로그래머이고, 라이브러리를 개발합니다.pyenv와 tox를 활용하세요.파이썬으로 만든 애플리케이션을 distutils를 통해 패키징한 뒤, RPM 기반의 리눅스 배포본 용으로 python setup.py bdist_rpm 명령을 통해 *.rpm 파일을 제공하기도 했습니다. 이를 통해 애플리케이션을 설치할 경우, 각 파일들은 리눅스 FHS 표준과 해당 시스템 설정에 따라 흩어지게 됩니다. ↩예를 들어 파이썬에서 가장 많이 쓰이는 국제화 라이브러리인 바벨은 pybabel 명령어를, 구문 강조 라이브러리인 파이그먼츠는 pygmentize 명령어를, 장고는 django-admin 명령어를 제공합니다. ↩저는 2017년 4월에 한 번 써보았으나, 아직은 실무에서 쓰기에는 이르다는 결론을 내렸습니다. 이에 관한 그때의 제 감상은 별도의 글로 다루었습니다. ↩#스포카 #파이썬 #개발팀 #개발자 #인사이트 #후기 #일지
조회수 1142

신입들을 위한 직장생활의 디테일 70가지

패기에 불타오르는 시닙회사에 들어가면 기쁩니다. 이제 월급도 나오고 사원증같은 것을 목에 걸고 출입문에 찍는 신세계를 경험하게 되죠. 처음에 사무실에 들어가면 경쾌한 키보드소리와 마우스의 딸깍이가 절묘한 조화를 이루며 내는 자진모리 업무사운드와 의자엔 목배게, 뭔가 담요, 텀블러, 다육이, 루피 피규어, A4용지산맥 등을 바라보며 아 드디어 나도 진정한 로동의 력꾼이 될 수 있겠구나 싶습니다. 물론 냉장고에 붙어있는, 또는 탕비실 어딘가에 수북히 쌓인 야식전단지는 별개의 문제입니다. 이것은 신입사원들을 위한 글입니다. 그 중에서도 브랜딩, 마케팅, 디자인 직무에 해당하는 분들을 기준으로 썼습니다. 왜냐면 그걸 쓰고싶었기 때문입니다. 경력자 분들은 알아서 자기 일을 찾아서 하실 테니, 그냥 키득키득용으로 읽어주셔도 무관합니다.일전에 잠깐 얘기했지만, 마케팅,브랜딩,기획자,디자이너는 각자 업무가 매우 유사하면서도 다른 것들이 많습니다.  이론상으로야 브랜딩과 마케팅, 기획은 거의 하나의 명제를 기준으로 움직이며(매출극대화), 긴밀히 협업이 이루어지는 것이 많습니다만 어디 현실이 그러합니까. 대부분 현실은 그냥 회사가 임의대로 나눈 직무에 따라 채용이 되고, 필요한 업무를 하게 되는데 소위 필요한 업무라는 것은 이것저것 쏟아져 들어오는 다양한 것들일 가능성이 높습니다. 마케터로 뽑혔지만 거의 올라운더가 될 수도 있단 얘기입니다. 작은 회사일수록 업무분할의 모호함은 더욱 커져갑니다. 화분에 물도 줘야하고, 쓰레기도 비워야하는데, 견적도 알아보고, 때때로 제안서도 만들고, 디자인도 하고, 미팅도 가며, 영업도 합니다.그러니 실상 오늘의 글은 어찌보면 '대부분'의 신입사원이 겪게될 상황들에 대한 이야기일 수도 있겠습니다.그럼 시작합니다~1. 처음 들어갔는데 사수가 있다면 : 사수의 말을 잘 듣습니다. 인수인계하는 건 목이 아픈 일입니다, 광동비타500 제공 내지는 함께 담배타임을 가지도록 합시다. 담배타임엔 색다른 진실들을 마주할 수 있습니다. 비흡연자라면 커피타임을 추천합니다.2. 처음 들어갔는데 사수가 없다면 : 지난 프로젝트 기획서와 결과보고서를 달라고 해서 뒤적거리도록 합니다. 뭔 말인지 모르겠어도 뒤적거려봅니다.3. 책상을 정리해보자 : 1일차엔 문구류셋팅, 2일차엔 가습기, 다육이 셋팅, 3일차엔 애인사진, 담요, 미니선풍기 셋팅, 4일차엔 간식셋팅, 5일차엔 비싼 기기들 셋팅(아이패드, 노트북냉각기..) 6일차엔 목장갑, 줄자, 공구류 셋팅(필요할 때가 많습니다.) 7일차엔 모든 걸 창조하고 휴식을 취합니다.4. 프린터를 셋팅해보자 : 시작메뉴에서 장치및프린터를 누른다음, 장치추가를 누르고, 프린터이름(후지, 캐논, 뭐시기)과 제품명을 (C2263같은거)를 찾아서 선택합니다. 구글에다가 "후지 제록스 C2263 드라이버" 를 치면 고객센터/다운로드/지원 탭이 나오는데 거기서 최신버전 드라이버 다운받아서 설치한 후 프린터추가를 실행합니다. 테스트페이지 인쇄를 해보고 잘 나오면 끼야호를 외치며 테스트페이지를 집에 가져가 액자에 끼워 걸어놓습니다.5. 회의를 해보자 :회의할 땐 있어보이는 다이어리나 노트북따위를 들고갑니다. 다이어리는 몰스킨등이 좋지만 비싸므로 테이블톡 정도가 적당한 것 같습니다. 뭔갈 죄다 기록합니다. 죄다 기록하는 것이 좋습니다.6. 회의분위기가 싸하다 : 다이어리를 쳐다봅니다.7. 회의분위기가 좋다 : 집에 돌아가 조상님의 공덕에 감사드립니다.8. 회의록을 써보자 : 회의록은 워드로 작성합니다. 발제자, 참석자, 회의시간, 장소, 회의주제, 회의내용, 결정사항, 업무분장, 기타사항등을 표로 만들어서 작성합니다. 대부분은 이미 회의록이 양식으로 있을 것입니다. 회의들어가기 전에 항상 먼저 양식이 있는 지 물어보고 득하도록 합시다. 물론 득하는 순간 본인이 써야하는 것은 어쩔 수 없습니다.9. 회의를 하는데 하품이 나온다 : 볼펜을 떨어뜨리고 밑에서 하품을 해봅니다.10. 회의를 하는데 기침이 나온다 : 기침을 하면 됩니다.11. PPT를 할 수 있냐고 물어본다 : 저녁약속을 취소하도록 합니다12. 엑셀을 할 수 있냐고 물어본다 :시력보호를 위해 안토시아닌이 풍부한 블루베리쥬스를 마십시다.(눈이 벌개질 수 있음)13. 포토샵 할 수 있냐고 물어본다 : 이번주말 약속을 취소합니다.14. 버스측면 광고비용 좀 알아봐달라고 한다 : 네이버지도를 켭니다 - 원하는 구간을 선택한 후 대중교통으로 검색합니다. - 한번에 가는 버스번호를 모두 긁은 후 노선을 확인합니다. - 사람들이 많이 모이는 구간이 있는 버스를 따로 구분합니다. - 버스광고회사에 문의해서 해당 번호,노선의 견적을 알아봅니다 - 두 군데 전화합니다. - 비교견적을 냅니다 - 금액과 옵션을 구분해서 보고합니다.(금액은 반드시 기간과 함께 파악합시다)15. 굿즈제작을 하자고 한다 : 구글로 제작업체를 알아봅니다 - 레퍼런스를 확인합니다 - 견적문의메일을 보냅니다(몇 시까지 달라고 반드시 얘기하긔.) - 제작기한과 예상수령일자를 확인합니다 - 견적을 받습니다 - 마찬가지로 두세군데 알아봅니다 - 비교견적을 냅니다 - 레퍼런스+비교견적표를 함께 보고합니다.16. 견적왔냐고 물어보시는데 아직 안왔다 : 몇 시까지 달라고 요청해놨다고 보고하면서 다시 전화해 보겠다고 합니다.17. 견적왔냐고 물어보시는데 왔다 : 5분뒤에 정리해서 드리겠다고 합니다.(5분동안 잘 정리해서 보고한다.)18. 대표님 어디가셨냐고 묻는다 : "전화해볼까요?" (O) "몰라요"(X)19. 군것질이 하고싶다 : 일단 나눠주고 남은 것을 먹습니다.20. 치킨이 먹고싶다 : 집에가서 먹습니다.21. 주말에 등산을 가자고 한다(설마? 아직도?...)집에 돌아가 동생에게 내 십자인대를 끊어달라고 합니다.22. 퇴근 후 카카오톡이 왔다 : 카카오톡을 삭제합니다.23. 그 카카오톡이 내 실수때문에 사고가 터진 이슈였다 : 출근 전 청심환을 먹도록 합시다.24. 큰 사고를 쳤다.보고하기전 일단 옥상으로 올라가 담배를 한 대 핍니다- 엄마에게 사랑한다고 전화를 합니다- 내려가서 사고경위와 내용을 정리합니다.- 나름의 해결책을 구상해봅니다 - 1,2안정도를 짜봅니다(제가 책임지겠습니다..이런 얘긴 하지말자. 너가 책임질 수 없다. 책임은 늘 대표님의 몫이다.) - 빨리 잘, 현명하게, 얼른, 최소한의 피해로 처리하는 게 우선입니다.- 팀장님께 드릴 말씀이 있다고 합니다. - 자리로 가서 소근히 말하도록 합시다 - 팀장님의 낯빛이 어두워지는 것을 슬로우모션으로 관찰합니다. - 팀장님이 대표님께 보고하겠다고 할 겁니다.. - 살아생전 경험하기 힘든 억겁의 시간을 경험해봅니다 - 잘 처리됩니다.덧 : 사고는 어떤식으로든 해결은 됩니다. 도덕적인 문제만 아니라면25. 물을 흘렸다 : 얼른 닦아.  어떡하지!어떡하지! 하지말고26. 동기가 자꾸 나에게 일을 시킨다 : 나도 시키도록 합시다. 응 알았어 해줄께, 참! 그럼 이것 좀 도와줄 수 있어?라고. 동기는 점점 일이 이상하게 돌아가는 것을 느낄 것입니다.27. 점심시간이 어색하다.혀에 느껴지는 미세한 5가지 맛을 구별하며 맛을 음미하도록 합시다.28. 국밥을 잘 못먹는 타입이라면 : 비빔밥을 시킵시다.29. 페이스북 좋아요를 늘리자고 한다 :이제부터 판타지가 펼쳐질 수 있습니다..30. 카드뉴스를 만들으라고 하신다 : 표지와 엔딩카드가 있는 것을 좋아들 하십니다. 망고보드나 타일을 잘 이용해봅시다.31. 뭔가 딱 정리된 보고서를 원하신다 : 표를 넣습니다.32. 격식을 갖춘 보고서를 원하신다 : 표지를 만들고 결재판에 꽂아서 가져다드립니다.33. 블로그 개편을 하자고 한다.투명위젯만들고 링크위젯 넣으란 얘기입니다.(http://blog.naver.com/jdklovekms/220079690297) 참고34. 시안을 몇 개 가져와보라고 한다.시안은 2개를 가져가고, 나머지 3개는 핀터레스트에서 찾아서 레퍼런스로 가져갑니다. 시안5개 다 만들필요없습니다35. 시안을 보는데 표정이 별 변화가 없다 : 큰일났습니다.36. 퇴근시간이 다 되어가는데 아무도 가지 않는다.저녁약속을 취소합니다.37. 괜찮으니 먼저 가도 된다고 한다.마찬가지로 저녁약속을 취소합니다.38. 사수가 자리에서 일어났다.그로부터 +10분 후 짐을 싸도록 합시다.39. 딱히 할일이 없거나 일찍 끝나버렸다 : 창고나 비품실의 물건위치를 몽땅 외웁니다.40. 현장나갈 일이 생겼다.끝나고 맥주를 마시게 됩니다.41. 박람회 부스를 간다.한손엔 판촉물과 한 손엔 방명록, 가입서류같은 걸 들고 일단 뭐라도 긁어모읍니다. 뭔가 박람회에서 서서 돌아다니는 건 개인정보 줍줍을 하기 위함이 큽니다. 현장가입, 앱다운, 판매처유치, 상품판매가 주목적이죠. 설문조사를 미끼로 꼬드겨서 인상이 참 선해보이신다고 극찬하며 오른손으로 녀석의 손을 꽉 쥐고 놓아주지 않도록 합시다.42. 제안서를 쓰자고 한다.일단 각 페이지네이션을 먼저 합니다. 워드로 30줄짜리 행을 만든다음 페이지넘버를 적고 뭐뭐 들어갈 지 간략한 페이지 테마를 씁니다. 일단 그것부터 컨펌을 받습니다.. 그리고 필요한 자료들을 여기저기 구걸하며 달라고 합니다. 자료들이 모두 모이고 나면 주말약속을 취소합니다. 그리고 나의 주말에 안녕을 고하고 명복을 빌어줍니다.43. 영어이름을 짓자고 한다.간지나게 리암니슨 같은걸로 합니다.44. 협력업체에게 독촉전화를 해야한다.잘 좀 부탁드린다고 12번쯤 말합니다.45. 업무메일을 써야한다.안녕하세요, 어디에 누구누구입니다. 일전에 말씀드린(꼭 들어가야함) 어쩌고의 건으로 연락드립니다. 해당 건의 진행상황이 어디까지 되었고, 이제 다음단계인 "뭐시기"를 진행해야 하는데 필요한 몇 가지 사항을 아래와 같이 정리하여 드리오니 확인 후 회신부탁드립니다.감사합니다.1. 어쩌고저쩌고2. 어쩌고저쩌고3. 어쩌고저쩌고하기첨부한 파일은 각각 1. 뭐시기, 2. 뭐시기, 3.뭐시기 입니다.수고하세요!(느낌표정돈 붙여줘야 합니다)46. 업무전화를 받아보자(외부전화) : 벨렐렐레~ 여보세요(X)벨렐렐레~ 네, 무슨 회사 마케팅팀 박창선입니다(O)47. 업무전화를 받아보자(내선) : 벨렐렐레~ 네(X)벨렐렐레~ 네 과장님~(O)48. 지각을 했다굽신굽신 들어가서..아 죄송합니다...49. 심하게 지각을 했다응급실로 갑시다.50. 되도않는 소리를 한다에베베베베베하며, 하는 시늉을 냅니다.51. 나 사원땐 말이야~라며 왕년드립을 친다.저 수정란땐 말이예요..하면서 태초의 기억을 꺼내봅시다.52. 누군가 날 이유없이 미워한다 : 그럼 미워할 이유를 만들어즙시다.53. 누군가 날 미워하는데 내 잘못이다 : 술 한잔하자고 직접 얘기합니다. 일단 죄송하다고 합니다. 자초지종과 등등을 설명해봅시다. 그래도 말이 안통하면 떡이 될 정도로 먹여서 나한테 미안할 짓을 하게 만들도록 합시다.54. 제아씨는 참 특이해..? 라는 얘기를 한다 : 많이 참고있는건데요? 라며 서랍속에 권총을 보여줍니다.55. 홈페이지 개편을 해보자고 한다. 그런데 내부적으로 알아서 하자고 한다.그간 알고있던 코딩지식을 모두 망각해보도록 합니다.56. 영업미팅에 동행했다.집에 있는 가장 멋진 기기들을 모두 꺼냅니다. 아이패드에어, 벨킨키보드, 컨설팅모드 노트북, 몰스킨에서 산 클립파일, 가죽커버의 링바인더 총출동, 아이워치를 끼고 킹스맨의 기분을 느껴봅니다.57. 인쇄를 할 땐흑백/이면지/모아찍기/품질(저)58. 다들 흡연자다그렇다고 당신이 담배를 배울 필욘 없습니다.59. 다들 비흡연자인데 나만 흡연자다 : 이 참에 아이코스를 준비합시다.60. 퇴근시간이 다되었는데, 야식을 시키자고 한다.껐던 카카오톡을 다시 켜고, 친구에게 미안하다고 합시다.61. 대표님 기분이 안좋다.오늘따라 열심히 일을 할 수 있을 것 같습니다.62. 팀장님이 깨지고 왔다.황급히 오늘 팀장님이 시킨 일들이 무엇이었는지 다시 정리해봅시다. 황급함은 들키지 않는 것이 좋습니다.63. 업무일지를 써보자.업무일지는 상세하게 적는 것이 좋습니다. 사실 굉장히 안좋은 문화라고 생각합니다. 하지만 일단 적으라고 하는 데에는 여러가지 이유 중 감시의 목적이 크므로, 내가 지금 얼마나 빡세게 일하고 있는지 상세히 기록하도록 합시다.64. 회식을 가는데 시간이 어떠냐고 묻는다 : 점심회식 아니예요? 라고 반문해봅시다.65. 복사기가 고장났다 : 복사기 옆에 보면 기사님 전화번호가 있다 전화합시다. 혼자멀뚱멀뚱 이것저것 누르지말고..66. 항의전화가 걸려왔다 : 일단 10분정도 계속 들어봅니다. 그 후 전해드리겠다고 하고 메모한 후 넘깁니다. 보통 그런 고객들은 직급이 올라갈 수록 고분고분해지는 경향이 있습니다.67. 지출증빙서류를 써보자.은행과 계좌번호를 제발 잘 확인합시다. 천단위 쉼표 찍는 것도 잊지말고. 그리고 엑셀에 수식좀 깨지마영수증은 네 귀퉁이에 풀칠 다해서 제출하고 날짜순으로 정리해서 부착합니다.68.  주말에 기획안 최종본 좀 다시 달라고 그런다.예전에 줬는데도 또 달라고 하는 경우가 많습니다. 메신저를 뒤져보거나 아니면 앗싸리 구글드라이브나 드롭박스에 가지고 있는 편이 낫습니다.69. 대표님이 뭔가 번뜩이는 아이디어가 떠올랐다고 한다.일단 듣고, 며칠 기다려봅니다. 번뜩이는게 항상 좋은 것은 아니니까요.70. 퇴사를 하고 싶어진다.비싼 걸 하나 지르고 이성적으로 생각해 봅니다.
조회수 1102

34살 살아보면서 느낀것들

※ 본 글은 '26 Things I've Learned in 26 Years' 글에서 모티브를 얻어 작성되었습니다.아직 인생의 반의 반도 살아보지 않았지만, 지금까지 살아보면서 느낀걸 정리해 보는건 나름 의미가 있다고 생각한다. 미디엄에서 본 글에서 모티브를 얻어서 지금까지 한국나이로 34살 살아오면서 느낀 점들을 나도 한번 정리해 보았다. 물론 '느낀점'이기 때문에 이게 옳다는것도 아니고 더 살아가면서 생각을 바꿀 것들도 제법 많이 존재할 것이다. 아울러 혹시 다른 사람들도 본인의 느낀점들을 정리해서 서로 연결해서 공유해 보는것도 재밌을 것 같다.1. 부모님이 살아간 방식대로 살아가면 큰일난다80년대생은 나름 삶의 패러다임이 현격하게 바뀌는 두 지점의 중간에 끼어있는 세대이다. 부모세대가 살아온 성공방정식과 우리보다 어린 세대의 그것은 A부터 Z까지 다 다를거고, 인공지능으로 변화될 인간의 역할세계의 범주 역시 부모세대는 살짝 비켜가지만 80년대생 부터는 직격탄을 맞기 시작하는 세대이다. 이런 상황에서 공부 열심히해서 좋은 대학가고 대기업에서 승승장구하는 부모님이 바라는 삶대로 살아가다간 2020년대에 어떻게 될지 장담할 수 없다. 이 부분에 대해서는 추후 별도의 글로 나름의 의견을 풀어볼 예정이다.2. 목적의식 없는 인내(忍耐)는 인내가 아니라 순응하는거다우리는 어렸을때 부터 항상 '인내하는 사람'의 미학에 대해 배워왔다. 호랑이와는 다르게 21일동안 쑥과 마늘만 먹고 인내한 곰이 드디어 인간이 된 이야기, 2000번의 실패 끝에 전구를 발명한 토마스 에디슨 이야기 (사실인지는 모르겠지만..) 등등 쓰디쓴 인내의 시간을 견디면 성공의 달콤한 열매를 얻을 수 있을 거라는 가르침이다. 하지만 저런 인내의 가르침 이면에는 사실 순응하는 인간을 길러내기 위한 무시무시한 의도가 숨겨져 있음을 그 당시에는 깨닫지 못했다. 생활기록부에 적혀있는 문구들 중 흔하게 보는 표현이 있는데 바로 '이 학생은 인내심이 강하다'라는 것이다. 그 학생이 왜 인내심이 강하냐고 물어보면 '이 학생은 뭘 하든지 불평이 없고, 선생님이 시키는대로 가르침을 잘 따르고, 심지어 단체기합을 받아도 이 학생은 잘 참아내는 학생입니다'라고 대답한다. 이 사회는 윗 사람의 지시에 불평 불만 없이 잘 따르는 사람을 '인내심 강한 사람'이라고 정의내리고 있는 것이다. 내가 '무엇을 위해 인내하는가'에 대한 자각 없이 그냥 참고 견디는건 인내가 아니라 그냥 순응하는거고 내 정신건강만 축내는 행위라고 생각한다.3. 아무리 친한 사람이라도 내가 신경쓰는 정도의 딱 1%정도만 내 일에 신경써준다내 발등에 불 떨어진 일을 남들도 그렇게 여겨줄거라 생각하다간 큰코다친다. 스타트업하면서 개인적으로 많이 느낀 점이다. 나름 내 생각에서는 이런거 도와주는거 쉬운일이고 나한테는 매우 급한 일이니까 친구라면 당연히 도와주겠지... 하고 기대하는것 만큼 위험한 발상이 없다는 것이다. 물론 개중에 잘 도와주는 사람이 있긴 있다. 이건 그 사람이 정말 대단한 특이케이스인거지 도와주지 않는 남들이 나쁜 친구라고 생각하고 있다가는 주변 친구들 다 떠난다. 그냥 다른 사람들은 내가 생각하는것의 딱 1%정도만 관심있을거라는 마음가짐으로 접근하는게 가장 속 편하다.4. 사소한 일에도 의미부여하는 습관이 중요하다이건 내 바로 전 직장에서 같이 일한 상사로부터 얻은 깨달음이다. 이 분은 모든 사소한 행동에 전부 이유를 갖다붙이는 사람이었는데 그 정도가 얼마나 심했냐면, 같이 밥먹으면서 하는 농담에도 이 농담을 던진 이유가 명확해야 했고, 어떤 메뉴나 식당을 골랐는데 그 이유가 분명하지 않으면 벼락같이 화를내던 분이다. 그 당시에는 '이 사람 이렇게 살아서 얼마나 피곤할까..'하고 생각했었는데 그렇게 같이 2년을 생활하다 보니 확실히 머리속에 논리가 잡히기 시작하고 일의 우선순위를 파악하는 체계가 생기더라. 아무리 사소한 일일지라도 내가 어떤 선택을 해야하는 상황이라면 내가 내린 선택의 이유를 생각해 보는 습관은 제법 유용하다.5. 하루의 모든 순간들이 서로 연결되어 있다이건 요즘 느끼기 시작한 건데, 삶의 매 순간 순간이 마치 유기적으로 연결되어 있다는 느낌이 든다. 내가 만나는 사람들, 내가 지금 하는 일, 내가 밥먹는 이 식당에서 마주친 사람들 등등 단순히 스쳐지나가는 순간일지라도 뭔가 미래의 어떤 순간과 어떤식으로던 엮여 있다고 생각한다. 또한 이 연결되는 방식은 항상 내가 예상하는것과는 전혀 다른 방향으로 작동하는 경우가 많다. 예를들어 내가 프로그래밍 배우려고 코딩을 공부했는데 이게 (내 프로그래밍 능력을 높이기 보다는) 내 디자인스킬을 더 향상시켜주는 방향으로 작용했고, 디자인 스킬이 향상되니까 (디자인 퀄리티가 높아지기 보다는) 디자인 속도가 빨라져서 여유시간이 생겼고, 여유시간이 생기니까 (뭔가 다른 생산적인 일을 하기 보다는) 인터넷 블로그 글들 서핑하고 페북에서 노닥거리는 시간이 늘어났는데 이게 또 내가 블로그활동을 하게 만드는 계기가 되고.. 이런식으로 한가지 사건이 끊임없이 다른 사건들을 유발하면서 이게 내가 의도했던 방향과는 다른 방향으로 계속 흘러나간다는 것이다.6. 회사란 내 인생목표를 위해 활용하는 수단이지 회사 그 자체가 목적이 아니다회사다니다 보면 (나도 한때 그랬었고) 회사 그 자체가 목적인 사람들을 많이 본다. 이 사람들에게는 회사에 나와 일하는게 내가 살아 숨쉬는 이유처럼 보인다. 70년대 개발주도 경제체제에서는 저렇게 살다보면 임원도 달고 해외 주재원도 나가고 뭔가 쟁쟁한 삶을 살아가던 사람이 많았겠지만, 지금 2020년대를 바라보는 우리가 저렇게 살다가는 회사에서 내쳐지고 난 아무것도 할 줄 모르는 사람 되기 십상이다. 회사란 내가 지금 가지고 있는 인생의 어떤 목표를 위해 활용하는 수단 그 이상 그 이하도 아니다.7. 상사란 내 인생목표를 위해 배움을 얻기위한 존재이지 섬기기 위한 존재가 아니다위의 6번과 같은 개념이다. 상사를 무슨 신처럼 섬기면서 회사 다니는 사람들이 있다. 상사란 그저 내 커리어를 먼저 타고 있는 사람으로서 내게 해줄 말이 많고 경험에서 나오는 조언과 가르침을 줄 수 있는 사람이지 내가 섬기기 위해 존재하는 사람이 아니다.8. 배울게 없는 상사는 상사로서 가치가 없다위에서 설명한바와 같다. 상사란 내게 가르침을 줄 수 있어야 의미가 있다. 내가 저 사람에게 배우는게 아무것도 없는데 몇년을 동고동락해서 같이 일해야하는것 만큼 시간낭비가 없다. 인생은 짧고 빠르게 변화한다. 내가 만일 저 상황에 있다면 회사 내에서 다른 사람으로 바꿀 기회를 찾던지, 아니면 이직을 통해서라도 그 상황에서 빠져나와야 한다. 술먹고 정치하는 법 이딴거 배우는거 얘기하는거 아니다.9. 인생목표라는건 하나만 있을 수 없다. 심지어 계속 변한다이것도 최근들어 깨닫기 시작한 거다. 흔히 어른들은 '한번 정한 목표를 뚝심잃지 않고 매진하는 삶의 미학'에 대해 가르친다. 물론 매우 의미있고 멋있는 삶이다. 하지만 지금까지의 삶의 경험으로만 봤을때 저렇게 한번 정한 인생목표에 올인해서 성공하는 케이스는 전체 인구의 5%도 안되는것 같다. 이건 우리세대에서 점점 더 가속화 될게 뻔하다. 3년만 지나도 내가 걷고 있는 이 거리의 모습이 바뀌어가는 세상에서, 우리 회사의 한치 앞의 미래도 불투명한 상황에서 인생 목표라는건 하나만 있을 수 없다고 생각한다. 그리고 이건 계속 그 시대 상황에 맞게 기민하게 변화하고 움직여야 된다고 생각한다.10. '00회사에서 3년' 그 자체는 커리어로서 아무 가치가 없다.이것 역시 최근들어 느낀거다. 우리 이력서를 보면 많은 사람들이 '00회사에서 3년,' '00회사에서 2년' 이런식으로 커리어가 나열되어 있다. 그 밑에 나름 그동안 뭐 했는지를 간단히 요약해서 적는 방식이다. 지금와서 생각해 보면 이렇게 밖에 설명이 안되는 커리어는 아무 가치가 없는것 같다. 그 회사에서 00업무 3년한게 중요한게 아니라 00업무 3년을 통해 내가 앞으로 무엇을 할 수 있는 사람임을 피력할 수 있는게 중요한거 라고 생각한다. 예를들어 내가 00회사에서 영업관리로 3년을 일했다면, 그 일을 통해 내가 최소 '00군의 제품을 00규모의 시장에서 연매출 00정도의 채널로 발굴하는 방법을 아는 사람'이라고 피력하는게 중요하다는 뜻이다.11. 내 능력의 스코프를 모른채 연차만 쌓이는건 커리어에 독이 쌓여나가는것과 같다위의 10번과 같은 맥락이다. 내가 어떤 일을 일구어낼 수 있는 사람인가에 대한 명확한 정의가 서지 않은 채 현재 회사에서 대리, 과장으로 연차만 쌓이고 있는건 커리어에 독이 차곡차곡 쌓여서 점점 시장에서 가치가 없는 사람으로 전락하고 있는것과 같다. 매 순간마다 내가 커리어 시장에 나가면 00분야에 00성과를 낼 능력이 있는 사람이다라는걸 끊임없이 성찰해 보는게 필요하다. 여기서 중요한건, 내가 00시장에서 영업관리를 3년 했으니까 다른 시장에서도 영업관리를 할 수 있을거라..라는 막연한 생각은 아무 가치가 없다. 각 시장마다 생태계가 다르기 때문에 내가 현재 있는 시장에서의 영업관리를 통해 시장 생태계가 어떻게 작동하는지를 알고 있고, 이 생태계가 다른 시장에서는 어떻게 변화하며, 이런 변화에 대해서는 이러이러한 방법으로 관리방법을 변화시킬 수 있다..정도로 아주 구체적으로 스코프를 설명할 수 있는 수준이어야 한다.12. 지금까지 큰 실수없이 무난하게 회사생활 했다면 역시 커리어에 독이 쌓이고 있는거다대기업다니면 가장 많이 듣는 얘기가 있다. '큰 실수 없이 무난하게,' '책임질 일 만들지 말고 그냥' 이런 말들인데, 이런 사고방식으로 회사생활하다가는 커리어에 독이 쌓이기 십상이다. 당신이 만일 회사생활 5년중에 (술자리에서 실수한거 말고) 회사나 조직에 어떤 손해를 끼쳐본 경험이나 매출타격을 입혀본 경험이 없다면 이건 빨간 경고등이 켜져있는 상태와도 같다. 성공은 운으로 얻어지는거 말고는 대부분 실패의 경험으로 얻어지는 경우가 많다. 회사라는 안정된 바운더리 내에서 내돈 아닌 남의 돈 써가면서 일하고 있음에도 실패의 리스크를 져본적이 없다는건 내가 1945 비행기 게임을 하면서 목숨이 2개나 더 있고 폭탄도 2개나 더 쓸 수 있는데 안쓰고 있는 상황과도 같은거다.13. 목적없는 공부는 할 가치가 없다회사다니다 보면 자기개발이라는 미명하에 영어공부, 중국어 공부, 요즘에는 코딩공부까지!! 아무튼 스펙쌓기 목적으로 무작정 공부하는 사람들이 많다. 하지만 내가 지금 하는 이 공부의 목적이 무엇인지도 모른채 그냥 자기개발이 필요하니까 이거 공부해 볼까 하는 마음으로 여가시간, 가족과의 시간 쪼개가면서 공부하는건 아무 가치가 없다. 차라리 그 시간에 내 취미생활을 더 즐기거나 와이프와 데이트를 하는게 100배는 낫다. 목적성 없는 자기개발은 보통 오래 가지도 않을 뿐더러 배우기만 하고 쓰임이 없는 능력은 그냥 연기처럼 사라져 버리는 능력이 되기 때문이다.14. 목적을 가진 취미생활은 할 가치가 없다위의 13번과 유사한 맥락인데, 요즘 취미생활도 무슨 스펙처럼 취급받는 세상에 살고있다 보니 뭔가 스펙쌓기 같은 목적을 가진 취미생활을 하는 사람들이 늘어나고 있다. 취미생활이란 말 그대로 내 여가시간에 즐기는 특정 활동일 뿐이지, 이게 무슨 자기개발처럼 되서는 취미생활이라고 할 수도 없다. 자기개발 목적으로 달려드는 취미생활은 뭔가 공부처럼 받아들이기 때문에 결국 흥미도 떨어지고 시간낭비, 돈낭비만 하게되는 경우가 많다. 차라리 그시간에 열혈강호 60권을 읽어서 스트레스 푸는게 100배는 낫겠다..15. 대행사 직원이 대기업 직원보다 미래에 살아남을 확률이 100배는 높다대기업 다니다 보면 대행사 직원한테 막대하는 사원-대리급 직원들을 발에 치일정도로 보게 된다. 아마도 개발주도시대를 살아온 위의 차장 부장님들 하던 행태를 보고 배워서 그대로 따라하는것 같다. 그런 그들이 깨닫지 못하고 있는건, 저 대행사 직원들은 그 영역에서 자기 손으로 뭔가를 만들어내는 능력이 있는 사람들이고 그 대행사를 부리는 대기업 사원 대리들은 그사람들이 만들어낸 성과를 잘 다듬어서 위에다가 보고하고 지시를 받아오는 사람들이라는 것이다. 직접 자기 손으로 할줄 아는 사람 vs 보고만 하던 사람중 미래에 어떤 사람이 살아남을지는 굳이 설명 안해도 답이 나와있다.16. 영업전선에서 뛰는 사업가가 대기업 직원보다 미래에 살아남을 확률이 100배는 높다위의 15번과 유사한 맥락이다. 특히 대기업의 영업부서에 일하면서 대리점이나 총판을 끼고 일하는 사원 대리급 직원들에게 많이 나타나는 현상인데, 총판 사장님 x무시하면서 뭔가 지 나름의 영업 훈수를 두려는 애들이 있다. 보통은 영업기획팀에서 뽑아준 멋들어진 엑셀 시트를 들이대면서 여기 재고 회전율이 이러이러하고 요 제품군은 영업이익율이 어쩌고 하면서 막 훈수를 두면 (심지어 직원관리 훈수를 두는 사람도 봤다;;) 총판 사장님은 '아이고 00님은 참 똑똑하세요, 모르는게 없으시군요~' 이러면서 비위를 맞춰준다. 장담하는데 대기업과 다이렉트로 영업선을 터놓은 수준의 총판 사장님이라면 영업의 달인급 되는 사람인데, 이런 사람들한테 하나라도 더 배우지는 못할망정 훈수두려고 나불대다가는 나중에 큰코 다친다.17. 내가 만일 '전략'이라는 단어를 많이 쓰고 있는 사람이라면 실제로 뭔가 해본적이 없는 사람일 가능성이 크다.이거 솔직히 나도 그랬다가 요즘 스타트업 하면서 많이 반성하고 있는 부분이다. 내가 만일 기획직에서 일을 하고 있고, 내 보고서에 '무슨무슨 전략' 요런 단어들을 많이 쓰고 있다면 이건 내가 '아는게 별로 없는 사람이요'라고 광고하는것과 같은 뜻이다. 전략이라는건 사실 군대용어이다. 적과 싸우는 상황에서 군대같이 우리조직이 100% 통제 가능하고, 적에대한 정보를 이용해서 적을 찍어누르기 위해 사용하는게 전략이라는 것이다. 당연히 현실세계에서 '전략'이라는 말을 쓸때 보통 많이 나오는 실수가 1/ 전략인데 찍어누를 상대가 없는 상황에서 쓰이고, 2/ 전략이면 우리 회사에서 해당 조직들이 100% 통제 가능한 상황에서 워킹해야 하는 것인데 해당 조직들은 당연히 이게 진행되는지 모르고 있으며, 3/ 전략이라면 적과 시장에 대한 정보가 명확해야 하는건데 그런것도 아닌 그냥 멋드러지게 보이려고 쓰는 단어가 전략처럼 되어버린 것이다. 특히 '마케팅 전략,' 'SNS 전략'같은 단어들은 정말 조심해서 써야하는 단어들이다.18. 삶의 동반자를 만난다는건 인생의 큰 도약이다너무 일얘기만 한것 같아서 삶에 대한 얘기를 꺼내려고 한다. 사람은 결혼 전/후로 사고방식이나 삶의 가치관이 송두리째 바뀐다. (이혼할거 아니라면) 결혼이란 내 인생의 대부분을 같이 살아갈 인생 동반자를 만나는 아주 큰 사건이기 때문에, 결혼해서 내 가정을 꾸리는 시점부터 내 인생 2막이 시작되는 것과도 같다. 나 역시 결혼 전후로 삶의 자세가 180도 달라졌다.19. 결혼을 때가 되서 조건맞춰서 결혼하다간 인생 전체가 암울해 질지도 모른다그런데, 저런 중요한 '결혼'이라는 사건을 우리는 그냥 때가 되서 조건 맞춰서 양가 인사드리고 해버리는 경우가 많은것 같다. 특히, 대한민국에서 결혼할때 '사랑'이라는 단어를 언급하면 뭔가 어린애 같아 보이는 이상한 문화도 있다. 난 운이 좋게도 정말 사랑하는 인생 반려자를 만나서 결혼했기에 결혼생활 자체가 신혼이니 이런 단계도 없이 마냥 행복하다. 그러하기에 저렇게 '사랑'이라는 개념이 없이 조건맞춰 만난 반려자와 반평생을 살아갈 거를 상상해 보면 참 불쌍해 진다. 그래서 내 주변 미혼자들에게는 항상 이렇게 말한다. '앞으로 인생 80년 꾸준히 사랑할 마음드는 여자가 아니면 절대로 결혼하지 마라'20. 나와 다른것을 이해하는건 생각보다 쉬운일이 아니지만 매우 중요한 일이기도 하다사람 본성인지는 모르겠지만, 내 사고방식과 다른 사람, 내 삶의 방식과 다른 사람을 만나면 대부분은 경계심부터 든다. 어떤 사람들은 본인의 사고방식이 옳음을 남에게 설득하고싶어 한다. 나도 한때 채식주의자가 아닌 시절 내 와이프를 만났을때 (내 와이프는 10살때 부터 동물보호를 위한 채식주의를 하고 있다) 채식주의가 건강에 좋지 않음을 들어서 설득하려고 한 적이 있다. 지금은 나도 채식주의자가 되어 세상을 바라보니 예전에는 보지 못했던 다양한 생명과 환경의 가치가 눈에 보이기 시작한다. 나와 다른 사람을 이해하고, 그 사람이 되어보는것 많큼 큰 배움은 없다.21. 행복감이란 서로 연결되있기 때문에 어느 한 부분에서 행복하지 않다면 전체가 행복하지 않은거와 같다이런 사람들이 있다. '나는 내 일과 회사가 싫지만 가족의 행복을 위해 다니는거야.' 내가 틀릴수도 있지만 나는 행복에 대해 이런 가치관을 가지고 있다 - 내가 행복하지 않으면 우리 가족도 행복하지 않다. 이런 차원에서 내 하루의 반 이상을 보내는 일터가 행복하지 않은데 내가 행복해 질 수 있을까? -가 그냥 곱해져서 +100 x -1 = -100이 되듯이 행복감이라는건 +-개념으로 sum이 되는게 아니라 내가 어느 한 부분에서 불만족 스럽다면 그 삶 전체가 불만족해 질수 있고, 나아가서는 가족 전체가 불만족해 질 수 있는 것이라고 본다. 22. 살아가면서 한번쯤 마이너리티가 되보는게 필요하다우리 대부분이 뭔가 주류에서 벗어나 마이너리티에 속하는 것에 대한 막연한 불안감이 있다. 특히 대한민국 사회에서는 더욱 그러하다. 하지만 아까 20번에서 설명했듯이 마이너리티가 되어 보면 그동안 눈에 보이지 않았던게 보이게 되고, 또 연관된 마이너리티들의 세상이 열리기도 한다. 인생 백세시대에 한평생 주류안에서만 살기 보다는 한번쯤 마이너리티가 의도적으로 되어보는것도 괜찮지 않을까 생각한다.글쓴이는 스팀헌트 (Steemhunt) 라는 스팀 블록체인 기반 제품 큐레이션 플랫폼의 Co-founder 및 디자이너 입니다. 비즈니스를 전공하고 대기업에서 기획자로 일하다가 스타트업을 창업하고 본업을 디자이너로 전향하게 되는 과정에서 경험한 다양한 고군분투기를 연재하고 있습니다.현재 운영중인 스팀헌트 (Steemhunt)는 전 세계 2,500개가 넘는 블록체인 기반 앱들 중에서 Top 10에 들어갈 정도로 전 세계 150개국 이상의 많은 유저들을 보유한 글로벌 디앱 (DApp - Decentralised Application) 입니다 (출처 - https://www.stateofthedapps.com/rankings).스팀헌트 웹사이트 바로가기
조회수 1684

로봇 공학의 새로운 패러다임! 한화정밀기계의 협동 로봇을 만드는 로봇사업부 인터뷰!

한화정밀기계의 협동로봇 HCR-5 / 출처 - 한화정밀기계 이제 번거로운 작업은똑똑하고 안전한 협동 로봇에게 맡기세요! 제조 산업의 다양한 과정들이 점차 기계화되어가고 있습니다. 기계화의 과정에서도 사람이 개입되어야 하는 번거로운 과정들이 남아있기 마련인데요. 사람이 꼭 필요한 섬세하고 동적인 역할까지 수행하면서 기계의 편리성을 살릴 수 있는 ‘협동 로봇(코봇)’의 탄생으로 그 고민이 해결되었습니다.머지않은 미래에 협동 로봇의 춘추전국시대가 예상되는 가운데, 2017년 시장에 진입한 한화정밀기계의 HCR 시리즈 협동 로봇은 뒤늦게 시장에 합류했지만, 유려한 디자인과 다양한 기능, 안전성을 고려한 특색 있는 제품 생산으로 전 세계 고객들의 사랑을 받으며 점유율을 확대해가고 있습니다. 협동 로봇의 발전으로 개발과 연구를 전문으로 하는 직업도 탄생했는데요. 한화정밀기계에는 협동 로봇 전문가집단인 로봇사업부가 존재합니다. 이 부서의 수장인 장우석 로봇사업부장에게 자세한 이야기를 들어보겠습니다. Q. 안녕하세요. 우선 협동 로봇에 대해 간단히 설명 부탁드립니다!한화정밀기계 장우석 로봇사업부장 / 출처 - 한화정밀기계안녕하세요. 한화정밀기계 로봇사업부의 장우석입니다. 산업 현장에서 사람들을 돕기 위해 만들어진 로봇이 바로 협동 로봇입니다. 이들은 정확성과 일관성이 요구되는 반복적인 업무들을 처리하는데요. 기존의 반복적인 업무를 대신하고, 작업자는 주관적인 판단이나 유연성이 요구되는 일을 할 수 있도록 돕는 것이죠. 현재의 협동 로봇 이전에 주로 사용했던, 기존의 산업용 로봇은 굉장히 한정적인 업무만을 수행할 수 있었습니다. 가령 물건을 하나 옮긴다고 가정하면, 그에 맞는 고난도의 컴퓨터 프로그램을 입력해야 그 일을 할 수 있습니다. 만약 다른 장소로 물건을 옮기려고 한다면 조립공정을 멈추고 중장비를 사용해 옮겨야 합니다. 따라서 시간과 비용이 굉장히 많이 듭니다. 반면 협동 로봇은 이러한 번거로운 과정들을 한 번에 해결해줍니다. 특히, 한화정밀기계의 HCR 협동 로봇은 사용자 친화적인 인터페이스를 갖추고 있어서 작업자가 작동법을 익히는데 하루도 채 걸리지 않습니다. 또한, HCR 협동 로봇의 워크플로를 세팅하거나 변경할 때는 단순히 필요한 항목들만 클릭해 바꾸면 됩니다.싱가포르 합자법인 공장에서 HCR-5를 생산하고 동남아시아 시장에 공급할 예정인 한화정밀기계 / 출처 - 한화정밀기계 Q. 한화가 로봇 산업에 진출하게 된 계기는 무엇인가요?한화그룹은 4차 산업혁명의 일환으로 로봇 산업을 시작했습니다. 다양한 분야 중 저희는 협동 로봇에 초점을 맞췄고, 작년에 국내 최초의 협동 로봇인 HCR 시리즈를 출시했습니다.한화그룹은 항공엔진, 에너지, 산업 장비, CCTV 카메라와 같이 다양한 산업 분야에 관심을 두고 있습니다. 이러한 시장을 키우고 선두가 되기 위해, 한화는 정밀기계, 동작 조종 기술, 사물 인식 소프트웨어, 자동 내비게이션과 같은 분야에서 전문성을 높이고 있습니다. 이러한 모든 것의 중심이 바로 로봇 산업입니다.이렇게 다양한 산업 지식, 경험 그리고 기술을 바탕으로 로봇사업부를 키울 수 있었고, 지금의 HCR 시리즈 같은 제품을 시장에 내놓을 수 있게 된 것입니다. 특히 로봇 공학 분야와 소프트웨어 개발에 매우 높은 전문성을 가진 인력을 보유하여 협동 로봇 기술 개발(R&D)을 빠르게 진전시킬 수 있었습니다. 한화정밀기계와 싱가포르 정밀 엔지니어링 전문 업체인 PBA 그룹의 합자법인 "PBA-Hanwha Robotics"의 개소식 모습 / 출처 - 한화정밀기계  Q. 한화 협동 로봇의 제품 현황과 고객 반응은 어떤가요?한화정밀기계의 협동로봇 HCR-5 / 출처 - 한화정밀기계한화정밀기계는 현재 세 종류의 협동 로봇(HCR)을 출시하였으며, 각각 3kg, 5kg, 12kg의 무게를 들 수 있습니다. 이 세 종류의 협동 로봇은 크기가 작고, 옮기기 쉬우면서 방대한 범위의 업무를 진행할 수 있기 때문에 다양한 업무 지원이 필요한 중소 제조 기업에 이상적인 모델이라 할 수 있습니다. HCR 시리즈의 시장 내 고객 반응은 매우 호의적입니다. HCR 시리즈만이 가진 가장 큰 장점은 사용자가 단일 제어 장치에서 두 개의 HCR 협동 로봇을 실행할 수 있다는 점입니다. 그렇기 때문에 운영비가 최대 10%까지 절감되는 효과가 있죠. 거기에 HCR 시리즈 조작이 쉽다는 점까지 장점으로 작용하면서 시간을 절약하고 생산성을 더욱 높일 수 있습니다.  기능과 안정성을 모두 잡은 HCR 시리즈만의 디자인 또한, 고객들은 HCR 협동 로봇의 수려한 디자인을 가장 크게 평가합니다. 보통 산업용 기계는 튀어나온 부분들이 있어서 긁히거나 부딪힐 위험이 있는데 HCR은 부드러운 곡선 모양으로 제작되어 안전하고 디자인이 뛰어납니다. 산업 디자인은 보이는 게 전부가 아닙니다. 사람들이 협동 로봇과 같이 일할 때 실제로 안정감을 느낄 수 있어야 합니다. 그런 이유로 더 안전하고 부드럽게 보이도록 곡면을 살려 디자인했습니다. 디자인과 기능 면에서도 HCR 시리즈는 매우 안전한 제품입니다. HCR 협동 로봇은 작업자의 옆에서 업무를 보조하는데, 자동 충돌 감지 기능이 있어서 부딪히면 즉각적으로 작동을 멈춥니다. 2017 iF 디자인 어워드, 제품 디자인 부분에서 본상을 수상한 HCR 협동 로봇 / 출처 - 한화정밀기계 Q. 협동 로봇의 미래에 대한 예측과 향후 개발하고자 하는 협동 로봇은?미래에는 AI와 딥러닝, IoT 등 4차 산업혁명을 대표하는 기술들이 접목된 협동 로봇이 시장을 주도할 것이라 예측합니다. 특히 AI와 딥 러닝 기술로 인해 조만간 로봇 산업에는 큰 지각 변동이 있을 것이라 예상합니다. 원래는 5년이나 10년 주기로 일어날 것으로 생각했는데, 이제는 그것보다 더 앞당겨질 것 같네요. 예전에는 몇 년 더 걸릴 것으로 생각했던 기술들이 AI와 딥러닝 기술이 접목된 지 2년 반 만에 이미 구현되고 있으니까요!그래서 한화정밀기계에서는 앞으로 생산될 제품에 AI나 빅데이터, IoT를 어떻게 접목하고, 실제로 어떻게 적용될 수 있을지에 대해 연구하고 있습니다. AI가 접목된 협동 로봇은 어떠한 상황이나 조건에서도 최대한 쉽게 일을 수행할 수 있습니다. 특히 기술 접목 분야에서 한화그룹은 다양한 산업군과 계열사가 있다는 것이 매우 큰 장점인데요. 다양한 계열사에 자문하면서 실제로 협동 로봇이 어떻게 업무에 적용이 되고, 앞으로 어떻게 발전시킬지 논의하고 있습니다. 협동로봇 합자법인 공장 투어 모습 / 출처 - 한화정밀기계 한화정밀기계의 장우석 부장은 피처폰에서 스마트폰 시대로 바뀌었듯이, 로봇 시장도 향후 몇 년 이내로 큰 패러다임 전환이 일어나리라 전망했습니다. 단순히 몇 개의 일을 수행하는 로봇에서 거의 모든 일을 처리할 수 있는 로봇으로 변화하는 것입니다. 협동 로봇 시장은 아직 초기 단계에 있으며 시장 규모도 매우 작지만, 앞으로의 사업 성장 가능성이 매우 큰 분야입니다.한화정밀기계는 현재 유럽과 동남아시아 시장의 큰 성장 가능성을 두고 사업에 박차를 가하고 있는데요. 단기적인 목표는 시장점유율을 매년 두 배로 늘리는 것이며, 장기적인 목표는 협동 로봇 분야에서 세계적인 선도 기업이 되는 것이라고 합니다.4차 산업혁명에 힘입어 자동차와 스마트 팩토리를 중심으로 기술 트렌드를 이끄는 기업을 목표로, 글로벌 로봇 시장을 선도하는 기업이 되기 위해 끝없는 노력을 거듭하고 있습니다. 점차 확대되는 협동 로봇 시장을 선도하는 한화정밀기계의 미래를 함께 응원 부탁드립니다!#한화 #한화그룹 #한화정밀기계 #구성원인터뷰 #직무정보 #기업정보 #기업문화 #비전 #목표 #채용정보 #공채정보
조회수 1269

라이더소개#11. 국대 앞의 사나이, 데니

[라이더소개#11. '국대(떡볶이)' 앞의 사나이, 데니]데니을 소개합니다 :)Q. 간단한 자기소개 부탁해내 닉네임은 데니고,나이는93년생 닭띠,유학생이야. 현재 한국에 나와서 지금 이렇게 아띠인력거를 접하고, 일을 하고 있는6개월 차 라이더야.Q. 어떻게 아띠인력거를 시작하게 됐어?계기가 있어?맨 처음에 일을 시작하게 된 계기는,김난도 선생님의 책을 읽다가IJ가 자전거 고치는 모습을 보고서'아 이거 왠지 느낌있다'싶어서 시작하게 됐어. '재밌게 일하고 싶다' 그런 마인드가 나랑 약간 생각이 비슷하더라고.그때가 한국오기 며칠 전이었어.타이밍이 잘 맞았지.Q. 처음 라이딩 했을 때 어땠어?진짜 좋았어.진짜 재밌었어.첫 날 라이딩하고, '아 적성을 찾았구나'싶었어.(웃음) 처음에 온이랑 같이 나가서 빈 차로 따라다니는건 힘들어서 재미없었는데,처음으로 프리라이딩 했을 때는 진짜 재미있었어. 그 때 어떤 여고생들을 태웠었는데,같이 어우러지는 게 너무 좋았어.그 친구들은 아직도 기억나.얼굴도 기억나고.Q. 라이더를 하면서 가장 힘들 때는 언제야?진짜 춥거나, 아니면진짜 무겁거나.하루는 영하20도에 외국인 두분이 탔었는데,그 때는 진짜 춥고,진짜 무거웠던 날이었어.. 심지어 예약도 그거 하나밖에 없어서 좀 힘들었지..음. 근데 오히려 힘든 건,빈차로 계속 있을 때?멘탈적으로 그게 더 힘들지.Q. 가장 기억에 남는 손님은 어떤 손님이야? 기억에 남는 손님은 너무 많지~음, 어떤 누님들이 탄 적이 있는데 진짜 웃겼어.안국역에서 삼청동 수제비 집까지 태워드렸는데, 그 때 진짜 추운 날이었거든.차양 씌운 인력거를 타고있었고,너무 추워하시는 게 보여서 내가'춥죠?타실래요?제가 태워드릴게요.'하니까 '빨리 태워줘요!!'이러시는 거야.(웃음) 거기서부터 약간 웃긴 느낌이 났는데,태워드리고 나서는'수제비 같이 먹을래요?먹고가요!'하고 시크하게 물어보셔서 수제비도 같이 먹었어. 먹으면서는 몇 살인지 물어보시더니 그때부터 말을 놓으시더라고.(웃음) '맛있지?많이 먹어~'하시면서. 그리고 또 밥 먹고 나서는 자연스럽게 인력거에 타시더니'커피 마시러 가자~커피 사줄게!'이러시더라고.(웃음) 근데 그게 막 기분 나쁘지 않게, 정말 친 누나처럼 대해주셨어.그리고 서촌 아트갤러리까지 데려다 드리니까'우리 이제 헤어지는 거냐~'이러시면서 아쉬워하는 모습이 보였는데,그 때가 기억에 남아.그리고 또.. 생각하면 계속 나와!오늘같은 경우도 기억에 남지. 그림 그려주시는 분이랑 콜라보레이션해가지고 1시간 동안 같이 타면서 그림도 그리고.아,그것도 기억에 남는다.생일날 혼자서 타러 오신 남자 분!! 짠해서 기억에 남아 그 분...사진 찍어달라고 보통 핸드폰 주는데,그 분은 아이패드를 줘서 내가 막 사진 찍어드리고.. 일부러 오히려 당연한 척,아무렇지 않은 척하면서 태워드렸었어.(웃음)예약자분 성함이 중성적인 이름이어서 혹시 여자분 혼자면 외로울 테니까 조쉬(인형)도 챙겨가고 그랬는데..(웃음) 근데 그 때 마침 한 달에 한 번 헌법재판소 하늘공원이 오픈 되는 날이었어. 그 때 딱 오셔가지구 거기 갔었던 기억이 있어.그리고.. 케빈이랑 서촌에서 라이딩했을 때 유쾌하신 어머님들도 생각난다.사진 찍지마,찍지마 하셨는데 찍고 나니까 제일 환하게 웃고 계시ㄷ더라.(웃음) 초등학생 남자 꼬마 한 명도 기억나고... Q. 우리가3개 정도의 코스가 있잖아.어떤 코스를 제일 좋아해?아, 그건 어려운 질문이다..엄마가 좋냐,아빠가 좋냐지.다 좋아!근데 제일 안 좋아하는 걸 꼽으라면 오히려 제일 많이 하는 서북촌일 것 같아. 늘 하는거라서.그래서 가끔씩 히스토리코스를 하면 기분이 좋아.다 매력이 다른 것 같아.서북촌은 늘 하는거라서 시간관리가 칼같이 되는데,서촌은 혼자하면 시간관리가 잘 안돼.Q. 왜 인력거를 선택한 거야?미국에 있으면서 한국 사람들이 그리웠어.사람들을 많이 만나고 싶었어.그거에 최적화된 딱 맞는 일이잖아. 이야기도 많이 할 수 있고.그런 일을 찾고 있었지.Q. 대니의 개인적인 꿈은 뭐야?요새 내가 느끼는 건데 정해진 꿈이 없어. 그래서우선 지금은 꿈을 찾는 게 꿈이야.그리고 인력거 일을 하면서 느끼는 건데,이쪽의 일을 하는 게 나한테 맞는 것 같아. 이게 내 장점인 것 같은데 이걸 살릴 수 있는 일을 찾아봐야지.Q. 아띠의 자랑을 하자면?우선, '편하다'라는 거.정말 심플한 건데 엄청난 장점인 것 같아.그것 만큼 좋은 게 어디 있어. 일하면서 편한 사람이 얼마나 있겠어.그리고 힘든 것도 없어. 다른 데에서 일할 때는10분마다 시계보고 언제 퇴근하지~그랬는데, 여기서는 시계 보면'빨리 복귀 해야 되는데,더 타고 싶다!'이렇게 돼.'오늘 어떻게 시간 보내지'하면 벌써7시가 되어있고.(웃음)그리고 아띠는 남성미가 넘치지!(웃음)Q. 아띠가 어떤 모습으로 나아갔으면 좋겠어?지금의 이 모습을 잊지 않았으면 좋겠어.라이더가 많아지고 인력거도 많아지고 그러다 보면,지금 아띠의 분위기를 더 잘 유지해야 될 것 같아.Q. 너에게 아띠인력거란?뜻밖에 만난 행운?진짜 이걸 하게 될지 몰랐는데,진짜 잘한 것 같아. 6개월 정도 했는데,몇 년 뒤에 생각해도 정말 잘했다고 생각할 것 같아.Q. 미래의 아띠라이더들에게 한마디 한다면?만약에 돈을 벌 생각으로 하려 한다면 하지 말라고 하고 싶어.그런 생각이면 아띠를 할 수 없어.진짜 즐기려고 해야 할 수 있어.나는 항상 내가 재미있어야 사람들을 재미있게 해줄 수 있다고 생각하거든.진짜 즐겁게 일하고 싶은 사람만 오라고 하고 싶어.근데 후유증은 너무 빠져버리면 안 된다는 거야!(웃음)Q. 며칠 뒤면 미국으로 돌아가는데,기분이 어때?아쉽다~ 데니!괜찮아~ 언젠가 또 오겠지.만약 돌아와서 다시 라이딩을 하면 내가 처음 라이딩 하면서 느꼈던 감정을 또 느낄 수 있을 것 같아.그 때 저스틴,현아,나 이렇게 셋이서 경복궁 쪽으로 출근하면서 쫙 나갔는데 그 때 진짜 기분 좋았거든. 그리고 그 날 수학여행 온 애들이 단체로 있었는데,내가 혼자 신나가지고 손 흔드니까,'꺄!'하면서 진짜 말도 안 되는 반응이 나와가지고되게 기분 좋게 탔었어.(웃음)Q. 지금까지 아쉬웠던 점이 있을까?R2가 못된 게 진짜 아쉬워.이왕 하는 거R2는 찍어야 나중에 인력거 탔다고 할 수 있는데... 그리고 내가 아끼는 신발, 인력거 체인 때문에 더러운 거 묻었는데 어떻게 배상해줄 거야? 라이딩 하는 첫날에'이왕 타는 거 신발 멋있는 거 신고 타야지~' 했는데..첫날부터!!! (웃음)Q. 마지막으로 하고 싶은 말이 있으면 해줘나중에 돌아왔을 때 아띠가 많이 안 변했으면 좋겠어.정비사만 고용하지 말고,주기적으로 근육마사지 받을 수 있게 마사지사도 고용해서 번호표같은 거 뽑아서 마사지 받게 하면 좋을 것 같아!라이더들이 항상 풀컨디션으로 있을 수 있게.(웃음웃음)그리고 스포츠적으로 접근해서 라이더들 유니폼 맞춰서 등번호 제도 같은 거 도입하면 재미있을 것 같아.난42번.나중에 만든다면42번으로 만들어서 내 유니폼 걸어줘.내가 항상 국대 앞에 있는 자세로 동상도 세워서!(웃음)언제나 유쾌한 데니의 인터뷰였습니다!미국으로 조심히 돌아가길 바라며, 다시 학생으로 돌아가는 데니를 응원하며,인터뷰를 마칩니다:)#아띠라이더스클럽 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #사내문화
조회수 2095

[사내 인터뷰] 전산팀 김원석 부장 "60살에도 개발하는 핀테크 전문 아키텍처가 꿈"

Q. 자기소개를 해달라. 30CUT에서 무슨 일을 맡고 있나?전산팀을 리드하고 있다. 시스템 세팅, 운영 및 개발을 총괄한다. 자세하게는 서버 세팅, 데이터 설계, 보안 시스템 아키텍처 설계 구성 및 도입. 사내 업무를 위한 전반적인 ERP 구성, 홈페이지 개발 및 관리, NH농협은행 협업 프로그램 개발 등을 총괄하고 있다.Q. 30CUT에 합류하기 전에는 어떤 일을 했나?써티컷에 오기 바로 전에는 캐피털 기업에서 전산실 팀장으로 근무했다. 전체 커리어로 보자면 개발자로 십 년 넘게 일했다. 통계회사, 회계법인, 금융기업을 거쳤다. 주로 ERP 시스템을 구축하는 일을 해왔다.Q. 서준섭 대표님과 함께 30CUT을 창립한 멤버다. 어떻게 만나게 됐나?처음에는 지인 소개로 만났다. ‘사업을 해보자’고 만난 것도 아니고 그냥 가벼운 티타임이나 술자리에서 만나 금융에 대한 이야기를 나눴다. 대표님도 나도 금융업에 종사하고 있다 보니 공유할 생각들이 많았다. 그렇게 만난 시간이 두 달 정도였다. 어느 날 대표님이 ‘사표 쓰고 사업을 해보려 하는데 같이 할 생각 없냐’고 물어보시더라. 그동안 만나오면서 쌓였던 신뢰가 있었기 때문에 한치의 망설임도 없이 쓰겠다고 했다. 그렇게 함께 준비해서 작년 10월에 창립했다Q. 30CUT의 최대 장점이라고 생각하는 것은 무엇인가?다른 회사들을 보면 대부분 팀장 급은 금융기업 출신이 많다. 그에 비해 우리 회사는 회계법인, 삼성전자, 캐피털 등 출신 분야가 다양하다는 것이 강점이다. 매니징을 담당하는 팀장들이 각자 자신의 전문 분야에서 탁월한 능력을 갖고 있고 잘 할 수 있다는 확신과 열정도 뛰어나다. 팀원들에게도 좋은 영향을 끼치기 위해 노력하고 있다. Q. 전산 팀원들이 부장님을 굉장히 좋아한다. 정근님은 부장님을 보고 입사했다고 할 정도인데… 리더로서 팀의 만족도를 높일 수 있는 비결이 뭔가?나는 사원부터 주임, 대리, 차장까지 다 겪어보지 않았나. 윗사람도 모셔보고 아래 직원들도 함께 해보면서 신념이 하나 생겼다. 바로 ‘내가 들어서 기분 나빴던 말이나 행동은 하지 않겠다’라는 거다. 이 신념을 지키기 위해서 항상 노력한다. 나도 노력하지만 지금 팀원들이 알아서 너무나 잘 해주고 있어서 딱히 트러블이 없다. 우리 팀 같은 경우 경영 학도에서 개발자가 된 김프로(바로 이전 인터뷰의 주인공, 타이거!)나 근래 입사한 이프로나 열정이 대단하다. 스스로 공부하고 발전하는 친구들이라 1-2년 뒤가 더 기대된다. Q. 30CUT이 어떤 회사로 성장해 나가길 원하나? 내가 꿈꾸는 회사의 모습은?비즈니스적으로는 우선 P2P 대출업이기 때문에 투자자 보호가 제일 우선이다. 대출자들을 잘 선별하기 위해 기존의 신용평가 시스템과 더불어 우리만의 노하우를 축적해야 한다. 결과적으로 부도 확률이 낮은 안전한 대출 채권 포트폴리오를 구성하는 게 중요한 가치라고 생각한다. 조직문화적으로는 다른 금융기업에 비해 좀 더 젊은 느낌의 회사가 되기를 바란다. 금융기업들이 워낙 보수적인데, 우리는 핀테크 기업인만큼 탄력근무제를 도입한다든지 유연한 문화가 필요하다. Q. 핀테크 기업에서 개발의 비중은 막중하다. 30CUT이 성장하는 과정에서 전산팀이 어떤 역할을 해야 한다고 생각하나?30CUT은 핀테크 기업이다. 물론 ‘핀(금융)’도 중요하지만 핵심은 ‘테크’라고 생각한다. 기술이 탄탄하게 뒷받침을 해줘야 한다. 30CUT이 최소한의 핵심인력으로 신속한 업무처리가 가능할 수 있도록 자동화 및 첨단 IT 시스템을 만드는 것이 개발팀의 역할이다. 오퍼레이팅 비용을 줄이면서 회사 이익을 극대화할 수 있는 방향으로 전산팀을 이끌어 가고 있다.   Q. 올해 개인적인 목표는?첫 번째는 업무적인 건데, 론칭이 되고 대출이 나갔을 때 지금 구성되어 있는 시스템에서 오류가 나지 않게 하는 것이 가장 큰 목표다. 밸런스를 맞추는 것이 꽤 어려운 작업이라 심혈을 기울이고 있다. 두 번째는…음… 회사가 돈을 잘 버는 것?(웃음)Q. 10년 뒤 어떤 사람이 되고 싶은가?환갑에도 일을 하는 아키텍처가 되고 싶다(10년 뒤에 환갑은 아니지만....). 우리나라에서 손 꼽히는 핀테크 계의 전문 아키텍처로 성장하는 것이 목표다. 60살의 아키텍처… 멋지지 않나? :) #비욘드플랫폼서비스 #비욘드펀드 #팀원 #팀원소개 #팀원인터뷰 #인터뷰 #사내문화 #기업문화 #조직문화
조회수 953

BarkeMon Go Design

요즘 전 세계에 Pokemon Go 광풍이 불고있다. 페북 타임라인의 90%이상이 포켓몬고 관련 소식으로 도배가 될 정도다. 우리나라에는 지도관련 이슈로 서비스되는 지역이 거의 없지만, 속초지역에 가능하다는 소식에 속초행 버스표가 매진될 정도다.사실 필자가 서비스 중인 바크 앱도 1/위치기반 앱, 2/모든 유저가 8개의 개 캐릭터가 되는 앱, 3/익명의 사람들과 즐기는 앱이라는 3가지 이유로 포켓몬고와 어느정도 유사한 점이 있다... 라고 말하면 욕먹을 수 있으니 그냥 유사한 가치를 전달하기를 희망한다... 로 하겠다.이에, Pokemon Go를 패러디해서 BarkeMon Go를 디자인 해 보았다. 다음과 같은 기본적인 앱 피처가 존재하는 AR 위치기반 어플이다. (어디까지나 패러디임을 다시한번 밝힌다)1. 메인 화면에서 바크를 짖다 보면 근처에 있는 바크 유저가 디텍트 된다.2. 바크 유저가 사정거리 안으로 접근하면 AR모드로 전환된다.3. AR모드에서 아직 저 유저가 누군지는 모르나 그 유저의 캐릭터가 보인다.4. 캐릭터에 바크볼을 던져서 그 유저를 캐치할 수 있다.5. 캐치된 유저는 에너지가 다 달게되고 캐치한 유저는 에너지팩, 레벨업 등 다양한 혜택을 얻는다.근처에 있는 바크 유저 디텍트내가 만일 강남역에 있다면, 바크 앱을 키고 다음 동영상과 같이 바크를 겁나게 짖어본다. 현재 반경 1마일 이내에 있는 유저들이 보이고, 서로 짖을 수 있다.<iframe width="940.000000" height="529.000000" src="//play-tv.kakao.com/embed/player/cliplink/v2cacshmNlMnmw4JJsxqM3s@my?service=daum_brunch§ion=article&showcover=1&showinfo=0&extensions=0&rel=0" frameborder="0" allowfullscreen="">근처에 있는 바크 유저에게 마구 짖어댄다.사정거리 내 접근 시 AR모드 전환내가 일부러 근처에 있는 유저를 디텍트하면서 접근할 수 있다. 물론 상세한 지도는 보이지 않는다. 상세한 지도가 보이게 되면 개인정보보호 이슈도 있고, 유저 발견이 너무 쉬워지니까. 서로 반경 50m 이내로 근접하게 되면 AR모드를 킬 수 있다. 아래와 같이 AR모드를 키고 유저를 찾다 보면 그 유저가 있는 방향에서 그 유저의 캐릭터가 보인다. 포켓몬고에서 하는 것 처럼 저 유저를 향해 바크볼을 던진다. 서로 먼저 바크볼을 던져서 캐치하는 유저가 이기는거고, 바크볼에 갇힌 유저는 바크에너지가 전량 소모된다. 이긴 유저는 바크 에너지팩, 레벨업 등 다양한 혜택을 얻는다. 50m 이내에 유저가 접근하면 AR모드로 전환할 수 있다.신개념 소셜 AR게임 BarkeMon Go!!포켓몬고는 트레이너가 근처에 있는 포켓몬을 잡는 게임이라면 바크몬고는 실제 바크 유저를 잡는 게임이다. 아래와 같이 다양한 장소에서 걸어다니는 실제 바크 유저를 잡는 재미가 있는 앱이다. 출시 예정일은... 미.. 미정이다. 글쓴이는 스팀헌트 (Steemhunt) 라는 스팀 블록체인 기반 제품 큐레이션 플랫폼의 Co-founder 및 디자이너 입니다. 비즈니스를 전공하고 대기업에서 기획자로 일하다가 스타트업을 창업하고 본업을 디자이너로 전향하게 되는 과정에서 경험한 다양한 고군분투기를 연재하고 있습니다.현재 운영중인 스팀헌트 (Steemhunt)는 전 세계 2,500개가 넘는 블록체인 기반 앱들 중에서 Top 10에 들어갈 정도로 전 세계 150개국 이상의 많은 유저들을 보유한 글로벌 디앱 (DApp - Decentralised Application) 입니다 (출처 - https://www.stateofthedapps.com/rankings).스팀헌트 웹사이트 바로가기
조회수 370

금요일의 해커톤

안녕하세요. 엘리스입니다!지난 8월 말, 엘리스의 야심 찬 첫 해커톤이 있었습니다. 이번 해커톤은 매주 금요일 찾아가는 문제 ‘금요일에 코딩하는 토끼’에 대한 수강생 여러분의 성원에 힘입어 개최되었습니다.주제는 ‘코딩 문제의 A에서부터 Z까지 직접 설계하고 제작한다.’ 해커톤에서는 아이데이션 단계에서부터 문제 기획과 코딩, 채점을 위한 그레이더 제작까지 코딩 문제의 모든 것을 다루었습니다. 물론 실제 문제 동작을 위해 실행과 채점을 반복하며 디버깅하여 완벽한 실습 문제를 만드는 것 역시 이번 경연의 핵심이었는데요.이를 통해 모든 참가자 여러분들은 일일 엘리스 아카데미 실습 문제의 출제자가 되었습니다. 어떤 과정을 거친 어떤 결과물들이 있었을까요?해커톤 현장 스케치해커톤의 소개를 경청 중이신 참가자 여러분.지금까지 프로그래밍 문제를 많이 풀어보셨을 여러분이, 반대로 문제의 출제자가 되어 문제를 구성하는 관점에서 생각해보고 채점 방식까지 고민해본다면 프로그래밍에 대한 이해도를 더 높일 수 있을 것이라는 기대로 이와 같은 해커톤이 기획되었습니다. 교육자로서 엘리스 플랫폼의 다양한 기능을 직접 이용해볼 수 있는 것은 일석이조의 이점이었죠!경직된 분위기를 깨고 뇌를 말랑말랑하게 만들기 위한 아이스 브레이킹 시간은 팀 대항전으로 진행되었습니다.간단한 코딩 문제를 가장 먼저 맞히는 팀이 점수를 얻는 스피드 코딩 게임을 통해서 순발력을 높이고, 잠시 후 해커톤에서 본격적으로 사용하게 될 엘리스 플랫폼과 친해질 시간도 가질 수 있었습니다.'그림 그리기 게임'에서는 각 팀 디자이너들의 창의력이 폭발! 개발과 관련된 온갖 단어들을 1초 만에 그림으로 표현해야 하는 설명자의 재치와 크로키 실력(?)이 강조되었던 순간이었는데요. 승자는 '오즈'팀! 모두 오즈 팀 디자이너의 그림 실력에 입을 다물지 못했다고 합니다.게임을 하는 동안 어느새 어색했던 처음의 분위기가 파괴되었습니다. ^^ 1시간 동안 문제의 초안을 기획하는 시간이 주어지고, 이어 각 팀의 아이디어 발표 시간이 있었습니다.해커톤의 룰은 아래와 같았는데요.실행 가능한 프로그래밍 문제 1개 출제.동화를 모티브로 한 문제 스토리를 기획.채점 가능한 그레이더 제작.모든 팀들이 알고리즘 문제를 기획해주셨습니다. 동화의 서사구조를 논리적으로 단순화하거나 변형하여 알고리즘 문제에 녹여낸 과정이 인상적이었습니다.아이데이션 단계에서는 문제의 완성된 모습이 전부 그려지지는 않았지만 많은 고민의 흔적과 창의적인 생각들을 엿볼 수 있어 이로부터 탄생될 프로그래밍 실습을 기대할 수 있었습니다.밤샘 코딩 중...우승 문제 소개기획하고 코딩하고 디자인을 하다 보니(!) 어느새 날이 밝아왔습니다. 이제 남은 것은 팀별 결과물 발표와 우승팀 시상 뿐!'금코토'를 패러디하여 팀 명을 지어주신 어린 왕자 팀. /* prince */로고까지 깨알 섬세!모든 팀이 각기 다방면에서 강점을 부각하는 문제를 출제해주셨기 때문에 우열을 가리기 어려웠는데요. ‘금코토’배 해커톤이라는 이름에 걸맞게 금코토 과목의 취지와 가장 부합하는 문제를 출제한 팀에게 가산점을 주어 우승팀을 선발하였습니다. 그 결과 대망의 우승 문제는...거울나라의 앨리스팀의 ‘케이크와 병’ 단순한 명료한 문제 구성과 초등학생도 이해할 수 있는 쉽고 친절한 프레젠테이션으로 인상 깊었던 문제였습니다. 완성도, 문제 활용도 면에서 금코토 문제를 능가하며 단순하면서도 재미있게 풀 수 있는 문제라는 심사위원들의 평가가 있었습니다. 우승팀인 거울나라의 앨리스 팀 전원에게는 엘리스 굿즈를 선물로 보내드립니다. :)이밖에 겁쟁이 사자를 동물의 왕으로 만들기 위해 용기의 성을 짓는 알고리즘 문제를 낸 오즈의 마법사 팀의 문제는 스토리에 착안하여 자칫 복잡해질 수 있는 내용을 세세한 문제 설계로 극복하려 했던 점이 우수하게 평가받았습니다. 술주정뱅이 별에 사는 만취한 아저씨를 옮기는 알고리즘 문제를 낸 ‘목요일에 코딩하는 어린 왕자’ 팀은 참신성과 '넓이 우선 탐색', '깊이 우선 탐색', '다익스트라 알고리즘'을 모두 공부해볼 수 있도록 한 문제 구성 면에서 높은 평을 받았습니다.큰 상품도 내걸지 않았던 첫 해커톤이었는데도 참가자분들 모두가 열과 성을 다해 밤을 새워 문제를 만들어 주셨습니다. 모든 참가자 여러분들께 감사의 말씀 전합니다. :) 해커톤 이후 진행한 설문 조사에서 100%의 확률로 모든 분들이 다음 해커톤에 재참가 의사를 밝히셨는데요. 모두 첫 해커톤을 즐겨주셨던 것 같네요. 엘리스에서는 앞으로도 해커톤을 지속적으로 개최할 예정입니다. 코끝 시려질 때쯤 더욱 풍성하고 유익한 기획의 해커톤으로 찾아뵐 예정이니 많은 관심 가져주세요!*금코토 — ‘금요일에 코딩하는 토끼’라는 엘리스 아카데미 과목의 줄임말. 매주 금요일 저녁때쯤 업로드되는 문제로, 특정 루트로 토끼가 움직이도록 코딩해야 하는 콘셉트와 귀여운 휴보 래빗이 특징입니다. >>문제 풀어보기(무료)
조회수 3841

iOS에서 간결한 API 클라이언트 구현하기 (like Retrofit+GSON)

이 글은 안드로이드 개발에서 웹 서버 API 클라이언트를 간결하게 구현할 수 있도록 도와주는 강력한 오픈소스 라이브러리인 Retrofit과 GSON의 조합을 iOS 개발에서도 따라해보고 싶은 분들을 위해 작성되었습니다. Retrofit+GSON를 실제로 사용하는 좋은 예제는 다른 블로그 글에서도 찾아볼 수 있습니다.배경리디북스 서비스가 발전하면서 점점 복잡해지고, 자연히 앱의 기능도 다양해지기 시작했습니다. 기능이 다양해지면서 웹 서버와의 연동을 위한 API 종류도 늘어났고 앱 내에서 API 호출이 필요한 부분도 다양해지면서 관련된 중복 코드가 이곳 저곳에 산재하게 되었고 전체적인 코드 퀄리티 향상을 위해 이를 최소화하고 모듈화 할 필요성이 생겼습니다.안드로이드에서는 Pure Java로 작성되어 어노테이션을 통한 간결한 코드를 사용할 수 있게 해주는 Retrofit을 GSON과 연동하여 JSON 응답을 손쉽게 객체에 맵핑 하여 사용함으로써 이러한 문제를 성공적으로 해결할 수 있었습니다. 이후 iOS 개발을 진행하면서 비슷한 역할을 할 수 있는 도구가 있을까 찾아봤지만 마땅하지 않아 결국 사용 가능한 도구들을 이용해 비슷하게 따라해보기로 했습니다.목표Retrofit+GSON 조합을 최대한 따라해서 iOS 앱의 코드 퀄리티를 높이기 위한 작업을 진행하기는 하지만 모방하는 것 자체가 목적이 될 수는 없으므로, 구체적인 목적은 다음과 같은 것들로 상정해보았습니다.API 통신 부분을 모듈화하여 관련 중복 코드를 최소화하기NSArray, NSDictionary를 직접 사용하여 제어 했던 JSON 처리 부분을 추상화하여 모델 클래스를 정의, JSON 응답을 자동으로 객체에 맵핑 해서 사용할 수 있도록 하기필요한 것Retrofit과 GSON의 동작에 대한 이해AFNetworking비동기 HTTP 요청 처리에 용이하므로 기존에도 이미 API 호출을 위해서도 사용하고 있었습니다.이 글의 내용은 버전 2.6.3 기준입니다.Swift 언어와 그에 대한 이해사실 Objective-C를 사용해도 무방하지만, 작업 당시 Swift가 발표된 지 얼마 되지 않은 시점 이었기 때문에 시험 삼아 선택 되었으며 실제로 Swift가 Objective-C 대비 가진 장점들이 적지 않게 활용되었습니다.이 글의 내용은 버전 2.0 기준입니다.구조와 동작클래스 이름 앞에 붙어 있는 RB는 리디북스에서 사용하는 클래스 접두어 입니다.RBApiServiceAPI 통신을 담당하는 부분의 핵심은 중앙의 RBApiService 클래스를 포함한 상속 구조라고 할 수 있으며 상술하면 다음과 같습니다.AFNetworking에서, HTTP 요청 작업의 큐잉부터 시작과 종료까지 라이프 사이클 전반을 관리하는 역할을 하는 AFHTTPRequestOperationManager를 상속받는 RBApiService 클래스를 정의각 API들은 역할군에 따라 RBBookService(책 정보 관련 API), RBAccountService(사용자 계정/인증 관련 API) 등과 같은 RBApiService의 하위 클래스들의 메소드로 정의됨이 하위 클래스들이 AFHTTPRequestOperationManager의 역할을 그대로 이어받아 자신을 통해 이루어지는 API HTTP 요청 작업들을 관리이 설명에 따르면 웹 서버의 /api/foo/bar API를 요청하는 메소드는 RBFooService 클래스에 다음과 같이 정의될 것입니다.func bar(param1: String, param2: String, success: RBApiSuccessCallback, failure: RBApiFailureCallback) -> AFHTTPRequestOperation! { let paramters = ["param1": param1, "param2": param2] responseSerializer = RBJSONResponseSerializer(responseClass: RBFooBarResponse.class) return GET("/api/foo/bar", parameters: parameters, success: success, failure: failure) }RBApiSuccessCallback과 RBApiFailureCallback은 요청과 응답이 완료되고 각각 성공, 실패일 때 호출되는 람다 함수(Objective-C의 block에 대응되는 개념) 타입으로 다음과 같이 typealias를 통해 선언되어 있습니다. typealias RBApiSuccessCallback = ((operation: AFHTTPRequestOperation, responseObject: AnyObject) -> Void)? typealias RBApiFailureCallback = ((operation: AFHTTPRequestOperation?, error: NSError) -> Void)?GET 메소드는 AFHTTPRequestOperationManager의 메소드로 새로운 HTTP GET 요청 작업을 생성하고 큐에 넣은 뒤 그 인스턴스를 반환합니다. bar 메소드는 이렇게 반환된 인스턴스를 다시 그대로 반환하는데 API 호출을 의도한 측에서는 이 인스턴스를 통해 필요한 경우 요청 처리를 취소할 수 있습니다. API에 따라 GET 이외의 다른 방식의 요청이 필요하다면 POST, PUT, DELETE등의 메소드들 또한 사용할 수 있습니다.RBFooBarResponse 클래스는 이 API 호출의 JSON 응답을 맵핑하기 위한 모델 클래스입니다. 이 API 요청의 응답은 RBJSONResponseSerializer 클래스를 통해 사전에 정의된 규칙에 따라 적절히 RBFooBarResponse 인스턴스로 변환되고 이 모든 과정이 성공적으로 진행되면 RBApiSuccessCallback의 responseObject 인자로 전달됩니다.모델 클래스와 RBJSONResponseSerializer앞서 이야기했듯이 RBJSONResponseSerializer는 JSON 형태로 온 응답을 특정 모델 클래스의 인스턴스로 맵핑시키는 작업을 수행합니다(Retrofit+GSON 조합에서 GsonConverter의 역할에 대응한다고 볼 수 있습니다).iOS 개발에서 전통적으로 JSON을 다루는 방식은 Cocoa 프레임워크에서 기본적으로 제공하는 NSJSONSerialization 클래스를 이용하여 JSON Array->NSArray로, 그 외의 JSON Object는 NSDictionary로 변환하여 사용하는 방식입니다. 이러한 방식을 사용할 경우 별다른 가공이 필요 없다는 장점이 있는 대신 다음과 같은 문제들에 직면할 수 있습니다.데이터가 명시적으로 정의된 프로퍼티로 접근되지 않고 문자열 키 기반의 키-밸류 형태로만 접근되므로 데이터의 타입이 명시적이지 않아 타입 검사와 캐스팅이 난무하게 되어 가독성을 해침오타와 같은 개발자의 단순 실수로 인한 버그를 유발할 가능성도 커짐특히 오타로 인한 버그의 경우 명시적인 모델 클래스의 프로퍼티로 맵핑 해서 사용한다면 IDE가 에러를 검출해주거나 최소한 빌드 타임 에러가 발생할테니 미연에 방지할 수 있습니다. 이러한 문제는 사소한 실수로 인해 찾기 힘든 버그가 발생한다는 점과 코드 리뷰를 통해서도 발견하기가 힘들다는 점에서 지속적으로 개발자를 괴롭힐 수 있습니다.RBJSONResponseSerializer를 통한 인스턴스로의 변환은 이런 문제 의식에서 출발했고 Retrofit에 GSON을 연계하여 사용하기 위한 GsonConverter가 해결을 위한 힌트를 제공한 셈입니다.// AFJsonResponseSerializer는 NSJSONSerializer를 이용해 NSArray/NSDictionary로 변환하는 기본적인 작업을 해줌 class RBJSONResponseSerializer: AFJSONResponseSerializer { var responseClass: NSObject.Type! override init() { super.init() } required init(responseClass: NSObject.Type!) { self.responseClass = responseClass super.init() } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func responseObjectForResponse(response: NSURLResponse?, data: NSData?, error: NSErrorPointer) -> AnyObject? { // 파서를 직접 구현하는 건 노력이 많이 필요하므로 우선 AFJSONResponseSerializer를 이용해 NSArray/NSDictionary로 변환 let responseObject: AnyObject! = super.responseObjectForResponse(response, data: data, error: error) if let dictionary = responseObject as? NSDictionary where responseClass != nil { // 변환 결과가 NSDictionary이면서 responseClass가 정의되어 있다면 변환 작업 시작 return responseClass.fromDictionary(dictionary, keyTranslator: PropertyKeyTranslator) } // NSArray라면 JSON이 top level array로 이루어졌다는 뜻이므로 변환 불가로 보고 그대로 반환 // 혹은 responseClass가 정의되어 있지 않아도 그대로 반환 return responseObject } }Key translatorfromDictionary 메소드 호출 시 함께 인자로 전달되는 keyTraslator는 JSON에서 사용되는 키로부터 모델 클래스의 프로퍼티 이름으로의 변환을 나타내는 람다 함수로 개발자가 원하는 규칙에 따라 정의하면 됩니다. 위의 코드에서 사용 중인 PropertyKeyTranslator는 리디북스 API에서 사용 중인 규칙 및 Swift의 네이밍 컨벤션에 따라 다음과 같이 언더스코어(_) 케이스로 된 이름을 카멜 케이스로 바꾸는 형태로 정의되었으며 이는 GSON의 FieldNamingPolicy 중 LOWERCASE_WITH_UNDERSCORES와 유사합니다.let PropertyKeyTranslator = { (keyName: String) -> String in let words = keyName.characters.split { $0 == "_" }.map { String($0) } var translation: String = words[0] for i in 1..NSObject.fromDictionary 메소드fromDictionary 메소드는 NSDictionary로 표현된 데이터를 실제 모델 클래스의 인스턴스로 변환하는 작업을 수행하며 NSObject의 extension(Objective-C의 category 개념과 유사합니다)으로 정의하여 원하는 모델 클래스가 어떤 것이든지 간에 공통적인 방법을 사용할 수 있게끔 했습니다.extension NSObject { class func fromDictionary(dictionary: NSDictionary) -> Self { // keyTranslator가 주어지지 않으면 디폴트 translator 사용 return fromDictionary(dictionary, keyTranslator: { $0 }) } class func fromDictionary(dictionary: NSDictionary, keyTranslator: (String) -> String) -> Self { let object = self.init() (object as NSObject).loadDictionary(dictionary, keyTranslator: keyTranslator) return object } func loadDictionary(dictionary: NSDictionary, keyTranslator: (String) -> String) { // 주어진 dictionary에 포함된 모든 키-밸류 쌍에 대해 작업 수행 for (key, value) in (dictionary as? [String: AnyObject]) ?? [:] { // keyTranslator를 이용해 키를 프로퍼티 이름으로 변환 let keyName = keyTranslator(key) // 프로퍼티 이름을 사용할 수 있는지 검사 if respondsToSelector(NSSelectorFromString(keyName)) { if let dictionary = value as? NSDictionary { // 밸류가 NSDictionary면 해당 프로퍼티의 타입에 대해 fromDictionary 메소드 호출 if let ecls = object_getElementTypeOfProperty(self, propertyName: keyName) as? NSObject.Type { setValue(ecls.fromDictionary(dictionary, keyTranslator: keyTranslator), forKey: keyName) } else { NSLog("NSObject.loadDictionary error: not found element type of property. (key: \(keyName), value: \(dictionary))") } continue } else if let array = value as? NSArray { var newArray = [NSObject]() // 밸류가 배열이면 각 요소별로 작업 수행 for object in array { if let dictionary = object as? NSDictionary { // 배열 요소가 NSDictionary면 프로퍼티의 배열 요소 타입에 대해 fromDictionary 메소드 호출한 뒤 배열에 추가 if let ecls = object_getElementTypeOfProperty(self, propertyName: keyName) as? NSObject.Type { newArray.append(ecls.fromDictionary(dictionary, keyTranslator: keyTranslator)) } else { NSLog("NSObject.loadDictionary error: not found element type of property. (key: \(keyName), value: \(dictionary))") } } else if let object = object as? NSObject { // NSDictionary가 아니면 그대로 배열에 추가 newArray.append(object) } else { NSLog("NSObject.loadDictionary error: can't cast element. (key: \(keyName), value: \(object))") } } setValue(newArray, forKey: keyName) continue } else if value is NSNull { continue } // NSDictionary, NSArray가 아니면서 null도 아니면 그대로 사용 setValue(value, forKey: keyName) } } } }주어진 dictionary에 존재하는 모든 키-밸류 쌍에 대해 밸류가 가진 타입과 이에 대응하는 프로퍼티의 타입에 따라 적절히 프로퍼티에 대응될 객체를 구한 다음 Cocoa 프레임워크에서 제공하는 KVC를 이용해 채워넣습니다.프로퍼티 타입 정보 가져오기모델 클래스가 반드시 Int, String, Float과 같은 기본적인 타입들로만 이루어져 있을 필요는 없고 다른 모델 클래스의 인스턴스나 배열을 포함하고 있어도 타입 정보를 런타임에 가져와 재귀적으로 데이터를 채워나가는 것이 가능합니다. 프로퍼티의 타입을 알아내는 과정은 다음과 같이 Swift에서 제공하는 Mirror 구조체를 통해 이루어지는데 이는 마치 (이름에서도 느낄 수 있듯이) Java의 리플렉션을 떠올리게 합니다.// 타입 이름에서 특정 접두어("Optional", "Array", "Dictionary" 등)를 찾아 제거 func encodeType_getUnwrappingType(encodeType: String, keyword: String) -> String { if encodeType.hasPrefix(keyword) { let removeRange = Range(start: encodeType.startIndex.advancedBy(keyword.length + 1), end: encodeType.endIndex.advancedBy(-1)) return encodeType.substringWithRange(removeRange) } else { return encodeType } } // object의 타입에서 propertyName의 이름을 갖는 프로퍼티의 타입 이름을 반환 func object_getEncodeType(object: AnyObject, propertyName name: String) -> String? { let mirror = Mirror(reflecting: object) let mirrorChildrenCollection = AnyRandomAccessCollection(mirror.children)! // object의 타입 구조 children 중에서 propertyName을 찾음 for (label, value) in mirrorChildrenCollection { if label == name { // Optional 타입인 경우 "Optional" 접두어를 제외 return encodeType_getUnwrappingType("\(value.dynamicType)", keyword: "Optional") } } return nil } // object의 타입에서 propertyName의 이름을 갖는 프로퍼티의 타입 인스턴스를 반환 func object_getElementTypeOfProperty(object: AnyObject, propertyName name: String) -> AnyClass? { // 타입의 이름을 가져옴 if var encodeType = object_getEncodeType(object, propertyName: name) { let array = "Array" // "Array" 접두어로 시작할 경우 (배열인 경우) if encodeType.hasPrefix(array) { // "Array" 에서 "Array" 제외하고 T를 반환 return NSClassFromString(encodeType_getUnwrappingType(encodeType, keyword: array)) } let dictionary = "Dictionary" if encodeType.hasPrefix(dictionary) { // "Dictionary" 에서 "Dictionary", "K"를 제외하고 V를 반환 encodeType = encodeType_getUnwrappingType(encodeType, keyword: dictionary) encodeType = encodeType.substringWithRange(Range(start: encodeType.rangeOfString(", ")!.endIndex.advancedBy(1), end: encodeType.endIndex)) return NSClassFromString(encodeType) } // 커스텀 클래스 접두어를 가지고 있다면 그 타입 그대로 반환 if encodeType.hasPrefix(RidibooksClassPrefix) { return NSClassFromString(encodeType) } } return nil }RidibooksClassPrefix는 커스텀 클래스들의 접두어를 나타내는 상수이며(리디북스의 경우 앞서 이야기했듯 “RB”), 이 접두어가 붙어있는 경우에만 모델 클래스로 간주해 해당 타입 인스턴스가 반환됩니다.예시앞서 정의한 PropertyKeyTranslator를 사용했을 때, 위에 예시로 사용했던 /foo/bar API 요청의 JSON 응답과 모델 클래스 및 생성되는 인스턴스 형태의 예를 들면 다음과 같을 것입니다.(Int, Bool, Float과 같은 기존 NSNumber 기반의 타입을 가지는 프로퍼티들은 아직 정확한 원인은 알 수 없으나 nil 이외의 값으로 초기화 해주지 않으면 프로퍼티가 존재하는지 확인하기 위해 사용하는 respondsToSelector 메소드가 false를 뱉게 되어 사용할 수 없으므로 클래스 선언시 적절한 초기값을 주어야 합니다.{ "success": true, "int_value": 1, "string_value": "Hello!", "float_value": null, "baz_qux": { "array_value": [1, 2, 3] } }class RBFooBarResponse : NSObject { var success = false // true var intValue = 0 // 1 var stringValue: String! // "Hello!" var floatValue: Float! = 0.0 // nil var bazQux: RBBazQux! } class RBBazQux : NSObject { var arrayValue: [Int]! // [1, 2, 3] }맺음말이런 작업들을 통해 당초 목표했던 두 가지, API 통신 관련 중복 코드를 최소화 하면서 JSON 응답을 가독성이 더 좋고 실수할 확률이 적은 모델 클래스의 인스턴스로 자동 변환 하도록 하는 것 모두 달성하는 데에 성공했습니다.다만 모든 것이 뜻대로 될 수는 없었는데 Retrofit+GSON과 비교했을 때 플랫폼 혹은 언어의 특성에 기인하는 다음과 같은 한계들 또한 존재했습니다.Retrofit에서는 Java 어노테이션을 이용해 API 메소드의 인터페이스만 정의하면 됐지만 iOS 구현에서는 GET, POST 등의 실제 요청 생성 메소드를 호출 하는 것 까지는 직접 구현해줘야 함키->프로퍼티 이름 변환 규칙에 예외 사항이 필요할 때 GSON에서는 @SerializedName 어노테이션을 통해 손쉽게 지정할 수 있지만 iOS 구현에서는 예외 허용을 위한 깔끔한 방법을 찾기가 힘듬 (다만, 예외가 필요한 경우가 특별히 많지는 않기 때문에 큰 문제는 되지 않음)향후에는 HTTP 통신을 위해 사용 중인 AFNetworking(Objective-C로 작성됨)을 온전히 Swift로만 작성된 Alamofire로 교체하는 것을 검토 중이며 기존에 비해 좀 더 간결한 코드를 사용할 수 있을 것으로 기대하고 있습니다. 다만 Alamofire의 최신 버전이 iOS 8 이상을 지원하고 있어 iOS 7을 아직 지원 중인 리디북스인 관계로 언제 적용할 수 있을지는 아직 미지수입니다.#리디북스 #개발 #개발자 #iOS #iOS개발 #API #API클라이언트 #GSON #Retrofit #중복코드 #최소화 #API통신 #웹서버 
조회수 2828

라이더소개 #13.'나무여행 전문가', 헉

[라이더소개 #13. 나무처럼 우직하고 깊은 '나무여행 전문가', 헉]헉을 소개합니다! :)Q. 헉의 간단한 자기소개 부탁해얼마 전부터 나무 관련 사진전도 시작했듯이, 나는 ‘나무여행 전문가’라고 불렸으면 좋겠어. 대학로와 우리가 자주 다니는 북촌에 나름대로의 코스를 준비하고 있어. 인력거를 타러 오듯이, 나한테는 워킹투어를 통해서 나무에 대한 이야기를 들으러 오는 거지. 그런 프로그램을 마련해서 가이드도 하고 ‘나무여행 전문가’로 불려지는. 앞으로의 내 모습은 그렇게 비춰졌으면 좋겠어. 아직 구체적으로 개시를 한 건 아니지만, 조만간 시작하지 않을까 싶어.생각보다 이야기할게 많아. 최소 1시간 이상, 2시간까지 충분히 가능해.Q. 대학로와 북촌은 '나무' 때문에 좋아하는 거야?그것도 이유 중에 일부분일 수 있는데, 일단 지리적으로 가까우니까! 내가 성균관대 명륜동에 살잖아. 그래서 어디로든 나오기가 쉽거든. 지리적인 이점이지. 산책할 때는 북촌이 주 무대가 되지. 인사동, 북촌, 대학로. 사진기 들고 돌아다니면서 나무나, 일상사진 찍으면 심심하지도 않고 좋아.Q. 아띠를 시작하게 된 계기가 뭐야?방금 이야기했듯이, 잘 돌아다니다 보니까 언젠가부터 인력거가 눈에 띄더라고. 지금은 우리가 파란색으로 통일을 했지만, 초창기 그 때는 노란색이었거든. 지금 ‘롭스’가 생긴 그 곳에 노란색 인력거가 서있더라고. 내가 기억하는 이미지는 그때 거기 서있던 그 느낌이야. 항상 ‘안녕하세요!’하면서(웃음), 행복해하면서 라이딩을 하는구나. 북촌도 잘 알고, 자전거 타는 걸 좋아하니까 나도 한 번 해보면 좋겠다 싶어서 시작한 거지.Q. 처음 시작했을 때와 2년 가까이가 지난 지금과 비교해보면 어때?한결같이 드는 생각은 부담감이 조금 있다는 거야. 아무래도 연령차이가 나니까, 솔직히 불편한 점이 있어. 물리적으로 연령 차이가 많이 난다는 것에 대해. 어떻게 생각하면 아무것도 아닐 수가 있지만, 아띠인력거 자체가 되게 ‘젊은 이미지’잖아. 밖에서 보이는 이미지도 그렇고. 실제로도 젊은 친구들이 많이 하고. 그렇게 보면 나는 그런 기준에서 살짝 비켜나있는 사람이거든.솔직히 그런 부분에서 중간 중간에 띄엄띄엄 못나오거나 그런 이유가 있었지. 포레스트나 연령대가 비슷한 친구가 없으면, 내가 혼자 남은 느낌이잖아. 근데 그건 어쩔 수 없는 부분인 것 같아. 서로가 이해해주는 부분인 것 같아.내가 조금 더 젊었다면 더 좋았을 것 같아. 더 잘 어울리고, 더 많이 함께하고. 아무튼 아띠가 가진 문화, 젊게 지내려고 하는 것 그런 건 다 좋아. Q. 가장 힘들 때도 그런 느낌을 받을 때겠네. 그렇지. 처음에 할 때는 인력거와 내가 한 몸이 안 되서 그랬는지 무릎 관절도 아프고 그랬거든. 완전히 적응이 안 된 상태에서 긴장도 한 대다가, 요령도 없어서 그런 것 같아. 힘들었었는데 요즘은 그런 느낌은 없더라고.그리고 무슨 이유에서건 만약 한 번 못나오잖아? 그럼 다시 나오기가 되게 힘들어. ‘오늘 못 나갔으니까 내일 나가야지’ 이게 잘 안 돼. 그게 일주일, 한 달 그렇게 되면 페이스도 떨어지고, 다시 나갈 용기를 내는 것도 힘들지.Q. 기억에 남는 손님이 있다면?시골에서 어떤 할머니가 아들을 찾는다고 올라왔는데, 주소도 모르고 아무 것도 모르시는 거야. 내가 그때 창경궁 언덕길 따라서 북촌으로 가던 중이었는데, 가던 길 마다하고 그 할머니 태워가지고 종묘 옆까지 데려다드렸었어. 할머니가 해주시는 말만, 설명만 듣고 재조합해서 아들이 하는 가게에 데려다드렸지. 그 때 주셨던 믹스커피. 그런 게 되게 좋았어.또 마포노인복지관인가 거기에서 단체 라이딩을 한 적이 있었는데, 그때 할머니들이 굉장히 좋아해주셨어. 우리 모든 라이더들을 손자 보듯이 대해주시고 ‘내가 이런 걸 다 해보네!’ 하시면서.그리고 작년 늦가을 쯤, 저녁에 복귀하고 있었는데 한 여성분이 너무나 간절하게 태워달라고 하셔서 태워드렸어. 라이딩을 하면서 자연스럽게 이야기를 하는데 아버지에게 학대당했던 얘기를 하시더라고. 계속 라이딩만 한 건 아니고, 빵하고 커피 사서 삼청동쯤에서 같이 이야기도 했거든. 그 친구는 그런 순간과 시간이 되게 필요했었나봐. 그런 분위기 전환. 되게 좋았다고 하더라고. 내가 전문적으로 상담을 해주는 사람도 아니고, 사실 내가 도와줄 여력도 별로 없는 거잖아. 그럼에도 이런 걸 통해서 같이 뭔가를 공감 내지는 도움을 줄 수 있었다는 게 좋았지.Q. 헉이 생각하는 인력거의 매력은 뭐야?비슷한 의미인데, '소통‘인 것 같아. 우리가 전해주려는 서비스 같은 게 있잖아. 예를 들어서 그냥 라이딩 자체의 happiness 일수도 있고, 사람들이 많이 찾는 북촌과 서촌의 설명일 수도 있고. 보는 사람과 타는 사람, 모두가 서로 행복해지는 거. 거의 대부분 내릴 때 보면 좋아하시는 편이야. 다들 또 타러 오겠다고 하시고. 이런 지역을 더 잘 알게 돼서 좋았다고 하시고. 그런 행복, 소통, 교감 그런 것들이 인력거가 가진 매력이지.Q. 헉이 특히 좋아하는 길이 있어?인력거를 끌고서는 로맨스코스를 좋아해. 히스토리코스 창덕궁까지 가려면 너무 멀어(웃음). 그리고 이야깃거리 같은 것들이 내 기준에는 로맨스가 더 많더라고. 히스토리는 로맨스코스만큼 다양성을 주고, 사람하고 섞인다는 느낌은 덜한 것 같아.개인적으로 좋아하는 길은, -사실 다분히 나무가 있어서이긴 한데- 헌법재판소에서 나와서 골목으로 들어가는 길을 좋아하거든. 사람들이 생각보다 안다니기도하고, 지금 이 시기에는 백목련이 펴서 좋아. 그리고 중간쯤에 400년 된 진짜 멋진 향나무가 있어. 향나무가 정말 너무 예쁘게 자랐어. 사람들도 이 이야기를 해주면 되게 좋아하기도 하고.그리고 계동길이라고 있어. 그 길이 개인적으로 좋더라고. 옛날 동네 느낌이 많이 사라지긴 했지만, 여전히 철물점이나 미용실, 의상실, 밥집이 몇 개라도 남아있어. 사람들이 많이 찾다보니까 카페, 피자집 같은 새로운 것들이 있고. 거기 왜, 참기름집도 있잖아. 거기 지나갈 때 기름 짤 때 고소한 향이 바람 따라 퍼지는 그런 느낌도 좋고.북촌 한옥 마을에 전형적인 이미지 그런 것도 좋지만은, 오히려 나는 계동길을 올라가면서 실제 사람들이 생활하면서 찾을 수 있는 가게들을 보는 것도 좋더라고.아 또 하나 더하자면, 로맨스코스 돌면 동십자각에서 국립현대미술관 쪽으로 더 올라가면 ‘비술나무’ 세 그루가 있거든. 내 개인적인 생각으로는 코스를 바꾸더라도 그 곳은 꼭 설명해야하는 절대적인 포인트거든. 비술나무가 주는 상징성이 굉장히 커. 그곳이 중앙 청계천이었거든. 비술나무가 물가에서 잘 자는 나무야. 예전에 그 길에 흘렀던 개천은 사라졌지만 비술나무가 있어가지고, 그 지형을 보여주고 있는 거잖아. 코스 설명에 완전히 들어가야 되는 부분이라고 생각해. 그리고 국립현대미술관이 설립된 배경에 대해서도 설명해주어야 된다고 생각해.동십자각이 지금은 섬처럼 도로 중간에 있잖아. (헉 핸드폰 속 사진자료를 보여주며) 예전에는 이렇게 담장으로 이어져있고 그 옆은 개천이 있었어. 그 담장, 개천의 물가를 따라서 비술나무가 쫙 있었던 거고 지금도 있는 거지.Q. 와, 비술나무가 살아있는 역사네!그렇지. 내 입장에선 이걸 꼭 설명해주어야지. 코스 중 일부로 적극 반영이 됐으면 좋겠어!Q. 헉 사진찍는 건 언제부터 좋아했어?내가 나무를 좋아하고 잘 보러 다니고 그러다보니까, 나무 사진을 찍고 집에 와서 도감도 뒤져보고 나무 공부를 하고 그런 것들이 반복되니 자연스럽게 사진을 좋아하게 된 것 같아. 나무를 주제로 하는 사진을 찍게 됐고, 찍는 만큼 사진을 잘 찍게 됐고, 아직은 어설프지만 사진전도 하게 되었고. 그리고 2002년쯤 나무강좌를 수강하게 되었는데, 나무를 더 좋아하는 계기가 되고, 나무를 주제로 한 사진을 찍는 걸 좋아하게 된 것도 그때쯤이라고 볼 수 있지. Q. 헉이 생각하는 나무의 매력은 뭐야?아주 어렸을 때부터 자연, 생태, 꽃 그런 것들을 너무 좋아했어. 보는 것도 좋아했고, 초등학교 다닐 때는 교정에 버려진 화분이나 풀이나 꽃들이 있으면 불쌍하고 안타까워서 집에 오는 길에 가져와서 집 꽃밭에 심어주고 그랬었거든. 그런 감수성이 다른 사람보다는 풍부했던 것 같아. 어렸을 때는 시골이었으니까 집에 마당이 있잖아. 아버지가 그 마당을 온갖 나무들로 다 채웠었어. 그리고 화분에는 선인장, 철 따라 피는 온갖 꽃들. 수를 열거할 수 없을 정도로 많았어. 그 속에서 자라났지. 그리고 아까 이야기했듯이 나무강좌를 수강하고 정기적으로 모임도 가지면서, 그런 자연에 대한 관심이 나무로 집중되었지.대부분 사람들은 야생화나 꽃을 보는 정도에 아직은 머물러있거든. 이게 나무로 옮겨오는 게 좀 힘들어. 그리고 그러려고 하지도 않고. 그런데 나무의 세계는 훨씬 우직하고 깊어. 꽃을 보는 건 순간적인 기쁨이고 한 철이지만은, 나무는 일 년 사계절의 모습이 다 달라. 겨울에서 봄이 될 때 움이 트는 느낌, 연초록으로 물들 때의 느낌, 초록이 왕성하고 단풍이 들고 다시 겨울이 될 때의 느낌. 그리고 나무는 한 자리에 머무면서 자기 분수, 자기 만족을 아는 것 같아. 나무를 보면 그런 것들을 보고 느낄 수 있지. 또 이런 것들을 사진으로 표현해보는 재미가 있어.한 자리에서 몇백년을 족히 살아내는 나무들을 보면 보통 철학자가 아닌 거지. 움직일 수 없는 단점을 장점으로 승화시킨 것이라고 해야 될까.(웃음)만약 나무가 동물처럼 이동하고 사람처럼 욕심 부리고 그렇다면, 나무끼리도 서로 상처만 내고 오히려 제명에 못 살걸, 아마. 나무는 그냥 한 자리에서 욕심내지 않고 자기가 취할 것만 취하고, 자기 페이스대로만 가니까. 그런 건 확실히 나무가 가진 다른 점이기도 하고, 좋은 점이지. 사람들이 나무를 많이 알아줬으면 좋겠어. 역사 문화를 다 가지고 있으니까.Q. 아띠인력거란 헉에게 어떤 존재야?나를 더 젊게 해주는 것. 젊은 사람들이 주로 몰려 있기도 하고, 공유하는 문화 자체도 젊은 문화잖아. 그런 가운데 내가 활동을 하게 되니까 확실히 그런 것들은 있는 것 같아. 내가 젊어지는 느낌. 어느 순간 내가 이 사람들이랑 똑같은 라이더라는 느낌이 들 때, 나이를 떠나서 나도 함께 젊은 느낌을 공유하는구나! 그런 생각이 드니까, 아띠는 나를 젊게 해주지. 그리고 반말문화가 서로가 다가가기 쉽게 만드는 연결고리가 되는 것 같아. 많은 젊은 사람들과 어울리는 기회가 된 거니까 너무 좋고.또 북촌의 분위기나 내가 아는 좋은 느낌들을 다른 사람들과 공유하고 싶었는데, 사람들을 태우고 만나고 하면서 아띠를 통해서 실현하니까 그런 매개체 역할을 해줘서 좋고. 또 거기서 소통도 되고 행복해지고. 그런 행복해하는 사름들을 보면 기쁘고 행복해지고.아띠의 상징인 파란색처럼 나를 젊게 해주는 것 같아. 그리고 내가 그렇게 되려고 노력하는 편이고.Q. 미래의 아띠라이더들에게 조언을 해준다면?젊은 사람이라면 한 번쯤은 해봤으면 좋겠다싶어. 몸을 쓰는 일이라 여름에는 덥기도 하고, 겨울에는 춥고 사람이 없어서 힘들긴 하지만, 얻어지는 것들은 충분히 보상하고도 남으니까 많이들 도전했으면 좋겠어. 청춘의 한 페이지가 아띠인력거라는 소중한 경험과 추억이 된다면 굉장히 좋을 것 같아. 자기 몸을 사용하는 데, 행복까지 전달할 수 있다면 젊었을 때 안 해보면 언제 또 해보겠어. 값진 노동이라는 것을 경험해봤으면 좋겠어.그리고 요즘 많은 사람들이 한 곳만 바라본다는 게 문제잖아. 한 가지에만 내몰리게 되는 게 사람을 불행하게 만드는 것 같거든. 꼭 아띠를 안하더라도 젊은 사람들이 좀 더 자기만이 할 수 있는 것들을 도전해보고 생각과 경험을 다양하게 해서, 자기만의 길을 만들어 나갔으면 좋겠어. 꿈을 실현시켜나가고 자기가 하고 싶은 것을 하는 게 결과적으로는 진짜 행복해지는 것 같아. 그런 선택 중에 하나가 아띠인력거가 충분히 될 수 있을 거라고 보거든. 그래서 젊은 사람들이 많이 와서 경험도 쌓고, 자기 꿈을 키워나가는 하나의 계기가 되었으면 좋겠어!자연과 나무를 사랑하는 따뜻한 마음을 가진 헉의 두번째 인터뷰였습니다.우직하고 깊은 '나무여행 전문가' 헉의 새로운 도전을 응원하며인터뷰를 마칩니다:)#아띠라이더스클럽 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #사내문화

기업문화 엿볼 때, 더팀스

로그인

/