From cc5e124b02b76c681f563b44e00b8570a282fa13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=9E=AC=EC=98=81?= <80161826+dolong2@users.noreply.github.com> Date: Sat, 5 Sep 2026 04:37:17 +0000 Subject: [PATCH 1/2] =?UTF-8?q?[fix]=20=EB=B0=B0=ED=8F=AC=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=B2=98=EB=A6=AC=EC=8B=9C=20=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=EC=97=90=20=EC=A1=B4=EC=9E=AC=ED=95=98=EB=8D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=EB=B0=8F=20=EC=BB=A8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=84=88=20=EC=A0=95=EB=A6=AC=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9D=84=20=EB=B9=84=EB=8F=99=EA=B8=B0=EB=A1=9C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/listener/ApplicationEventListener.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/event/listener/ApplicationEventListener.kt b/src/main/kotlin/com/dcd/server/core/domain/application/event/listener/ApplicationEventListener.kt index 7887428c..447fd383 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/event/listener/ApplicationEventListener.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/event/listener/ApplicationEventListener.kt @@ -40,12 +40,13 @@ class ApplicationEventListener( val applicationList = queryApplicationPort.findByIds(event.applicationIdList) applicationList.forEach { application -> - containerPort.execute { - deleteContainer(application) - deleteImage(application) - } CoroutineScope(Dispatchers.IO).launch { + containerPort.execute { + deleteContainer(application) + deleteImage(application) + } + refreshApplicationService.refresh(application) val updatedApplication = application.copy(status = ApplicationStatus.STOPPED) From 2f44b9e00618aebd8c1c8a3cb1bf84a7adfb8b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=9E=AC=EC=98=81?= <80161826+dolong2@users.noreply.github.com> Date: Sat, 5 Sep 2026 05:01:52 +0000 Subject: [PATCH 2/2] =?UTF-8?q?[fix]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20suspend=20=ED=82=A4=EC=9B=8C=EB=93=9C=EA=B0=80=20?= =?UTF-8?q?=EC=9E=88=EB=8D=98=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DeleteApplicationDirectoryService.kt | 2 +- .../service/RefreshApplicationService.kt | 2 +- .../DeleteApplicationDirectoryServiceImpl.kt | 16 ++++++---------- .../impl/RefreshApplicationServiceImpl.kt | 2 +- .../application/spi/ApplicationImageFilePort.kt | 2 +- .../adapter/ApplicationImageFileAdapter.kt | 10 +--------- 6 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/DeleteApplicationDirectoryService.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/DeleteApplicationDirectoryService.kt index e871223c..e0a4b519 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/service/DeleteApplicationDirectoryService.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/DeleteApplicationDirectoryService.kt @@ -3,5 +3,5 @@ package com.dcd.server.core.domain.application.service import com.dcd.server.core.domain.application.model.Application interface DeleteApplicationDirectoryService { - suspend fun deleteApplicationDirectory(application: Application) + fun deleteApplicationDirectory(application: Application) } \ No newline at end of file diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/RefreshApplicationService.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/RefreshApplicationService.kt index b63d32b4..bdbc9538 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/service/RefreshApplicationService.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/RefreshApplicationService.kt @@ -3,5 +3,5 @@ package com.dcd.server.core.domain.application.service import com.dcd.server.core.domain.application.model.Application interface RefreshApplicationService { - suspend fun refresh(application: Application) + fun refresh(application: Application) } \ No newline at end of file diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/DeleteApplicationDirectoryServiceImpl.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/DeleteApplicationDirectoryServiceImpl.kt index ab0ddc52..68ecbaef 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/DeleteApplicationDirectoryServiceImpl.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/DeleteApplicationDirectoryServiceImpl.kt @@ -7,8 +7,6 @@ import com.dcd.server.core.domain.application.model.Application import com.dcd.server.core.domain.application.model.enums.ApplicationStatus import com.dcd.server.core.domain.application.service.DeleteApplicationDirectoryService import com.dcd.server.core.domain.application.util.FailureCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service import java.nio.file.Paths @@ -18,14 +16,12 @@ class DeleteApplicationDirectoryServiceImpl( private val fileOperationPort: FileOperationPort, private val eventPublisher: ApplicationEventPublisher ) : DeleteApplicationDirectoryService { - override suspend fun deleteApplicationDirectory(application: Application) { - withContext(Dispatchers.IO) { - try { - fileOperationPort.deleteDirectory(Paths.get(application.directoryName)) - } catch (e: FileOperationException) { - eventPublisher.publishEvent(ChangeApplicationStatusEvent(ApplicationStatus.FAILURE, application, FailureCase.DELETE_DIRECTORY_FAILURE)) - throw e - } + override fun deleteApplicationDirectory(application: Application) { + try { + fileOperationPort.deleteDirectory(Paths.get(application.directoryName)) + } catch (e: FileOperationException) { + eventPublisher.publishEvent(ChangeApplicationStatusEvent(ApplicationStatus.FAILURE, application, FailureCase.DELETE_DIRECTORY_FAILURE)) + throw e } } } diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/RefreshApplicationServiceImpl.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/RefreshApplicationServiceImpl.kt index 3755912c..69c5e436 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/RefreshApplicationServiceImpl.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/RefreshApplicationServiceImpl.kt @@ -20,7 +20,7 @@ class RefreshApplicationServiceImpl( private val queryVolumePort: QueryVolumePort ) : RefreshApplicationService { @Lock("#application.id", waitTime = 1000 * 10, leaseTime = 1000 * 60 * 30) - override suspend fun refresh(application: Application) { + override fun refresh(application: Application) { val applicationType = application.applicationType when(applicationType) { ApplicationType.SPRING_BOOT, ApplicationType.NEST_JS, ApplicationType.GIN -> { diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/spi/ApplicationImageFilePort.kt b/src/main/kotlin/com/dcd/server/core/domain/application/spi/ApplicationImageFilePort.kt index 44905214..7dacfc1e 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/spi/ApplicationImageFilePort.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/spi/ApplicationImageFilePort.kt @@ -3,5 +3,5 @@ package com.dcd.server.core.domain.application.spi import com.dcd.server.core.domain.application.model.Application interface ApplicationImageFilePort { - suspend fun createImageFile(application: Application) + fun createImageFile(application: Application) } diff --git a/src/main/kotlin/com/dcd/server/infrastructure/domain/application/adapter/ApplicationImageFileAdapter.kt b/src/main/kotlin/com/dcd/server/infrastructure/domain/application/adapter/ApplicationImageFileAdapter.kt index f7c1fcad..4cbfc09e 100644 --- a/src/main/kotlin/com/dcd/server/infrastructure/domain/application/adapter/ApplicationImageFileAdapter.kt +++ b/src/main/kotlin/com/dcd/server/infrastructure/domain/application/adapter/ApplicationImageFileAdapter.kt @@ -13,8 +13,6 @@ import com.dcd.server.core.domain.application.spi.QueryApplicationPort import com.dcd.server.core.domain.application.util.FailureCase import com.dcd.server.core.domain.env.spi.QueryApplicationEnvPort import com.dcd.server.infrastructure.domain.application.file.ImageFileContent -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Component import java.io.File @@ -29,13 +27,7 @@ class ApplicationImageFileAdapter( private val eventPublisher: ApplicationEventPublisher, private val encryptPort: EncryptPort ) : ApplicationImageFilePort { - override suspend fun createImageFile(application: Application) { - withContext(Dispatchers.IO) { - createFile(application) - } - } - - private fun createFile(application: Application) { + override fun createImageFile(application: Application) { val version = application.version val applicationPath = Paths.get(application.directoryName) val applicationEnv =