AWS 6주차 - AWS IoT와 EC2 기반 웹사이트 구축: IoT Core 연결부터 인스턴스 설정 및 사이트 운영

채연·2025년 2월 9일

aws

목록 보기
7/7
post-thumbnail

(1) AWS IoT Core란 무엇인가

AWS IoT Core는 클라우드에서 IoT(사물인터넷) 기기를 안전하게 연결하고 관리할 수 있도록 지원하는 서비스이다. 다양한 IoT 기기가 데이터를 주고받을 수 있도록 MQTT, HTTP, WebSocket 등의 프로토콜을 제공하며, 수집된 데이터를 다른 AWS 서비스와 연계하여 분석 및 처리할 수 있다. AWS IoT Core 바로가기

(1-1) AWS IoT Core의 주요 기능

  • 디바이스 연결 및 관리
    • MQTT, HTTP, WebSocket을 지원하여 다양한 방식으로 IoT 디바이스를 클라우드에 연결할 수 있다.
    • AWS IoT Device SDK를 활용하면 다양한 하드웨어에서 쉽게 AWS IoT Core와 통신할 수 있다.
  • 보안 및 인증
    • X.509 인증서 기반 보안을 제공하여 디바이스 인증 및 데이터 암호화를 지원한다.
    • AWS IoT 정책을 설정하여 특정 디바이스 또는 사용자에게 권한을 부여할 수 있다.
  • 메시지 브로커 및 규칙 엔진
    • MQTT 메시지 브로커 : IoT 기기 간에 효율적으로 메시지를 주고받을 수 있도록 지원한다.
    • 규칙 엔진(Rules Engine) : IoT 데이터가 수집되면 이를 Amazon S3, DynamoDB, Lambda, Kinesis, SNS 등과 연계하여 자동으로 처리할 수 있다.
  • 디바이스 상태 관리 (Device Shadow)
    • IoT 디바이스의 상태를 클라우드에서 가상으로 저장하는 기능이다. 예를 들어, 오프라인 상태에서도 기기의 최신 상태를 클라우드에서 조회하고, 기기가 다시 연결될 때 자동으로 업데이트할 수 있다.
  • AWS 서비스와 연계 가능
    • AWS Lambda : 이벤트 발생 시 서버리스 코드 실행
    • Amazon Kinesis : 실시간 데이터 스트리밍
    • Amazon S3 : 데이터 저장 및 백업
    • Amazon SageMaker : IoT 데이터 기반 AI/ML 모델 학습

(1-2) IoT device를 AWS IoT Core에 연결

AWS IoT Core 실습 바로가기


(2) AWS EC2를 이용해 사이트 만들기

Amazon EC2 인스턴스를 사용하여 웹 서버를 설정하고, 무료 도메인을 연결하여 나만의 웹사이트를 만드는 과정이다.

  • EC2 인스턴스 생성
  • 웹 서버 설치 및 설정 (예: Apache 또는 Nginx)
  • 무료 도메인 이름 등록
  • 도메인과 EC2 인스턴스 연결
  • 사이트 업로드 및 확인

(2-1) EC2 인스턴스 생성

  • AMI : Ubuntu
  • 인바운드 규칙 HTTP(80), SSH(22) 포트 → 0.0.0.0/0
  • 퍼블릭 IP 주소를 확인 후 기록

참고 : EC2 가상 서버 생성 실습 - AWS 1주차

(2-2) 웹 서버 설치 및 설정

  • SSH로 EC2 인스턴스 접속
ssh -i "path_to_your_key.pem" ubuntu@your_public_ip
  • 키 파일 경로 오류 시
    • PowerShell 접속
    cd C:\Users\user\.ssh\
    ssh -i "path_to_your_key.pem" ubuntu@your_public_ip
  • 키 파일 경로 오류 시 (2)
    • SSH 에이전트 사용
    • PowerShell을 관리자 권한으로 실행
    Start-Service ssh-agent
    ssh-add path_to_your_key.pem
  • 패키지 업데이트
    • 시스템의 패키지 목록을 최신 상태로 업데이트
    sudo apt update
  • 웹 서버 설치 (Apache)
sudo apt install apache2 -y
  • Apache2 웹 서버 시작 및 상태 확인
sudo systemctl start apache2
sudo systemctl status apache2
  • HTML 파일 업로드 (기본 웹 페이지 만들기)
sudo nano /var/www/html/index.html
<!DOCTYPE html>
<html>
<head>
    <title>My First Website</title>
</head>
<body>
    <h1>Welcome to My Website on EC2!</h1>
    <p>This site is hosted on an EC2 instance.</p>
