Skip to content

Latest commit

ย 

History

History
430 lines (335 loc) ยท 14.7 KB

README.md

File metadata and controls

430 lines (335 loc) ยท 14.7 KB

SSAFY 9๊ธฐ ๊ณตํ†ตํ”„๋กœ์ ํŠธ

๐ŸฆŽ ํŒŒ์ถฉ๋ฅ˜์น˜์›

0๏ธโƒฃ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๐ŸŽˆ ํ”„๋กœ์ ํŠธ๋ช… : ํŒŒ์ถฉ๋ฅ˜์น˜์›

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์ปจ์…‰ : Web IoT๋ฅผ ํ™œ์šฉํ•œ ์Šค๋งˆํŠธ ํŒŒ์ถฉ๋ฅ˜ ์ผ€์ด์ง€

๐Ÿ›  ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 23.07.10 ~ 23.08.18 (6์ฃผ)

๐Ÿง‘๐Ÿป ํŒ€์› : ์ธ์ •ํ™˜, ๊น€๋ฏผํƒœ, ๊น€ํ•œ์ฃผ, ์†์„ธ์ด, ์กฐ์œค์ƒ

๐Ÿ’ป ์‚ฌ์šฉ ๊ธฐ์ˆ ์Šคํƒ : SpringBoot, React, AWS + (4. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ฐธ๊ณ )

1๏ธโƒฃ ํŒ€์› ์ •๋ณด ๋ฐ ์—…๋ฌด ๋ถ„๋‹ด ๋‚ด์—ญ

์ด๋ฆ„ ์—ญํ•  ์„ค๋ช…
์ธ์ •ํ™˜ (ํŒ€์žฅ) IoT MQTT ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์นด๋ฉ”๋ผ ๊ฐ๋„ ์กฐ์ ˆ
flask ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ ์‹ค์‹œ๊ฐ„ ์˜์ƒ
QT ํ”„๋ ˆ์ž„ ์›Œํฌ์™€ uart ํ†ต์‹ ์„ ํ™œ์šฉํ•˜์—ฌ ๋‚ด์žฅ ๋””์Šคํ”Œ๋ ˆ์ด ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
๊น€๋ฏผํƒœ (๋ถ€ํŒ€์žฅ) Backend ํ”„๋กœ์ ํŠธ ๊ธฐํš ๋ฐ ์„ค๊ณ„
Backend Entity ๋ฐ API ๊ตฌํ˜„
Figma ์ œ์ž‘
ERD ์„ค๊ณ„
๊น€ํ•œ์ฃผ Frontend React์™€ TypeScript๋ฅผ ํ™œ์šฉํ•œ Frontend ๊ตฌํ˜„
Zustand๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ตฌํ˜„
Figma ์ œ์ž‘
ERD ์„ค๊ณ„
์†์„ธ์ด IoT IoT Kit ๊ด€๋ฆฌ / Cage ๋ฐ ํญํฌ 3D ๋ชจ๋ธ๋ง
MQTT ํ†ต์‹  ๊ตฌํ˜„
์„ผ์‹ฑ ๋ฐ ์•ก์ธ„์—์ดํ„ฐ ๋™์ž‘ ๊ตฌํ˜„
uart ํ†ต์‹ ์„ ํ†ตํ•œ ์•ก์ธ„์—์ดํ„ฐ ์ œ์–ด ๊ตฌํ˜„
Jira ๊ด€๋ฆฌ
UCC ์ œ์ž‘
์กฐ์œค์ƒ Backend Docker ๋ฐ Jenkins๋ฅผ ํ™œ์šฉํ•œ CI/CD ๊ตฌ์ถ•
Docker ๋ฐ AWS EC2๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ฒ„ ๋ฐฐํฌ
Nginx๋ฅผ ํ™œ์šฉํ•œ Web Server ๊ตฌ์ถ• ๋ฐ Reverse Proxy ์„ค์ •
JWT ๋ฐœ๊ธ‰ ๋ฐ ์ธ์ฆ์„ ํ†ตํ•œ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„
ERD ์„ค๊ณ„

