미리보기
기본 정보

- 기여할 수 있는 일이 많은 환경을 좋아합니다. - 다른 동료들의 부족함을 채워 팀의 완성도를 높입니다. - 코드 리뷰를 통해 다른 사람이 작성한 코드여도 제가 작성한 코드인것처럼 이해하며 익숙해지려고 노력합니다. - 이해가 안되는 부분이 있을때 답을 못찾을수는 있어도, 답을 추론할 수 있는 근거는 찾아냅니다. - 제가 없어도 문제가 발생하지 않는것을 목표로 하며 문서화를 진행합니다. - 코드를 작성하지 않은 개발자가 봤을때도 한 눈에 알아 볼 수 있는 코드를 작성하려고 노력합니다. - Strong Opinions, Weakly Held 방식으로 대화하도록 노력합니다. - 좋은 제품을 만들기 위해 노력하며 기획자를 포함한 타부서 인원과 협업하는것을 즐깁니다. - 새로운 기술을 배우는데 거부감이 없습니다.
기술 스택
NestJS, Node.js, MongoDB, MySQL, TypeScript, rabbitmq, Redis, TypeORM, Mongoose, github-actions, aws-ec2, aws-s3, Lambda
경력
젠테
사원 | 개발팀 | 재직 중
2022.10. ~ 재직 중 (2년 9개월)
젠테의 자체 ERP (Jente Foret) 신규 기능 개발 및 유지보수
Blocking되는 작업들은 RabbitMQ사용하여 비동기로 실행되도록 처리
스마트스토어와 같은 외부 채널 API 사용할때 상품 업데이트 경우 한 작업단위당 수만번 이상의 요청을 보내야해서 페이지 blocking → non blocking으로 실행되도록 설계
외부 채널 주문을 ERP에 동기화하는 작업은 단순히 외부 api 사용하여 DB에 저장하는것이므로, k8s ingress를 설정하지 않아도 가능하게 할 목적으로 cli 이용하여 Airflow로 실행되도록 개발
MongoDB에서 많은 양의 데이터를 cursor로 조회하여 stream 처리 → 부하 감소
엑셀 다운로드시 수십만개 이상의 데이터를 담아야하는데 이때 DB에서 한 번에 조회시 서버 메모리 사용량 급증 → chunk단위로 조회하여 stream으로 가공하고 엑셀 파일 생성하도록 수정
session, redis 이용하여 admin이 user 정보 변경시 모든 기기에서 로그아웃
express-session 라이브러리 사용 → 세션이 생성될때 readonly 처리되어 수정이 불가능하고, key가 랜덤값으로 생성되어 특정 user에 대한 세션 정보가 어떤것인지 알 수 없어 redis에 별도로 유저 정보와 세션키값을 저장하여 접속 제어
100여개 이상의 부티크 API 연동 개발 및 유지보수
부티크와 지속적으로 트러블 이슈 관련 협업 진행
다양한 포맷을 가진 데이터를 자사 포맷에 맞게 가공 (shopify, cloudstore, atelier, etc.)
공통 플랫폼을 사용하는 부티크 API에 대해 공통 코드를 작성하여 재사용
추상 메소드를 사용하여 필수 메소드 개발 용이
외부채널 연동 서버 개발 (스마트스토어, Poizon, Shopify)
기술스택: NestJS, MongoDB, Mongoose, CQRS, Redis, RabbitMQ, Docker, K8s, Airflow, RxJS
스마트스토어 application 계정별로 rate limit이 달라 scale out이 제한적 → k8s deployments를 사용하다가 statefulset으로 변경하여 scale out시 rate limit이 여유로운 application 계정을 사용하도록 개발
hexagonal architecture를 사용하여 각 layer가 의존성을 갖지 않도록 설계
typescript interface로 class 추상화
도메인 객체 적용
데이터를 캡슐화하여 의도하지않은 데이터 수정 방지
비즈니스로직을 도메인의 행동으로 정의
인증 모듈 생성하여 API 인증 코드를 중복해서 작성하지 않아도 되도록 개발
부티크 파트너가 사용하는 B2B ERP 신규 기능 개발 및 유지보수
Express.js, NestJS, Mongoose, TypeORM, CQRS, 3-tier architecture, Docker, K8s
Client Vue.js 개발
Node.js 및 NPM 패키지 버전 업그레이드, 통일
Node.js 12, 16, 18 → 20 업그레이드
ChangeLog, Release, peerDependencies 등 참고하여 호환성 맞는 버전 찾아 진행
Shopify 스토어를 GraphQL API를 사용하여 젠테 포레와 연동 - 도메인 관련
Shopify 주문 데이터와 젠테의 주문 데이터 구조가 달라 젠테 포레에서 사용할 수 있는 Unique key가 없는 문제 발생 → 중간 테이블을 생성하여 직접 정의한 규칙으로 Unique Key를 생성하여 젠테 포레에 업데이트
legacy 부티크 상품 연동 어플리케이션 리팩토링
RxJS 기반 NestJS 어플리케이션으로 리팩토링
모든 코드를 RxJS로 처리하여 Reactive Programming 장점 극대화 → 비동기 처리 용이, 메모리 누수 방지, 상품 단위로 데이터 처리 용이
모든 연동 관련 코드의 반환타입이 Observable
개발팀 내 다양한 주제로 세션 진행
Node.js 오픈소스 기여
Cursor와 MCP 사용
포트폴리오
교육
엘리스
사설 교육 | SW트랙 2기
2022.04. ~ 2022.07. | 졸업
아주대학교
대학교(학사) | 응용화학생명공학과
2015.03. ~ 2020.08. | 졸업
대외활동
엘리스 코더랜드 온라인 질의응답 코치
엘리스
2022
2022년 8월 한달동안 엘리스 코더랜드 온라인 질의응답 코치를 맡았습니다. 엘리스는 부트캠프 외에 많은 기업에서 임직원 교육 목적으로 코딩 교육을 진행하는데, 엘리스를 사용하는 모든 사용자들이 질문한 내용을 보고 답변 해주었습니다. 한달이라는 짧은 시간동안 진행한 것이였지만, 코딩 입문자 입장에서는 변수가 어떤 파라미터로 들어가고, 어떤 인자로 되어 어떻게 작동하는지 자세하게 알려줘야 이해하기 쉽다는 것을 깨달았습니다.
엘리스스쿨 코더랜드 보조강사
엘리스
2022
단기 이벤트성 교육이기때문에 3번 진행
초등학교 저학년을 대상으로 한 블록코딩 교육 보조강사로 활동했습니다.
링비트카, 앱인벤터로 교육을 진행했으며, 중고등학생때 스크래치를 배운 경험이 있어 아이들이 흥미를 잃지 않도록 지도했습니다.
자격증
SQLD
합격 | 한국데이터산업진흥원
2022.06.
자기소개
기여할 수 있는 일이 많은 환경을 좋아합니다.
다른 동료들의 부족함을 채워 팀의 완성도를 높입니다.
다양한 관점에서 바라보고, 각 관점마다 근거를 가지고 최선의 결과를 도출하려고 노력합니다.
Slack, Notion 등의 커뮤니케이션 툴에 익숙합니다.
코드 리뷰를 통해 다른 사람이 작성한 코드여도 제가 작성한 코드인것처럼 이해하며 익숙해지려고 노력합니다.
좋은 제품을 만들기 위해 노력하며 기획자를 포함한 타부서 인원과 협업하는것을 즐깁니다.
제가 없어도 문제가 발생하지 않는것을 목표로 하며 문서화를 진행합니다.
TypeScript, NestJS 환경에 익숙합니다.
NestJS로 OOP에, RxJS로 FP에 익숙해졌습니다.
개인적으로 AI에 관심이 많으며, 이것을 도입할 수 있는 환경을 원합니다.