HCD 랩스 10월 4주차

우영·2025년 10월 20일

HDC 랩스 풀스택 1기

목록 보기
9/20

10/20 - 파이썬에서 pub, sub

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰


클래스로 바꾸고 쓰레드 처리

  • mqtt_led_publish_test

오늘의 미션
1. MQttClientTest에서 servo도 publish할 수 있도록

  1. RaspberryPI에서
    led1:led_on, led:2:led_on
    led1:;led_off, led:2:led_off

    를 받아서 1번2번 LED를 켜고 끌 수 있도록 처리

10/21 - 프로젝트 시작

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰


클래스로 바꾸고 쓰레드 처리

  • mqtt_led_publish_test

10/22 - 프로젝트 2일

assignment

review


클래스로 바꾸고 쓰레드 처리

  • mqtt_led_publish_test

강사님 틀 구조 이해- 전체 구성

라즈베리파이(publish) -> MQTT 브로커(Mosquitto) -> 서버(MQttManager.class자바파일)(subscribe) - Service(문자열 해석 및 DTO 변환) - DAO(SQL 실행) - DB(테이블 저장)

  1. 라즈베리파이
  • 측정한 데이터들을 topic+payload로 pub(발행)
    • topic(주소,주제): /로 계층을 나누어 주소로 들어오는 데이터만 받을 수 있게 설정
    • playload : DB에 저장될 값을 문자열 형태로 묶은 것
  1. 서버 -> 브로커로 sub(구독을 신청)
  • 자바파일, 파이썬파일이 될 수 있고 요청을 받아서
  • 메세지가 오면 자동으로 messageArrived() 실행
    • 이 안에 있는 SensorDataServiceImpl()을 호출
  1. SensorImpl에서 가져온 topic과 payload를
    split("/") -> 괄호 안에 있는 것을 기준으로 잘라서 SensorDataDTO 객체에 넣고 묶어줌.

  2. DAO가 SQL 실행하고 DB에 저장

Q. 자바 -> 파이썬으로 pub 할 필요가 있나?
= 명령을 내려서 제어를 할때, 즉 물부족, 온도가 높음 등등 : 주도권이 어디에 있는지 확인 필요

  • UI 메뉴등등 중앙제어센터가 자바여서 자바에서 관리를 함.

10/23 - 프로젝트 3일

assignment

review


DB 구조 이해
//사용자가 로그를 요청히면 db에 저장

📦 SmartFarmSystem
┣ 📂 controller → 프로그램 흐름 제어 (메인, 메뉴 등)
┣ 📂 dao → DB 접근 (데이터 CRUD 담당)
┣ 📂 dto → 데이터 전송 객체 (VO, 모델 역할)
┣ 📂 service → 비즈니스 로직 (DAO를 이용해 기능 수행)
┣ 📂 mqtt → 라즈베리파이 ↔ 서버 MQTT 통신 관리
┣ 📂 util → DB 연결 및 콘솔 유틸 등 공용 기능
┣ 📂 view → 사용자 인터페이스(UI)
┗ 📦 lib, README → 외부 라이브러리 및 설명문

어제 오늘 한것

📁 SmartFarm SensorData 기능 정리
🧩 SensorDataDTO.java

센서 데이터 1건을 담는 객체.
→ DB의 sensor_logs 한 행(row)을 자바 객체로 매핑.

⚙️ SensorDataDAO.java

DB 접근용 인터페이스.
→ 센서 데이터 저장(insert), 조회(getLogsByFarm, getLogsByUser) 메서드 정의.

🧠 SensorDataDAOImpl.java

DB 연동 구현 클래스.
→ SQL 실행(INSERT, SELECT), INTERVAL ? HOUR로 시간별 조회 기능 추가.

🧩 SensorDataService.java

비즈니스 로직 인터페이스.
→ MQTT 수신 데이터 처리(saveData), 최신 로그 조회 등 기능 정의.

⚡ SensorDataServiceImpl.java

MQTT 데이터 파싱 후 DB 저장하는 핵심 클래스.
→ topic.split("/")로 농장번호 추출,
→ payload.split("=")로 센서값 파싱 후 DTO 저장.

🧰 DBUtil.java

DB 연결 관리 유틸.
→ getConnect() / close() 로 연결과 자원 해제 담당.

🔗 전체 흐름

MQTT → Service(saveData) → DAO → MySQL(sensor_logs)
→ 실시간 센서 데이터를 DB에 자동 저장하는 구조 완성.


  • 까먹는거


//	// 특정 팜의 최신 로그 조회 : “현재 환경 상태” 표시할 때 사용
//	SensorDataDTO getLatestLog(int farmUid);
//	// 특정 팜의 로그 조회 : “그래프나 통계 화면”에서 사용
//	List<SensorDataDTO> getLogsByFarm(int farmUid);
	// DB에 접근하는 객체만 가능
	//int saveData(String topic, String payload);

DTO에서 복잡함의 차이

  • SensorDataServiceImpl → 단순 전달 (DAO 호출만)
    • return dao.insertSensorData(data); 짧게 들어감
  • MemberServiceImpl → 검증·분기 등 비즈니스 로직 포함 가능
    • MemberDTO user = memberDAO.login(userId, password);
      System.out.println(user);
      return user;

10/23 - 프로젝트4일 + 수업

assignment

review


spi 통신 - T블럭 8,9, 10번

  • 가상환경 설정

0개의 댓글