2๏ธโƒฃ ์„œ๋น„์Šค ๋Œ€ํ‘œ ๊ธฐ๋Šฅ

Web

๊ธฐ๋Šฅ ์„ธ๋ถ€๊ธฐ๋Šฅ
ํšŒ์› ๊ธฐ๋Šฅ - ํšŒ์›๊ฐ€์ž… / ๋กœ๊ทธ์ธ / ๋กœ๊ทธ์•„์›ƒ - ํšŒ์›์ •๋ณด ๋ณ€๊ฒฝ ๋ฐ ํƒˆํ‡ด
ํ”„๋กœํ•„ - ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ - ํŒŒ์ถฉ๋ฅ˜ ์ •๋ณด ์กฐํšŒ
์ผ€์ด์ง€ ์ƒํƒœ ์กฐํšŒ - ์ผ€์ด์ง€ ์˜จ๋„ / ์Šต๋„ / UV ๋“ฑ ํ‘œ์‹œ - ์‹ค์‹œ๊ฐ„ ์˜์ƒ ์†ก์ถœ - ์นด๋ฉ”๋ผ ์œ„์น˜ ์กฐ์ข…
์ผ€์ด์ง€ ์ƒํƒœ ์กฐ์ ˆ - ์ผ€์ด์ง€ ์˜จ๋„ / ์Šต๋„ / UV ๋“ฑ ํ™˜๊ฒฝ ์„ค์ •
ํŒŒ์ถฉ๋ฅ˜๋ณ„ ์ •๋ณด ๋“ฑ๋ก - ๋™๋ฌผ์˜ ์ข…๋ฅ˜ ๋“ฑ๋ก - ์ข…๋ฅ˜๋ณ„ ๊ฐ€์ด๋“œ๋ผ์ธ ์ œ๊ณต
๋จน์ด ์ฃผ๊ธฐ ์•Œ๋ฆผ - ๋จน์ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‹œ๊ฐ„์— ๋งž์ถฐ ์•Œ๋ฆผ - ๋จน์ด ์ฃผ๊ธฐ ์ž…๋ ฅ
๋ฌผํ’ˆ ํŒ๋งค์ฒ˜ ์ œ๊ณต - ํŒ๋งค์ฒ˜ ์—ฐ๊ฒฐ

Cage(H/W)

๊ธฐ๋Šฅ ์„ธ๋ถ€๊ธฐ๋Šฅ
์ผ€์ด์ง€ ์—ฐ๋™ ๋ถ€์ฐฉ๋œ ์ผ€์ด์Šค์™€ ์—ฐ๋™
์ผ€์ด์ง€ ์ƒํƒœ ํ‘œ์‹œ ํ˜„์žฌ ์ผ€์ด์ง€ ๋‚ด๋ถ€ ์˜จ๋„ / ์Šต๋„ / UV on/off ํ‘œ์‹œ
์ผ€์ด์ง€ ์ƒํƒœ ์กฐ์ ˆ ํ˜„์žฌ ์ผ€์ด์ง€ ์˜จ๋„ / ์Šต๋„ / UV ๋ณ€๊ฒฝ

IoT

๊ธฐ๋Šฅ ์„ธ๋ถ€ ๊ธฐ๋Šฅ
์˜จ์Šต๋„ ์„ผ์‹ฑ DHT ์„ผ์„œ๋กœ ์˜จ์Šต๋„๋ฅผ ์ธก์ • ํ›„ mqtt ํ†ต์‹ ์œผ๋กœ ๊ฐ’ ์ „๋‹ฌ
์˜์ƒ ์†ก์ถœ Pi Camera๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์˜์ƒ ์†ก์ถœ
์กฐ๋ช… ์œ ์ง€ LED, ์˜จ์—ดํŒจ๋“œ๋กœ ์กฐ๋ช… ์œ ์ง€
์˜จ๋„ ์œ ์ง€ ํŒฌ๊ณผ ์˜จ์—ด ํŒจ๋“œ๋กœ ์˜จ๋„ ์œ ์ง€
์Šต๋„ ์œ ์ง€ ๊ฐ€์Šต๊ธฐ ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ์Šต๋„ ์กฐ์ ˆ
ํญํฌ ์›Œํ„ฐ ํŽŒํ”„ ๋ชจํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ๋ฅด๋Š” ํญํฌ ๊ตฌํ˜„