</body>
</html>
  • 웹 페이지 확인
    • 웹 브라우저에서 다시 EC2 인스턴스의 퍼블릭 IP를 입력하여 새로운 페이지를 확인
    • http://<퍼블릭 IP> 입력 → 작성한 index.html 파일
  • (오류) Apache의 기본 페이지가 표시 → 페이지를 교체
    • 기본 index.html 파일 제거
    sudo rm /var/www/html/index.html
    • 새로운 index.html 파일 생성
    • 웹 페이지 확인
    sudo systemctl restart apache2

(2-3) 무료 도메인 이름 등록

  • InfinityFree 무료 도메인 등록

(2-4) 도메인과 EC2 인스턴스 연결

  • DNS 설정
  • EC2 인스턴스에서 도메인 연결 확인
sudo nano /etc/apache2/sites-available/000-default.conf
  • ServerName 추가
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ServerName yourdomain.tk  # 도메인 이름 입력
</VirtualHost>
  • Ctrl+O 저장, Ctrl+X 나가기
  • Apache를 다시 시작
sudo systemctl restart apache2

(2-5) 사이트 업로드 및 확인

  • 웹사이트 파일을 EC2 인스턴스에 업로드
scp -i "path_to_your_key.pem" your_website_files ubuntu@your_public_ip:/var/www/html
  • 파일 업로드 확인
ls /var/www/html
  • 웹사이트 파일 확인
IP 주소로 확인 : http://54.89.204.250/chaeyeon.html
도메인으로 확인 : http://kesug.com/chaeyeon.html
  • 최종 확인
sudo systemctl status apache2
sudo systemctl start apache2

(2-6) EC2 인스턴스 상태 확인

  • (방법1) AWS Management Console
  • (방법2) CLI
aws ec2 describe-instances --instance-ids <instance-id> --query "Reservations[0].Instances[0].State.Name"
  • (방법3) EC2 인스턴스에서 프로그램 실행 상태 확인
    • SSH 접속
    ps aux
    top
    • 특정 프로그램이 실행 중인지 확인 (예: Apache)
    sudo systemctl status apache2
  • (방법4) CloudWatch를 통한 실시간 모니터링
  • (방법5) 로그 확인

(2-7) 정리

  • 기존에 있는 무료 도메인 : 이미 가지고 있는 도메인을 AWS EC2 인스턴스와 연결하여 도메인 주소로 HTML 파일을 실행한 상태이다. 이 과정에서는 도메인 이름을 AWS EC2의 퍼블릭 IP 주소에 A 레코드를 설정하여 연결했기 때문에, 도메인 주소로 사이트를 확인할 수 있었다.
  • IP 주소로 실행한 HTML 파일 : IP 주소를 통해 간단한 HTML 파일을 웹서버에 업로드하고 확인했다. EC2 인스턴스에 직접 접근하여 웹 페이지가 실행되는지 확인한 과정이었다.

따라서, 두 가지 방법 모두 AWS EC2 인스턴스를 통해 웹 서버를 구축하고 HTML 파일을 확인하는 방식이었다. IP 주소를 사용해서 아래와 같은 더 복잡한 웹사이트도 만들 수 있다.

  • 동적 웹사이트 : Django, Flask 같은 프레임워크를 사용하여 Python을 기반으로 한 동적 웹 애플리케이션을 만들 수 있다. Node.js를 사용하여 JavaScript로 서버 측 로직을 처리할 수 있다.
  • 데이터베이스 연동 : 예를 들어, MySQL 또는 PostgreSQL 같은 데이터베이스를 사용하여 사용자 정보나 데이터를 저장하고 불러오는 기능을 추가할 수 있다. 이를 통해, 사용자 인증, 게시판, 데이터 관리 등을 구현할 수 있다.
  • 백엔드 서비스 : 백엔드에서 서버를 운영하며 API를 제공하고, 프론트엔드에서 이를 호출하여 데이터를 처리하는 구조로 RESTful API나 GraphQL을 구현할 수 있다.
  • 프론트엔드 개선 : HTML, CSS, JavaScript를 사용하여 사용자 인터페이스를 개선하고, React, Vue.js, Angular와 같은 JavaScript 프레임워크를 사용해 리액티브하고 인터랙티브한 UI를 만들 수 있다.

6주차를 마치며...

지난 달 Free Tier 한도로 하지 못했던 실습을 이번에 할 수 있어서 좋았다. 시간이 된다면 추후에 복잡한 웹 사이트도 만들고 싶다.

0개의 댓글