피드로 돌아가기
상품 설명 영역 개선기 Part.1
올리브영 테크블로그올리브영 테크블로그
Backend

상품 설명 영역 개선기 Part.1

올리브영이 상품 상세 기술서 이미지 업로드를 NAS에서 AWS S3로 마이그레이션하고 코루틴 기반 비동기 처리로 구현

2024년 4월 1일12intermediate

Context

기존 상세 기술서 이미지는 NAS 서버에 업로드되고 있었으나, 물리적 서버이므로 용량 증가 시 서버 증설이 필요했습니다. 또한 복잡한 레거시 소스로 유지보수가 어려웠고, 백포스와 신규 파트너 오피스에서 동일 기능의 코드가 별도로 구성되어 수정 시 중복 작업이 발생했습니다.

Technical Solution

  • 이미지 업로드 및 데이터 처리를 위한 공통 API 개발: 백포스와 신규 파트너 오피스에서 동일한 API 호출로 통일
  • 스토리지 마이그레이션: NAS 서버 대신 AWS S3에 이미지 파일 업로드하도록 변경
  • 비동기 처리 도입: Kotlin 코루틴의 withContext(Dispatchers.IO)와 async/awaitAll()을 사용하여 다중 이미지 파일 병렬 업로드 구현
  • 이미지 최적화: GS-CDN의 WebP 확장자 변환 기능을 활용하여 클라이언트 로딩 속도 개선
  • 처리 흐름 단순화: 기존 이미지 업로드 → NAS 저장 구조에서 이미지 업로드 → QMS 서버 및 AWS S3 저장 → Oracle DB 메타데이터 처리로 변경

Key Takeaway

파일 I/O 작업에서 Dispatchers.IO를 지정한 코루틴 스코프 내에서 async를 통해 여러 작업을 병렬화하고 awaitAll()로 모든 작업의 완료를 보장하면, 스레드 오버헤드 없이 다중 파일 처리 성능을 향상시킬 수 있습니다.


다중 파일 업로드가 필요한 백엔드 서비스에서 Kotlin 코루틴의 async 빌더와 Dispatchers.IO를 조합하면, 스레드 풀 관리 없이 경량의 비동기 작업을 구현하여 I/O 바운드 작업의 처리량을 증대시킬 수 있습니다.

원문 읽기