3๏ธโƒฃ ์„œ๋น„์Šค ํ™”๋ฉด

ํšŒ์›๊ฐ€์ž…

ํšŒ์›๊ฐ€์ž…

์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ

์ „ํ™”๋ฒˆํ˜ธ์ธ์ฆ

๋ฉ”์ธ ํŽ˜์ด์ง€

๋ฉ”์ธํŽ˜์ด์ง€

์ผ€์ด์ง€ ๋งŒ๋“ค๊ธฐ

์ผ€์ด์ง€ ๋งŒ๋“ค๊ธฐ

๋™๋ฌผ ์ถ”๊ฐ€

๋™๋ฌผ์ถ”๊ฐ€

๋™๋ฌผ ์ƒ์„ธ

![๋™๋ฌผ ์ƒ์„ธ](./exec/assets/๋™๋ฌผ ์ƒ์„ธ.gif)

์‹ค์‹œ๊ฐ„ ์˜์ƒ

์‹ค์‹œ๊ฐ„ ์˜์ƒ

์ž๋™ํ™” ์„ค์ •

์ž๋™ํ™” ์„ค์ •

์•Œ๋ฆผ ์ถ”๊ฐ€

์•Œ๋ฆผ ์ถ”๊ฐ€

๋„๊ฐ

๋„๊ฐ

๋กœ๊ทธ์•„์›ƒ

๋กœ๊ทธ์•„์›ƒ

4๏ธโƒฃ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๐ŸŒ ๊ณตํ†ต

์ƒ์„ธ ๋‚ด์šฉ
GitLab ํ˜•์ƒ ๊ด€๋ฆฌ
Jira ์ผ์ • ๋ฐ ์ด์Šˆ ๊ด€๋ฆฌ
Mattermost ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜
Notion ์ผ์ • ๋ฐ ๋ฌธ์„œ ๊ด€๋ฆฌ
IntelliJ IDE (2022.02)
Visual Studio Code IDE

๐Ÿ“ฑ FrontEnd

์ƒ์„ธ ๋ฒ„์ „
React 5.0.1
zustand 4.3.9
react-router-dom 6.14.2
TypeScript 5.1.6
Node.js 18.17.0
NPM 9.6.7

๐Ÿ’พ BackEnd

์ƒ์„ธ ๋ฒ„์ „
JDK (Zulu) 11.0.19
SpringBoot 2.7.13
Mqttv3 1.2.5
JWT 0.9.1
MySQL 8.0.26
Ubuntu 20.04.6 LTS
Nginx 1.18.0
Docker 24.0.5
Docker-compose 2.20.2
Jenkins 2.401.3

โ› IoT

์ƒ์„ธ ๋ฒ„์ „
Arduino Arduino IDE 2.1.1
Raspberry Pi rasbian os 32bit
paho.mqtt 1.6.1
QT Framework 5.15.2
Flask 1.1.2

System Architecture

System Architecture

5๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋ฐ ํ”„๋กœํ† ํƒ€์ž…

๐Ÿ“ฑ FrontEnd

๐Ÿ“‚ mqtt
  ใ„ด๐Ÿ“‚ certs
  ใ„ด๐Ÿ“‚ config
  ใ„ด๐Ÿ“‚ data
  ใ„ด๐Ÿ“‚ logs
