태그

2015년 12월 29일 화요일

[독후감] 인터랙티브 디벨로퍼

인터랙티브 디벨로퍼 (김종민, 한빛미디어)

3시간 정도에 독파하였음.. 사진이 많아서 글자가 많지 않아 쉽게 쉽게 읽혔고, 밤에 쉽게 잠을 못 이루게 만들었음..

이 책은 필자의 10여년간의 행적을 스스로 돌아보면서 대한민국 개발자에게 전하고 싶은 메시지를 툭툭 던져주고 있다. 결국 꿈을 향해 한발 한발 나아가는 발걸음에 큰 박수를 보내고 싶다. 실은 깊이 강조가 되지는 않지만 본인이 좋아하는 것을 발견하고, 그 것을 잘 하는 사람들을 찾아서 멘토로 삼아 스스로의 차별성을 찾아가는 모습은 무척이나 닮고 싶은 부분이다.

책을 다 읽고 나서 나를 다시 한번 돌아 보게 되었다.

내가 지금까지 했던 것을 이렇게 멋지게 정리해 볼 수 있을까..
전형적인 B2B의 백엔드 엔지니어로서 나의 포트폴리오는 무엇인가..
누군가의 찬사를 받을 만한 일을 한 적이 있는 가.. 혹은 할 수 있는가..

올해에 지금까지 시도 하지 않았던 여러가지 시도를 해 본 한해였다.
내년에 계획대로 된다면.. 나도 나만의 포트폴리오를 하나 하나씩 만들어 갈 수 있을 듯 하다.

책을 읽으면서 인상 깊었던 구절 들이다.
실은 내가 지향하는 바와 무척 닮아있다.

내가 찾은 해결책 (44p~45p)

첫 번째로 플래시라는 특정 기술이 아닌 나만의 '내공'을 가지기 위해 노력했다. 세상엔 플래시를 잘 하는 사람은 많지만, 그 플래시를 사용해서 아름다운 작품을 만들어내는 사람은 많지 않았다. 플래시를 열심히 공부해 뛰어난 '플래시 개발자'가 되기보단, 디자인, 모션, 화면전환, 그리고 유저 인터팩션 등이 완성도 있는 결과물을 만드는 사람이 되고자 했다. 초점을 개발 언어에서 콘텐츠로 옮긴 것인데, 웹사이트의 디자인과 모션의 디테일을 높이기 위해 고민하고, 사용자가 어떻게 편하게 웹사이트를 이용할 수 있을지, 메뉴 클릭 시 나오는 모션은 어떤 게 제일 직관적인지 등을 더 연구했다. 거기엔 시장에서 요구하는 기술은 항상 빠르게 변하기 때문에 한 가지 기술에만 의존하는 사람이 되는 것은 위험한 발상이라는 생각이 있었다. 세상엔 영원한 것이 없듯이 플래시라는 기술 또한 언젠간 대체될 것이니 시대가 변해도 변하지 않는 나만의 '내공'을 가지자고 생각했다. 그렇게 쌓인 내 실력은 후에 플래시 시장이 죽고 HTML5가 대세가 되었을 때도 내가 뒤처지지 않고 계속해서 이 일을 할 수 있게 해주었다.

두 번째로는 '크게 보고 눈앞의 작은 것에 연연하지 말자'라는 것이었다. 당장 눈앞의 연봉, 직급 등에 연연해서 스트레스를 받거나 승진을 위해 윗사람에게 아부하는 데 시간을 쓰지 말고, 내가 되고자 하는 사람이 될 수 있도록 실력을 쌓고 싶었다. 즉, '이 회사에서 높은 자리에 올라가 연봉을 많이 받자' 가 목표가 아니라, 내가 스스로 성장한 모습을 목표로 삼았다. 그러기 위해서 좁은 시야로 눈앞의 작은 것을 가지기 위해 에너지를 낭비하지 말고 오직 내가 좋아하는 일에 모든 에너지를 쏟고 싶었다. 일에만 집중하자는 생각은 지금도 변함이 없는데, 평소 시계나 반지 같은 손을 움직으는 데 거추장스러운 액세서리는 하지 않고, 옷도 편하고 빨리 입을 수 있는 운동복을 즐겨 입는 이유이다. 회사에서 어떤 일을 하느냐, 혹으 내가 얼마나 성장하느냐가 중요하다....

