소개

dooyeoung.ryu@gmail.com
고객의 실질적 문제를 발견하고 빠른 실행력으로 해결하여 구체적인 성과를 만들어내는 데 강점을 가진 백엔드 엔지니어입니다. 컨설팅 상품으로 판매되던 개인별 리포트 분석 기능을 제품화하여 2개월 만에 성공적으로 출시했습니다. R 기반 분석 로직을 Python으로 완전히 재구현하고, 등급형부터 주관식까지 분석 범위를 대폭 확장했습니다. 분석 결과 검증을 위한 내부 도구까지 개발하여 QA 효율을 크게 향상시켰습니다.
또한 30,000개 위계 데이터를 다루는 시스템을 최적화하여 조회 속도를 30초에서 0.5초로 단축하고, AWS 인프라 효율화를 통해 연간 5,000만 원 비용 절감을 달성했습니다. 목표 엑셀 업로드 속도를 17초에서 3초로 줄이는 등 대량 데이터 처리 성능을 안정적으로 개선한 경험이 있습니다.
장애 상황에서는 원인을 집요하게 파고들어 해결하며, 아이디어가 떠오르면 빠르게 PoC로 검증하여 팀과 함께 더 나은 방향으로 발전시킵니다. 이러한 실행력과 태도로 동료들로부터 "팀의 사기와 추진력을 높인다"는 평가를 받았습니다.
모든 문제를 기술로만 해결하려 하지 않고 운영 정책 개선을 동료들과 적극적으로 논의하여 문제 해결에 합리적인 방법을 찾으려 합니다. 투명하고 따뜻한 소통을 통해 동료들과 함께 시너지를 내는 것을 중요하게 생각합니다. 함께 일하기 좋은 동료로서, 새로운 기술 스택과 아키텍처 패턴을 적극적으로 학습하며 기술적 도전을 통한 문제 해결에 집중합니다.
기술 역량
프로젝트
Java/Spring 생태계 실무 경험이 부족하다 생각하여 실무에서 다뤄보지 않았던 비즈니스 로직 설계와 아키텍처에 대한 이해를 높이기위해 시스템을 직접 설계하고자 시작한 프로젝트입니다.
의료 예약 관리 도메인을 선택하여 프로젝트를 진행했습니다.
- 헥사고날 아키텍처로 도메인 로직과 인프라 계층을 명확히 분리
- CQRS 패턴과 Redis 캐싱을 통한 읽기/쓰기 성능 최적화
- 의료진 스케줄과 예약 간 복잡한 제약 조건을 이벤트 소싱 패턴으로 처리
- JWT 기반 인증과 역할별 접근 제어로 보안 설계 구현
Spring Boot 기반의 확장 가능한 아키텍처 설계를 경험했습니다. CQRS의 장점과 읽기/쓰기 모델 불일치 문제를 고민할수 있었으며 이벤트 소싱 구조에서 데이터 복원 과정의 최적화 방향을 탐구할 수 있었습니다.
복잡한 도메인일수록 초반의 아키텍처 설계의 중요성이 크다는 것을 새삼 깨달았습니다. 대규모 서비스 개발시 위 경험을 바탕으로 확장 가능하고 안정적인 시스템을 설계할 수 있는 기반을 마련했습니다.
컨설팅 상품으로 제공되던 개인별 분석 리포트 상품을 제품 기능으로 전환해야 했습니다. 데이터팀이 작성 관리하던 기능이며 오랜 개발 히스토리와 암묵적 정책이 포함된 R 코드를 Python으로 변환하는 과정에서 분석 로직의 정확성 보장과 다양한 리뷰 데이터 유형(등급형, 다중선택, 주관식)에 대응하는 확장 가능한 구조 설계가 필요했습니다.
복잡한 분석 로직을 체계적으로 재구현하고 확장 가능한 시스템을 구축했습니다.
- 데이터팀과 밀착 협업하여 분석에 사용되는 데이터, 분석 과정, 분석 결과 데이터를 확인하는 시간을 가졌습니다.
- R 코드와 SQL 쿼리를 기능 단위로 분석하여 Python 기반으로 완전 재구현
- 등급형 분석에서 시작하여 다중선택, 주관식까지 분석 기능의 범위를 단계적으로 확장
- RDS 기반 분석 대기열 구조 설계로 대량 분석 진행에 대한 리소스 부담 최소화
- 분석 결과 정적파일 생성 및 S3 저장 시스템으로 데이터 불변성 확보
- 분석 과정 데이터를 시각적으로 확인할 수 있는 내부 검증 도구를 개발하여 QA팀과 동료들에게 제공
2개월 만에 MVP를 성공적으로 출시하여 고객에게 즉시 가치를 제공했으며, 이후 4개월간 약속된 기능을 지속적으로 확장했습니다. 대량 데이터 처리 경험을 통해 확장 가능한 분석 시스템 구축 역량을 확보했습니다. 검증 도구를 통해 분석 중간 데이터를 확인하며 다양한 케이스를 테스트하며 데이터 정합성을 높였습니다.
레거시 시스템의 핵심 로직을 새로운 기술로 마이그레이션할 때는 단순 번역이 아닌 비즈니스 로직의 본질적 이해가 중요함을 베웠습니다. 특히 분석 결과의 정확성이 고객의 인사 평가에 직결되는 상황에서 체계적인 검증 프로세스와 내부 도구 개발의 중요성을 배웠습니다.
AWS 인프라에서 파편화되어 운영되던 ECS 서비스 구성으로 비효율적인 리소스 사용과 높은 운영 비용 문제를 발견했습니다. 각각 독립적으로 운영되던 서비스들과 분산된 비동기 처리 워커들 구성으로 인프라 관리 복잡도가 증가하고 불필요한 비용이 지속적으로 발생하고 있었습니다.
이러한 문제를 해결하기 위해 체계적인 인프라 통폐합 작업을 시작했습니다.
- 파편화된 ECS 서비스들을 도메인별로 분석 및 그룹핑
- 관련성이 높은 서비스들을 하나의 통합된 서비스로 재구성
- celery 워커를 새롭게 구성하여 기존 분산된 비동기 서비스들을 통폐합
- 중복되는 인프라 리소스 제거 및 전체 아키텍처 최적화
- GithubAction을 사용하여 주말, 퇴근시간 이후에는 동작 서비스 수를 조절하여 비용을 절약을 추가로 진행
인프라 개선 작업의 결과로 상당한 비용 절감 효과를 달성했습니다. 작업 완료 시점을 기준으로 월 약 473만원을 절감했으며, 이를 연간으로 환산하면 약 5,642만원에 해당하는 비용 절감 효과를 얻었습니다.
비동기 처리 시스템의 통합을 통해 인프라 아키텍처 최적화 방법을 배웠고 엔지니어로서 사용중인 인프라 구성에 관심을 갖고 구성에 비해 비용은 어떻게 청구되고 효율화 방법은 없을지 관심을 갖는것이 중요하다는 것을 배웠습니다
제품이 발전하면서 대규모 조직의 고객이 새롭게 유입되었고 목표 제품 관리 시스템 전반에 걸쳐 사용성을 저해하는 문제들이 발견되었습니다. 대량의 데이터를 엑셀로 업로드할 때 심각한 성능 저하가 발생했고, 승인 기능을 구현할때 승인 정책이 복잡하여 내부에서 소통시 커뮤니케이션 비용이 높았습니다. 또한, 사용자가 목표를 확인하고 업데이트하는 과정이 번거로워 접근성 개선에 대한 VOC가 자주 접수되었습니다.
제품의 완성도를 높이기 위해 여러 핵심 기능을 체계적으로 개선했습니다.
- 승인권자 미리보기 내부 도구를 개발하여 복잡한 정책 논의와 테스트 과정을 효율화
- 대규모 조직 대응 작업으로 전체 목표(30,000개) 조회속도 30초에서 0.5초로 개선
- 엑셀 업로드 기능의 N+1 쿼리를 제거하고 코드를 리팩토링하여 데이터 처리 속도 개선 (17초 → 3초)
- 사용자가 슬랙에서 바로 목표를 체크인할 수 있는 기능을 구현하고, 모바일 간편 체크인 기능을 추가하여 사용 편의성 개선
- SQS와 Celery Beat를 도입하여 안정적인 스케줄 처리 기반을 마련
개선 작업을 통해 목표 제품 관리 시스템의 성능, 테스트 효율성, 사용자 접근성을 모두 크게 향상시켰습니다. 사용자는 대량의 목표를 빠르고 편리하게 관리할 수 있게 되었습니다.
제품 성장에 따른 문제 스케일 변화에 맞는 선제적 대응의 중요성을 배웠습니다. 내부 도구 개발이 팀 전체의 생산성과 최종 제품의 품질에 도움이 된다는것을 체감했으며 작은 접근성 개선이 사용자 만족도를 크게 높일 수 있다는 점을 깨달았습니다.
레몬베이스 목표 제품 사용 과정에서 지속적으로 발생하는 사용자 VOC와 세일즈 미팅 후기를 통해 반복적으로 언급되는 내용이 있었습니다. 목표 생성부터 체크인까지의 전체 사용자 여정에서 비효율적인 부분이 있었고 QA 과정에서 데이터 준비를 위한 수작업으로 생산성 저하가 지속되고 있었습니다. 또한 사용자들이 자주 요청하는 기능들이 제품 로드맵 우선순위에서 멀어지고 있어 제품 사용 개선 향상을 위한 작업이 필요하다 생각했습니다.
아래 아이디어들을 구현하고 실험한 뒤 구성원들에게 공유하였습니다.
- 목표 생성 시 리스트 형태가 아닌 조직도 기반 담당자/조직 선택 기능을 PoC 구현
- 삭제된 목표 복구, 목표 이동 등 반복 접수되었던 VOC를 반영한 PoC 구현
- 목표 체크인 시 임시저장, 파일 첨부 등 실사용자가 필요로하는 기능 PoC 구현
- React Flow를 활용한 전체 목표 Tree View PoC 구현
- 목표 체크인 현황 파악을 위한 대시보드 PoC 구현
- 테스트 환경 구성을 위한 구성원, 조직 대량 생성 기능 구현
- 목표 정보 상세보기 drawer 창 넓게/좁게 보기 기능 아이디어 제안 및 PoC 구현
- 목표 체크인 내역에 대한 반응하기 기능 PoC 구현
PoC 중 대부분이 정식 제품에 성공적으로 반영되었습니다. 특히 대시보드 기능은 초기 체크인 현황에서 시작하여 승인 현황, 목표 등록 현황까지 확장되는 등 제품의 핵심 기능으로 발전했습니다. 내부 도구로 개발한 대량 생성 기능은 팀 전체의 QA 효율성을 크게 향상시켰으며, 작은 UX 개선 아이디어들도 사용자 만족도 향상에 기여했습니다.
텍스트로 아이디어를 제안하고 공유하는 것보다 빠른 프로토타이핑과 적극적인 제안 문화가 제품 개선에 얼마나 중요한 역할을 하는지 체감했습니다. 또한 개발자가 단순히 주어진 요구사항만 구현하는 것이 아니라, 능동적으로 문제를 발견하고 해결책을 제시할 때 팀 전체의 혁신 문화가 조성되고 최종적으로 더 나은 제품을 만들 수 있다는 점을 깨달았습니다.
도도포인트 서비스 운영 중 약 1년 7개월에 걸쳐 여러 과제들이 진행되었습니다. 초기에는 API 서버 개선을 진행했고 이 과정에서 개발 효율성 향상을 위한 QA 환경 구축이 필요했습니다. 이어서 사용자 경험 개선을 위한 실시간 푸시 알림 기능과 개인정보보호법 개정에 따른 법적 요구사항 대응이 요구되었습니다. 마지막으로 도도포인트가 야놀자에 매각되면서 전체 서비스 도메인 교체라는 대규모 인프라 변경 작업이 필요한 상황이었습니다.
- Poetry 패키지 관리 적용 및 레포지토리 패턴을 도입한 API 서버 개선 작업 진행
- 가상 사용자 생성과 매장 데이터 구성이 가능한 QA 백오피스 개발로 개발 효율성 및 QA 환경 개선
- 실시간 푸시 알림 시스템 구현으로 사용자 경험 개선
- 개인정보보호법 대응을 위한 제3자 동의 관리 시스템 및 백오피스 관리 기능 구현
- 제품 매각에 따른 안전한 도메인 교체를 위해 ELB 이중화 구성과 전체 인프라 영향도 분석 실시
단계적 개선을 통해 API 서버의 코드 품질을 높이고 향후 기능 확장을 위한 견고한 기반을 마련했습니다.
QA 백오피스 개발로 개발팀의 테스트 데이터 준비 시간을 대폭 단축했고,
법적 요구사항 변경에 즉시 대응할 수 있는 유연한 개인정보 관리 시스템을 구축했습니다.
최종적으로 야놀자 매각 과정에서 서비스 중단 없이 안정적인 도메인 전환을 완료했습니다.
단계적 개선 과정을 통해 장기적 관점에서의 시스템 발전 계획 수립의 중요성을 배웠습니다.
특히 API 서버 개선부터 시작하여 QA 환경, 사용자 기능, 법적 대응, 인프라 변경까지 각 단계가 다음 단계의 기반이 되는 구조적 접근법을 체득했습니다.
제품 매각이라는 큰 변화 속에서도 서비스 안정성을 유지하면서 도메인 전환을 성공적으로 완료한 경험을 통해, 변화가 많은 환경에서도
체계적인 준비와 단계적 접근이 얼마나 중요한지 깨달았습니다.
여러 커머스 플랫폼(Cafe24, Shopify)에서 제품을 판매하는 환경이었습니다. 각 플랫폼별로 서로 다른 주문 수집 방식과 데이터 형태로 인해 통합 관리가 어려웠고, 광고비 대비 매출 분석을 위한 데이터가 분산되어 있어 효과적인 의사결정이 힘든 상황이었습니다. 또한 협력사와의 주문 정보 공유 과정이 수작업으로 진행되었기에 멀티채널 커머스 운영의 복잡성을 해결할 수 있는 통합 시스템이 필요했습니다.
- 서로 다른 커머스 플랫폼의 API를 파악및 크롤링 모듈을 작성하여 플랫폼별 주문 데이터를 표준화된 형태로 수집하여 데이터 관리
- Facebook 광고비와 플랫폼별 매출 데이터를 활용하여 ROI 분석이 가능한 대시보드 개발
- SKU 단위로 여러 플랫폼의 주문을 자동으로 취합하는 ERP 시스템 구현
멀티채널 커머스 운영의 복잡성을 해결하여 여러 플랫폼의 주문을 통합적으로 관리할 수 있게 되었습니다. 광고비 대비 매출 분석을 통해 데이터 기반의 마케팅 의사결정이 가능해졌으며, SKU별 주문 통합 관리로 재고 정확성과 협력사와의 정보 공유 효율성을 크게 향상시켰습니다.
외부 API의 정책 변화나 데이터 구조 변경에 유연하게 대응할 수 있는 확장 가능한 아키텍처 설계가 얼마나 중요한지 깨달았습니다. 재고, 매출, 비용 관리 등 이해관계자들과 공유되어야 하는 데이터 관리를 효율적으로 처리하기 위한 자동화가 매우 필요한 영역이라는 것을 배웠습니다.
클라이언트에서 영화 포스터를 표현할 때 어울리는 배경색 표현이 필요하였으며 포스터의 대표 색상을 추출이 필요했습니다. 또한 영화 트레일러 영상을 그대로 노출할 수는 없어고 주요 구간을 찾아 편집하는 기능이 필요햇습니다.
- k-means 클러스터링 알고리즘을 활용하여 포스터에서 대표 색상을 추출하는 모듈을 개발
- 추출된 색상 데이터를 바탕으로 클라이언트 UI에서 포스터와 조화로운 배경색을 자동으로 선택할 수 있도록 데이터셋 구성
- YOLOv3 객체 탐지 모델을 활용하여 트레일러 영상에서 특정 물체나 인물이 등장하는 구간 탐지 모듈 구현하고 자동으로 편집하여 데이터넷 구성
영화 포스터의 대표 색상 데이터셋을 통해 클라이언트 UI에서 포스터와 조화로운 배경색이 적용되어 일관성 있고 자연스러운 화면 구성이 가능해졌습니다. YOLOv3 기반 영상 분석을 통해 트레일러에서 핵심 인물이나 중요 오브젝트가 등장하는 구간을 자동으로 탐지하고 편집하여 구성한 데이터넷으로 콘텐츠 제작팀의 업무 효율성을 향상시켰습니다.
k-means 클러스터링을 통한 색상 추출 과정에서 클러스터 수 결정 기준을 정하는것이 매우 어려움을 인정하고 작업자의 확인을 거치는 과정으로 작업 방향을 결정했습니다. YOLOv3를 활용한 영상 분석에서는 등장 인물을 구분하는것을 적용하기에는 시간이 부족하여 사람이 등작하는 구간정보를 안내하고 그 구간을 편집하여 제공하는 방식으로 작업하였고 업무 효율화을 빠르게 향상시켰습니다.
색조 화장품을 직관적으로 찾을 수 있는 색상 기반 검색 모듈이 필요했습니다. 백엔드 개발자들이 쉽게 활용할 수 있는 상품 색상 데이터셋 구축과 신규 이미지 추가 시 자동으로 색상을 분석하여 데이터베이스를 업데이트하는 파이프라인이 필요했습니다.
- Face-alignment와 OpenCV를 활용하여 얼굴의 입술, 눈꺼풀, 볼 등 주요 부위를 정확하게 인식하는 모듈을 개발
- 인식된 얼굴 부위에서 k-means 클러스터링을 통해 부위별 대표 색상을 추출하
- 색상 검색 정확도 향상을 위해 HSL color space로 변환하고 색상 데이터셋 구성
- 신규 이미지 추가 시 자동으로 색상 분석하여 데이터를 업데이트하는 파이프라인을 구축
개발팀이 색상 기반으로 화장품을 직관적으로 검색할 수 있는 검색 기능을 구현하였습니다. HSL color space 활용으로 기존 RGB 기반 시스템보다 훨씬 정확하고 사용자 친화적인 검색 결과를 제공할 수 있게 되었습니다.
모델이 추출한 원시 데이터를 비즈니스 요구사항에 맞게 의미 있는 정보로 가공하고, 이를 자동화된 파이프라인으로 만드는 전체 과정을 경험하여 데이터 엔지니어링 역량을 강화할 수 있었습니다.
학습 경험
- 대규모 고객 환경과 유사한 테스트 데이터 생성을 위해 조직, 구성원을 대량으로 생성할 수 있는 내부 QA 도구 개발
- 약 3,000명, 30,000개 목표 데이터를 생성하여 실제 대규모 환경 시뮬레이션 구성
- 목표 조회 요청부터 데이터 조회, 응답 반환까지 전체 프로세스를 구간별로 나누어 병목 지점 측정 및 분석
- 프로파일링 도구와 디버그 모드를 활용하여 성능 저하 구간을 체계적으로 식별하고 개선 우선순위 설정
- N+1 문제 제거, 데이터 재활용, 목표 목록에 사용하지 않는 필드 제거 등 리팩토링을 통해 3s로 개선
- 위계 데이터 처리용 anytree 패키지가 주요 병목임을 확인하고 근본적 해결을 위해 패키지 제거 및 최적화된 유틸 코드 새로 설계
트리 구조상 페이지네이션이 어렵고 하위 노드 수가 많다면 레이지 로딩 도입도 근본적인 문제 해결이 어렵다는것을 작업전에 검토하였기에 제한된 상황속에서 해결책을 찾았습니다.
또한 개발 리소스 사이에서 현실적인 트레이드오프를 고려해 결정하였습니다. 동료들과 깊은 논의를 통해, 현재의 최적화로 고객의 불편을 먼저 해소하고 이후 근본적인 구조 변경을 계획하는 방향으로 합의할 수 있었습니다.
편의성을 위해 도입한 라이브러리가 오히려 병목이 될 수 있음을 배웠습니다. 이 경험을 통해 향후 더 복잡한 상품 데이터나 주문 데이터를 처리하는 환경에서도 체계적인 성능 분석과 단계적 최적화 접근법을 적용할 수 있는 방법론을 체득했습니다.
더불어 30,000개라는 데이터를 한번에 처리하는 방향은 추가 개선이 필요하다 생각하며 동료들과 논의를 통해 대규모 조직 사용자에 맞는 근본적인 제품 개선이 필요하다는것을 알게되었습니다.
- 솔루션 검토를 위해 분석결과 정적파일 생성 서버 추가 vs 기존 구조 활용 방안 비교 분석
- FE의 vike 패키지를 활용하여 최소한의 작업으로 리포트 정적화 구현
- 새로운 서버 구성 없이 빌드 전담 비동기 워커 추가
- 백엔드 비동기 워커에서 서브프로세스 호출을 통한 정적파일 생성 및 S3 업로드 구조 구축
- S3 버킷 분리(비공개/공개), CloudFront 캐시 및 Route 53 레코드 설정
트레이드오프의 명확한 인식과 개선 계획 수립을 학습했습니다. 도커 이미지 크기 증가라는 단점을 인식하되, 향후 도커 이미지 분리로 개선할 계획을 미리 세워두는 전략적 사고를 체험했습니다.
팀 협업을 통한 최적 솔루션 도출의 가치를 깨달았습니다. 초기 서버 증설 방향에서 팀원들과의 논의를 통해 기존 기술 스택을 활용한 효율적 해결책을 찾아낸 경험이 협업의 중요성을 보여주었습니다.
- 크루 아이디어를 바탕으로 프로토타입 구현 및 검증
- Slack 커맨드 명령어를 구성하고 체크인을 위한 다이얼로그 화면 처리를 백엔드에서 구현
- PoC 검증 후 프로덕션 환경에 정식 기능 출시
- 슬랙 SDK 사용법 및 장애 대응 가이드 작성
기능의 사용자 범위가 제한적일 때는 개발 및 운영 비용 대비 효과를 신중히 검토해야 한다는 교훈을 얻었습니다.