๐Ÿ“‚ public
  ใ„ด๐Ÿ“‚ images
  ใ„ด๐Ÿ“„ favicon.ico
  ใ„ด๐Ÿ“„ index.html
  ใ„ด๐Ÿ“„ manifest.json
๐Ÿ“‚ src
  ใ„ด๐Ÿ“‚ assets
  ใ„ด๐Ÿ“‚ components
  ใ„ด๐Ÿ“‚ constants
  ใ„ด๐Ÿ“‚ pages
    ใ„ด๐Ÿ“‚ Auth
      ใ„ด๐Ÿ“„ Login.tsx
      ใ„ด๐Ÿ“„ SignUp.tsx
	ใ„ด๐Ÿ“‚ Cage
    	ใ„ด๐Ÿ“„ AddCage.tsx
        ใ„ด๐Ÿ“„ Cages.tsx
	ใ„ด๐Ÿ“‚ CageDetail
		ใ„ด๐Ÿ“‚ Animal
			ใ„ด๐Ÿ“„ AddAnimal.tsx
			ใ„ด๐Ÿ“„ AnimalDetail.tsx
			ใ„ด๐Ÿ“„ AnimalList.tsx
        ใ„ด๐Ÿ“„ AlarmSetting.tsx
        ใ„ด๐Ÿ“„ AutoSetting.tsx
        ใ„ด๐Ÿ“„ CageDetail.tsx
        ใ„ด๐Ÿ“„ CageInfo.tsx
        ใ„ด๐Ÿ“„ LiveVideo.tsx
	ใ„ด๐Ÿ“‚ Dictionary
		ใ„ด๐Ÿ“„ DicDetail.tsx
        ใ„ด๐Ÿ“„ DicList.tsx
        ใ„ด๐Ÿ“„ Dictionary.tsx
	ใ„ด๐Ÿ“„ Main.tsx
	ใ„ด๐Ÿ“„ MyPage.tsx
  ใ„ด๐Ÿ“‚ store
	ใ„ด๐Ÿ“„ animalDicStore.tsx
    ใ„ด๐Ÿ“„ itemStore.tsx
    ใ„ด๐Ÿ“„ myAnimalStore.tsx
    ใ„ด๐Ÿ“„ myCageStore.tsx
    ใ„ด๐Ÿ“„ myPageStore.tsx
    ใ„ด๐Ÿ“„ mySettingStore.tsx
    ใ„ด๐Ÿ“„ userInfoStore.tsx
  ใ„ด๐Ÿ“‚ styles
  ใ„ด๐Ÿ“„ App.css
  ใ„ด๐Ÿ“„ App.tsx
  ใ„ด๐Ÿ“„ index.css
  ใ„ด๐Ÿ“„ index.tsx
  ใ„ด๐Ÿ“„ logo.svg
  ใ„ด๐Ÿ“„ react-app-env.d.ts
  ใ„ด๐Ÿ“„ reportWebVitals.ts
๐Ÿ“„ .gitignore
๐Ÿณ docker-compose.yml
๐Ÿณ Dockerfile
๐Ÿ“„ nginx.conf
๐Ÿ“„ package-lock.json
๐Ÿ“„ package.json

๐Ÿ’พ BackEnd

