엔씨엘에서 두번째로 받은 단기프로젝트.
유해물질 측정 센서의 결과 값 다루는 프로젝트가 사내에서 진행중이다.
하지만 센서가 문제가 있는지 1분에 한 번씩 검출해야하는데 간혹 센서가 꺼져버리는 경우도 있다고 한다.
결론은 5개의 센서가 잘 살아있는지 알아보고 싶은 것이였다.
부장님의 요구사항은 이것이였다.
내가 출근하자마자 외부 센서 API를 확인한 후 어제는 센서가 이상이 없었는지 부장님께 구두로 알려드리는 것.
그런데 내가 이것을 자동화를 시켜보겠다 하였다. 이러면 부여받은게 아니라 사실 일을 만들어서 한 거긴 하다.
같이 실습생으로 있는 형님 한분과 함께 총 2인에서 단기 프로젝트를 시작하였다.
#1 WebScraping
API서버를 이용해서 결과값을 받는 방법도 있지만, 문제는 이것이였다.
"API서버는 5분단위의 정보만 제공하지, 하루치의 정보를 통째로 제공하지 않음"
하루가 1440분이니까 288번 API서버를 다녀와야한단 소리다.
그런데 웹페이지에서는 하루치를 통째로 보여주네? 이것을 이용해보기로 한것이다.

먼저 이렇게 Get방식으로 웹페이지에 접속하는것을 이용하여 원하는 날짜의 정보와 원하는 센서의 값을 가져올 수 있도록 하게 하였다.
#2 Auto-Mailing
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
Maven을 통해 위와 같은 라이브러리들을 추가했다.
웹스크래핑을 한번 하는데 걸리는 시간은 체감상 1~2초
5개의 센서를 확인해야하지 곱하기 5 하면 5~10초
메일보내는데 약 5초
도합 최대 15초의 시간이 걸리는 연산.
나는 이것을 쓰레드로 구현하였다.

단순히 데이터를 웹스크래핑을 통해 가져오는 WebScraping Class의 doScrape static 메소드를 이용해 정보를 가져온 뒤
다시 calcCount() 메소드를 이용해 숫자를 세준다.
마지막으로 맵의 내용을 String문자열로 변환해주는 mapToString() 메소드를 실행해서 메일전송을 요청하면 끝.
찍고보니, 사진에서는 String에 += 연산을 하였지만, 메모리관리나 연산시간을 단축할겸 StringBuilder나 StringBuffer를 이용해야 할것 같다.
리펙토링이 이래서 중요하다.

또한 웹서버를 배포해 customThread가 위와 같은 방법으로 오전 07시가 되면 메일을 보낼 수있게 하였다.
메일을 보내는 쓰레드는 15초정도가 걸리니 이것도 당연히 쓰레드로 구현했다.
전날의 시간에 발생한 모든 센서값을 최종적으로 메일로 전송하도록 하였다.
웹 분야는 정말 사용분야가 무궁무진한 것 같다.
코드로 메일을 보낼 수 있다는 것도 신기했는데, 생각해보니, 우리 생활 근처에 많았다.
대표적인 예시가 바로 홈페이지 비밀번호 찾기 메일.
하나하나 배워가는 것은 정말 재미있는 것 같다.
'My Project' 카테고리의 다른 글
왕이 되자 (프로젝트명 : President.CQ) (0) | 2022.09.21 |
---|---|
한성대학교 기자재 대여 통합 시스템 (0) | 2022.09.06 |
스터디카페앱 DB관리자 웹페이지 (0) | 2022.08.08 |
2021 국방로봇경진대회 (0) | 2022.06.12 |
한성대학교 메타버스 캠퍼스 : HSU_On (0) | 2022.06.09 |