Supertone
2023.1 ~ now
하이브에 인수된 오디오 AI 스타트업
- 풀스택 개발자 직무로 이직 후 백엔드 개발을 메인으로 일하는 중
상세 작업
- 23.9~: Admin Frontend & Backend 개발
- 23.8: B2B용 API 개발 후 배포
- Job execute manager 개발
- Why?
- API에서는 많은 요청을 처리 할 수 있지만, 그 API에서 또 torchserve로 요청을 하고 그 결과를 받아서 사용자에게 보여주기 때문에 torchserve로의 부하가 많았음.
- How?
- Typescript로 master node, worker node, queue를 만든 후 많은 요청이 오더라도 queue에 저장하고 worker가 사용 가능할 때만 작업 처리하도록 개발
- 동기인 API 비동기로 개발 (socket.io로 비동기 작업 완료 후 결과 전달)
- API stress test
- nodejs CLI로 동시에 여러 요청하고 그 결과를 socket으로 받은 후 총 걸린 시간을 측정
- 데이터독 모니터링으로 CPU, Memory 사용량 확인
- 데이터독 연동 (로그 및 APM 설정)
- 기타 버그 수정
- 기술스택: Clean architecture with DDD (nestjs framework)
- 23.5~23.7: API 리팩토링
- 23.3~23.4: Data crawling
- 23.1~23.2: Onboarding
- 개발한 Python 레포지토리 환경설정
- 기술스택: FastAPI
- Python 스터디(Fluent Python)하며 Python 3.9에서 3.10으로 업그레이드
- Python Logging
- JSON Logging 해서 ElasticSearch 연동
(Istio에서 JSON logging일때만 기록하도록 필터가 있었어서..)
텐핑거스
2021.4 - 2022.12 (서울)
500만 다운로드 데이트코스 1위 앱
- 팀장 직책으로 이직 후 안드로이드, iOS, 서버를 리딩하며 데이트팝 서비스 신규 기능 개발
상세 작업
- 22.7~22.12
- 데이트팝 앱 첫 화면 리뉴얼
- Why
- 앱의 첫화면이 매우 옛날 UI로 개선이 필요했음.
- 기존 앱에서 지도에서 지역에 대한 것이 다 앱에서 하드코딩 되어 있어서 수정하기 어려웠음.
- 서버에서도 하드코딩 되어있어서 새로운 지역 추가하는 것이 어려웠음.
- How
- 지역에 대한 설정을 데이터베이스 테이블 만들어 서버에 있었던 하드코딩된 정보 다 제거
- 새로운 지역을 쉽게 추가 할 수 있게 만들고 여러 지역을 하나로 그룹핑하는 것을 개발함
- 상품이 너무 없는 작은 지역은 합치도록 구현
- 예) 부산-영도, 부산-서구, 부산-중구를 부산-(영도,서구,중구)로 하나로 만들고 각각에 포함된 상품이 하나로 합쳐지도록
- 지도에서 상위에서 하위로 타고 들어가게 되어있는데 그것을 Linked list처럼 구현해서 앱에 내려주고 Admin에서도 연결하는 것을 구현
- 기술스택: React, FastAPI
- 데이트팝 외 새로운 서비스 개발
- Why
- 데이트팝은 10-20대가 사용하는 앱으로 30-40대를 타켓으로 하는 서비스 필요성 ↑
- How
- ‘나들이팝’ 서비스 기획 참여하며 MVP 개발
- 외부 데이터베이스와 기존 데이트팝 데이터베이스를 활용해서 초기 데이터 확보
- 네이버와 구글 잘 연동해서 컨텐츠 채워넣도록 구현
- 기존 데이트팝에서 데이터베이스 설계상 어려웠던 것을 새로 데이터베이스 설계하며 해결
- 어드민에서 기본 정보 수정 가능하도록 구현
- 기술스택: Nextjs, React, FastAPI
- 22.5~6
- 데이트팝 ↔ 메가박스 협업 프로젝트
- Why
- 메가박스에서 주최한 ‘오픈이노베이션’에 텐핑거스가 선정되며 같이 협업하게 되었음.
- 우리는 메가박스에 메가박스 매장 주변에 데이트코스를 제공해주기로 했음.
- 매장 별 주변 데이트팝 제휴점 제공해주는 API 개발 필요
- 메가박스는 우리에게 메가박스 티켓을 저렴하게 제공해주기로 했음.
- 외부로 받은 메가박스 티켓을 데이트팝 앱에서 판매할 방법 개발 필요
- How
- 텐핑거스 → 메가박스
- 메가박스 매장의 위도, 경도를 API에 요청하면 그 주변 n km 매장을 조회해서 내려주도록 구현
- 메가박스에 보여줄 매장 설정을 위해 어드민에서 설정 가능하도록 개발
- 메가박스 앱에서 많은 요청이 있을 것 같아 API에 캐싱 적용
- 메가박스 → 텐핑거스
- 메가박스에서 받은 티켓 정보를 데이터베이스에 저장 (엑셀 업로드 받고 처리하도록)
- 기존에 상품 결제하는 시스템에 이 로직을 더하는 것보다 기존 벤더 상품 결제하는 시스템에 이 메가박스를 넣는 것이 좋을 것 같아 메가박스라는 벤더를 구현함.
- 메가박스 벤더 서비스를 만들어 구매처리하고 조회하는 API를 만들고 그것을 기존 데이트팝 벤더 시스템에 더함.
- Draw.io Diagram
- 기술스택: Golang echo, FastAPI, React
- 다른 구독 서비스(팝픽) 어드민 개발
- React
- 21.11~22.2
- 구독 서비스(팝패스) 백엔드 개발
- Why
- 신규 기능 개발
- 기존 서비스는 광고 배너 수익과 상품 판매 수익만 있어서 구독하는 BM이 필요했음.
- How
- 구독 결제 구현
- Nicepay와 구독에 대한 계약 체결 후 연동 (구독 결제는 주기적으로 결제가 이뤄져야하기 때문에 계약도 별도고 API도 따로 있다.)
- AWS EventBridge, AWS Lambda를 이용해 매일 구독 연장 대상자를 찾은 후 결제 갱신
- 결제 성공, 실패에 따른 카카오톡 알림톡 전송
- 구독 컨텐츠
- 구독한 사람 검증하는 어플리케이션 로직
- 구독 기간에 포함되어있는지 체크
- 구독 기간이 끝나더라도 이전 구독 기간에 구매한 것은 확인 가능해서 그걸 볼 수 있는지 권한
- 구독한 사람이 볼 수 있는 상품
- 설정 된 상품을 API로 내려주도록 설정
- 미리보기 상품인 경우 blur 처리해서 이미지 내려주도록 설정
- blur는 golang으로 CDN 개발한 곳에서 뒤에 URL param으로 수치를 주면 blur된 것을 내려주도록 구현
- Admin에서 상품 별 설정 가능하도록 개발
- 기술스택: Golang echo, FastAPI
- 21.10
- Storage migration (GCP storage → AWS s3)
- Why
- 모든 클라우드 자원을 Google → AWS하는 과정에 스토리지를 구글에서만 사용하고 있어서 불필요한 네트워크 트래픽이 많이 발생하고 그에 따라 스토리지 비용이 많이 나왔음.
- How
- API에서 사용하지 않는 이미지 등의 파일은 CLI sync로 맞춤.
- API에서 사용하고 database에서 파일 path도 같이 기록하고 있는 경우
- Django ORM에서 ImageField별로 바라보는 스토리지 설정이 가능해서 하나 수정하고 배포하며 Database 업데이트도 같이 진행
- 기술스택: Django, DRF
- 21.9
- 자동 이메일 전송 및 수신확인 서비스 구현
- Why
- 큐레이션 상품을 구매하면 PDF를 구매자한테 보내줬는데 이 모든 과정이 수동이였음.
- 한명의 담당자가 매일 출근하면 전날 구매자 조회 후 그 구매자의 이메일 하나 하나 보고 이메일 개별 전송해서 매일 시간이 최소 30분 이상 소모됐음.
- 구매 확정을 해야 주문취소를 할 수 없는데 이메일을 보내고 구매 확정 할 방법이 없었음.
- PDF는 암호화되지 않았기 때문에 무분별하게 유통되는 것을 막을 방법이 필요했음.
- How
- 구매하면 구매자의 이메일로 자동으로 PDF 보내는 것을 개발함.
- PDF는 구매자의 전화번호로 암호화해서 유통하는 것을 조금이나마 막음.
- 이메일 보내기 성공하면 바로 구매확정하고 이미지를 통해 수신확인하는 기능을 추가해 CS 대응을 원할하게 할 수 있도록 개발함. (어드민 페이지에서 조회해서 확인 가능하게 개발)
- 초기 개발 시작할 때 필요했던 기능은 아니지만 이메일을 보낼 때 구매하지 않은 큐레이션 상품을 메일 내용에 넣어서 추가 구매하도록 유도함. (이메일에 해당 상품으로 바로 이동하는 딥링크 추가) → 연이어 구매하는 사용자 증가
- 기술스택: Django, Google mail
- 21.7~8
- 데이트팝 기획전 웹 개발
- Why
- 이 때 기준 3년전 UI로 업데이트가 안되고 있는 웹이라 UI 업데이트가 필요했음.
- Angularjs로 되어있는 사이트라 최신 기술스택으로 리팩토링이 필요했음.
- 웹 구매전환이 낮아서 구매 UX 개선과 앱으로 연결되도록 하는 등 마케팅에서 필요한 기능 개발이 필요했음.
- How
- Nextjs 기술스택 도입
- 이커머스 형태로 상품을 구매하는 웹페이지라 서버사이드 렌더링으로 페이지 캐싱해서 보여주는 것이 적합하다 판단
- 마케팅팀과 협업하며 필요한 기능(GA, App 딥링크) 개발
- Result
- (신규 리뉴얼) https://datepop.co.kr
- 기술스택: Nextjs (12.x), React
- 21.4~21.6
- 매출, 수익을 일별, 월별 보는 통계 어드민 개발
- Why
- 기존에도 통계 보는 어드민은 있었지만 3년전 개발 이후 손놓은 상태여서 그 당시 필요한 통계 지표가 없었음. 지표 외 기능도 필요한데 없어서 엑셀로 복붙해 수작업을 했음.
- 프론트는 angularjs로 개발 된 웹사이트라 유지보수가 어려웠음.
- 백엔드도 Django 1.x 버전으로 매우 옛날 버전을 쓰고 US 지역에 배포되어 있어서 속도가 느렸음.
- How
- 새로운 Admin인 React 기반으로 프론트 개발
- 새로 필요한 통계 지표를 계산해서 내려주도록 백엔드(DRF, Django ORM) 개발
- DRF로 개발한 API는 한국 EKS에 배포해서 속도도 개선
- 기술스택: React, Django ORM, DRF
티맥스와플
2020.1 - 2021.4 (경기도 성남)
Tmax WAPL(티맥스와플)은 메신저, 화상회의, 메일, 드라이브, 캘린더, 노트 등 업무 관리가 한 번에 가능한 통합 협업 플랫폼
- 캘린더와 노트를 담당하는 팀에서 1년 4개월간 일했습니다. 20년도 9월부터 팀장 직책을 맡았고 캘린더의 개발에 직접적인 관여를 하며 노트는 관리의 역할만 했습니다.
상세 작업
- 20.9~21.4
- 캘린더 프론트엔드 위주로 개발 담당
- 캘린더, 노트 관리하고 데이터베이스 및 인프라 설계
- 21.2 와플 출시 (https://wapl.ai)
- 기술스택: React, Tibero(Tmax Database)
- 20.3~20.8
- 자사 프론트엔드 프레임워크를 통해 캘린더 개발 → 이후 React로 마이그레이션 완료
- 기술스택: TOP(Tmax frontend tool), React
- 20.1~20.2
- 짧은 기간이지만 TF로 AI (음성인식, 챗봇) 공부
대학교
13학번 유니스트 컴퓨터공학 전공 / 경영 부전공
(경영학부로 입학 후 군대에서 개발 접한 후 컴공으로 전과)
동아리 활동
- UNIST Journal (2년)
- 영자 신문 동아리 기자 활동
- 탁구 동아리 (3년)
- 테니스 동아리 (2년)
외부 활동
- LG CNS 중학생 IT봉사활동 (2회 진행)
- 서울 중학교에서 아두이노로 자동차 로봇 교육
- 아프리카 가나 IT봉사활동 (2016년에 3주간)
- 고등학교에서 Python으로 웹사이트 만들어서 GAE(Google App Engine)에 배포하는 것까지 교육
- 5개 과기원 체육대회 스타디움 참여
- 17, 18, 19년도 탁구 종목 참여
- 교내 스타트업 대회 참여해서 1등 → 5개 과기원 스타트업 대회 참여 (공동 창업경진대회 JETS)
- 아이디어는 소액으로 투자 가능한 로보어드바이저
- 공동 창업경진대회 JETS 참가해서 발표
- 스타트업 활동은 CTO로 6개월 ~ 12개월 했음
- Tensorflow로 예측 모델 만들고 그 결과를 Python library wx 사용해서 GUI로 그래프로 보여주는 작업함
- 크래프트테크놀로지스에서 학교 다니며 인턴 6개월
- 주식 정보 크롤링 후 데이터 정제해서 저장
- LSTM 이용해서 주가 예측 후 포트폴리오 이론 적용
- ETF로 구성된 포트폴리오 결과물을 은행 2곳에 전달 (3개월마다 리밸런싱)