Onik Lab.

EC2 인스턴스의 Django 개발환경을 웹브라우저에서 조회하는 방법

October 15, 2019 | 3 Minute Read • 0 Comments

이번 글은 책과 관련하여 개발환경 웹페이지를 더욱 편리하게 조회하는 방법을 알려드리고자 합니다.

이번에 집필한 ‘AWS 클라우드 기반의 Django 웹 애플리케이션’ 책에서는 Django 개발환경에서 개발한 화면을 웹 브라우저에서 조회하기 위해서 GUI 원격 접속 방법을 제시했습니다.

책 141P ~ 154P에서는 VNC, RDP 접속 방법을 제시하였고, MobaXterm을 사용하여 Firefox를 실행하는 방법도 제시하였습니다.

하지만 책에서 언급했던 방법보다 더욱 쉽게 개발화면을 웹브라우저에서 보는 방법을 찾아내어 글을 쓰게 되었습니다.

사실 지금 내용은 너무 쉽게 조회할 수 있어서, 앞서 언급했던 모든 내용을 다 무시해도 될 정도의 수준이라고도 생각합니다. 하지만 어차피 제가 아닌 다른 누군가가 이미 알고 있는 방법일 수도 있다는 점에서 저 또한 책을 집필한 저자로서 독자들에게 더욱 쉽고 간단한 방법을 제시하는 것이 도리라고 판단되어 글을 쓰게 되었습니다.

아마 지금 내용은 만약에 2판을 내게 될 경우에 들어갈 수 있는 방법이니 사전에 참고해 주시기 바라겠습니다.


Django 개발환경에서는 기본적으로 127.0.0.1, 즉 localhost로 개발환경에서 구현한 코드를 실행하도록 되어 있습니다.

AWS의 EC2 인스턴스의 Django 개발환경에서 구현한 코드를 조회하기 위해서는, EC2 인스턴스의 로컬 환경에서 웹 브라우저를 실행한 후, localhost에 접속하여 개발된 화면을 조회하고 실행할 수 있습니다.

127.0.0.1

그러나 EC2 인스턴스는 내부 Private IP 주소를 가지고 있으며, 외부에서 연결하기 위한 외부 Public IP 주소도 동시에 보유하고 있습니다. 이 점을 활용하면 외부에서도 EC2 인스턴스에 접속할 수 있으며, Django 개발환경에서 구현한 코드 조회도 가능합니다.

방법은 다음과 같습니다.

1. EC2 인스턴스의 내부 IP주소 확인

EC2 인스턴스의 내부 IP주소 확인방법은 쉽습니다. 위의 사진의 프롬프트를 확인하면 다음과 같이 나타날 것입니다.

(ve) ubuntu@ip-172-31-28-28:$

여기에서 내부 IP주소는 바로 ‘172.31.28.28’이 됩니다. 이는 AWS Console에서도 확인이 가능합니다.

Check Private IP

그렇다면 Django 웹 서버를 가동할 때, 가동 명령어 뒤에 내부 IP주소 및 포트를 입력하면 해당 주소로 간단하게 웹서버가 실행됩니다. 내부IP 주소는 EC2 인스턴스 자기자신의 주소이므로 실행하는 데 전혀 문제가 없습니다.

(ve) ubuntu@ip-172-31-28-28:$ python manage.py runserver 172.31.28.28:8000

하지만 이것만 가지고는 실행이 되는 것은 아닙니다. 두 가지 절차를 더 해줘야 합니다.

2. EC2 인스턴스 인바운드 설정

EC2 인스턴스와 연결된 보안그룹의 인바운드 설정을 들어가면, 기본적으로 SSH 22번 포트만 허용한 것을 확인할 수 있습니다.

Edit Inbound Rules

여기에 Django 웹서버 포트인 8000번도 같이 추가하도록 합니다.

Add Port 8000

위와 같이 하면 8000번 포트도 접속을 허용하게 됩니다.

EC2 인스턴스에서의 설정을 마쳤으면, 다음은 Django 환경설정에서도 관리를 해줘야 합니다.

3. Django 허용 호스트 설정

AWS EC2 인스턴스는 기본적으로 외부 클라이언트 -> 외부 IP -> 내부 IP -> EC2 인스턴스 접속의 단계를 거칩니다.

Django 웹 서버 주소가 위와 같이 내부 IP 주소로 설정되어 있기 때문에, 내부 IP에 접근하기 위해서는 외부 IP를 사용해서 접근해야 합니다.

이러한 접근 설정은 Django 환경 설정 파일인 settings.py 에서도 허용 호스트를 설정하여 수행할 수 있습니다.

먼저 EC2 인스턴스의 외부 IP주소를 확인하겠습니다. 외부 IP주소는 AWS Console에서 확인할 수 있습니다.

Check Public IP

위와 같이 ‘52.78.80.168’로 되어있습니다. settings.py에서도 해당 부분을 참고하여 다음과 같이 설정값을 입력합니다.

ALLOWED_HOSTS = ['52.78.80.168']

여기까지 마치면 모든 설정은 마쳤습니다. 이제 EC2 인스턴스에서 개발된 Django 개발환경을 외부에서 접속하겠습니다.

4. Django 개발환경 접속

외부에서 EC2 인스턴스에 접근하기 위해서는 외부IP주소를 사용해야 합니다. Django 개발환경에서는 내부IP주소로 웹서버를 가동하도록 설정했지만, 외부에서는 내부IP주소의 직접 액세스를 할 수 없으므로, 외부IP주소를 사용해야 합니다. 다만, 위와 같이 설정하게 되면 포트 허용 및 설정 허용까지 마쳤으므로, 외부IP - 내부IP간 직접적인 연결이 가능합니다. 이제 한번 실행해보도록 하겠습니다.

먼저 웹 서버를 가동합니다.

Start Web Server

다음은 웹서버 접속을 하겠습니다.

Connect a web server

보시다시피 아주 접속이 잘 된 것을 확인할 수 있습니다.

보안 상의 문제를 우려하는 부분도 분명히 있을 수 있습니다. 하지만 기존의 접속 방법은 SSH를 사용하여 22번 포트로 접속하는 것이고, 이 글에서 제시하는 방법은 Django 웹 서버 포트인 8000번으로 접속하는 방법의 차이만 있습니다. 또한 EC2 인스턴스에서 허용 포트 관리를 하고, Django 개발환경에서도 설정값에 허용 주소를 관리하므로 한편으로는 보안적인 측면에서도 더욱 엄격하다고 볼 수 있습니다.

또한 8000번 포트는 Django 웹 서버를 종료하면 닫히게 되므로 항상 실행이 가능한 것도 아닙니다.

다만 제 책에서 언급했었던 기존 접속 방법을 선호하는 분들도 일부는 계실 것으로 생각되므로, 2판을 집필하게 되면 VNC, RDP 접속 방법은 그냥 간단하게 몇 줄로만 언급하고 생략하도록 하며, 대신 MobaXterm에서 X11을 사용하여 Firefox로 확인하는 방법과 상기 글에 명시된 방법 두 가지를 제시하는 방향으로 하겠습니다.

이 방법은 Django 개발환경에서 구현된 코드를 조회하고 실행하기 위해서 별도의 프로그램 설치를 필요로 하지 않으며, 또한 개발자의 클라이언트에서도 직접 확인이 가능하므로 성능, 속도 측면에서도 더욱 편리함을 제공할 것으로 생각되니, 이 점 참고하셔서 더욱 편리하게 개발할 수 있었으면 좋겠습니다.

글 마치겠습니다.