야놀자 FNB Solution, 스포카
도도포인트 백엔드 개발자
2021.03 -
도도포인트 전체 서비스 도메인 교체
  • 안정적인 도메인 교체를 위해 ELB를 추가하여 도메인 이중화 구성
  • Route53, ACM, LoadBalancer, k8s secret, DB에서 도메인 사용 현황 전수 조사
  • 서비스에서 사용중인 도메인 전체 변경
개인정보 제 3자 동의 정책 반영
  • 개인정보 제3자 동의 여부 갱신 기능 구현
  • 백오피스에서 동의 여부 수정 가능 및 수정 후 사용자에게 알림 기능 구현
  • 매장의 광고 메시지 발신시 동의 사용자에게만 발신되도록 메시지 발신 로직 수정
도도포인트 앱 서버 푸시 기능 구현
  • 도도포인트 서버에서 포인트 활동 이벤트 생성 시 메세지 발신되도록 설계
  • PyFCM 패키지를 사용하여 푸시 기능 구현
  • DocumentDB를 사용하여 푸시 메시지 보관
QA 테스트 백오피스 개발
  • 가상의 사용자 포인트 활동 생성
  • 운영 환경의 매장 데이터 추출하여 개발 환경 매장 데이터로 구성
  • Flask Jinja2를 사용하여 백오피스 페이지 구성
  • 구글 OAuth 적용 하여 접근 제한 구현
도도포인트 앱 API 서버 개발
  • Python 패키지 관리 방식 Poetry로 변경
  • Marshmallow 적용하여 오브젝트의 직렬화, 역직렬화, 데이터 검증
  • 레포지토리 패턴 적용하여 데이터 관리 로직 분리
시티스푸너스
IT 엔지니어
2020.01 - 2021.03
페이스북 광고 비용과 cafe24 매출 데이터 분석을 위한 대시보드 구현
  • Python selenium 패키지를 사용하여 Cafe24 매출 데이터 수집 자동화 기능 구현
  • Google Datastudio를 사용하여 GA 리포트 구성
  • Facebook API로 광고 데이터 수집 자동화 구현 D3.js 사용한 대시보드 구축
사내 ERP 개발
  • AWS EC2 환경에서 Flask와 Nuxt.js를 사용하여 개발
  • Shopify API를 사용하여 주문 수집 자동화
  • Cafe24 API를 사용하여 제품 커스텀 기능 개발 및 주문 수집 자동화
  • 여러 커머스에서 수집된 주문내역을 협력사에 전달 하기 위해 SKU 별 주문수량을 Google API를 사용하여 Gsheet 입력 자동화
마이셀럽스
Data 엔지니어
2018.11 ~ 2020.01
사용자의 얼굴 부위별 색상 추출 모듈 개발
  • Face-alignment, opencv를 사용하여 얼굴 인식 모듈 개발
  • k-means를 사용하여 얼굴 부위별 색상 추출
영화 포스터와 트레일러 영상 전처리
  • k-means를 사용하여 대표 색상 추출 후 색상 검색 모듈 구현
  • yolov3 사용하여 영상의 주요 장면 편집 모듈 개발
이미지 색상을 기반으로한 검색 모듈 개발
  • k-means를 활용한 이미지 색상 추출 모듈 개발
  • 색상 추출 모듈을 사용하여 이미지 색상 추출 후 결과 DB에 저장
  • 색상 검색 결과 최적화를 위해 HSL color space를 활용하여 색상의 계열 구분
  • 색상 계열 구분과 색상 검색 결과를 사용하여 색상 검색 모듈 개발
아라엔지니어링
IT 엔지니어
2015.02 - 2017.12
UnisimDesign, OLGA 제어 프로그램 개발
  • Unisim, Olga, Synergi 프로그램을 제어 할 수 있는 TCP/IP 기반의 프로그램 개발
  • OPC 서버와 통신 하도록 Client 기능 구현
Aveva E3D *.rvm 파일을 *.fbx파일로 변환하는 모듈 개발
  • *.rvm 파일 구조 파악 후 범용 3d 프로그램에서 사용할 수 잇도록 *.fbx로 변환
OTS 제어 프로그램 개발
  • 코드 리펙토링과 메모리 사용 최적화 작업 진행
  • MariaDB를 사용하여 제어 프로그램 현재 상태값 관리
Chart Component 기획 및 개발
  • GDI+를 사용하여 개발 진행 하였으며 Multiple Axis, 드래그를 이용한 Zoom, Mouse tracking 기능 구현

도도포인트 앱 프로젝트 구조 리펙토링
문제
   기존 API 서버의 코드는 HTTP 처리와 비즈니스 로직, 데이터 조회 및 처리 코드가 한곳에서 처리되는 상태였습니다. PostgreSQL을 사용하여 데이터를 관리하였으며 새로운 기능이 추가되면서 DocumentDB가 추가되어야 했습니다. 코드가 더 복잡해지기 전에 리팩토링이 필요한 상태였습니다.
해결 과정
   개발 리소스 부족으로 전체 서비스 코드를 레이어드 아키텍처로 리팩토링할 수 있는 상황은 아니었습니다. 우선 레포지토리 패턴만 적용하여 데이터 관리 코드를 분리하기로 하였습니다. 데이터 조회 부분을 모두 파악하여 레포지토리 패턴으로 정리하였습니다. 앱 API 서버 기본정보를 다루는 레포지토리 선언부를 추가하고 PostgreSQL이 연결되는 구현체를 작성하였고 푸시메시지 보관 목적을 지닌 레포지토리 선언부를 추가하고 DocuemntDB가 연결되는 구현체를 작성하였습니다
