Skills

Programming Languages

  • Python
  • Javascript

Web Back-end

  • Django
  • Celery

Web Front-end

  • ReactJS
  • Webpack
  • HTML
  • CSS

Deployment

  • AWS EC2
  • AWS CodeDeploy
  • nginx

Work Experience (4)

Programmer
Move
April 2017 - August 2017
http://move.is/

대입 수험생들의 입학 가능성을 진단하는 오르비 모의지원을 개발하였습니다. 오르비 모의지원은 매년 약 4만명 이상의 수험생의 데이터를 확보하여, 예측 알고리즘을 통해 지원 가능성을 제공했습니다. 저는 이 프로젝트에서 합격 커트라인 알고리즘 코어를 제외한, 유저 뷰 단, 자사 다른 서비스와 통신하는 API, 점수 입력부터 대학별 점수로의 변환 로직, 어드민 등 서비스 파트를 개발하였습니다.

  • Python2, 그리고 여러 레거시가 남아있는 (구)오르비 모의지원을 대학의 학과간의 연관관계 데이터, 학과의 히스토리 추적을 위한 DB 관계 리모델링 등 나은 예측을 위한 목적으로 다시 개발되는 프로젝트에 참여했습니다.

  • nginx + uWSGI + Flask + SQLAlchemy로 AWS 인프라 위에서 서비스 하고 있습니다.

  • 대입예측 시스템의 개발은 Programming의 과정도 많지만 그에 못지 않게 각 대학별 모집요강 문서(pdf, hwp 등 통일되지 않은 다양한 양식)를 읽고, 대학별로 반영하는 수능 응시 과목, 반영 비율, 내신 계산식, 모집 계열, 각 학과의 모집 인원 + 수시 이월 인원 등의 정보를 코드와 데이터베이스로 옮겨내는 과정의 비용이 매우 큽니다.(약 400개의 학과 대응)

  • 이를 위해 각 학교별, 계열별로 값을 바꾸어 계산식을 만들어 낼 수 있는 Dict, 공통 계산 함수들을 포함하고 있는 Class를 정의하고, 특이사항(계열이 인문/자연으로 나뉜것이 아닌 매우 디테일하게 나누어져 있는 경우, 특정 과목에만 일정 비율 가산점을 부여하는 경우 등)에는 학교별 Class를 커스텀하여 사용할 수 있게 하였습니다. 이를 통해 현재 서울 주요대, 의/수의/한의/치과 대학에 대한 점수 계산, 비교, 커트라인 산출을 개발하였습니다.

  • 또한 개발자의 많은 수작업이 필요하므로 그 외의 부분에서 작업하는 코스트의 효율성을 높이기 위해 Jenkins + AWS CodeDeploy의 조합으로 Commit -> Test -> Build -> Deploy의 과정의 효율을 높였습니다. Develop 브랜치를 바라보는 Pull Request는 자동으로 Jenkins가 감지하여 빌드, 빌드 완료시 CodeDeploy로 트리거하여 배포하여 적용사항을 확인할 수 있고. Master 커밋은 개발자가 직접 Jenkins에서 빌드를 시작하면 그 이후의 과정이 자동으로 이루어집니다.

  • 모의지원 서비스는 지난 6월 모의고사에서 약 5000명 가량의 유저가 접속하여 점수를 기록하였고. CloudWatch 대시보드를 사용하여 모니터링, EC2의 Load Balancer + Auto Scaling Group을 사용하여 트래픽에 따른 자동화된 서버 스케일링 등 적극적으로 AWS를 활용하여 유연한 인프라를 운영하였습니다.

  • 프론트엔드는 JinJa2 템플릿 엔진을 사용하고, 유저들의 과목별, 총 점수의 분포 등 지표를 D3.js를 활용하여 그려주었습니다.

Programmer
Wolsemap
February 2016 - April 2017

