Skip to content

[Koin Project][Refactor] Presigned Url 업로드 로직 리팩토링#1230

Merged
kongwoojin merged 4 commits intodevelopfrom
refactor/#1229-refactor-presigned-url-logic
Jan 21, 2026
Merged

[Koin Project][Refactor] Presigned Url 업로드 로직 리팩토링#1230
kongwoojin merged 4 commits intodevelopfrom
refactor/#1229-refactor-presigned-url-logic

Conversation

@kongwoojin
Copy link
Copy Markdown
Member

PR 개요

PR 체크리스트

  • Code convention을 잘 지켰나요?
  • Lint check를 수행하였나요?
  • Assignees를 추가했나요?

작업사항

  • 버그 수정
  • 신규 기능
  • 코드 스타일 수정 (포맷팅 등)
  • 리팩토링 (기능 수정 X, API 수정 X)
  • 기타

작업사항의 상세한 설명

기존의 Presigned Url 업로드는 아래와 같은 과정을 통해 이루어졌습니다.

  1. viewmodel에서 file size, type을 이용하여 API 호출 후, presigned url과 file url 획득
  2. 다시 viewmodel에서 presigned url로 이미지 업로드 후 file url 최종 반환

이 과정에서 두개의 usecase를 호출하였으며, presigned url을 viewmodel에서 받아서 다시 usecase 호출 시 parameter로 넘겨주는 방식으로 작동했습니다.

코드로 설명하자면, 이전에는 다음과 같은 코드로 Presigned url을 활용한 이미지 업로드를 처리했습니다.

fun requestPresignedUrl(fileSize: Long, fileType: String, fileName: String, imageUri: String) = intent {
    getMarketPreSignedUrlUseCase(fileSize, fileType, fileName).onSuccess { (fileUrl, presignedUrl) ->
        uploadFile(presignedUrl, fileType, fileSize, imageUri, fileUrl)
    }.onFailure {
        // 에러 처리
    }
}

private fun uploadFile(presignedUrl: String, mediaType: String, mediaSize: Long, imageUri: String, fileUrl: String) = intent {
    uploadFileUseCase(presignedUrl, mediaType, mediaSize, imageUri).onSuccess {
        // 업로드 성공
    }.onFailure {
        // 에러 처리
    }
}

requestPresignedUrl() 함수에서 presigned url 을 획득한 후, uploadFile() 함수에서 실제 업로드를 진행했습니다.

이에 따라 불필요하게 에러 처리를 두번 수행해야 했으며, viewmodel에서 presigned url을 굳이 알 필요가 없음에도 알게 된다는 문제점이 있었습니다.

또한, presigned url을 usecase를 통해 획득하고 실제 업로드가 진행되지 않을 경우, 이미지가 업로드 되지 않고 빈 file url만 남을 수 있는 문제가 있었습니다.

따라서, 하나의 usecase를 호출하여 이미지를 처리할 수 있도록 수정했습니다.

수정된 usecase를 활용한 이미지 업로드는 다음과 같습니다.

fun uploadPresignedUrl(fileSize: Long, fileType: String, fileName: String, imageUri: String) = intent {
    uploadImageUseCase(
        domain = PreSignedUrlDomain.MARKET,
        contentLength = fileSize,
        contentType = fileType,
        fileName = fileName,
        imageUri = imageUri
    ).onSuccess {
        // 업로드 성공
    }.onFailure {
        // 에러 처리
    }
}

새로운 usecase에서는 중복 에러 처리 문제를 수정하였으며, 하나의 usecase만으로 이미지 업로드를 처리할 수 있습니다.
또한, 기존에 도메인 별로 분리되어 있던 이미지 업로드 usecase를 하나로 통합하였으며, viewmodel에서 usecase 호출 시 어느 도메인인지 선언하도록 수정하였습니다.

추가로, 동아리와 상점 리뷰 화면에서 해당 usecase를 사용하도록 리팩토링 하였습니다.

논의 사항

  • 해당 리팩토링을 제외한 로직은 일부러 건드리지 않았습니다.

스크린샷

추가내용

  • develop, sprint 브랜치를 향하고 있습니다
  • production 브랜치를 향하고 있습니다

@kongwoojin kongwoojin self-assigned this Jan 18, 2026
@kongwoojin kongwoojin requested a review from a team as a code owner January 18, 2026 16:15
@kongwoojin kongwoojin linked an issue Jan 18, 2026 that may be closed by this pull request
@github-actions github-actions Bot added koin project refactor Code refactoring labels Jan 18, 2026
@github-actions github-actions Bot requested review from KYM-P and TTRR1007 January 18, 2026 16:15
Copy link
Copy Markdown
Collaborator

@KYM-P KYM-P left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 제 주옥같은 club 코드를 읽고 수정하시다니 👍
확실히 하나로 줄이는편이 좋은 것 같습니다.
또한 이제야 좀 'UseCase' 라는 느낌이 있네요

@kongwoojin kongwoojin merged commit 0091ebb into develop Jan 21, 2026
4 checks passed
@kongwoojin kongwoojin deleted the refactor/#1229-refactor-presigned-url-logic branch January 21, 2026 04:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

koin project refactor Code refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Koin Project] Presigned url 업로드 로직 수정

2 participants