나의 작업 철학 (132p~134p)

플래시 개발자에게서 쉽게 HTML5 개발자로 바뀔 수 있었던 것에는 내가 가진 작업 철학이 큰 도움이 되었다. 고등학교를 졸업할 당시 나의 희망직업은 영화의 미니어처 등에 쓰이는 모형을 만드는 장인이었다. 그때 내 재능에 대해 진지하게 스스로 반문을 해본 적이 있다. 모형응ㄹ 만드는 장인이 되려면 처음부터 모형을 직접 빚어내고 완성을 해야 한다고 생각했는데 나는 그러지 못했다. 내 실력은 이미 만들어진 모형을 사서 조립하고 색칠하는 수준밖에 되지 않는다는 것을 깨달았다. 즉, 취미로는 훌륭할지 몰라도 직업이라고 말하기에는 부족했다. 내가 그 분야의 진짜가 되기 위해선 본질이 되는 작업이 가능해야 한다고 생각했다. 개발의 본질은 개발코드를 사용해 구조를 설계하고 움직임을 만드는 일이다. 코드에 대한 이해가 없이 툴(Tool)이나 라이브러리(Library)만을 사용해 결과물을 만드는 것은 시중에서 모형을 사다가 조립하고 색칠만 하는 취미 정도의 수준과 다르지 않다는 생각이었다.

{중략}

라이브리리도 마찬가지 부분이다. 라이브러리는 '개발에 필요한 특정 기능을 미리 구현해둔 소스 파일'로, 잘 사용하면 개발시간을 단축할 수 있는 유용한 도구이다. 하지만 코드에 대한 이해 없이 라이브러리에만 의존하는 것은 피해야 한다. 하지 않는 것과 할 수 없는 것엔 큰 차이가 있다. 라이브러리를 사용하는 것이 문제가 되진 않는다. 문제는 라이브러리를 사용해 만들어진 결과물이 자신의 실력이라고 생각하는 경우이다. 그때 본인의 실력에 대해 거짓말을 하게 되는데, 컬렉터(Collector)가 되기 쉽다. 컬렉터란, 실력을 쌓는 데 시간을 쓰기보단 라이브러리를 수집하는 데 더 많은 시간을 보내는 사람들을 말한다. 이런 습관은 처음엔 괜찮을지 몰라도 시간이 지날수록 자신을 옭아매는 덫이 된다.

{중략}

툴이나 라이브러리는 분병 편리한 점이 많지만, 실질적인 코드에 대한 이해가 낮아지고, 툴에서 제공하는 한정된 기능만을 사용할 수 있다는 단점이 있다. 툴의 기능이 아무리 뛰어나고 그것을 100% 이해하고 사용한다고 해도 한계가 있다. 툴이나 라이브러리도 결국에는 코드로 만들어진 것들이다. 어려워도 툴의 도움 없이 개발의 본질인 코드를 이해하고 사용한다면 더 넓은 시야를 가질 수 있다.

---------------

좋은 책이다. :)

2015년 6월 28일 일요일

Python, R, Java, C

Python R을 비교한 좋은 링크가 하나 있어 공유 드립니다.

그리고 Python C 혹은 Java와의 조합 이야기도 있었는데요. 찾아 보니 내용이 조금 다르더군요.

Python C 환경에서 사용할 수 있는 것이 Cython(싸이썬) 입니다.
간혹, CPython 이 보이기도 하는데요, 이건 Python 개발을 한 C 프로젝트를 말하는 겁니다. (Python C로 개발되었습니다.)

Cython Python을 작성한 코드를 C로 컨버팅 해주는 개념입니다.
컴파일을 하면, 마치 C 컴파일러로 컴파일 한 것과 같은 산출물이 나오는 것이죠. 여기서 LLVM 이라는 컴파일러를 활용하고 있습니다.

Java와 연계가 가능한 Jython(자이썬)은 위와 같은 개념이기 한데, 조금 더 나아가서..
Python 코드에서 Java 라이브러리를 호출하여 사용이 가능합니다.
Python 으로 코딩하면서 Java 코드를 삽입 하는 개념이죠.

이후 컴파일 하면, JVM 용 바이트코드로 변환하여, JVM 상에서 구동 됩니다.

