8주 차 DHT11 센서를 활용한 온습도 측정 웹 서버 구축 - park-02/2024-1_Smart-Devices GitHub Wiki

목차

  • 포트
  • 포트 번호
  • 포트 포워딩
  • 포트 포워딩 설정하기
  • 고정 IP 유동 IP
  • DDNS
  • 5-4 실습
  • 5-4 숙제
  • 실습[5]
  • 후기

포트

포트는 네트워크 통신에서 사용되는 개념으로, 하나의 컴퓨터에 여러 개의 네트워크 서비스나 애플리케이션이 실행될 수 있습니다. 각각의 서비스나 애플리케이션은 고유한 포트 번호를 갖게 되며, 클라이언트가 해당 서버에 접속할 때 이 포트 번호를 사용하여 특정 서비스에 연결됩니다. TCP/IP 프로토콜을 사용할 때는 이러한 포트 번호를 통해 통신을 합니다. 이런 방식으로 포트를 사용하여 네트워크 상에서 특정 서비스에 접속할 수 있습니다.

image

위 그림에서는 한 서버 인스턴스에서 웹 서버와 메일 서버 두 개를 동시에 실행 중인 상황을 보여줍니다. 이렇게 여러 서비스가 동시에 실행되는 경우, 클라이언트가 서버에 요청을 보낼 때 IP 주소만으로는 어느 서비스로 요청을 보내야 하는지 알 수 없습니다. 이를 해결하기 위해 포트 번호를 사용하여 각 서비스를 특정합니다. 각 서비스는 고유한 포트 번호를 가지고 있으며, 클라이언트는 이 포트 번호를 이용하여 특정 서비스로의 요청을 보낼 수 있습니다. 이렇게 함으로써 클라이언트와 서버 간의 통신이 원활하게 이루어집니다.

포트 번호

포트 번호는 네트워크 통신에서 특정 프로세스나 서비스를 식별하기 위해 사용되는 숫자입니다. 포트 번호를 사용하여 클라이언트는 서버의 특정 프로세스에 접근할 수 있습니다. TCP 및 UDP와 같은 프로토콜을 사용하는 통신에서는 포트 번호가 헤더에 포함되어 있으며, 이를 통해 통신하는 애플리케이션이나 서비스가 무엇인지 식별할 수 있습니다. 이러한 방식으로 포트 번호는 네트워크 통신에서 중요한 역할을 합니다.

image

포트 포워딩

포트 포워딩은 사용자가 외부에서 내부 네트워크에 있는 서비스에 접속할 수 있도록 하는 기술입니다. 이를 위해서는 다음과 같은 단계를 거칩니다.

  • 1.내부 서버 설정: 지역 네트워크 안에 있는 서버(예: 웹 서버)를 설정합니다. 이 서버는 내부 네트워크의 특정 IP 주소와 포트 번호에서 동작합니다.
  • 2.라우터 설정: 라우터 또는 방화벽 설정에서 포트 포워딩을 구성합니다. 이 설정은 외부에서 접속하려는 포트와 해당 포트로 향하는 내부 서버의 IP 주소와 포트 번호를 지정합니다.
  • 3 외부에서 접속: 사용자가 외부에서 내부 서버에 접속하려고 할 때는 공인 IP 주소와 포트 번호를 사용합니다. 라우터는 이 정보를 이용하여 내부 서버의 IP 주소와 포트 번호로 트래픽을 전달합니다. 이런 방식으로 포트 포워딩은 외부에서 내부 네트워크에 있는 서비스에 접속할 수 있도록 합니다.

포트 포워딩 설정하기

  1. Window 찾기에서 명령 프롬프트(cmd) 눌러 ipconfig 입력하고 기본 게이트웨이의 IP 복사하여 웹 브라우저에 입력하여 로그인하고 관리 도구 들어갑니다.

111

  1. 고급 설정, NTA/라우터 관리, 포트 포워드 설정 순으로 선택해서 들어갑니다.

222

  1. 규칙 이름을 입력, 포트 선택, 내부 IP 주소 입력, 적용, 저장합니다.

3333

  1. 적용이 완료되었습니다.

4444

고정 IP

고정 IP는 한 번 부여되면 IP를 반납하기 전까지는 다른 장비에 할당되지 않는 공인 IP 주소를 의미합니다. 이는 인터넷 사이트나 서비스를 운영할 때 중요한 역할을 합니다. 외부에 공개된 IP 주소가 변경되면 사용자가 해당 서비스를 찾을 때 어려움이 생기기 때문에, 고정 IP를 사용하여 이러한 문제를 방지할 수 있습니다. 또한, 고정 IP는 보안성이 뛰어나기 때문에 보안이 필요한 기관이나 업체에서 주로 사용됩니다.

유동 IP

유동 IP는 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소 중에서 동적으로 변경되는 IP 주소를 가리킵니다. 대부분의 가정용 인터넷 사용자들은 유동 IP를 사용하며, 이는 ISP가 인터넷을 사용하는 기기에 대해 IP 주소를 회전시켜 할당하는 것을 의미합니다.

유동 IP를 사용하는 이유 중 하나는 ISP가 더 많은 사용자에게 서비스를 제공하기 위함입니다. 유동 IP를 사용하면 기기가 인터넷에 접속할 때마다 ISP는 사용 가능한 IP 주소 중 하나를 할당하게 됩니다. 이렇게 함으로써 ISP는 IP 주소를 효율적으로 관리할 수 있고, 필요에 따라 유동적으로 할당할 수 있습니다.