평가
   각 API에서 사용하는 쿼리를 파악하여 중복 코드를 줄일 수 있었으며 API 테스트 코드에서 데이터 검증 과정이 제거되면서 테스트 코드가 간결해졌습니다.
   비즈니스 로직을 분리하여 서비스 레이어로 구현하지 못한 점이 아쉬움으로 남습니다. 레이어드 아키텍처의 일부분을 적용해 볼 수 있는 좋은 시간이었으며 도메인 주도개발, 레이어드 아키텍처 패턴의 중요성에 대해 다시 한번 깨달았습니다. 서비스 구조에 대해 다시 학습을 시작하게 된 계기가 되었습니다.
도도포인트 앱 매장 목록 조회 속도 개선
문제
   현재 사용자의 위치정보를 사용하여 사용자와 가까운 매장목록을 조회하여 매장 썸네일 이미지, 매장명, 매장과의 사용자사이 거리를 보여주는 화면에서 로딩 속도가 3초 이상 지연되었습니다.
해결 과정
  매장 목록 조회시 구간을 나누어 속도 검사를 하였습니다. API 요청 후 DB에서 매장 목록을 가져오는 구간, 매장 목록 조회 후 직렬화 하는 과정으로 나누어 수행 속도를 확인하였습니다. 매장 목록 조회 후 직렬화 하는 과정에서 속도가 많이 소비되었으며 다시 구간을 나누어 수행 속도를 확인해보니 매장 썸네일 이미지 URL 조회 단계에 시간이 많이 소비되는 문제였습니다. SQLAlchemy-ImageAttach 패키지를 사용하여 매장 이미지를 S3에서 관리하고 있었으며 s3의 업로드된 url을 db에 저장하는 방식이 아닌 이미지 파일의 메타정보만 db에 저장하고 이미지 url 접근시 메타정보를 s3에 전달하여 url을 확인하여 전달하는 방식이였습니다 도도포인트 앱에서 사용할 전체 매장의 썸네일 이미지 URL을 미리 확인하여 Redis에 저장하여 빠른 조회가 가능하도록 구조를 수정하였습니다. 이미지 수정보다는 조회 작업 비율이 월등히 많다는 것을 파악하여 캐시에 저장하여 사용하기로 하였습니다. 약 9,000개 매장의 썸네일 이미지 URL을 매일 새벽에 갱신하도록 celery cronjob을 추가하였습니다.
평가
  이미지 로딩 속도를 200ms 이하로 단축할 수 있었습니다. SQLAlchemy-ImageAttach 사용 장점을 유지하고 URL 조회의 단점을 구조 변경 없이 해결하였습니다.
도도포인트 QA 테스트를 위한 백오피스 개발
문제
  도도포인트 앱 QA에 사용할 더미 데이터를 수동으로 구성해야 하는 문제였습니다. QA 담당자, PM, 디자이너 각각 맡은 QA를 진행하기 위해 가상의 사용자를 수동으로 만들어야 했습니다. 포인트 적립, 사용 등 포인트 활동을 직접 생성해야 했으며 수동으로 생성하기 힘든 포인트 활동도 있었기에 개선이 필요했습니다.
해결 과정
   초기 작업으로 약 70,000명의 가상 사용자를 대량으로 미리 생성하였습니다. QA 대상 기능 중 포인트 적립 형태가 비슷한 사용자들이 방문한 매장을 추천해주는 기능이 있었으며 QA를 위해 대량의 포인트 활동 생성 기능 필요했기에 백오피스에서 포인트 활동 내역이 있는 사용자가 몇 명 필요한지, 날짜 기간 범위는 언제로 할지, 활동 지역은 어디인지 선택할 수 있게 하였습니다. 쿠폰 발급 기능도 추가하여 쿠폰 QA도 가능하도록 기능을 추가하였습니다.
평가
  백엔드 개발자의 리소스를 사용하지 않고 QA에 필요한 데이터를 준비할 수 있게 되었습니다. QA 팀에게는 QA 준비 시간을 줄이는 데 큰 도움이 되었으며 PM, 디자이너분들께는 간단한 기능 확인 시 여러 상황을 직접 준비할 수 있게 되어 기능의 만족도가 높았습니다.
3D 파일 변환 작업 개선
문제
  PDMS 프로그램의 *.rvm 3D 파일 변환 업무를 개선했습니다. *.rvm 파일을 Autodesk의 Navisworks 프로그램 사용하여 *.fbx 파일로 변환가능했으나 Navisworks는 한 번에 하나의 파일만 변환할 수 있었습니다. 변환 작업 시간은 1분 이상 소요되었습니다. PDMS 프로그램에서 추출된 3,000개 이상의 파일을 수동으로 변환 하는 것은 비효율적인 작업이었습니다.
해결 과정
  *.rvm 파일을 분석하였습니다. 파일 형식은 텍스트 파일 이었으며 구, 사각형, 삼각형, 원기둥 등의 3D 오브젝트의 좌표 정보를 저장한 파일이었습니다. 대략 일주일 동안 파일 내용을 분석하였으며 C#을 사용하여 추출 프로그램을 개발했습니다. 분석한 3D 정보는 FBX SDK를 사용하여 *.fbx 파일로 변환할 수 있도록 하여 범용성을 높였습니다. 추출한 내용을 DB에 저장하여 원하는 정보를 필터링하여 사용할 수 있도록 기능을 했습니다.
평가
  수작업으로 작업 시 한 달 이상 소비 될 거라 예상했던 작업을 10일 이내로 단축했습니다. 이후 비슷한 성격의 업무에도 적용하여 다른 팀원들의 업무에도 큰 도움이 되었습니다.