R Python의 연계도 가능합니다.
rpy Python에서 R 함수를 호출 할 수 있는 개념입니다.

반대로도 가능합니다. R에서 Python을 콜하는 건 rPython 이라 하는 군요.


이외에도 여러 방면에서 조합이 가능합니다.

하지만 무리하게 한 프로젝트에서 여러 언어를 쓸 필요는 없겠죠? :)

>_

2015년 3월 23일 월요일

Python for Data Scientist

http://www.datacommunitydc.org/blog/2013/04/son-of-getting-started-with-python-for-data-scientists

http://www.datacommunitydc.org/blog/2013/03/getting-started-with-python-for-data-scientists

2015년 3월 11일 수요일

Python 을 시작 하면서..

어떻게 Python을 시작할까 고민하다가, 책을 사서 보는 건 경험상 큰 도움이 되지 않기에, Python 개념 및 사상을 배우기 위해 인터넷을 이리저리 뒤졌다.

실은 위키피데아 내용 만 보더라도, 어느 정도 파악 하는 데는 무리가 없었다.
http://en.wikipedia.org/wiki/Python_(programming_language)

코딩의 시작은 일단 웹 사이트를 통해 시작했다.
http://www.codecademy.com/

세상 참 좋아진 듯.. 내가 경력이 그리 긴건 아니지만, 2000년 초반에 Java를 배우기 위해서는 책보고 관심 있는 사람끼리 모여서 스터디 한 것 밖에 없었던 듯.. 요즘은 코딩 배우는 싸이트도 많고, 코세라나 edx 같이 세계의 유명한 교수들의 강의를 무료로 들을 수 도 있고, 크라우드 펀딩을 통해서 개발 하면서 경쟁 할 수 도 있고.. 소스가 너무나도 많다.

Python 기초 과정을 한 40% 진행하며서 느낀 점은..

일단 쉽다. 다들 이 점을 강조 하는데, 실제로 구현 해 보니 증말 쉽다.

어떤 언어든 개발 경험이 있다면, 코딩 문법을 익히는 데 몇 일 안 걸릴 듯..
개발자가 아니더라도 어렵지 않게 배울 수 있을 듯..

세미콜론이 없는 게 얼마나 편한지,
함수 정의문이나 if-else 문을 감싸는 중괄호(())가 없는 게 얼마나 편한지,
단순히 띄워쓰기를 지킴으로써 얻을 수 있는 가독성, 생산성은 가히 놀라울 듯 하다.

변수 정의 시 미리 타입, 크기 등을 정할 필요가 없어 개발시 편하지만, 디버깅은 어려울듯..

Node.js의 JavaScript와 너무나도 비슷하다. 비동기식 이벤트 기반 코딩이 가능 한 1급 함수라는 부분도 똑같다.

상속관련해서는 JavaScript는 prototype 객체를 통해 상속 및 오버라이트는 가능하나, 클래스를 정의하여 상속 받는 개념은 없는데, Python은 완전한 클래스 생성이 가능하고 다중상속등이 가능해 보인다.

기초과정 완료 되면, 더 추가 하겠다.

To be continued..

>_

내가 Python을 시작하게 된 이유

그 동안 SI회사에서 다양한 필드의 엔터프라이즈급 시스템 개발을 하다가, 중공업 회사의 SW개발팀으로 옮긴 뒤, 우여곡절이 많았다.

일단, 내가 가지고 있던 'IT(Information Technology)' 기술은 중공업 분야의 플랜트 산업에 적용되고 있는 'OT(Operational Technology)' 기술과는 거리가 멀었다.

기존에는 복잡한 알고리즘 보다는 얼마나 단순하게 비즈니스 요구사항을 충족시키는 아키텍처를 설계/구현을 하고, 성능이슈 등은 불특정 다수의 사용자의 트래픽을 어떻게 하면 분산시키면서 빠르고 안정적이고 신뢰성 높은 시스템을 만들 수 있을 까를 고민하였다.

