๐ 1. getResourceAsStream ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
private void loadRulesFromJson() {
try (InputStream is = getClass().getClassLoader().getResourceAsStream("chatbot/rules.json")) {
if (is == null) {
throw new FileNotFoundException("rules.json ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค.");
}
ObjectMapper mapper = new ObjectMapper();
Map<String, List<ChatRuleDTO>> rawRules = mapper.readValue(is,
new TypeReference<Map<String, List<ChatRuleDTO>>>() {});
}
๐2. ClassPathResource ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
private void loadRulesFromJson() {
try {
ClassPathResource resource = new ClassPathResource("chatbot_rules.json");
InputStream inputStream = resource.getInputStream();
rulesNode = objectMapper.readTree(inputStream);
} catch (IOException e) {
throw new RuntimeException("์ฑ๋ด ๋ฃฐ JSON ํ์ผ์ ๋ก๋ํ ์ ์์ต๋๋ค.", e);
}
}
๐3. ๋ฐฉ๋ฒ ๋น๊ต
๋ ๋ฉ์๋๋ ๋ชจ๋ JSON ํ์ผ์ ์ฝ์ด์ Java ๊ฐ์ฒด๋ก ๋ณํํ๋ ์์ ์ ์ํํ์ง๋ง, ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋ชฉ์ ์ ์ฐจ์ด๊ฐ ์๋ค.
โ 3-1. ๊ณตํต์
- classpath์ ์๋ JSON ํ์ผ์ ์ฝ์
- ์์ธ ๋ฐ์ ์ RuntimeException์ผ๋ก ๋ํํ์ฌ ๋์ง
- Jackson(ObjectMapper)๋ฅผ ์ฌ์ฉ
โ 3-2. ์ฐจ์ด์
| ํญ๋ชฉ | ์ฒซ ๋ฒ์งธ ๋ฐฉ์ (getResourceAsStream) | ๋ ๋ฒ์งธ ๋ฐฉ์ (ClassPathResource) |
| ํ์ผ ์ ๊ทผ ๋ฐฉ์ | ClassLoader.getResourceAsStream() ์ฌ์ฉ | Spring์ ClassPathResource ์ฌ์ฉ |
| ํธํ์ฑ | ์์ Java ๋ฐฉ์ (Spring ์์กด X) | Spring ํ๋ ์์ํฌ์ ์์กด |
| ์ฝ๋ ๋์ | rules.json → Map<String, List<ChatRuleDTO>> ์ผ๋ก ๋งคํ ํ ๊ฐ๊ณต | chatbot_rules.json → JsonNode (๊ณ์ธต ๊ตฌ์กฐ ์ ๊ทผ์ฉ) |
| ํ์ฑ ๋ชฉ์ | DTO → ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ๋ณํ ํ ๋ฃฐ ๋งตํ (stateRules) | JSON ๊ตฌ์กฐ ๊ทธ๋๋ก ์ ์ง (rulesNode) |
| ObjectMapper ์ฌ์ฉ ๋ฐฉ์ | readValue(InputStream, TypeReference) | readTree(InputStream) |
| ์ ์ฐ์ฑ | ํ์ ์์ ์ฑ ↑ (DTO ๊ตฌ์กฐ ์ ์๋จ) | ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ์ ์ฐ (JsonNode๋ Key ๊ธฐ๋ฐ ์ ๊ทผ) |
| ์ถ์ฒ ์ฌ์ฉ์ฒ | ๊ตฌ์กฐ๊ฐ ๊ณ ์ ๋ ๋ฃฐ ๊ฐ์ฒด ๋งคํ | ๋ฃฐ์ด ๋์ ์ด๊ฑฐ๋ ๊ตฌ์กฐ๊ฐ ์์ฃผ ๋ฐ๋ ๊ฐ๋ฅ์ฑ ์์ ๋ |
๐ ์์๋ก ์ฐจ์ด ์ค๋ช
โ ์ฒซ ๋ฒ์งธ ๋ฐฉ์
{
"greeting": [
{
"condition": "hello",
"response": "Hi!",
"nextState": "askName"
}
]
}
→ ๋ฐ๋ก ChatRuleDTO ๋ฆฌ์คํธ๋ก ๋ณํ → ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ฌ์
โ ๋ ๋ฒ์งธ ๋ฐฉ์
{
"greeting": {
"buttons": ["Yes", "No"],
"response": "Hi!",
"nextState": "askName"
}
}
→ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ ์ ์์ผ๋ฏ๋ก JsonNode ๋ก ์ ์ฐํ๊ฒ ์ฒ๋ฆฌ
๐ ๊ฒฐ๋ก : ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?
| ์ํฉ | ์ถ์ฒ ๋ฐฉ์ |
| ๊ตฌ์กฐ๊ฐ ๊ณ ์ ๋ ๋ฃฐ ๋ฐ์ดํฐ, ์์ฃผ DTO๋ก ์ฐ๋ ๊ฒฝ์ฐ | โ ์ฒซ ๋ฒ์งธ ๋ฐฉ์ |
| JSON ๊ตฌ์กฐ๊ฐ ์ ๋์ ์ด๊ณ , ํค๋ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๊ฒฝ์ฐ | โ ๋ ๋ฒ์งธ ๋ฐฉ์ |
ํ์ํ๋ฉด ๋ ๋ฐฉ์์ ๋ณํํด์ ์ฌ์ฉํด๋ ๋๋ค!! ๐
์: ๋ฒํผ, ์กฐ๊ฑด, ์ถ๊ฐ ์์ฑ์ JsonNode๋ก ๋จผ์ ํ์
→ DTO๋ก ์ผ๋ถ ๋งคํ
'Backend > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Streaming์ด๋? (0) | 2025.12.18 |
|---|---|
| [JAVA] Client IP, Device Type ์ถ์ถ (IP ๊ธฐ๋ฐ ๋ก๊ทธ์ธ) (0) | 2025.12.18 |
| ๋๋ DB INSERT ์ต์ ํ (0) | 2025.11.29 |
| ํ์ผ ์ ๋ก๋, ๋ค์ด๋ก๋ (MultipartFile) (0) | 2025.11.08 |
| JUnit ๋จ์ ํ ์คํธ ์ ์ฉ, JaCoCo ์ปค๋ฒ๋ฆฌ์ง ์ธก์ (0) | 2025.08.27 |