서울 지하철 월세 지도. 독일의 부동산 사이트 immobilienscout24의 독일 도시별 지하철 노선도 주변 one-room apartment의 평균 가격을 나타내는 Miet-Map에 영향을 받아 시작한 프로젝트 입니다. 서울 수도권 지하철 노선을 따라 조금 더 한국에 맞추어 보증금, 월세의 평균 정보를 나타내어 서울에서, 홀로, 살기 위해 가장 기본적이고 중요한 '주'의 비용에 대한 기준을 세울 수 있는 지표를 보여주려 하였습니다.

  • nginx + uWSGI + Django로 AWS EC2에서 서비스 하고 있습니다.

  • 다방, 직방의 API요청과 응답의 구조를 분석하여 매일 밤 지하철 역별 평균 월세 정보를 가져오고 있습니다

  • Django + Celery로 매일밤 지하철 역에 대한 요청을 보내 JSON데이터를 받아 크롤링하며 Network 응답 시간에 따른 Block을 줄이기위해 Threading을 사용하였다가, 파이썬에서 Thread를 활용하는 문제때문에, 변경하였습니다.

  • 비동기 태스크를 위한 Celery를 온전히 사용하기 위해 멀티쓰레딩을 제거하고 Celery Worker프로세서의 수를 늘려 크롤링 시간을 줄였습니다.

  • Front에서 JSON으로 가공된 데이터를 react-d3를 활용하여 월세, 보증금의 변화를 그래프로 그리고 있습니다.

  • SVG 지하철 노선도의 코드를 알맞게 그룹짓고, 수정하였습니다.

  • 매 달 13.4 USD의 서버비가 지출되고 있어 CPU사용량을 가장 많이 사용하는 rabbitmq는 AWS SQS로, celery worker는 lambda의 scheduled event, ec2 인스턴스는 lambda를 활용하여 서버리스로 변경하려 합니다.

  • Will: 호선별, 지역별 데이터 통계, 그래프 제공, async, 네이버 부동산 크롤링, 지하철 노선도 리팩토링, 서버리스

Web Programmer
BalanceCareer
February 2016 - December 2016
https://studysearch.co.kr/

발란스커리어는 영어 회화 그룹 스터디 매칭 서비스 스터디서치를 운영하고 있는 스타트업 입니다. 2월에 입사해 몇개월간 세일즈 팀에서 예비고객을 실제 결제 고객으로 유도해내었고, 스터디서치 세일즈팀을 위한 툴, 사업기획, 마케팅 담당자들을 위한 데이터 통계, 어드민을 주로 개발했습니다.

  • Django view에서 데이터를 처리하고 JSON으로 보내어 React로 데이터 필터링, Tabular view등을 구현해 어드민 사용자가 데이터를 쉽게 볼 수 있도록 개발했습니다.

  • 상담을 동해 스터디를 소개할 때, 데스크탑과 모바일 환경 모두에서 커리큘럼과 리더의 소개를 더 잘 보일수 있는 소개 페이지를 제작 했습니다. 스터디 소개 링크

  • Flux 패턴을 활용해 다양한 컴포넌트, 페이지에서 동시에 갱신되는 Notification을 구현했습니다.

  • 매주 스터디룸의 예약목록을 스프레드 시트로 만들고, 각 스터디룸 담당자에게 보내고 예약이 가능한지 회신받는 과정을 Google Drive, Sheets API, xlsxwriter를 활용해 Celery 태스크로 자동화 하였습니다

  • 기존에 우선 기능 구현만을 위해 작성된 코드등을 보다 나은 가독성, 퍼포먼스를 위한 리팩토링, DB Transaction을 줄이기 위한 Django ORM 쿼리 최적화 작업을 했습니다.

Assistant Engineer
Samsung Electronics
February 2014 - February 2015
http://www.samsung.com/sec/