그러나 유동 IP를 사용하는 경우에는 기기가 꺼져 있더라도 ISP가 IP 주소를 유지할 수 있습니다. 이는 IP 주소 부족 문제를 일부 해결할 수 있지만, 여전히 IP 주소의 유한성은 존재합니다. 따라서 기기가 종료되면 ISP는 해당 IP 주소를 회수하여 다른 사용자에게 할당할 수 있습니다.

DDNS

DDNS는 IP 주소가 동적으로 변경될 때 DNS 레코드를 자동으로 업데이트하여 도메인 이름을 해당 IP 주소에 매핑하는 서비스입니다. 이를 통해 사용자는 고정된 도메인 이름을 통해 네트워크에 접속할 수 있으며, IP 주소의 변경으로 인한 불편함을 최소화할 수 있습니다. 일반적으로 가정용 인터넷 서비스에서는 유동 IP를 사용하므로 DDNS 서비스를 이용하여 외부에서 해당 네트워크에 쉽게 접속할 수 있습니다.


5-4 실습

실습 내용

이번 실습에서는 DHT11 센서를 사용하여 온도와 습도를 측정하고, 이 값을 웹 서버를 통해 실시간으로 표시하는 예제입니다.

준비물

회로 연결

소스코드

323211587-fdcd1e37-100e-4d88-b7c7-9b6e0eb3998e 5-42 5-43 5-44

실행

  • ESP32 보드를 컴퓨터에 연결합니다.
  • Arduino IDE에 소스코드를 컴파일하고 업로드합니다.

KakaoTalk_20240430_201602053

KakaoTalk_20240430_201507299

결과

  • 사용자가 웹 페이지에서 다른 동작을 하지 않는 한, 온도 및 습도 값은 계속해서 실시간으로 업데이트됩니다.

5-4 숙제

숙제 내용

5-4예제 코드에 있는 HTML 등 복잡한 요소를 제외하고, text/plain 형식의 코드로 수정하여 간단하게 만드는 것입니다.

준비물

회로 연결

소스코드

11111111111

2222222222222

실행

  • ESP32 보드를 컴퓨터에 연결합니다.
  • Arduino IDE에 소스코드를 컴파일하고 업로드합니다.

KakaoTalk_20240501_222306178

KakaoTalk_20240501_222248813

결과

  • 5-4 예제 코드에 있는 복잡한 코드들이 사라지고 text/plain 형식을 활용하여 간단한 코드와 간단한 값이 출력이 됩니다. 하지만 단점이 있습니다. 값이 실시간으로 바뀌지 않습니다. F5를 눌러 계속 새롭게 갱신을 해줘야지 값이 바뀝니다.

실습[5]

실습내용

DHT11 센서의 온도와 습도를 표시하는 웹 서버를 인터넷에 노출하고, 외부에서 접속할 수 있도록 하는 실습을 해보겠습니다.


KakaoTalk_20240428_191138159


  • 2 Ngrok 인증키 받기
    -https://ngrok.com에 로그인하고 “Setup & lnstallation” 메뉴에서 빨간색 테두리 안에 있는 인증키를 복사해 줍니다.

KakaoTalk_20240430_201227541


  • 3-1 Ngrok 인증키 값 저장하기
    -"ngrok config add-authtoken 인증키 값" 처음 다운로드한 명령 프롬프트(cmd) 창에서 실행하여 인증키 값을 저장해 줍니다

KakaoTalk_20240430_201103372

  • 3-2
    -"ngrok tcp (서버 IP:포트)를 입력해 줍니다.

KakaoTalk_20240430_201150352


  • 4 Ngrok 실행
    -"ngrok tcp 서버 IP:서버 포트" 명령을 프롬프트 창에서 실행하여 웹서버를 외부로 호스팅합니다.

KakaoTalk_20240430_200852094

  • 5 외부 접속 확인
    -프롬프트 창에서 확인한 URL을 외부 네트워크에 있는 브라우저 주소창에 입력하여 결과를 확인합니다.
    ** tcp://는 제외하고 주소창에 0.tcp.jp.ngrok.io:11074를 입력해야 합니다.

KakaoTalk_20240430_201611012

결과

Ngrok을 사용하여 로컬 웹 서버를 외부에 노출시켰습니다. Ngrok에서 제공하는 공용 URL을 통해 외부에서 접속할 수 있도록 하였습니다.


후기

이번 실습에서는 DHT11 센서를 활용하여 온도와 습도를 측정하고, 이를 웹 서버를 통해 실시간으로 표시하는 방법을 배우고, 웹 서버를 구축하여, 외부 접속을 허용하는 과정을 경험하여 매우 유익했습니다. 또한 이를 외부에서 접속할 수 있도록 설정하는 과정에서 고정 IP, 유동 IP, 그리고 DDNS에 대한 이해를 높일 수 있었습니다. 이를 통해 네트워크 관리에 대한 이해를 향상시키고, 외부 접속 가능한 도메인을 설정하는 과정을 경험했습니다. 또한, 네트워크 관리와 보안에 대한 중요성을 명확하게 이해할 수 있었습니다.