고마구의 개발 블로그
자바 컨테이너 입력값 받는 방법02 본문
`start.sh` 파일은 기존의 형태로 두어도 되지만, 입력을 처리해야 하는 경우 수정이 필요할 수 있습니다. 만약 자바 프로그램이 `Scanner`를 통해 입력을 받아야 한다면, `start.sh` 파일에서 이 입력을 어떻게 전달할지를 고려해야 합니다.
### 1. 입력 파일을 전달하는 방법
만약 입력을 파일로 전달하고 싶다면, `start.sh` 파일을 다음과 같이 수정할 수 있습니다:
```bash
#!/bin/bash
JAVA_FILE=$1
RESULT_FILE=$2
INPUT_FILE=$3 # 추가된 입력 파일
# 디렉토리 생성
mkdir -p "$(dirname "$JAVA_FILE")"
while true; do
if [ ! -f "$JAVA_FILE" ]; then
echo "Waiting for Java file..."
sleep 1
continue
fi
echo "Java file found. Processing..."
# 클래스 이름 추출
CLASS_NAME=$(grep 'public class ' "$JAVA_FILE" | awk '{print $3}')
if [ -z "$CLASS_NAME" ]; then
echo "Class name could not be determined"
exit 1
fi
# 파일 이름과 클래스 이름을 맞추기
JAVA_FILE_NAME=$(basename "$JAVA_FILE")
EXPECTED_FILE_NAME="${CLASS_NAME}.java"
if [ "$JAVA_FILE_NAME" != "$EXPECTED_FILE_NAME" ]; then
echo "Class name and file name mismatch: Expected $EXPECTED_FILE_NAME but got $JAVA_FILE_NAME"
exit 1
fi
# Java 파일을 컴파일 후 실행
if javac "$JAVA_FILE"; then
echo "Compilation successful. Running $CLASS_NAME..."
# Java 실행 결과를 result.txt에 저장, 입력 파일에서 읽기
java -cp "$(dirname "$JAVA_FILE")" "$CLASS_NAME" < "$INPUT_FILE" > "$RESULT_FILE" 2>&1
else
echo "Compilation failed."
exit 1
fi
# 파일을 처리한 후 삭제
rm -f "$JAVA_FILE"
rm -f "$INPUT_FILE" # 입력 파일 삭제
sleep 1
done
```
### 2. `executeInDocker` 메서드 수정
그에 따라 `executeInDocker` 메서드에서도 `start.sh`에 입력 파일 경로를 전달해야 합니다. 예를 들어:
```java
// start.sh 스크립트에서 파일명 인자 추가 (비동기 실행)
ProcessBuilder execBuilder = new ProcessBuilder("docker", "exec", containerName, "bash", "/app/start.sh", javaFileName, resultFileName, inputFileName);
execBuilder.start(); // 백그라운드에서 실행되므로 waitFor() 사용하지 않음
```
이렇게 하면 `start.sh`가 Java 프로그램을 실행할 때 입력 파일도 함께 사용할 수 있게 됩니다.
### 요약
- `start.sh`를 수정하여 입력 파일을 처리하도록 변경합니다.
- `executeInDocker` 메서드에서 `start.sh`를 호출할 때 입력 파일 경로를 인자로 추가합니다.
이렇게 하면 Docker 컨테이너 내에서 Java 프로그램이 `Scanner`를 통해 입력을 받을 수 있게 됩니다. 추가 질문이 있으면 언제든지 말씀해 주세요!
'KDT풀스택과정 공부' 카테고리의 다른 글
241014 26주차 월요일 - 플러터 프로젝트 01 (0) | 2024.10.14 |
---|---|
241012 토요일 부트 남은것들 (1) | 2024.10.12 |
자바 컨테이너 입력값 받는 방법 (0) | 2024.10.09 |
241009 25주차 수요일 - 부트 개인 플젝 08 (0) | 2024.10.09 |
241008 25주차 화요일 - 부트 개인 플젝 07 (0) | 2024.10.08 |