SON ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ง๋ถํธ์์ ํ์ด์ฌ์๊ฒ ๋ช ๋ น์ด๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค. ๋ช ๋ น์ด ์์ ๋ฅผ JSON ํ์์ผ๋ก ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ JSON ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค:
{
"command": "run_script",
"script_path": "/home/user/myscript.py",
"args": ["arg1", "arg2"],
"options": {
"option1": "value1",
"option2": "value2"
}
}
์์ JSON ๊ตฌ์กฐ์ฒด๋ "run_script" ๋ช ๋ น์ ์คํํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. "script_path"๋ ์คํํ ์คํฌ๋ฆฝํธ์ ๊ฒฝ๋ก๋ฅผ, "args"๋ ๋ช ๋ นํ ์ธ์๋ฅผ, "options"๋ ์คํฌ๋ฆฝํธ ์คํ์ ํ์ํ ์ต์ ์ ์ง์ ํฉ๋๋ค. ์ด์ ์ด JSON ๊ตฌ์กฐ์ฒด๋ฅผ ์คํ๋ง๋ถํธ์์ ํ์ด์ฌ์ผ๋ก ์ ์กํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
// ...
RestTemplate restTemplate = new RestTemplate();
// Set the headers for the HTTP request
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// Set the request body with the JSON structure
String json = "{ \"command\": \"run_script\", \"script_path\": \"/home/user/myscript.py\", \"args\": [\"arg1\", \"arg2\"], \"options\": { \"option1\": \"value1\", \"option2\": \"value2\" } }";
HttpEntity<String> entity = new HttpEntity<String>(json, headers);
// Send the HTTP request to the Python server
String url = "http://localhost:5000/run_command";
String response = restTemplate.postForObject(url, entity, String.class);
// Process the response from the Python server
// ...
์์ ์ฝ๋์์ "http://localhost:5000/run_command"๋ ํ์ด์ฌ ์๋ฒ์ ์๋ํฌ์ธํธ URL์ ๋๋ค. ์ด์ ํ์ด์ฌ์์ ์ด ๋ช ๋ น์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
import json
def process_command(command):
if command["command"] == "run_script":
script_path = command["script_path"]
args = command["args"]
options = command["options"]
# Run the script with the given arguments and options
# ...
else:
# Handle unrecognized command
# ...
# ...
# Receive the JSON command from the Spring Boot server
# ...
json_command = '{"command": "run_script", "script_path": "/home/user/myscript.py", "args": ["arg1", "arg2"], "options": { "option1": "value1", "option2": "value2" } }'
# Parse the JSON command into a dictionary
command = json.loads(json_command)
# Process the command
process_command(command)
์์ ์ฝ๋์์ "process_command" ํจ์๋ ๋ฐ์ JSON ๋ช
๋ น์ด์ ๋ํ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. "if" ๋ฌธ์์ "command" ํ๋๋ฅผ ํ์ธํ์ฌ ๊ฐ๊ฐ์ ๋ช
๋ น์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์คํ๋ง๋ถํธ์์ ํ์ด์ฌ์ผ๋ก JSON ํ์์ผ๋ก ์ ์กํ ๋ช
๋ น์ด๋ฅผ ํ์ด์ฌ์์ ์์ ํ๊ณ , "json.loads" ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์
๋๋ฆฌ๋ก ๋ณํํ ํ "process_command" ํจ์๋ก ์ ๋ฌํฉ๋๋ค. "process_command" ํจ์์์๋ "if" ๋ฌธ์ ์ฌ์ฉํ์ฌ "command" ํ๋๋ฅผ ํ์ธํ๊ณ , ํด๋นํ๋ ๋ช
๋ น์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด "run_script" ๋ช
๋ น์ด ์ ์ก๋ ๊ฒฝ์ฐ, "script_path", "args", "options" ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒํ๋ฉด ์คํ๋ง๋ถํธ์ ํ์ด์ฌ ๊ฐ์ JSON ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ด๋ฅผ ์ ์กํ๊ณ , ํ์ด์ฌ์์ ํด๋น ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ๋จํ ์์ ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ฝ๋๋ฅผ ์์ ํ์ฌ ๋ณต์กํ ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ์ฅํ ์ ์์ต๋๋ค.
JSON์์ ์ฌ์ฉํ "command" ํ๋์ ๋ค์ด๊ฐ ์ ์๋ ํค์๋๋ ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง์ํ๋ ๋ช ๋ น์ด์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์คํ ๊ด๋ฆฌ ๋ฐ ์๋ํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ๋ช ๋ น์ด๋ฅผ ์๋ก ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํค์๋๊ฐ ์์ ์ ์์ต๋๋ค
- start: ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํฉ๋๋ค.
- stop: ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์งํฉ๋๋ค.
- restart: ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์์ํฉ๋๋ค.
- status: ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- configure: ์ค์ ํ์ผ์ด๋ ํ๊ฒฝ ๋ณ์ ๋ฑ์ ๊ตฌ์ฑํฉ๋๋ค.
- deploy: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํฉ๋๋ค.
์์ ์์๋ ๋ํ์ ์ธ ๋ช ๋ น์ด์ด๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๋ผ ์ง์ํ๋ ๋ช ๋ น์ด์ ์ข ๋ฅ๋ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ ๋ง๊ฒ "command" ํ๋์ ํค์๋๋ฅผ ์ ์ํ์ฌ์ผ ํฉ๋๋ค.
์์ ์์๋ก ๋ค์ด์ค "run_script" ๋ช ๋ น์ ํฌํจํ์ฌ, ์ฌ๋ฌ ๊ฐ์ง ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ๋จํ ์์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
์คํ๋ง๋ถํธ์์๋ "/run_command" ์๋ํฌ์ธํธ๋ฅผ ๋ง๋ค์ด์ ํ์ด์ฌ์ผ๋ก๋ถํฐ ์ ์ก๋ JSON ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ , ํ์ด์ฌ์์๋ ์ด๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
์คํ๋ง๋ถํธ ์ฝ๋:
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class CommandController {
@PostMapping("/run_command")
public String runCommand(@RequestBody String commandJson) {
RestTemplate restTemplate = new RestTemplate();
// Set the headers for the HTTP request
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// Set the request body with the JSON structure
HttpEntity<String> entity = new HttpEntity<String>(commandJson, headers);
// Send the HTTP request to the Python server
String url = "http://localhost:5000/run_command";
String response = restTemplate.postForObject(url, entity, String.class);
return response;
}
}
ํ์ด์ฌ ์ฝ๋:
import json
def process_command(command):
if command["command"] == "run_script":
script_path = command["script_path"]
args = command["args"]
options = command["options"]
# Run the script with the given arguments and options
# ...
return "Script executed successfully"
elif command["command"] == "status":
# Check the status of the application and return it
status = "running"
return status
elif command["command"] == "stop":
# Stop the application and return the status
status = "stopped"
return status
else:
# Handle unrecognized command
return "Unrecognized command"
# ...
# Receive the JSON command from the Spring Boot server
# ...
json_command = '{"command": "run_script", "script_path": "/home/user/myscript.py", "args": ["arg1", "arg2"], "options": { "option1": "value1", "option2": "value2" } }'
# Parse the JSON command into a dictionary
command = json.loads(json_command)
# Process the command
response = process_command(command)
# Send the response back to the Spring Boot server
# ...
json_response = json.dumps({"response": response})
์์ ์ฝ๋์์ "/run_command" ์๋ํฌ์ธํธ๋ฅผ ํตํด ์คํ๋ง๋ถํธ์์ ํ์ด์ฌ์ผ๋ก ์ ์ก๋๋ JSON ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ํ์ด์ฌ์์๋ "process_command" ํจ์์์ "command" ํ๋๋ฅผ ํ์ธํ์ฌ ํด๋น ๋ช ๋ น์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ JSON ํ์์ผ๋ก ๋ฐํํฉ๋๋ค. ์ด ๊ฒฐ๊ณผ๋ฅผ ์คํ๋ง๋ถํธ๋ก ๋ค์ ์ ์กํ์ฌ, ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
'๐ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ] OTP ์ธ์ฆ์ฝ๋ ์์ฑ ์์ค์ฝ๋ (0) | 2023.02.21 |
---|---|
[์ ๋ณด] ํ์ด์ฌ ์์ธ์ฒ๋ฆฌ ์ฌ๋ฌ๊ฐ ํ๊ธฐ (0) | 2023.02.17 |
[์ ๋ณด] ํ์ด์ฌ ๋คํธ์ํฌ ํต์ ํ๋ก๊ทธ๋๋ฐ ์ข ๋ฅ ๋ฐ ์์ (0) | 2023.02.15 |
[์ ๋ณด] ํ์ด์ฌ subprocess ์ค๋ช ๋ฐ ์์ (0) | 2023.02.15 |
[์ ๋ณด] JavaScript์์ HTTP ์์ฒญ์ ๋ง๋๋ ๋ฐฉ๋ฒ (0) | 2023.02.15 |