
현재 내가 하고있는 업무는 RDS 같은 클라우드 환경에 떠있는 RDBMS 의 dump를 생성해서 S3 같은 Object Storage에 전송하는 작업을 하는중이다.
필자는 현재 RDS는 아니고 NCP의 CloudDb for mysql 과 Object Storage 환경에 맞춰 개발을 진행했다.
앞서서 Ncp의 Object Storage는 AWS S3 의 SDK 를 지원한다.
네이버 클라우드 API Docs
https://api.ncloud-docs.com/docs/common-ncpapi
네이버 클라우드 Object Storage Docs
https://guide.ncloud-docs.com/docs/ko/storage-storage-6-1
내가 생각하는 플로우는 이렇다.
Batch Container 실행 -> MysqlDump -> ObjectStorage
@Scheduled 로 실행되는게 아니라 Crontab으로 실행될 예정
jar가 실행될떄 args에 daily weekly monthly 라는 인수를 전달해서 실행될 계획이다.
그래서 뭔가 Spring Batch라고 하기 좀 그렇다. 아무튼 배치임 아무튼 배치다

상기와 같이 dependencies 를 추가했다.
필자는 @Value를 자주쓰는게 귀찮아 @ConfigurationProperties 를 사용했다.
API Docs를 참고하여

이름을 Ncp로 하려했으나 공식문서에서도 상기와 같이나와있어 위와 같이 작성했다.
AWS Client

Mysql Dump 메서드를 만들고
public class MysqlDumper {
public int dump(String backupHost, String backupUser, String backupPassword, String backupDatabase, String backupFile) throws Exception {
List<String> command = new ArrayList<>();
command.add("mysqldump");
command.add("-h");
command.add(backupHost);
command.add("-u");
command.add(backupUser);
command.add("--password=" + backupPassword); // Use the password directly
command.add(backupDatabase); // Specify the database to backup
System.out.println("Executing command: " + String.join(" ", command));
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectOutput(new File(backupFile)); // Output redirection
Process process = processBuilder.start();
// Error stream handling
try (BufferedReader errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
String line;
while ((line = errorStream.readLine()) != null) {
System.err.println(line); // This can be replaced with a logger
}
}
return process.waitFor();
}
}
현재 비밀번호가 yml에 기입되어있지만 추후에는 mysql.cnf파일을 이용할 예정이다.
오늘은 여기까지만 작성하고 추후 작성하겠다.