WIL - HDC 랩스 풀스택 과정 6-7주차

Gil139·2025년 10월 19일

HDC NOVA

목록 보기
6/6

1. What I Learned? + 느낀 점

10.1 (수) ~ 10.17 (금) 7일간 진행한 내용을 담았습니다.

JDBC - DAO, DTO 개념

10.1 (수) - 10.2 (목) 2일은 JDBC를 기반으로 DAO, DTO 개념을 배워서 적용했다. 간단하게 설명하자면

DAO : Data Access Object 는 직접 DBMS 측과 코드가 통신되는 Object이다.

즉, 이전까지 배웠던 JDBC 개념에 해당하는 코드로, MySQL과 자바를 연결해주는 DriverManagement getConnection 메서드, SQL문을 실행하는 Statement 클래스 등을 사용해 SQL문을 자바에서 직접작성하는 부분이 이에 해당된다.

DTO : Data Tranfer Object로, DB에서 조회한 데이터들을 자바의 다른 컴포넌트에서 사용할 수 있도록 객체로 변환해 데이터를 임시 보관해 전달하는 역할을 맡고있다.

또한 이틀동안 JDBC만을 배우지는 않았고, 시간표 상 IoT 프로그래밍 과목을 배우는 시간이기 때문에, 라즈베리파이의 기초에 대해서도 병행해서 배웠다.

연휴 기간

중간에 추석 연휴가 끼어있어 그동안 배웠던 내용들이 까먹지 않을까 걱정을 했지만, 추석 간 간단하게 내줬던 JDBC 과제를 풀어보면서 배웠던 내용을 리마인드할 수 있었다.

추가로 추석연휴 기간동안 개인적으로 MySQL의 아키텍처, Index, 트랜잭션을 공부했다.

Index의 개념에 대해선 100%는 아니지만 해당 개념에 대해 스스로 이해할 정도로, 남들에게 설명하긴 힘든 그 수준까지 이해했다.

하지만 DBMS의 아키텍처, 트랜잭션의 락, 격리수준은 이해가 잘 되지 않았다. 계속 눈에 익혀가면서 꾸준히 봐야 이해가 되는 지점이 올거 같다. 해당 개념들이 DB의 쿼리 최적화를 시도할 수 있는 핵심 개념인거 같은데, 이번에 처음보는 개념이라 이해하기 어려웠다…

추석 연휴 이후 수업한 일주일 동안은 라즈베리파이, MQTT 통신에 대해서 기초부터 계속~ 실습하면서 개념을 익혔다.

raspberryPI 기초

product.kyobobook.co.kr

라즈베리파이 과목은 “IoT 사물인터넷과 OpenAI 인공지능을 위한 라즈베리파이 5 정석” 도서를 참조해서 병행학습했습니다.

수업 진행은 대략 실습 80%, 이론 20% 비율로 학습을 진행했다.

https://blog.naver.com/heaves1

강사님이 올리신 기존의 임베디드 내용들이 많아 더 쉽게 임베디드 내용을 배울 수 있었다. 라즈베리파이 기초 키트를 기반으로 파이썬과 연동해 파이썬 코드로 IoT 기기들을 제어해보면서 사용방법을 배우고, GPIO 라이브러리를 통해 보드와 연결되는 IoT 기기들을 직접 조작했다.

실습들이 학부때 배웠던 디지털 회로 과목과 뭔가 유사한 느낌을 받았다. 저항을 세팅하고, 전기 신호를 직접 연결하면서 IoT 장치들을 조작하는게 비슷하다 생각이 들었다. 그래서 그런지 이해하기 어려운 개념은 없었고, 재밌게 수업을 들었다.

PWM, Pulse Width Modulation 이라는 개념으로 주파수와 Duty Rate 값을 조절하면서 디바이스 출력형태를 조절하는 것도 흥미있는 개념이였다.

특히 수업 이후 과제로 내주신, 여러 디바이스를 통합해서 파이썬으로 조작하는 과제 덕분에 GPIO로 디바이스를 제어하는 흐름에 대해 확실히 이해할 수 있었다.

