고마구의 개발 블로그
자바 컨테이너 입력값 받는 방법 본문
자바 프로그램에서 `Scanner`를 사용해 입력을 받도록 하고, Spring Boot 애플리케이션에서 Docker 컨테이너로 입력을 전달하는 방법
### 1단계: 자바 코드 수정
자바 코드는 `Scanner`를 사용해 표준 입력(stdin)에서 입력을 읽도록 작성해야 합니다. 예를 들어, 다음과 같은 구조가 될 수 있습니다:
```java
import java.util.Scanner;
public class YourClassName {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("입력을 해주세요:");
String str = sc.nextLine();
// 입력 처리
System.out.println("입력한 내용: " + str);
sc.close();
}
}
```
### 2단계: `executeInDocker` 메서드 수정
자바 프로그램을 Docker 컨테이너에서 실행할 때 입력을 전달하려면 다음 단계를 수행해야 합니다:
1. **입력 파일 생성**: 자바 코드 실행 전에 임시 입력 파일을 생성하고, 전달할 내용을 이 파일에 씁니다.
2. **입력 파일을 Java 실행에 전달**: Docker 실행 명령을 수정하여 이 입력 파일로부터 읽도록 합니다.
다음은 `executeInDocker` 메서드의 수정된 예입니다:
```java
private String executeInDocker(String containerName, String code, String className, String testLv, String id, String input) throws IOException, InterruptedException {
String basePath = "/app/" + id + "/" + testLv;
String javaFileName = basePath + "/" + className + ".java";
String resultFileName = basePath + "/result_" + className + ".txt";
String inputFileName = basePath + "/input.txt"; // 입력 파일 경로
// ... (기존 코드)
// 임시 입력 파일 작성
Path inputFile = Files.createTempFile("input", ".txt");
Files.write(inputFile, input.getBytes(StandardCharsets.UTF_8));
// Docker 컨테이너로 입력 파일 복사
ProcessBuilder copyInputBuilder = new ProcessBuilder("docker", "cp", inputFile.toString(), containerName + ":" + inputFileName);
Process copyInputProcess = copyInputBuilder.start();
copyInputProcess.waitFor();
// Java 실행 명령 수정: 입력 파일로부터 읽도록
ProcessBuilder execBuilder = new ProcessBuilder("docker", "exec", containerName, "bash", "-c", "java -cp " + basePath + " " + className + " < " + inputFileName);
execBuilder.start(); // 백그라운드에서 실행되므로 waitFor() 사용하지 않음
// ... (기존 코드)
// 임시 입력 파일 삭제
Files.delete(inputFile);
// 결과 반환
return output.toString();
}
```
### 요약
이렇게 하면 Docker 컨테이너 내에서 실행되는 자바 프로그램이 `Scanner`로 입력을 받을 수 있게 됩니다. 입력 파일을 생성하고 이를 Docker 컨테이너로 복사한 후, 자바 프로그램이 이 파일을 통해 입력을 받을 수 있도록 실행하면 됩니다.
'KDT풀스택과정 공부' 카테고리의 다른 글
241012 토요일 부트 남은것들 (1) | 2024.10.12 |
---|---|
자바 컨테이너 입력값 받는 방법02 (0) | 2024.10.09 |
241009 25주차 수요일 - 부트 개인 플젝 08 (0) | 2024.10.09 |
241008 25주차 화요일 - 부트 개인 플젝 07 (0) | 2024.10.08 |
241007 25주차 월요일 - 부트 개인 플젝 06 (0) | 2024.10.07 |