diff --git a/build.gradle b/build.gradle index b561d21..32a37c3 100644 --- a/build.gradle +++ b/build.gradle @@ -83,6 +83,8 @@ dependencies { implementation 'io.hypersistence:hypersistence-utils-hibernate-63:3.7.0' implementation 'org.reflections:reflections:0.10.2' + implementation 'com.jcraft:jsch:0.1.55' + } configurations.configureEach { diff --git a/src/main/java/com/kamco/cd/training/common/utils/FIleChecker.java b/src/main/java/com/kamco/cd/training/common/utils/FIleChecker.java index fb73f86..753b134 100644 --- a/src/main/java/com/kamco/cd/training/common/utils/FIleChecker.java +++ b/src/main/java/com/kamco/cd/training/common/utils/FIleChecker.java @@ -2,6 +2,9 @@ package com.kamco.cd.training.common.utils; import static java.lang.String.CASE_INSENSITIVE_ORDER; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; import io.swagger.v3.oas.annotations.media.Schema; import java.io.BufferedReader; import java.io.File; @@ -23,6 +26,7 @@ import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.Properties; import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -755,4 +759,45 @@ public class FIleChecker { return destFile; } + + public static void uploadTo86(Path localFile) { + + String host = "192.168.2.86"; + int port = 22; + String username = "kcomu"; + String password = "Kamco2025!"; + + String remoteDir = "/home/kcomu/data/request"; + + Session session = null; + ChannelSftp channel = null; + + try { + JSch jsch = new JSch(); + + session = jsch.getSession(username, host, port); + session.setPassword(password); + + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + + session.connect(10_000); + + channel = (ChannelSftp) session.openChannel("sftp"); + channel.connect(10_000); + + // 목적지 디렉토리 이동 + channel.cd(remoteDir); + + // 업로드 + channel.put(localFile.toString(), localFile.getFileName().toString()); + + } catch (Exception e) { + throw new RuntimeException("SFTP upload failed", e); + } finally { + if (channel != null) channel.disconnect(); + if (session != null) session.disconnect(); + } + } } diff --git a/src/main/java/com/kamco/cd/training/upload/service/UploadService.java b/src/main/java/com/kamco/cd/training/upload/service/UploadService.java index 27bf523..980a24b 100644 --- a/src/main/java/com/kamco/cd/training/upload/service/UploadService.java +++ b/src/main/java/com/kamco/cd/training/upload/service/UploadService.java @@ -233,6 +233,9 @@ public class UploadService { try { FIleChecker.deleteFolder(tmpDir); + // 108 에서 86 서버로 이동 + log.info("################# server move 108 -> 86"); + FIleChecker.uploadTo86(outputPath); } catch (Exception e) { log.warn("tmpDir delete failed (merge already succeeded): tmpDir={}", tmpDir, e); }