MQTT 통신, Message Queuing Telemetry Transport

라즈베리파이 기초 개념들을 배우는 동시에 MQTT 개념도 조금씩 배워갔다. MQTT 구조는 브로커 서버를 통해 publisher와 subscriber가 통신하는 방식으로, 브로커 서버의 IP, Port, Topic 3가지가 동일할 때 publish에서 보내주는 메시지를 subscriber가 수신받을 수 있는 구조이다.

MQTT를 사용하는 소프트웨어도 찾아보니 여러 개 존재했고, 그 중 저전력 센서 같은 IoT 메시지 통신에 유리한 mosquitto를 위주로 학습했다.

Eclipse Mosquitto

mosquitto를 처음 학습할 때엔 단순히 명령어 스크립트를 쳐보면서 어떻게 동작하는지 익혔다.

// 브로커 서버 생성 및 로그 출력
mosquitto -v

// 브로커 서버에 접근하는 publisher, subscriber 생성
mosquitto_sub -h 192.168.14.116 -p 1883 -t iot

mosquitto_pub -h 192.168.14.116 -p 1883 -t iot -m hello

mosquitto, sub, pub 이런 명령어들은 위 mosquitto 공식문서에서도 확인해서 원하는 명령어를 사용해 테스트해볼 수 있다.

MQTT가 어떻게 동작하는지 익숙해진 다음엔, 프로그램에 라이브러리 형태로 제공해주는 방식으로 사용하는 실습을 가졌다.

Paho, MQTT_Client for Java, Python

java와 python에서 MQTT를 사용할 수 있게 해주는 방법 중 하나인 Paho 라이브러리를 사용하는 방법을 배웠다.

두 언어 모두 mqtt_client 클래스를 사용해서 브로커 서버와 통신하는 객체를 생성하고, publish와 subscribe에 따라 옵션을 다르게 설정해주는 방식으로 통신을 진행하는 흐름을 사용했다.

2. 다음 주차 계획, 개선점

이제 다음 주 화요일부터 7일 간 팀 1차 프로젝트를 진행한다.

우리 팀은 4명 규모로, 스마트 빌딩을 주제로 프로젝트를 진행할 계획이다. 프로젝트는 지금까지 배웠던 내용을 총 적용해 코드를 구현하는 소규모 프로젝트라 적용할 기술은 크게 없어보이고, 설계랑 협업, 일정관리만 잘 해주면 무난하게 수행할것 같아보인다…

강사님이 설명해준 프로젝트의 흐름은 다음과 같다(내가 이해하기론).

  1. 라즈베리파이를 통한 스마트빌딩 관련 IoT 환경 세팅

    라즈베리파이를 통해 스마트빌딩에 적용할 수 있는 각종 IoT 디바이스 (문열림센서, 온습도센서, 조명센서 등) 를 빌딩환경처럼 세팅하고, 조작한다.

  2. MQTT를 이용해 라즈베리파이 - 자바 콘솔 통신

    코드 전체를 라즈베리파이 환경에서, 파이썬으로 구현하기엔 무리가 있다. 파이썬으론 디바이스 제어만 수행하고, MQTT 통신으로 데이터 조회와 조작을 자바에서 진행하는 방식으로 전체 구조를 세팅한다.

  3. 자바 - JDBC로 MySQL에 데이터 저장

    IoT를 통해 얻은 주요 데이터들은 DB에 영구저장이 필요하다. 수집한 데이터를 기반으로 날짜 별 대시보드를 만들 수도 있고, 회원 등급 별로 스마트 빌딩을 제어할 수 있게 권한을 부여할 수도 있을 것 같다.

물론 내가 개인적으로 생각한 부분이고, 아직 프로젝트 기능 구상, 설계도 진행하지 않은 단계다. 팀 프로젝트를 정말 오랜만에 진행하는 만큼, 할수 있는 준비를 최대한 해서 후회없이 프로젝트에 몰입해서 좋은 결과 만들고 싶다.

profile
기록하고 공유하는 걸 즐기자

0개의 댓글