하지만 플랜트 쪽은 예전에 내가 다루던 아키텍처보다 훨씬 단순했고, 현재 최신 기술 트랜드에는 훨씬 미치지 못 하고 있었으나, 주기적으로 발생하는 플랜트의 운전 데이터를 통해 과거 데이터 학습을 통해 앞으로의 일을 예측하고, 예상하지 않았던 장애를 미리 방지 하여 플랜트의 수명을 연장 시키는 것에 초점이 맞추어져 있다. 이렇다 보니, 예전에는 잘 다루지 않았던 인공지능, 머신러닝과 관계가 깊은 알고리즘 등에 대해 깊이 이해를 할 필요가 있다. 이러한 알고리즘 등은 요즘 흔히 얘기 하는 빅 데이터 분석에서도 쉽게 사용되어지는 기술이기도 하다. (실은 BI, 인공지능, 머신러닝, 데이터 마이닝 등은 서로 관계가 있으면서도 다른 영역이다.)

헌데, 이런 알고리즘에 대해 이해를 하려면 기존에 하지 않았던 선형 대수학, 통계학 등의 쉽지 않은 지식들을 선행 학습을 반드시 해야 한다. 물론, 예전에 한번쯤은 접해봤던 것들이고, 공부를 하는 거에 대해서 큰 거부감은 없으나, 과거에 내가 해오던 일과의 괴리 때문에 잘 하던 걸 더 발전 시킬 수 없는 건 가 하는 생각도 들고, 이 일을 정말 잘 할 수 있을 까 의문점이 들게 되었다.

이런 와중에 산 호세에서 Strata+Hadoop World 2015에 참여를 하게 되었고, 빅 데이터 관련 최신 트랜드를 확인 하는 과정에 Python이 굉장히 큰 비중을 차지하고 있는 것을 보고 무척 놀랐었다. 빅 데이터 관련 기술들이 대부분 Java로 이루어져 있어,  Java에만 신경을 쓰고 있었던 것은 나의 과오였었고, 웹 개발에는 Front-end, Back-end 포함한 Full-Stack JavaScript 쪽에 관심을 가지고 있었는데, 이쪽 분야를 보니 Python 커뮤니티가 굉장히 크고, Science 쪽에서는 가장 선호 하는 프로그래밍 랭귀지 라는 것을 알게 되었다.

실은 작년 말에 영국 자회사에 방문 했을 때도, 본인들이 필요한 툴들을 Python을 개발하여 업무에 활용하는 것을 보고서는 크게 감흥이 없었었다. 하지만, 지금 생각 해보니, Computer Science/Engineering 쪽에 백그라운드도 없고 경험도 없는 사람들이, 그저 본인들의 업무의 비효율성을 제거하고 생산성을 높이려는 목적으로 반복적으로 수행하던 업무를 본인들이 가장 쉽게 배울 수 있는 언어로 개선했다는 것에 조금 더 주목 했어야 하지 않았나 싶다.

해서, 개발자로서의 나의 경력을 이용하면서 수행하과 있는 과제를 진행하기 위해서는 알고리즘을 구현하는 엔지니어가 아니라, 잘 알려져 있는 알고리즘에 대한 특징, 장/단점을 파악 하고, 잘 알려져 있는 라이브러리들을 활용하여, 빠른 시간내에 구현해서 적용/테스트 하는 것이 지금 내가 할 수 있는 가장 가치 있는 일이라는 생각이 들었다.  또, 새로운 것을 배우고 싶어하는 목마름에 쉽게 다가갈 수 있는 Python은 수년전에 Node.js를 시작하면서 JavaScript 의 단순함과 자유도에 매력을 느꼈던 그때의 기분이 재현되게 해 줄 수 있을 거라는 생각이 들었다.

여기서 나는 Python 기반의 기계학습 구현이 가능한 엔지니어로 성장해보려고 한다. 그러다 보면 bottom-up으로 자연스럽게 알고리즘에 대한 이해와 필요한 기반 지식들을 익힐 수 있으리라 기대한다. 빅 데이터, 인공지능, 머신러닝, 딥러닝 등에 관심이 점점 많아지는 요즘, 나와 같이 전형적인 기업 IT 시스템을 개발 하던 많은 개발자들이 비슷한 고민을 하고 있다면, 훗날 좋은 경험담을 공유하고 싶다. :)

>_

2015년 3월 4일 수요일

Data Science with Python

출처 : "Ultimate Skills Checklist for Your First Data Analyst Job" by Udacity

Python programming language
: Python is a high level programming language with many useful packages written for it

