- 웹 에이전시 (3년)
- 대기업 운영 쇼핑몰 솔루션 개발 (5년)
- 회원 수 30만의 모바일 앱 서비스 개발 (2년)
- 프리랜서로 여기저기 (3년)
- 코파운더로 네트워크 보안솔루션 개발사에 합류 (6년+)
디자인, 퍼블리싱, 프론트엔드, 백엔드, 설계, 운영, 트러블슈팅, QC, 문서작성, 프로세스 개선, 테스트, 브랜드 마케팅 모두 대응할 수 있습니다. 대체로 다 잘합니다. 스스로 자원해서 많은 포지션을 담당하고 리딩하고 협력한 경험이 있습니다.
- 어릴 때부터 코딩하는 게 취미였고, PC Tools로 데이터 파일 뜯고, debug로 역어셈해서 리버스 엔지니어링하거나 게임위자드로 메모리 열어서 고쳐보고, 취미로 게임을 만들곤 했습니다.
- 게임 개발자가 되고 싶어서, 중2 때부터 DirectX로 게임을 만들었고, Game PROGRAMMING Gems와 Effective C++ 등을 감명 깊게 읽었습니다.
- 대학 시절엔 교수가 자꾸 정부 과제, 기업 산학연 같은 프로젝트 따와서 시켰는데, 그러한 것들은 대체로 웹 기반(PHP/Java)이었고, SI 프로젝트를 무수하게 굴러다녔습니다.
- 웹 서비스만 계속 만들다 보니, 어찌저찌 취업도 웹 서비스로 하게 되었습니다.
- 서울시 모 기관 프로젝트를 개발부터 디자인까지 혼자서 진행했습니다.
- 웹 표준, 웹 접근성은 물론, 서울시에서 요구하는 보안 지침 등 모두 준수하였습니다.
- 각종 핵(CSS핵, 언더스코어핵 등)을 사용하여, IE6는 물론, 당시 대부분 브라우저에서 접근할 수 있도록 만들었습니다.
- 당시엔 Java 초창기 때라서 Struts를 썼는데, 마개조해서 템플릿 엔진을 끼얹었습니다. 수천 개의 별도 서비스들을 템플릿으로 생성하고 관리할 수 있게 만들었습니다.
- 또한, 전임자가 퇴사하면서 하루에 2천만 건 정도 쌓이는 주식 정보 제공 서비스를 물려받았는데, 정적 페이지, 캐시, 비동기 호출 등을 사용하여 성능을 1,000% 이상 향상시켰습니다. 물론 모두 혼자 진행했습니다.
- 상품 수십만 개, 물류 시스템 연동, 수십만의 회원 수, 일일 수천만 건의 로그가 쌓이는 대형 쇼핑몰을 개발했습니다.
- Spring 프레임워크를 사용하여 3명의 개발자가 함께 구현하였으나, 설계와 중요한 로직은 제가 담당했습니다.
- 쇼핑몰 특유의 복잡한 모델링과 미친 비즈니스 로직(결제, 취소, 부분 취소, 정산, 통합 SCM, 외부 연동)을 설계, 구현하였습니다. 모델링은 좀 한다고 자신합니다.
- 쇼핑몰의 마일리지 및 쿠폰 시스템을 부분 취소하는 비즈니스 복잡도는 상상을 초월하며, 지금 다시 하라고 하면 못 할 것 같습니다. 해보신 분들은 잘 아실 겁니다. 전월 정산까지 연결해야 하니까요. (안 되는 쇼핑몰들이 참 많죠?)
- 셀 수도 없는 다양한 장애를 경험하고 해결하였습니다. (커넥션 장애, 디스크 장애, DB 트랜잭션, 락킹, ...)
- 갑질과 정치질 사이에서 시달리다가 임금체납까지 당하는 등, 인생의 쓴 맛을 많이 맛보았습니다.
- 1년간 앱 빌더 솔루션을 혼자 만들었습니다. 코드 한 줄 없이 클릭만 하면, 누구나 아이폰/안드로이드 앱을 만들 수 있는 그런 솔루션입니다.
- Phonegap을 씌워서 만들었는데, IE에서 벗어나게 되니까 당시 최신 프론트엔드 기법을 많이 녹여 넣었습니다. 그런데 갤럭시 S2의 브라우저에서 워낙 문제가 많아서 애를 좀 먹었습니다.
- 페이스북 PaaS를 써서 DB 없는 구성으로 만들었고, Private/Public 푸시 알람도 구현/연동하였습니다.
- 빌드 시스템을 자동화하여서, 빌드하고 사이닝하고 업로드해서 마켓 플레이스에 등록하는 것까지 전부 자동화시켰습니다.
- 이때의 경험으로, 앱 개발 외주도 좀 했는데, 그중에는 회원 수가 30만 명이 넘는 국민 앱도 있었습니다. 물론 혼자 만들었습니다.
- 여기저기 불려 다니면서 다양한 문제를 해결했습니다.
- 돈도 많이 떼먹히고, 이유 없이 욕먹고, 암흑기 시절이었습니다.
- 주로 단기 SI를 뛰었고, 대체로 대용량 데이터베이스 관련 업무를 했습니다.
- 지인들과 스타트업을 창업했고, 창립 멤버(코파운더)로 합류하였습니다.
- 모든 네트워크 트래픽을 저장하고, DB화시켜서 분석, 모니터링할 수 있는 솔루션을 개발했는데, 멤버 중에 프론트엔드를 제일 잘 해서 자연스럽게 UI 개발자(+Product Designer)로 정착했습니다.
- SVG나 Canvas(Three.js)를 이용하여, 평면 또는 3차원으로 수억 개의 데이터를 그리고, 관계를 만들어 시각화합니다. 메모리 부족이나 성능 문제를 많이 해결해 보았습니다.
- 스타트업 특유의 빠른 의사 결정과 뒤엎는 문화 때문에, 그날 만들어서 그날 배포하고, 다음날 뒤엎고 새로 만드는 데 익숙합니다. 엄청나게 빨리 잘 만들 수 있습니다.
- 팀원이 증가함에 따라 개발 프로세스를 정립하고 개선하며, 커뮤니케이션과 팀원 간의 관계의 경험을 설계하는 일을 수행했습니다.
- 독서: 1년에 50권 정도의 책을 읽습니다. 소설, 비소설, 개발서를 가리지 않고 다독합니다.
- 영화: 현재까지 약 1,200편 정도의 영화를 감상했습니다. 특별히 가리는 장르는 없습니다. 전기톱 나오는 B급 좀비물 좋아합니다.
- 게임: 30년 넘게 수천가지 게임을 해왔으며, 철권7은 보라단입니다. 대학 시절엔 국내 최대 모 게임 동호회에서 운영진으로 활동했었습니다. 각종 행사를 기획하고, 운영해본 경험이 있습니다.
- 사진: 15년 넘게 사진을 찍었습니다. 한국관광공사에서 제 사진을 사용하기도 했습니다. 현재 보유중인 기종은 Sony A7M3이고, 가장 좋아하는 렌즈는 F1.2 50mm GM입니다. 취미로 영상도 만듭니다.
- 그림: 20년 가까이 그림을 그렸습니다. 만화 동호회에서 활동한 경험 있으며, 동인지 제작, 화보집 제작 배포 경험 있습니다.
- 요리: 스콘, 레몬치즈 케이크부터 수플레, 빠에야, 마파두부, 갈비찜 등 300여개의 요리를 만들 수 있습니다. 이노신산과 글루탐산 정도는 구분합니다. 맛있는 거 좋아합니다.
- 커피: 커피 많이 좋아합니다. 커피 관련으로만 기천만 원 이상 지출했습니다. 집에서 사용하는 커피머신은 듀얼 보일러가 달린 BES920입니다. 만약 지금 다시 살 수 있다면, 엘로치오 자르나 마누스로 갔겠죠.
- 여행: 코로나 19 이후로는 못 갔지만, 1년에 2번 정도는 여행을 갔습니다. 여행 이야기만 몇 시간을 할 수 있습니다. 다녀온 곳 중에 가장 좋았던 데는 바르셀로나입니다.
- 한국어: 원어민 수준으로 구사 가능합니다. 맥락 파악 잘 합니다.
- 영어: 제품 소개는 물론, 비즈니스 서바이벌 회화 가능합니다. 기술 문서를 읽고, 메일 답장할 수 있습니다.
- 일어: 부전공이 일어일문학이고, JLPT 1급 있습니다. 비즈니스 회화는 물론 시연 발표 가능합니다.
- 스페인어: 2살 수준의 스페인어 구사 가능합니다.
- HTML, CSS: 브라우저 호환성, 웹 접근성은 IE6부터 해왔고, 그 덕택에 매우 방어적(Bulletproof)으로 작성합니다. 우아한 퇴보는 믿지 않지만, 최대한 맞춰봅니다. 기본적으로 모든 요소를 시맨틱하게 다루려고 하지만, 꼭 그렇게 보지만은 않습니다.
- jQuery: jQuery가 나쁜 점은 80kb를 낭비한다는 것뿐이고, 그 외 아주 많은 문제를 해결해줍니다. 래핑을 잘하면 코드 품질도 좋아집니다.
- React: 5년 넘게 코드를 작성하고 있고, 못해도 1천 개는 넘는 컴포넌트를 만들어본 것 같습니다. 많이 만들다 보니까 잘 설명하기는 어렵지만, 어떻게 만들어야겠다는 게 그냥 그려집니다.
- Three.js, D3.js: canvas, SVG로 차트를 만들 수 있습니다. Force-directed Graph 그려봤고, 렌더러, 매시 활용해서 다양한 효과의 연출을 만들 수 있습니다. 간단한 게임도 만들 수 있습니다.
- Babel: 환경 설정은 물론, 다양한 plugins 써보고 문제도 해결해봤습니다. Gulp의 Task로 붙여서, 미리 빌드해놓고 성능을 개선한다던가, 풀 빌드 시에 중복되는 비즈니스를 제거해서 속도를 올린다던가 여러 가지를 해봤습니다.
- ASP.net, PHP: ^^
- Java: 꽤 오래 프로그래밍하기도 했고, 멀티스레드, 비동기 프로그래밍 경험 있습니다. 웹 서비스뿐만 아니라, 데몬, 연동 프로그램 등 SI에서 굴러다녔었습니다. 코드 없이 jar 파일만 달랑 받았는데, 역컴파일 분석해서 뜯어고치고 그런 거 다들 한두 번 경험하셨을 거잖아요.
- Spring: 단순히 스프링 프레임워크 사용법뿐만 아니라, 근간 철학(J2EE 설계와 개발) 및 디자인 패턴에 대해서도 이야기할 수 있습니다. 좀 관계없지만, 켄트 벡과 TDD에 환장했었던 적이 있었습니다.
- Oracle DB: 대용량 데이터베이스로 좀 구르고 굴렀습니다. 힌트, 실행 계획과 QT에 대해서 강의 가능합니다.
- PostgreSQL: Timescale이나 Trigram 사용 경험 있습니다.
- Git: Git-flow 기반 명령어 사용할 수 있고, Cherry-pick이나 rebase, merge 잘하고, 충돌 나거나 날려 먹은 거 reflog 복원도 할 수 있습니다.
- 가독성이 최선입니다.
- 성능은 그 자체로 기능입니다.
- 완벽한 설계를 믿지 않습니다.
- 무조건 빨리 만들어야 합니다.
- 시험판을 만들고 그 경험으로 작은 프로덕트를 만듭니다. 작은 보폭으로 걷습니다.