벌써 이 봇을 만든지도 반년이 넘었다.
그동안 크고 작은 업데이트들이 있었는데, 오늘은 날씨봇을 업데이트 하는 과정 중에 생긴 이슈에 대해 적어보려고 한다.
내가 했던 프로젝트 중에서는 민재봇 프로젝트가 진행했던 프로젝트들 중에서는 다른 사람도 이용할 수 있으며,
사용자들의 피드백을 들으면서 더 개선점을 찾아나갈 수 있다는 점에서 제일 재밋는 프로젝트다.
현재는 구글로부터 날씨를 얻어와서 알려줄 수 있는 기능이 추가된 상태인데...
반복되는 코드들을 처리하면서 문제를 만났다.
이전까지는 코드들이 잘 동작하다가 const에 객체를 할당할 경우 객체의 값이 변하거나 내용이 추가되어도 잘 출력되던 것을 기억해서 반복되는 문장을 빼둔 후에 const로 정의해두고 관리를 해보려고 했다. 그랬더니 처음에 설정한 안내 문자만 반복할 뿐 새롭게 업데이트 되지 않았다.
나는 분명히 ${ } 문법을 사용해서 값이 유동적으로 되도록 표시하지 않았나...? 라는 생각을 했었다.
하지만 이는 큰 착각이었다... 결국 백틱을 쓰던 ${ }을 쓰던 컴파일할 때는 그저 문자열일 뿐이다.
const에서 재할당이 되어서 새로운 문자열이 될 수가 있을 턱이 없기에 생긴 당연한 일이었다.
"이렇게 하면 되지 않을까~~??"라고 생각했었는데 내가 es2015 문법에 대해 아직 숙지를 하지 못해서 생긴 해프닝이었다.
반복되는 부분을 줄이고 싶어서 url.select( 변수 ).text(); 부분을 함수화 시켜보는 것도 연구했었지만 크게 유의미하진 않았던것 같아서 다시 원래대로 되돌리게 되었다.
function response(room, msg, sender, isGroupChat, replier) {
if (msg.startsWith(".날씨 ")) {
let weather = msg.slice(4);
if (isNaN(weather)) {
try {
const url = org.jsoup.Jsoup.connect("https://www.google.com/search?q=" + weather + " 날씨").get();
let guide_msg = `지금 현재 ${weather}의 날씨는 ${url.select("#wob_dc").text()}입니다.`+ "\n";
guide_msg+=`온도는 ${url.select("#wob_tm").text()}°C 입니다.`+ "\n\n";
guide_msg+=`강수확률: ${url.select("#wob_pp").text()}
풍속: ${url.select("#wob_ws").text()}
습도: ${url.select("#wob_hm").text()}`;
if(url.select("#wob_dc").text()=="") {
replier.reply("지금 현재 " + weather + "의 날씨를 불러올 수 없습니다.");
return;
}
replier.reply(guide_msg);
}catch(e) {
replier.reply("불러올 수 없는 지역이거나 지원되지 않는 지역입니다.");
return;
}
} else {
replier.reply("지역을 잘못 나타냈어요(EX..날씨 \"조회할 지역\")");
return;
}
}
}
수정하게 된 코드는 다음과 같다
지금 코드의 장점이라면 이전에 비해서 양이 많이 줄었다는 점이 있다.
단점이 있다면 지금 당장 생각나는건 수정에 취약하다는 점이다.
정확히 어떤 수정에 취약하냐면, 만약에 더 이상 내가 구글로부터 날씨를 얻을 수 없게 되었다면?
그때는 다시 구조를 만들고 좀 더 시간이 많이 필요할 것이다.
하지만 원래의 코드라면 좀 더 길지만 구조적이기 때문에 그 부분에 맞는 부분만 갈아끼는 식으로 대응이 가능하다.
프로젝트를 역행해서 그냥 코드를 짧게만 만들어보니
구조화가 왜 중요한지 좀 더 느낄 수 있는 계기가 되었다.
'코딩이야기 > JavaScript' 카테고리의 다른 글
[JavaScript] 코딩테스트 연습, 둘만의 암호 풀이 (0) | 2023.02.08 |
---|---|
[Javascript] js를 이용하여 html 만으로 include 하는 법 (0) | 2023.02.03 |
[Javascript] class와 상속의 사용 예제 (0) | 2023.01.20 |
[let, const] const에 객체를 담았을 때 (0) | 2023.01.20 |
[JavaScript] 주어진 수 n 이하의 모든 짝수의 합을 구하는 여러가지 방법 (0) | 2022.11.11 |