๐Ÿ“‚ src/main/java
  ใ„ด๐Ÿ“ฆ com.ssafy.a101
  	ใ„ด๐Ÿ“„ A101Application.java
  	ใ„ด๐Ÿ“ฆ api
  		ใ„ด๐Ÿ“ฆ controller
        	ใ„ด๐Ÿ“„ AlarmController.java
            ใ„ด๐Ÿ“„ AnimalController.java
            ใ„ด๐Ÿ“„ AutoSetController.java
            ใ„ด๐Ÿ“„ CageController.java
            ใ„ด๐Ÿ“„ DictionaryController.java
            ใ„ด๐Ÿ“„ StoreController.java
            ใ„ด๐Ÿ“„ UserController.java
		ใ„ด๐Ÿ“ฆ request
        	ใ„ด๐Ÿ“„ AddAlarmRequest.java
            ใ„ด๐Ÿ“„ AddAnimalRequest.java
            ใ„ด๐Ÿ“„ AddAutoSetRequest.java
            ใ„ด๐Ÿ“„ AddCageRequest.java
            ใ„ด๐Ÿ“„ AddUserRequest.java
            ใ„ด๐Ÿ“„ LoginUserRequest.java
            ใ„ด๐Ÿ“„ SmsRequest.java
            ใ„ด๐Ÿ“„ UpdateAlarmRequest.java
            ใ„ด๐Ÿ“„ UpdateAnimalRequest.java
            ใ„ด๐Ÿ“„ UpdateAutoSetRequest.java
            ใ„ด๐Ÿ“„ UpdateCageRequest.java
            ใ„ด๐Ÿ“„ UpdateUserRequest.java
		ใ„ด๐Ÿ“ฆ response
        	ใ„ด๐Ÿ“„ AlarmResponse.java
            ใ„ด๐Ÿ“„ AnimalResponse.java
            ใ„ด๐Ÿ“„ AutoSetResponse.java
            ใ„ด๐Ÿ“„ CageResponse.java
            ใ„ด๐Ÿ“„ DictionaryResponse.java
            ใ„ด๐Ÿ“„ SmsResponse.java
            ใ„ด๐Ÿ“„ StoreResponse.java
            ใ„ด๐Ÿ“„ UserResponse.java
      	ใ„ด๐Ÿ“ฆ service
        	ใ„ด๐Ÿ“„ AlarmService.java
            ใ„ด๐Ÿ“„ AnimalService.java
            ใ„ด๐Ÿ“„ AutoSetService.java
            ใ„ด๐Ÿ“„ CageService.java
            ใ„ด๐Ÿ“„ DictionaryService.java
            ใ„ด๐Ÿ“„ SmsService.java
            ใ„ด๐Ÿ“„ StoreService.java
            ใ„ด๐Ÿ“„ UserService.java
	ใ„ด๐Ÿ“ฆ config
    	ใ„ด๐Ÿ“„ EmailConfig.java
        ใ„ด๐Ÿ“„ JwtFilter.java
        ใ„ด๐Ÿ“„ MqttPubConfig.java
        ใ„ด๐Ÿ“„ MqttSubConfig.java
        ใ„ด๐Ÿ“„ SecurityConfig.java
	ใ„ด๐Ÿ“ฆ db
    	ใ„ด๐Ÿ“ฆ entity
        	ใ„ด๐Ÿ“„ Alarm.java
            ใ„ด๐Ÿ“„ Animal.java
            ใ„ด๐Ÿ“„ AutoSet.java
            ใ„ด๐Ÿ“„ Cage.java
            ใ„ด๐Ÿ“„ Dictionary.java
            ใ„ด๐Ÿ“„ Message.java
            ใ„ด๐Ÿ“„ Store.java
            ใ„ด๐Ÿ“„ User.java
        ใ„ด๐Ÿ“ฆ repository
        	ใ„ด๐Ÿ“„ AlarmRepository.java
            ใ„ด๐Ÿ“„ AnimalRepository.java
            ใ„ด๐Ÿ“„ AutoSetRepository.java
            ใ„ด๐Ÿ“„ CageRepository.java
            ใ„ด๐Ÿ“„ DictionaryRepository.java
            ใ„ด๐Ÿ“„ StoreRepository.java
            ใ„ด๐Ÿ“„ UserRepository.java
	ใ„ด๐Ÿ“ฆ util
    	ใ„ด๐Ÿ“„ TokenUtil.java
๐Ÿ“‚ src/main/resources
    ใ„ด๐Ÿ“‚ static
    ใ„ด๐Ÿ“‚ templates
    ใ„ด๐Ÿ“„ application.yml