[Python packages (“modules”)]
- NumPy
: an optimized python library for numerical analysis, specifically: large, multi-dimensional arrays and matrices. Found in Introduction to Data Science
http://www.numpy.org/
http://en.wikipedia.org/wiki/NumPy

- pandas
: an optimized python library for data analysis including dataframes inspired by R. Found in Introduction to Data Science
http://pandas.pydata.org/
http://en.wikipedia.org/wiki/Pandas_(software)

- matplotlib
: a 2D plotting library for python, includes the pyplot interface which provides a MATLAB-like interface (see ipython notebooks and seaborn below). Found in Introduction to Data Science
http://matplotlib.org/
http://en.wikipedia.org/wiki/Matplotlib

SciPy
: a library for scientific computing and technical computing. Found in Introduction to Data Science
http://www.scipy.org/
http://en.wikipedia.org/wiki/SciPy

scikit-learn
: machine learning library built on NumPy, SciPy, and matplotlib. Mentioned in Introduction to Machine Learning
http://scikit-learn.org/stable/
http://en.wikipedia.org/wiki/Scikit-learn

[optional]
iPython
: an improved interactive shell for python with introspection, rich media, additional shell syntax, tab completion, and richer history
http://ipython.org/
http://en.wikipedia.org/wiki/IPython

iPython notebooks
: a web-based interactive computational environment
http://ipython.org/notebook.html
http://en.wikipedia.org/wiki/IPython#Notebook
hosting: http://nbviewer.ipython.org/

anaconda
: a python package manager for science, math, engineering, data analysis with the intent of simplifying and maintaining compatibility between library versions. Also useful for getting started with ipython notebooks.
http://continuum.io/downloads

ggplot: and (in-progress) port of R’s ggplot2 which premised upon a grammar of graphics
http://ggplot.yhathq.com

seaborn: a Python visualization library based on matplotlib with a highlevel interface
http://web.stanford.edu/~mwaskom/software/seaborn/

Strata+Hadoop WORLD PyData 후기

http://strataconf.com/big-data-conference-ca-2015/public/schedule/full/public

PyData at Strata


  • 머신러닝 라이브러리는 scikit-learn 활용
  • 시계열성 시각화는 Bokeh
  • 성능상 이슈가 있다면 Numba
  • 데이터 로딩을 위해서는 Pandas
  • 모든 작업은 iPython Notebook 으로..
  • ipynb 공유를 위해서는 Jupyter로..

Description

PyData
Python has become an increasingly important part of the data engineer and analytic tool landscape. Pydata at Strata provides in-depth coverage of the tools and techniques gaining traction with the data audience, including iPython Notebook, NumPy/matplotlib for visualization, SciPy, scikit-learn, and how to scale Python performance, including how to handle large, distributed data sets. Come see how the leading lights in the Python data community are making Python ever more useful to data analysts and data engineers.
9:00am – 10:30am
Track 1 (room LL21 B):
  • Machine Learning with scikit-learn
    Andreas Mueller
scikit-learn has emerged as one of the most popular open source machine learning toolkits,
now widely used in academia and industry. scikit-learn provides easy-to-use interfaces to perform advanced analysis and build powerful predictive models. The tutorial will cover basic concepts of machine learning, such as supervised and unsupervised learning, cross validation and model selection. We will see how to prepare data for machine learning, and go from applying a single algorithm to building a machine learning pipeline.
11:00am – 12:30pm
Track 1 (room LL21 B):
  • Interactive Web Graphics with Bokeh
    Peter Wang
Bokeh is an open-source library for building web graphics, ranging from simple interactive plots to complex dashboards with streaming data sources.  This is tutorial will quickly introduce some of the basic concepts behind Bokeh and then dive into a step-by-step series of exercises which showcase how to embed interactive graphics in an IPython notebook and build more complex linked graphics.  Streaming and large datasets will also be demonstrated.
1:30pm – 3:00pm
Track 1 (room LL21 B):
  • Intro to Numba and Performance Python
    Travis Oliphant
