이번 포스팅에서는 에이블스쿨 빅프로젝트 프로토타입 제작 과정에서 활용한 AWS EC2와 Nginx를 이용한 웹 배포 방법을 정리하였다.

먼저, Local에 내가 만든 파일이 있어야한다. 상단의 주소를 보면, 현재 Local에 위치한 디렉토리로 출력됨을 확인할 수 있다.
EC2 instance 제작

AWS 로그인 이후, EC2를 검색한다. 왼쪽 메뉴바의 인스턴스를 누르면, 현재 제작된 인스턴스를 보여주고 새롭게 인스턴스를 만들 수도 있다. 이미 배포에 활용한 인스턴스가 존재함을 확인할 수 있는데, 포스팅을 위해 새로운 인스턴스를 하나 제작했다. 우측 상단의 인스턴스 시작을 눌러보자.

먼저, 이름을 지정해야한다. 블로그를 위해 인스턴스를 제작했기 때문에, blog-deploy로 이름을 지정했다. 바로 밑에 어떤 애플리케이션을 사용할지 정해야하는데, 다른 애플리케이션보다 간단한 Ubuntu를 사용했다.

다음으로, 요금제 및 키 페어를 설정해야한다. AWS에는 프리 티어라는 무료 요금제가 존재한다. 하지만 사용 기간과 용량에 따라서 과금이 발생할 수 있으니, 항상 주의하자. 밑에서 과금 정책과 관련해서 확인할 수 있는 서비스도 소개할 예정이다. t2.micro 요금제를 사용하고, 키 페어를 지정하면 된다. 만약 키 페어가 없을 경우, 오른쪽에 새 키 페어를 생성해야한다. 단, 키 페어 파일은 반드시 보관해야한다. ssh 및 scp 파일 전송에 키 페어가 반드시 필요하기 때문이다.

네트워크 설정에서 기본값을 그대로 두고, 인터넷에서 HTTP 트래픽 허용을 체크 후 오른쪽에 인스턴스 시작을 누르면, EC2에서 설정할 것은 끝이다.

초기 설정이 끝나면 실행 중 상태가 되는데, 여기서 우리는 퍼블릭 IPv4 주소를 확인하면 된다.
ssh 접속

본 포스팅은 windows 환경 기준으로 작성되었다. Windows 왼쪽 하단에 검색을 누르고, 명령 프롬프트(CMD)를 실행한다. 여기서 key 파일이 필요하다. ssh -i "key 디렉토리" ubuntu@퍼블릭 IPv4 주소를 입력하고 yes를 누르면 된다.

정상적으로 실행했으면, 다음과 같은 창을 확인할 수 있다. 혹시 오류가 발생한다면 key 파일의 위치가 맞는지, 띄어쓰기 등 오탈자가 없는지 확인해보자.
Nginx 설치 및 설정
접속에 성공 했으면, ubuntu 시스템 업데이트 및 Nginx 설치를 진행해야한다. 명령어는 다음과 같다.
- ubuntu 시스템 업데이트 (sudo apt-get update)
- nginx 설치 (sudo apt install nginx)

명령어 실행 이후, nginx -v를 눌러서 버전이 출력되면 성공적으로 설치가 완료된 것이다.

설치 이후, Nginx의 default 파일을 확인하여 루트 디렉토리가 올바르게 설정되어 있는지 확인해야한다.
sudo nano /etc/nginx/sites-available/default 명령어를 입력하면 nano 편집기가 실행된다. 이 때, 해당 파일의 내용에서 root의 값이 /var/www/html ;인지 확인한다. nano 편집기는 ctrl+:(콜론)을 누르고 방향키를 밑으로 내려서 편집할 수 있으며, ctrl + x로 나올 수 있다. 거의 대부분 root의 값이 /var/www/html ; 일 것 이지만, 혹시 값이 다르다면 바꿔줘야한다. 해당 디렉토리로 local의 파일이 올라가기 때문이다.

nano 편집기를 확인했으면, root 디렉토리의 권한을 변경한다. 이제 Local의 파일을 업로드 해야하는데, 간헐적으로 권한 문제로 업로드가 안되는 경우가 있기 때문이다. sudo chmod 777 /var/www/html을 입력하면, Local 파일의 업로드 준비가 끝났다.
Local 파일 업로드

이제 로컬에서 만든 프로토타입을 업로드하면된다. 먼저, html, css, js 및 홈페이지 구성에 포함된 logo, img, video 등 모든 파일을 하나의 폴더에 저장한다.

