본문 바로가기

스마트팜

웹 서버 구축 하기 - 2

728x90

Django란?

 

파이썬 기반으로 만들어진 웹 프레임워크입니다

프레임워크가 뭐지? --> 프레임워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다. (출처 나무위키)

 

웹 프레임워크을 왜 사용할까?

 

웹서버을 하기 위해서는 A(apache),P(php),M(mysql) 첫글자을 따서 AMP가 있어서 웹 서비스을 할 수 있습니다

이제는 웹 프레임워크가 A(apache)+P(php) --> 지원해주겠다 왜? 좀 더 편하게 쓰기위해서 

apache(HTTP 웹 서버 정적 데이터) + PHP(웹서버 데이터를 처리해주는 동적 데이터)

--> django에서 http 웹서버와 데이터까지 처리하기 좋은 웹프레임워크

자바 node.js , sping 로 있습니다.

 

 

웹 프레임워크가 MVC 모델에 대해서 들어본적이 있을 것이다. 

M(model) --> 데이터을 가공하는 느낌(mysql) 꼭 db 내용이 정보을 가공할 수 있다 느낌임

V(view) --> 가공한 데이터을 다른 사람한테 보여주는 곳 

C(Controller) --> 데이터 흐름을 어떻게 처리할 것인가 

 

django에서는 

M(model) --> models.py

V(view) --> views.py

C(Controller) --> urls.py

 

해당하는 파이썬에 코딩해서 웹프레임 워크을 사용합니다.

 

 

서비스는 뭘까? 서비스 Service 해석하면 "제공하다" 서버에서 제공하는 것이다 

서버에서 DB도 사용하고, 서버에서 모든 것을 관리해야한다.

 

 

1. django 설치하기 

 

python -m pip install Django
// python -m pip install Django==3.1.5 버전 지정하는 방법

2021/01/26기준 Django 최신 버전은 3.1.5 입니다

 

django는  url --> view --> html 데이터 이런 흐름으로 전달합니다

 

 1.1 django 사용하기

 

// django-admin startproject [프로젝트명] // 프로젝트명이 test하면 안됌 장고안에 test폴더을 사용중임

django-admin startproject djangotest

cd djangotest

// python manage.py startapp [app이름] //app생성하기
python manage.py startapp mysite

 1.2 django 세팅하기

 

  djangotest--> settings.py (djangotest(project)에 mysite(app)을 추가하는 방법)

app 추가하기

cf. 나중에 글을 적을 예정이지만 만약에 장고가 진짜로 웹서버을 하기위해서는 외부에서 접근하기 위해서

(settings.py)에 있어야 합니다.

 

 ALLOWED_HOSTS = [] -->  ALLOWED_HOSTS = ["*"] 

이렇게 바꿔주면 외부에서 모든 사용자을 접근할 수 있게 할 수 있습니다.

 

 

 

CSRF 끄기

 

CSRF는 API에서 사용하지 않는 기능입니다.


POST로 값을 보내려면 DJANGO에서 제공하는 CSRF을 꺼야 합니다.

 

다른 방법도 있지만 개발할때 끄는게 편해서 이렇게 설정해주세요

 

 

djangotest--> urls.py (djangotest(urls)에 mysite(urls)을 추가하는 방법)

 

app의 경로을 지정

 

2. mysite(app)을 커스텀마이징해야합니다.

 

목적은 스마트팜을 하는 웹서버 웹프레임워크(django)을 사용해서 클라이언트에게 서비스을 제공해야 합니다.

  앞에서 이야기 했지만 데이터 흐름이 urls --> views --> templates(html) 이런 순서로 갑니다.

 

 

 

 

 

2.1 mysite(app) urls.py 

 

처음에 urls.py가 파일이 없습니다. 직접 파일을 만들어야 합니다.

1 : djangotest(project) --> mysite(app)로 urls 경로을 불러옵니다

2 : views을 불러옵니다.

3 : " ' '로 들어오면 views에 있는 index함수을 호출하겠다" 라는 의미입니다

 

2.2 mysite(app) views.py

 

 

이런식으로 장고가 작동합니다. 기초적인 사용법입니다.

 

cf. Django 서버 가동 시키는 방법:

python manage.py runserver [GCP 내부 IP]:[port 번호]

// putty창 꺼도 장고서버가 계속 작동하게 하는 법
nohup python manage.py runserver [GCP 내부 IP]:[port 번호] &

port 번호는 장고서버에서 안쓰고 있는 포트번호로 사용하시면 됩니다

 

리눅스 네트워크 확인

netstat -anlp | grep :[찾고자하는 포트번호]

 

 

 

3. 아두이노와 장고와 통신을 하기위해서는 MQTT로 통해서 연결해야 합니다.

MQTT ?

 

MQ(message queue): 메시지기반으로 애플리케이션, 서버, 시스템과 연결하는 비동기적 방식입니다.

MQTT : MQ기반으로 topic의 값을 통해 publish와 subscribe 통신하는 방법입니다.

 

 

 

 

MQTT 사용하기 위해서 새로운 서버에 설치할려고 합니다. 다시 GCP 리눅스을 만듭니다.

 

sudo apt install mosquitto // mosquitto 설치

mosquitto 설치시 자동으로 작동하게 됩니다. mosquitto 접속 로그을 보기 위해서 mosquitto을 끄고 다시 키면 접속 로그을 볼 수 있습니다. 

 

mqttfx.jensd.de/ 이 사이트는 mqtt을 통해서 값을 쉽게 볼 수 있게 하는 프로그램입니다. 

 

톱니바퀴 --> broker address에서 GCP 외부 ip을 적어주시면 접속 할 수 있습니다.

 

만약에 접속이 안되다면 GCP 방화벽을 port가 열려 있는지 확인해야합니다.

 

방화벽 확이하는 방법

 

4. DJango에서 mqtt publish을 하기위해서 Django 역시 mosquitto을 설치해야합니다.

 

   view에서 mqtt라이브러리을 사용해 view에서 publish 할수 있습니다.

 

#subscribe.py

import paho.mqtt.client as mqtt

def on_message(client,userdata,message):
    print("Message received" , str(message.payload.decode("utf-8")))
    print("Message topic" , message.topic)
    print("Message qos=", message.qos)
    print("Message retain flag=", message.retain)

broker_address="[mqtt ip]"
client1 = mqtt.Client("client1")
client1.connect(broker_address)
client1.subscribe("topic")
client1.on_message = on_message
client1.loop_forever()
    
    

 

 

#publish.py

import paho.mqtt.client as mqtt

mqttc = mqtt.Client("client2")
mqttc.connect("mqtt 서버 ip",1883)
mqttc.publish("topic","보내고 싶은 데이터")

 

cf 아두이노 HTTP 통신 하지 않고 MQTT통신을 쓰는 이유 

1. 아두이노가 ip을 지정할 수가 없어서 장고에서 mqtt을 이용해서 값을 전달하는 방식입니다. 

   아두이노가 ip을 지정할 수 있다고 하는 것은 내부 ip안에 에서 활당할 수있다고 생각합니다.

2.kay0426.tistory.com/14

 

 

해당 소스 깃허브 : github.com/wjswls456/smartfarm/tree/main/rest

'스마트팜' 카테고리의 다른 글

아두이노 형변환  (0) 2021.01.29
아두이노 인증  (0) 2021.01.29
축소형 스마트팜 (백엔드) - 1  (0) 2021.01.19
웹 서버 구축 하기 - 1  (0) 2021.01.07
스마트팜 아쿠아포닉스  (0) 2020.12.21