Numba is a just-in-time compiler for Python that can translate a wide range
of Python functions into high performance machine code at runtime. This
tutorial will give an overview of the capabilities of the Numba compiler and
walk through several examples showing how to use Numba to generate fast 
implementations of numerical algorithms from pure Python. We will briefly
touch on more advanced features of Numba, such as compiling for the GPU, at
the end.
Materials:
A basic installation of Anaconda. Example IPython notebooks will be posted to
GitHub before the tutorial.
3:30pm – 5:00pm
Track 1 (room LL21 B):
  • Analytics Beyond the Basics with pandas and SQL
    Wes McKinney
In this tutorial, we’ll take a tour through a variety of useful, but sometimes tricky analytical tasks and show how they can be tackled with pandas or SQL. A part of the goal is to illustrate how SQL concepts map onto the pandas API and vice versa, and for the participant to learn more about advanced usage of each of the tools.
Materials will be posted at http://github.com/wesm/strata-sj-2015

2015년 2월 11일 수요일

SW개발자, 프레임워크로 내공쌓기 - 생보사 차세대 프로젝트

오늘은 그 토록 원하던 프레임워크팀으로 전배 한 뒤, 투입되어 5년간 진행했던 2개 대형 프로젝트 중 첫 번째 프로젝트에 대해서 애기 해보고자 한다.

2008년 말, 입사 2년차에 만 2년을 앞두고 원하던 부서로 옮긴 나는, 이제 프로젝트에 대한 욕심이 생기기 시작했다. 그때 당시에는 웬지 모르겠지만 금융권 프로젝트를 하고 싶었다. 그 동안, 국방, 공공, 대내 작은 프로젝트만 다녀서 그랬는지 모르겠지만, 웬지 금융권에서 돈과 관련된 프로젝트를 하면 돈을 만질 수 있을 거 같은 느낌이 들었을까.. 솔직히 그냥 해보고 싶었다.

마침 관계사 중 생보사 대형 차세대 프로젝트가 곧 시작될 예정이였고, 금융권에서는 거의 최초로 기존 레거시 시스템 전체를 Java로 전환하는 대규모 프로젝트였다. 난, 2주 정도 신규 팀에서 OJT를 받다가, 바로 해당 프로젝트에 투입이 되었다.

실은, 그 당시 같은 팀원 사람들을 보면 프로젝트에 투입되는 것을 그리 반기지 않았던 걸로 기억한다. 아무래도 본사 사무실에서 프레임워크 개발하는 것 보다 훨씬 업무 강도도 세고, 고객 눈치도 봐야 하고, 플젝 납기 기한도 맞춰야 되고.. 이리저리 신경 쓰이는 일이 많아서 일 것이다. 하지만, 난 그게 더 좋았다. 특히, 비즈니스에 대해서도 이해하고 싶어 했던 의지가 있었고, 젊을수록 더 고생해야 더 많이 배울 수 있을 것이라는 생각이 지배적이였다. 이런 내 생각과 의지는 앞으로 회사 생활하는 데 굉장히 많은 긍정적인 영향을 미쳤었다.

해당 프로젝트의 기존 시스템은 Cobol 기반이였고, Java로 전환하기 위해 SDS의 Java Spring 기반의 Anyframe Enterprise 기반으로 차세대 시스템을 구축하기 시작했다. Anyframe Enterprise 내의 OLTP, Batch, BTO(Center Cut)등의 제품들이 적용되었고, Anyframe Integration을 통해 대외계 연계까지도 적용을 한 프로젝트이다. 실은, 이때까지만 하더라도 Anyframe Enterprise 버전의 방향성과 로드앱에 대해서 구체적인 plan이 있지는 않았던 걸로 기억한다. 하지만, 대형 차세대 프로젝트의 도메인 지식 기반으로 해서 2년 동안 완성도가 무척 높아졌고, 이후에 대부분의 대형 프로젝트에서 러브콜이 쇄도 했었다. 팀원 모두 수 년간 무척 바쁘게 지내왔었다.

이해를 돕는 차원에서 Anyframe Enterprise에 대한 동영상 링크를 공유 한다.
http://vimeo.com/67370902
시간이 얼마 안 지났는데, 좀 유치한듯..ㅡㅡㅋ 현재는 잘 활용하지 않는 레전드임..ㅋ

내가 담당했던 업무는 BTO(Batch Type Online) 혹은 Center-Cut 이라는 이름의 프레임워크였다. 컨셉은 일반 배치 보다 비즈니스 로직이 복잡하고, 단발성 OLTP의 대량 처리를 위한 분산 병렬 처리 프레임워크라고 볼 수 있다.위 동영상의 일부를 캡쳐 해 보았다. 