๐Ÿ“„ .gitignore
๐Ÿ“„ .gitkeep
๐Ÿณ docker-compose.yml
๐Ÿณ Dockerfile
๐Ÿ˜ build.gradle
๐Ÿ˜ gradlew
๐Ÿ˜ gradlew.bat
๐Ÿ˜ settings.gradle

โ› IoT

๐Ÿ“‚ ESP
	ใ„ด๐Ÿ“„ main.ino
	ใ„ด๐Ÿ“„ header.h
	ใ„ด๐Ÿ“„ actuator.h
	ใ„ด๐Ÿ“„ sensing.h
	ใ„ด๐Ÿ“„ mqtt.h
	ใ„ด๐Ÿ“„ uartSerial.h
๐Ÿ“‚ RPI4
	ใ„ด๐Ÿ“„ main.py
๐Ÿ“‚ Koisk
    ใ„ด๐Ÿ“„ main.py
    ใ„ด๐Ÿ“„ kiosk.py
    ใ„ด๐Ÿ“„ kiosk.ui

6๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง (ERD)

ERD

7๏ธโƒฃ Convention

Commit Convention

"[Type] #(Jira issue number) Commit message"

  • Type
    • Fix : ์ž˜๋ชป๋œ ๋™์ž‘์„ ๊ณ ์น  ๋•Œ

      fix function/error/typo in style.css

    • option

      • funtion : ๊ณ ์นœ ํ•จ์ˆ˜ ๋ช… (e.g. fix login function in index.html)
      • error : ์ˆ˜์ •ํ•œ ์—๋Ÿฌ (e.g. fix [๊ตฌ์ฒด์  ์—๋Ÿฌ๋ช…] error in login.js)
      • typo : ์˜คํƒ€ (e.g. fix typo in style.css)
    • Add : ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ถ”๊ฐ€ํ•  ๋•Œ

      add mytest.test for test (์ƒˆ๋กœ์šด ํŒŒ์ผ ์ถ”๊ฐ€ ์‹œ)

      add blue color to style.css (๊ธฐ์กด ํŒŒ์ผ์— ๋‚ด์šฉ ์ถ”๊ฐ€ ์‹œ)

    • Move : ์ฝ”๋“œ๋‚˜ ํŒŒ์ผ์„ ์ด๋™ํ•  ๋•Œ

      move A to B (e.g. A๋ฅผ B๋กœ ์ด๋™ํ•  ๋•Œ)

    • Rename : ์ด๋ฆ„ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ

      rename A to B (e.g. A๋ฅผ B๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ๋•Œ)

    • Update : ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ํŒŒ์ผ์„ ๋ณด์™„ํ•˜๋Š” ๊ฒฝ์šฐ

      update test.js to use HTTPS (test.js์— ๊ธฐ์กด์˜ ํ”„๋กœํ† ์ฝœ์—์„œ HTTPS ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ์œผ๋กœ ๋ณ€๊ฒฝ)

    • Remove : ์‚ญ์ œ๊ฐ€ ์žˆ์„ ๋•Œ

      remove test.js (ํŒŒ์ผ ์‚ญ์ œ ์‹œ)

      remove black color from style.css (ํŒŒ์ผ ๋‚ด ๋ถ€๋ถ„ ์‚ญ์ œ ์‹œ)

  • #(Jira issue number) : Click ์‹œ, Jira์—์„œ ํ•ด๋‹น Issue์— ๋Œ€ํ•œ ์ƒ์„ธ ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅ
  • Commit message : ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ์ˆ 

8๏ธโƒฃ Git Flow

master
โ”” develop
  โ”œ feature-front
  โ”œ feature-back
  โ”œ feature-iot
  โ”” feature-log
  • master : ์šด์˜ ์„œ๋ฒ„๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜
  • develop : ๋‹ค์Œ ์ถœ์‹œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • feature : ์„ธ๋ถ€ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • front : ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • back : ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • iot : ์ž„๋ฒ ๋””๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • log : ๊ธฐ๋ก ๋ฐ ๊ธฐํƒ€