입사후 처음엔 개발용 시료들을 해외 연구소로 보내는 TF팀에서 통관 관련 서류 작업을 하였습니다. 개발과는 관련이 없는 업무였지만 업무중 마주하는 문제들을 프로그래밍을 활용해 해결하고, 업무 효율을 높혀왔습니다.

  • 해외로 보낼 시료들의 일련번호가 다른 양식으로 되어 시스템 처리가 되지 않을때 업무가 블락되고 해당 처리건을 솔루션 개발사 SDS에 연락해 해당 담당자가 직접 처리건을 삭제하는 방식으로 해결해야 하여 많은 시간을 낭비하게 되었습니다. 이를 애초부터 방지하기 위해 정규식을 활용해 파이썬으로 시료들의 일련번호를 자동으로 알맞는 양식으로 가공했고.

  • Nodejs를 활용한 간단한 웹으로 배송 요청을 받고 보낼 국가별 남은 요청 수, 등을 한눈에 볼 수 있게 하였습니다.

  • 이후 팀이 옮겨져, 삼성전자에서 개발하는 중국, 북미용 안드로이드 폰의 네트워크 프로토콜을 QA하는 업무를 맡게 되었습니다, 테스트 과정에서의 불편한 작업, 반복 작업등을 효율화 하는것을 고민하고, 팀의 선배님과 함께 윈도우 배치파일을 활용하여 테스트 과정을 일부 자동화 했습니다. 이를 통해 각 테스팅 장비와 폰 하나 당 테스터가 계속 붙어 테스트 해야 하는 과정을 배터리/심카드 분리 후 재 삽입 같은 물리적으로 테스터의 행동이 필요한 경우가 아닌 많은 부분을 자동적으로 진행하여 효율을 높일 수 있었습니다.

  • 또한 해외 특송 TF에서 파트타임으로 근무하시게 된 주부 사원분들의 업무 교육 매뉴얼 작성과 교육을 담당하였고, 안드로이드 개발팀에서의 테스트 장비, 안드로이드 폰 모델-바이너리 별 테스팅 방법을 문서화 하였습니다.

Volunteer

Contributor
Adobe Fonts
September 2017 - October 2017

어도비 사의 User Interface와 프로그래밍 환경을 위한 monospace 폰트 Source Code Pro에 폰트 빌드 환경에 관한 기여를 하였습니다.

  • source-code-pro 폰트의 빌드에서 Python 3환경에서 빌드가 불가하여 Python 3와의 호환이 가능하도록 수정하였습니다. Pull Request

  • source-code-pro 폰트의 빌드에서 bash에서는 잘 동작하지만 zsh에서 동작이 되지 않는 부분을 수정하였습니다. Pull Request

  • 위 두 수정에 대해 어도비 OpenType 폰트 개발에 사용되는 근간인 AFDKO(Adobe Font Development Kit for OpenType)가 Python 2를 강제하는데 source-code-pro의 Python 3 호환이 무슨 소용이 있냐는 다른 개발자의 의견이 있었으나, Adobe측에서 지원이 중단될 예정인 Python 2에 묶여있을 필요가 없다 하여 제 풀 리퀘스트가 병합되었습니다.

  • 다만 느낀점은 오픈소스에 기여 할 때 제가 사용하는 환경(OSX + zsh)에서 겪는 어려움을 해결하는 과정에서 또 다른 환경의 사용자가 가질 수 있는 문제를 고려할 필요가 있다는 것을 새겼습니다.

Tried to Contribute
flake8
February 2017 - February 2017

Python 코드 린터로 flake8을 사용하던중 pre-commit installer에 있는 버그를 발견하고, 수정하여 머지 리퀘스트를 보냈으나 그 당시 릴리즈 버전에서는 문제가 남아있었으나. 다음 마일스톤에 출시 예정인 개발버전에서 해결된것을 알고 머지 리퀘스트를 Close했습니다. 그리고 문제가 해결된 새 버전이 출시되기 전까지 사용할 수 있는 임시 installer코드를 작성해 배포했습니다. 아쉬움은 있었지만 직접 사용하던 오픈소스의 문제에 대해 회피하지않고 해결해보려고 했던 첫 시도로 큰 의미를 가져다 주었습니다.