내가 초기에 그렸던 그림이 이렇게 변한 듯 하다.

Admin은 Center Cut의 작업을 관장하는 녀석이다. Center Cut Job을 등록 및 관리 하며, Job내의 다양한 기본 정보들을 핸들링 한다. 병렬 처리 할 쓰레드 개수라던지, 전처리/후처리 방법, 실행 시간/주기, Job간의 의존성/우선순위 등으로 볼 수 있겠다. 이렇게 정의된 Job은 구동시 각 서버에 설치되어 있는 Center Cut Engine에게 명령을 내린다. 그럼 Engine들은 자기가 할당 받은 쓰레드 개수 만큼 쓰레드를 생성시켜, 매핑되어 있는 다수의 WAS로 Online 모듈 호출을 시도 한다. 이는 가령 계좌 이체의 대량 처리인 회사 급여 이체 등의 비즈니스 로직에 적용이 가능하다.

이런 처리 기법은 기존 Cobol 대비 배치성 업무 수행 속도가 현저히 느릴 것이라는 JVM 기반의 Java가 가지는 단점을 보기 좋게 극복하는 좋은 사례가 되었으며, 기존 시스템 보다 오히려 처리 속도가 빨라졌다.

이 프레임워크를 개발 할 때, 일손이 부족하고 국내에는 기술력 놓은 인력들을 구하기 쉽지 않아서, 외주용역을 활용하였었다. 이때, 벨라루시의 한 업체와 업무를 진행하였는데, 그 당시만 하더라도 영어로 일하는 것이 다소 생소한 시기라 매주 컨퍼런스 콜이나 daily meeting 시에 알아듣기 힘든 러시아식 발음의 영어와 씨름 하기도 하였지만, 곧 적응이 되었고, 외국인 들과 일하는 것이 한편으로는 한국 개발자들과 일하는 것과의 차이가 커서 힘든 점도 많았지만, 영어 뿐만이 아니라 개발 방식에 대한 부분에서도 배울점이 무척 많았다. 그리고, 오픈 전 1년은 0.5 M/D(한명이 하루 반나절만 지원)만 계약을 하여 업무를 진행하였기 때문에, 짧은 시간에 필요한 내용들에 대해서 의논하고 대부분의 핵심 업무들은 내가 직접 진행 할 수 있어서 설계 및 개발/테스트 역량을 많이 끌어 올리는 계기가 되었다.

그리고 이 시점에 서서히 알려지고 있었던 애자일 방법론에 대해 공부하여 실 프로젝트에 적용까지 함으로써, 애자일 사상에 대해 동경하고 따르게 되는 계기가 되었었다. 

해당 프로젝트는 24개월동안 많은 사람의 노력과 열정으로 완성이 되었고, 잘 마무리 되어 성공적으로 오픈하게 되었다. 이후 주변의 많은 보험사들이 해당 프로젝트 성공이후에 Java로 전환하는 프로젝트를 진행하게 되었고, 이는 훗날 SDS에서 처음이자 마지막으로 수행한 제 1금융권 차세대 프로젝트에 까지 영향을 끼쳤다고 생각한다.

2010년 11월경, SDS는 Anyframe 프레임워크 전체 제품에 대한 대외 컨퍼런스를 개최하게 되었다. 이때, Center Cut에 대한 발표를 직접 하였었고, 발표자료 링크를 공유 한다.

지금 생각해보니, 프로젝트 수행 당시 매일 야근과 휴일에 근무하기를 반복.. 연휴도 없이 지내면서 무척 힘들었지만, 가장 열심히 일해야 할 때, 좋은 프로젝트의 전체 싸이클을 경험하면서, 주요한 프레임워크 설계/개발에 깊이 참여하였고, 프로젝트내 개발자와 해외 개발자들과 협업하면서 만들어낸 산출물들이 좋은 결과로 이어진 것이 나에게는 큰 행운이 아니였나 싶다.

>_

기억에 남는 기술 : Java, Spring OLTP/Batch, WebLogic, Oracle, GWT, Apache MINA, JBoss Jgroups, Multi-Threading, Agile development




-- My Story ---------------------------------------










---------------------------------------------------