9๏ธโƒฃ ํšŒ๊ณ 

์ด๋ฆ„ ๋‚ด์šฉ
์ธ์ •ํ™˜
๊ฐ์ž ๋งก์€ ๋ถ€๋ถ„๋“ค์„ ์ฑ…์ž„๊ฐ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ํ•ญ์ƒ ์†Œํ†ตํ•˜๊ณ  ์„œ๋กœ ๋ฐฐ๋ คํ•˜๋Š” ๋ถ„์œ„๊ธฐ๊ฐ€ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•˜๊ณ  ๋„์™€์ค˜์„œ mqtt ๋ฐ https ํ†ต์‹  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
๊น€๋ฏผํƒœ
๋‹ค ๊ฐ™์ด ๋ชจ์—ฌ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ์ข‹์€ ์˜๊ฒฌ์„ ํ•ญ์ƒ ๋‚˜๋ˆ„๊ณ  ๊ฐ์ž์˜ ์ž‘์—…์„ ํ•  ๋•Œ๋Š” ์—ด์‹ฌํžˆ ์ˆ˜ํ–‰ํ•ด์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฐฉ์‹คํžˆ ์ด๋ฃจ์–ด์กŒ๋˜ ์ ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ํŠนํžˆ MQTT ํ†ต์‹ ์„ ํ•  ๋•Œ๋Š” ์›ํ™œํ•œ ์˜์‚ฌ์†Œํ†ต์„ ํ†ตํ•ด ๊ฐ์ž ๋งก์€ ํŒŒํŠธ์™€ ๊ต๋ฅ˜ํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ ์„ฑ์žฅํ–ˆ๋‹ค๊ณ  ๋Š๋‚€ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค.
๊น€ํ•œ์ฃผ
์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ๊ณ„ํš๋ณด๋‹ค ๊ธฐ๊ฐ„์ด ๋งŽ์ด ์ง€์—ฐ๋จ์—๋„ ์‹ซ์ฆ๋‚ด์ง€ ์•Š๊ณ , ๋ฌต๋ฌตํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ธฐ์–ต์ด ์ƒ๋‹นํžˆ ์ข‹๊ฒŒ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.
MQTT ๋ณด์•ˆ ์—ฐ๊ฒฐ์ด๋‚˜ ์‹ค์‹œ๊ฐ„ ๋™์˜์ƒ ์†ก์ถœ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค ๊ฐ™์ด ํ•ด๊ฒฐํ•œ ๊ฒƒ์ด ๊ฝค๋‚˜ ๊ฐ’์ง„ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์†์„ธ์ด
์›น๊ณผ ํ†ต์‹ ์„ ์ฒ˜์Œ ์‹œ๋„ํ•ด๋ณด๋Š” ๊ณผ์ •์—์„œ MQTT ํ†ต์‹  ๊ด€๋ จ ์–ด๋ ค์›€์ด ๋งŽ์•˜์ง€๋งŒ ๊ฐ์ž ๋‹ด๋‹นํ•œ ๋ถ€๋ถ„์—์„œ ์†Œํ†ตํ•˜๋ฉฐ ํ˜‘๋ ฅํ•œ ๊ฒฐ๊ณผ, ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ข‹์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์กฐ์œค์ƒ
์šฐ์„  ๋ถˆํ˜‘ํ™”์Œ์—†์ด ์ข‹์€ ํŒ€์›Œํฌ๋กœ ์„ฑ๊ณต์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€ ์กฐ์›๋“ค์—๊ฒŒ ๋„ˆ๋ฌด๋‚˜ ๊ฐ์‚ฌํ•˜๊ณ , ์ง€๋‚œ 6์ฃผ๋™์•ˆ ์Šค์Šค๋กœ ๋งŽ์€ ์„ฑ์žฅ์„ ์ด๋ฃฌ ๊ฒƒ ๊ฐ™์•„์„œ ์ข‹์Šต๋‹ˆ๋‹ค.