Contributor
bson
February 2017 - February 2017

bson 프로젝트의 버그 수정, 코드 컨벤션, 레거시 코드 제거에 기여하였습니다.

Contributor
Stack Overflow theme for JSON Resume
February 2017 - February 2017

지금 보고 계시는 이 이력서를 만든 툴이기도 한 JSON Resume의 테마중 하나인 Stackoverflow 테마에서 필요한 기능들을 몇가지 추가하였습니다.

  • 이력서에 포함되어있는 링크를 열 때 기존 탭이 아닌, 새 탭에서 열리도록. 웹페이지를 읽고있는 입장에서 링크가 현재 읽던 탭에서 바뀌고, 다시 뒤로가기 하는것 보다는 새로운 문서가 열리고 자연스럽게 다시 원래 문서로 돌아올 수 있도록.

  • 이력서의 Highlights부분(li로 표현되는 지금 이 부분입니다)내부에 html태그를 사용하여 강조, 줄바꿈, 링크 삽입 등을 할 수 있게 하였습니다.

  • 그 외 Volunteer 섹션의 웹 사이트 주소 CSS변경이나, @media print시에 여백을 조금 더 넉넉하게 주어 이력서를 자연스럽게 출력, pdf로 저장할 수 있도록 수정했습니다.

  • Pull Request

  • 원본 테마가 새버전으로 배포되기 전까지 사용하기 위해 npm에 제 커스텀 테마를 올려두었습니다. npm

  • 위의 작업들을 수행하며 JSON Resume의 테마에 사용되는 Handlebars에 대한 사전 지식이 전혀 없었지만 빠르게 코드를 보는 것 만으로 습득하고, 사용할 수 있었습니다.

Education (1)

Information & Communication
Sunrin Internet Highschool
2011 - 2014
  • Programming Languages - C, Java
  • Network
  • Operationg System
  • Algorithm
  • Computer Graphic Tools

Awards

Imagine Cup 2015
Microsoft
2015

Windows 데스크탑과 모바일폰에서 OCR기술을 활용해 사용자의 일상에서 주로 사용되는 컨텐츠에 기반해 맞춤형 언어 학습을 제공하는 윈도우즈 앱 Wordpedia를 기획, 제작하였습니다.

Smarteen App Challenge 2013
SK Planet
2013

인간의 수면 패턴에 맞추어 알맞는 수면 시간을 설정할 수 있도록 유도하고 알람 30분 이내에 서서히 청각적 감각을 자극하고, 알람 시간이 되면 플래시를 활용해 사용자를 보다 잘 깨어날 수 있도록 유도하는 앱 1:30을 기획, 제작하였습니다.

Smarteen App Challenge 2012
SK Planet
2012

사용자의 이동 경로, 앞으로의 목표까지의 가이드, 열량소모, 속도계, 수분 소모량 등 자전거 라이딩시 사용자에게 필요한 정보를 제공하는, 자전거 라이딩 매니지먼트 앱 PSYCLE을 기획, 제작하였습니다. 개발을 진행하며 UX에 대한 고민, 사용자가 자전거에 스마트폰 거치대를 설치하고 운전 도중 얼마나 전방에서 시선을 떼는것을 최소화 하고 필요한 정보를 얻을 수 있을지, 핸들에서 손을 놓고 폰을 조작하는 일을 최소화 할 수 있을지 직접 자전거를 타며 테스트하고 생각하며 보다 나은 경험을 제공할 수 있도록 고민해왔습니다.

Languages

Korean

Native Speaker

English

Intermediate

Interests

Game

  • Warcraft Series
  • Dungeon Crawl Stone Soup
  • Monster Hunter Series

Music

  • Playing Guitar
  • Playing Bass
  • Funk
  • Disco
  • Jazz

냉면

  • 평양냉면