제일 처음으로 실행한 명령 프롬프트는 이미 SSH로 Ubuntu에 접속했기 때문에, 별도의 명령 프롬포트를 실행한다. 이후, 다음 명령어를 실행한다.
- scp -i "key-pair 주소" -r "파일 위치" ubuntu@public ip:/var/www/html/
이 때, key 주소와 파일 위치 사이에 -r을 사용해야한다. 대용량 파일 전송시 not a regular file 오류가 발생하며, 특정 파일이 업로드 되지 않기 때문이다.

업로드 이후, Ubuntu에서 ls -al /var/www/html/을 입력하면 정상적으로 데이터가 업로드 됐음을 확인할 수 있다. 업로드가 완료 됐으니, 디렉토리 권한을 원상 복구 하고 Nginx가 파일에 접근할 수 있도록 권한을 새롭게 설정한다.
- 권한 원상 복구 (sudo chmod 755 /var/www/html)
- Nginx 접근 권한 설정 (sudo chown -R www-data:www-data /var/www/html)
여기서 의문을 가질 수 있다. 굳이 권한을 다시 복구하고, 또 Nginx에 별도의 접근 권한 설정을 해야할까? 디렉토리의 권한을 복구하는 이유는 권한과 접근 제어 때문인데, 구체적으로 관련 내용을 찾아보았다.
1. 보안 강화
/var/www/html 디렉토리는 일반적으로 웹 서버의 루트 디렉토리이다. 이 디렉토리에 적절한 권한 설정을 하지 않으면 보안 취약점이 발생할 수 있다.
- 권한 755:
- 소유자(owner): 읽기(r), 쓰기(w), 실행(x) 권한을 가짐 (7)
- 그룹(group): 읽기(r)와 실행(x) 권한을 가짐 (5)
- 기타 사용자(others): 읽기(r)와 실행(x) 권한을 가짐 (5)
- 즉, rwxr-xr-x 권한으로 설정되어 소유자는 모든 권한을 가지며, 그룹과 기타 사용자는 읽기와 실행 권한만 가진다. 이는 디렉토리 내 파일들을 웹 서버가 접근할 수 있도록 하고, 불필요한 쓰기 권한을 제한하여 보안을 강화한다.
2. 웹 서버의 정상 작동 보장
웹 서버가 정상적으로 작동하려면 웹 서버 프로세스(apache, nginx 등)가 /var/www/html 디렉토리와 그 안의 파일들에 접근할 수 있어야 한다.
- 읽기 권한(r): 웹 서버가 파일을 읽어 클라이언트에게 제공할 수 있게 한다.
- 실행 권한(x): 디렉토리를 탐색할 수 있게 한다.
3. 쓰기 권한 제한
- 쓰기 권한(w): 일반적으로 /var/www/html 디렉토리 자체에는 쓰기 권한을 부여하지 않는다. 이렇게 하면 웹 서버 프로세스 또는 다른 사용자들이 이 디렉토리 내에 파일을 생성하거나 수정하지 못하게 하여, 악의적인 파일 업로드나 수정으로부터 보호할 수 있다.
4. 웹 서버 프로세스의 파일 접근 제어
웹 서버는 보통 특정 사용자(예: www-data, apache, nginx)로 실행됩니다. 이 사용자에게 적절한 권한을 부여함으로써, 웹 서버가 필요한 파일을 접근하고 서비스할 수 있게 하고, 다른 사용자나 프로세스가 불필요하게 파일을 수정하거나 삭제하지 못하게 한다.
실행

디렉토리 권한 원상 복구 및 Nginx 권한 설정을 끝냈으면, Nginx를 재시작한다. 사진을 보면 chwon으로 오탈자가 있는데, linux는 오탈자 뿐만 아니라 단순 띄어쓰기 하나라도 틀리면 오류가 발생하기 때문에 주의해야한다.
- Nginx 재시작 (sudo systemctl restart nginx)

상단의 주소를 보면, 웹으로 배포됐음을 확인할 수 있다. 주소는 http://IPv4 public IP를 입력하거나, E2C 세부사항에 있는 퍼블릭 IPv4 DNS를 웹에 입력하면 된다. 로컬에 들고 있는 웹 파일이 있다면, URL로 올려서 프로토타입을 공유해보도록 하자.
'Aivle > Project' 카테고리의 다른 글
| [빅프로젝트] 네이버 뉴스 웹크롤링 (2) | 2024.07.11 |
|---|---|
| [에이블스쿨] 구글 플레이 스토어 리뷰 분석 (0) | 2024.05.19 |
| [에이블스쿨] GCP, Naver Cloud, 형태소 분석기 바른 (1) | 2024.04.20 |
| [에이블스쿨] 잡코리아 웹크롤링 (2) | 2024.03.21 |
| [에이블스쿨] RFM, Retention (0) | 2024.03.12 |