11번가
오늘의픽 개발
- 문제파악
RDBMS(MySql) 와 캐시(Redis) 동기화 실패하였습니다.
- 문제해결
- Lettuce의 CommandTimeoutException 문제: 먼저 Lettuce 라이브러리를 사용할 때 발생하는 CommandTimeoutException 문제를 해결하려고 노력했습니다. 이 문제의 원인을 정확히 파악하지 못한 상태에서 Redis 설정 변경 테스트를 시도했으나 문제가 해결되지 않았습니다.
- Spring Retry 적용: 동기화 실패가 계속해서 발생하여 문제를 해결하기 위해 Spring Retry 라이브러리를 적용하였습니다. RetryTemplate을 활용하여 동기화 작업을 시도하고, 실패할 경우 지정된 횟수나 시간 내에 재시도하도록 설정하였습니다.
- 결과 및 성과
Spring Retry 로직을 적용한 이후에는 동기화 실패 시 자동으로 재시도되도록 변경하였습니다. 동기화 실패가 발생하더라도 Spring Retry에 의해 정해진 조건 내에서 재시도되므로 수동으로 처리하지 않아도 됩니다.
포커스클릭, 브랜딩광고 광고관리 정렬기능 추가
- 문제파악
광고관리 (Mysql+Druid) 정렬기능 및 페이징 문제 있었습니다.
- 문제해결
각 광고주별 전체 데이터 가져온후 자바 Comparator API 데이터 정렬
- 전체 데이터 가져오기
- Comparator API를 이용한 데이터 정렬
- 페이징 적용
- 결과 및 성과
위의 해결 과정을 통해 정렬과 페이징 기능이 제대로 동작하게 되었습니다. 각 광고주별로 전체 데이터를 가져온 후, 자바 Comparator API를 활용하여 필요한 정렬 기준에 따라 데이터를 정렬하고 페이징 처리하였습니다. 이를 통해 사용자는 원하는 순서로 데이터를 볼 수 있게 되었고, 불필요한 데이터의 로딩을 줄이면서 효율적인 데이터 관리가 가능해졌습니다.
리테일상품 변경 리테일광고 자동 연동불가
- 문제파악
리테일상품이 변경되었을 때 해당 상품에 등록된 리테일광고가 자동으로 연동되지 않는 문제가 발생하였습니다.
- 문제해결
Kafka 기반 이벤트 드리븐 아키텍처 적용
- Kafka 기반 이벤트 드리븐 아키텍처 적용
- 이벤트 처리 로직 개발
- 광고 및 상품 업데이트 처리
- 후속조치
- 연동 불가 처리
- 그룹 광고 상태 업데이트
- 리뷰 심사 상태 처리
- 오늘의PICK 레디스 이벤트 전송
- 결과 및 성과
리테일상품 변경으로 인한 자동 연동불가 이슈를 해결하였습니다. Kafka 기반의 이벤트 드리븐 아키텍처를 도입하여 실시간으로 상품 변경 사항을 감지하고 광고와의 일관성을 유지할 수 있게 되었습니다
광고데이터 운영
- 문제파악
- 드루이드 서버 장애 발생: 드루이드 서버 다운과 관련된 문제가 빈번히 발생하였습니다. 특히 드루이드 IO 발생 시 타임아웃이 2분 이상으로 길어지는 문제, 특정 서버의 CPU 부하, 용량 부족 등의 문제가 발생했습니다.
- 빈번한 장애 및 조회 문제: 드루이드로 인해 빈번한 장애와 조회에 문제가 발생하여 서비스 안정성과 성능에 문제가 있었습니다.
- 문제해결
- 모니터링 및 로그 분석: 서버 로그와 모니터링 툴 모니터링을 진행하여 문제 발생 원인을 파악하였습니다.
- 드루이드 성능 분석: 드루이드 콘솔을 통해 서버 메모리와 CPU 사용량, 데이터 사이즈 등을 확인하여 성능 문제의 원인을 파악하였습니다.
- 성능 최적화: 드루이드 retention을 적용하여 광고 보고서 조회 제한을 2년으로 설정하였습니다. 또한 드루이드 클러스터의 구성을 변경하고 성능 최적화를 진행하였습니다.
- 다양한 조치: 드루이드 입수 미들매니저 메모리 설정, imply 라이선스 도입 검토, 드루이드 엔지니어와의 협력 등 다양한 조치를 통해 문제를 해결하였습니다.
- 후속조치
- 모니터링 강화: 드루이드 historical 노드의 장애를 모니터링하고 원인을 파악하기 위해 모니터링을 강화하였습니다.
- 클러스터 관리 및 모니터링: 드루이드 클러스터의 hot, default, cold tier를 관리하고 모니터링하며 성능을 유지하였습니다.
- 작업 실패 대응: 광고 배치 작업의 실패 시 자동 retry 기능을 도입하여 수동 처리 없이 자동으로 재시도하도록 설정하였습니다.
- 결과 및 성과
- 광고 데이터 운영에서 발생한 다양한 문제를 해결하고, 서비스의 안정성과 성능을 개선하였습니다.
SKP DMP S3 데이터 Hive 적재 대응 및 시스템 구현
- 문제파악
- 대용량 데이터 처리 문제: 대용량의 SKP DMP S3 데이터를 한 줄씩 읽어 Hive 테이블에 적재하려는 시도로 서버 OOM 문제와 수행시간 문제가 발생합니다.
- 문제해결
- 파일 복사 및 저장: SKP DMP의 S3 데이터가 raw 데이터이므로 별도의 가공이 필요하지 않다면 파일 자체를 내부 on- premise 환경으로 복사하여 저장하고, 이후 Hive 테이블에 적재합니다.
- 데이터 흐름 구성: SKP DMP (S3)에서 데이터를 가져와 광고 배치 서버로 복사하고, 광고 DI 인터페이스 서버를 거쳐 DIC(Digital Identity Center)로 데이터를 전송합니다.
- 후속조치
- Outbound 정책 대응: 배치가 적용된 후 사내 서버의 Outbound 정책에 따라 AWS S3 호출에 프록시 설정을 구현하였습니다.
11번가 홈탭 - 개인화된 스토어 마케팅
- 문제파악
홈탭 노출 응답 속도 느릴 경우 11번가 홈탭 서비스 장애 영향을 줄수 있었습니다.
- 문제해결
- 실시간 데이터 캐싱: 실시간으로 변하지 않는 데이터의 경우 적절한 캐시를 도입하여 성능 향상을 도모했습니다.
- 비동기 처리와 스레드 풀: 여러 데이터 조합이 필요한 경우 ThreadPoolTaskExecutor를 활용한 비동기 처리를 도입하여 성능을 최적화했습니다.
- 데이터 조회 최적화: 데이터 조회 과정에서 발생하는 병목 지점을 확인하고, 적절한 테이블 설계와 인덱스 설정을 통해 데이터 조회 성능을 개선했습니다.
- 후속조치
- API 스위치 모드 추가: 노출 장애를 방지하기 위해 노출을 조절할 수 있는 API 스위치 모드를 추가하여 필요한 경우에 빠르게 조정하도록 하였습니다.
- 결과 및 성과
- 개인화된 스토어 마케팅 서비스를 성공적으로 구축하고, 실시간 데이터 캐싱, 비동기 처리, 데이터 조회 최적화를 통해 서비스 성능을 향상시키고, API 스위치 모드를 추가하여 노출 장애를 방지하였습니다.
오늘의 결제/방문현황 성능 개선
- 프로젝트 수행 역할
- 데이터 변경 API 개발: 실시간으로 변화하는 데이터를 Oracle 집계 테이블에서 Elastic Search로 변경하기 위한 API를 개발하였습니다.
- Elastic Search 적재: 주문 데이터를 Elastic Search로 적재하고, Elastic Search 버전 업그레이드를 지원하는 작업을 수행하였습니다.
- 문제파악
- 주문 데이터를 Elastic Search에 적재하는 과정에서 누락되는 주문이 발생하는 문제
- 문제해결
- Upsert 기능 활용: 주문 데이터의 원천인 주문 테이블에서 발생하는 여러 장애나 주문 배치 에러로 인한 누락을 방지하기 위해, 특정 시간에 중복 주문이 발생하더라도 Elastic Search의 upsert 기능을 사용하여 중복 적재를 방지하고 하나의 주문만 적재되도록 구현
- 결과 및 성과
- 실시간 성능 개선: 오늘의 결제현황 데이터의 딜레이를 3시간에서 15분 이내로 개선하여, 더 가까운 실시간 정보를 제공하게 되었습니다.
Seller Analytics 매출관련 리포트 조회 기간 확대
- 프로젝트 수행 역할
- Apache Druid 활용 API 개발: 매출관련 리포트 조회 기간을 확대하고 조회성능을 개선하기 위해 Apache Druid를 활용한 API를 개발하였습니다.
- 문제파악
- 데이터 적재 후 문제 발생: 처음 하루나 이틀치 데이터 적재 시에는 문제가 없었지만, 3년치 데이터를 적재한 이후에는 API에서 Druid 데이터 소스를 찾지 못하고 커넥션 타임아웃이 발생하는 문제가 발생하였습니다.
- 문제해결
- API 쿼리 빌더 변경:- API 쿼리 빌더를 Druidry로 변경하고, 데이터 조회는 Feign Client 방식으로 변경하여 실제 상용 서비스 가능하도록 개선하였습니다.
- 공용 Druid 클러스터 튜닝: DataPlatform 팀과 협업하여 공용 Druid 클러스터를 튜닝하고 메모리를 증설하여 성능을 개선했습니다.
- Druid Broker 변경: Druid Broker를 Router로 변경하여 성능을 개선했습니다.
- API 성능 개선: Vine platform 기반의 API를 개발하여 타임아웃이 3초이고 응답이 없는 경우 2초 후 재시도하는 로직을 구현하였습니다.
- 후속조치
- 사내 SE 팀과 협업: 서비스 오픈 전에 사내 SE 팀과 협업하여 API와 드루이드의 임계치를 파악하고 성능 테스트를 진행하였습니다.
- Circuit Broker 도입: 서비스 오픈 후 사용자 몰림 현상이 발생할 경우 Circuit Broker를 호출하여 처리하도록 구현하였습니다.
- 드루이드 업그레이드: Apache Druid 0.10.1 버전에서 0.19.0 버전으로 업그레이드하여 성능을 개선하였습니다.
- 결과 및 성과
매출관련 리포트의 조회 기간이 확대되었으며, 장기데이터에 대한 성능이 개선되어 사용자에게 더 나은 리포트 서비스를 제공하게 되었습니다.
Customer Insight 개발
- 프로젝트 수행 역할 - ES 활용한 셀러/시간 별 가장 많이 방문한 상품, 상품유입경로 1위, 24시간 가장 많이 방문한 상품, 방문 성/연령, 해당고객 가장 많이 본 상품
- 사용한 기술스택 및 지식 - Spring Boot, Jenkins, Oracle, ELK Stack, Linux 사용
- 결과 및 성과 - 모바일 셀러오피스 셀러 고객insight 제공
Brand Analytics 개발
- 프로젝트 수행 역할 - 공식셀러 종합분석, 브랜드 고색분석, 마케팅 성과분석, 공식셀러 등록/정보제공 동의 요청기간 설정 및 권한 관리
- 사용한 기술스택 및 지식 - Spring Boot, Jenkins, Oracle, Linux 사용
- 결과 및 성과 - 브랜드의 공식 유통점 관리 및 마케팅 전략 수립 지원하기 위한 브랜드 본사 대상의 데이터 분석 서비스 제공
안소프트
Showprise 개발
- 안드로이드 푸시발송(FCM),sms 전송,메일서버 개발
- 알람기능,마이홈(사용자정보,팔로잉,박수,공유,히스토리)
- 모든 쇼,팔로잉 피드,like,댓글,신고하기,쇼설정
- 쇼업로드(동영상 변환,썸네일 변환)
- 프로필 사진 업로드/ 프로필 히스토리 조회
- 최근통화기록,통화시 쇼 api
- 통화기록 sync,폰 그룹쇼 기능
- 동영상 인코딩 최적화
- 속도와 화질 조절: 동영상 인코딩은 인코딩 속도와 화질 사이의 균형을 맞추어야 합니다. 빠른 인코딩을 위해 저화질 포맷을 선택하거나, 더 나은 화질을 위해 높은 비트레이트나 고화질 포맷을 선택할 수 있습니다.
- 다양한 화질 포맷: 웹 및 모바일에서 재생되는 동영상의 화질을 다양하게 제공하면 사용자 경험이 향상됩니다. 여러 개의 화질 옵션을 생성하여 고, 중, 저화질 등 다양한 선택을 제공할 수 있습니다.
- 비용 대비 화질: 클라우드 인코딩 서비스를 사용할 경우, 비용과 화질 사이의 적절한 밸런스를 유지해야 합니다. 높은 화질을 제공하면 더 많은 용량과 비용이 발생할 수 있습니다.
- 이미지 변환 최적화
- 다양한 오픈소스 테스트: 이미지 변환을 위한 다양한 오픈소스 라이브러리를 테스트하여 최적화된 이미지 사이즈와 포맷을 결정합니다. ImageMagick, FFmpeg 등을 활용할 수 있습니다.
- 캐싱 및 WebP 형식: 이미지 변환 후 클라우드프론트(CDN)를 사용하여 캐싱하고, WebP 형식으로 변환하여 더 작은 용량과 빠른 로딩 속도를 제공합니다.
- AWS Lambda@Edge 활용: 이미지 리사이즈와 WebP 변환을 실시간으로 수행하기 위해 AWS Lambda@Edge를 활용합니다. 사용자의 요청 시 이미지를 동적으로 처리하여 최적화된 이미지를 제공합니다.
- 동영상, 썸네일 업로드 속도 향상을 위한 비동기 구현
- 비동기 업로드: 동영상 및 이미지 업로드를 비동기적으로 처리하여 사용자 경험을 향상시킵니다. 업로드 요청을 받으면 백그라운드 작업으로 처리하고, 사용자에게는 진행 상황을 보여줍니다.
- 업로드 캐싱 및 분산: 업로드한 파일을 캐싱하고 분산 저장하여 높은 성능을 유지합니다. 클라우드 스토리지를 활용하여 파일을 효율적으로 관리하였습니다.
하우저
하우저 배송서비스 API 개발
- 배송 일괄의뢰 등록
- 배송 해피콜관리
- 배송 멤버쉽 개편
- 배송 주소/픽업/프로세스 개편
- 배송 완료 상품별 부분결과 처리
- 가구배송 오프라인 시스템 온라인 시스템 구현
한샘
가구관련 크롤링개발
- 크롤러 통한 가구컨텐츠 수집 및 섬네일 생성
- 컨텐츠 페이지, 시드 url 수집
- 수집된 페이지url 컨텐츠 파싱/저장
- 이미지 다운로드/ 썸네일 이미지 생성
인터파크
Clue 검색엔진 통한 Translator 및 퍼블리셔 전송
- 검색엔진 색인 데이터 퍼블리셔 전송(브로커 -> RabbitMq -> MongoDB -> 검색엔진 색인)
- Solrj 사용한 검색API 통한 색인 데이타 리턴
- 클루검색엔진 어드민 페이지 개발
인터파크 쿠폰/ IPP
- 쿠폰/ IPP 집계 및 개발 운영
- 쿠폰API 생성 및 전체/변경 EP 생성
인터파크 리뷰 개발
- 마이페이지 리뷰 작성/수정/삭제
- 우수리뷰 선정 및 모바일 리뷰 API
qoo10
Msg Broker 개발
- 프로젝트 수행 역할
- Qtalk 메시지 전송 및 푸시 요청
- 중국 안드로이드 어플 키 발급 요청
- Message Push 요청 및 그룹 메시지 발송
- 메시지 폴링 서버 개발
- 문제파악
- 초창기 메신저 Msg Broker 서버 메모리 누수 발생하였습니다.
- 문제해결
- SocketTimeout 및 커넥션풀 적용: SocketTimeout, jdbc, Apache Commons DBCP 커넥션 풀을 적용하여 디비 커넥션의 관리와 타임아웃 설정을 개선했습니다.
- 테스트를 통한 문제 확인 및 해결: 다양한 테스트를 통해 발생 가능한 예외 상황을 확인하고 문제를 해결하였습니다.
- 후속조치
- 올바른 타임아웃 설정
- 커넥션 검사와 폴링
- Tomcat 설정
- 결과 및 성과
- Qoo10의 메신저 시스템인 Live10에서 사용되는 메시지 브로커를 개발하였습니다. 이를 통해 Qtalk 메시지의 전송, 푸시 요청, 그룹 메시지 발송, 메시지 폴링 서버 등 다양한 기능을 구현하고 서비스 할수 있었습니다.