0부터 시작하는 Django 공부 - AWS를 이용해 배포해보자 2

Jaehong Lee·2022년 6월 27일
1
post-thumbnail

1. 방화벽 설정

  • 방화벽은 AWS에서 만든 보안그룹과 WINDOW에서 실행중인 방화벽이 있다. 이 두 가지 방화벽에서 80번 포트에 접속 가능하게 해줘야 한다

  • 1.1 WINDOW 방화벽 끄기

  • WINDOW 방화벽을 설정할 수 있지만, 이번에는 그냥 OFF한다

  • 1.2 AWS 보안그룹 설정

  • 인스턴스 세부 내용 확인

  • IP 주소가 PRIVATE, PUBLIC 두 가지가 있는데, AWS에서 내부/외부 통신을 하므로 두 가지로 존재한다

  • 보안 - 보안그룹 클릭

    • INBOUND : 외부에서 내 컴퓨터로
    • OUTBOUND : 내 컴퓨터에서 외부로
  • INBOUND를 수정해준다

  • RDP 프로토콜을 사용하며 포트번호가 3389이다. 7계층은 RDP이고, 4계층은 TCP이다

  • Apache의 HTTP를 사용할 수 있게 설정해야한다

  • 포트를 열어주자

  • 바인딩 Ip : 포트를 바인딩하는 Ip이다. 해당 IP가 PRIVATE IP ( ex. 192.168.0.58 )로 설정되있으면 같은 네트워크 대역은 접속은 가능하지만, 다른 네트워크 대역은 접속이 불가능하다. 이를 0.0.0.0으로 설정하면 외부 네트워크 대역에서도 접속 가능하다 ( 바인딩 : 프로그램의 어떤 기본 단위가 가질 수 있는 구성요소의 구체적인 값, 성격을 확정하는 것 )

  • PUBLIC IP로 접속 가능하다

2. Django 연동하기

  • 웹 서버란? 하드웨어적으로 웹 서버는 웹 서버의 소프트웨어와 웹 사이트의 컴포넌트를 저장하는 컴퓨터이고, 소프트웨어적으로 웹 서버는 사용자가 어떻게 호스트 파일에 접근하는지 관리하는 서버다

    • 동적 웹 서버? 서버가 존재하는 컴퓨터로 서버에 저장된 파일을 클라이언트에게 전송한다
    • 정적 웹 서버? 정적 웹 서버와 웹 서버에서 대응하지 못하는 동적 데이터에 대응하기 위한 하나의 프로토콜과 같은 어플리케이션 서버로 구성되어 있다
    • 기본적으로 웹 서버로 부터 웹 어플리케이션 서버가 요청을 받으면 프로그램을 수행하여 해당 결과를 웹 서버에 전달하고, 이 결과를 클라이언트에게 전달한다
  • 인터페이스란? 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜

  • 프로토콜이란? : 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계

  • 2.1 CGI, WSGI

    • CGI : Common Gateway Interface로 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약. 즉, 웹 서버와 DB와 같은 프로그램 사이에서 일어나는 통신에 대한 규약이다
    • WSGI : Web Server Gateway Interface로 웹 서버 프로그램이 웹 어플리케이션과 통신할때 사용하는 표준 인터페이스로 WSGI가 Callable Object을 통해 Data를 받으면 프로그램을 실행해 Callback Function으로 반환한다. 이 역시 웹 서버와 외부 어플리케이션이 통신할때 사이에서 작동한다
  • Apache에서 Django 프로그램을 실행시키게 해보자

  • 2.2 가상 컴퓨터에 WSGI 설치

  • WINDOW 환경에서 일반 PIP INSTALL이 안되므로, 직접 파일을 가져와서 INSTALL 해준다

  • cp39는 python 3.9 vertion이기 때문이다

  • 위 경로는 wsgi로 python 프로그램을 실행할 것 인데, 이 wsgi가 python의 경로를 찾을 수 있는 경로이다

  • 2.3 Django 설정

  • 개발 환경이랑 배포 환경이랑 따로 설치해야한다

  • 접속하는 사람이 해당 프로그램의 오류 메세지를 볼 수 없게 False로 설정

  • Django는 기본적으로 접속을 허가하지 않으므로, 허가할 호스트를 설정해야한다. 모두 접속 가능하게 할 것이므로 '*'로 설정한다

  • 설치한 라이브러리의 목록을 확인하는 명령어

  • 이 출력된 라이브러리 목록명을 txt 파일에 저장한다

  • 2.4 서버 컴퓨터에 Django 프로젝트 가져오기

  • 배포할 Django 프로젝트 폴더를 가져온다

  • venv는 옮기지 않아도 된다. 이는 설치된 라이브러리들의 폴더인데, 클라우드에서는 이 라이브러리들을 사용하지 않는다

  • 2.5 Apache 설정

  • httpd.conf는 Apache의 서버 설정이다. 이를 메모장으로 열면 된다

  • 아까 찾은 경로를 작성해준다. 이는 Apache 웹 서버와 Django 애플리케이션이 서로 통신할때 wsgi를 이용해 사용할건데, wsgi가 python 파일에 대한 경로를 찾아야 하기 때문이다. 따라서 Apache에서 wsgi module과 python에 대한 경로를 남긴다

  • 위 사진은 process를 간단히 나타냈다

    • WSGIScriptAlias : WSGI한테 WSGI 파일 경로를 알려준다
    • pythonpath : python 경로 - project 폴더 이름을 써준다
    • DIRECTORY : APACHE한테 WSGI 파일 위치를 알려준다
    • STATIC과 MEDIA 경로도 설정
  • 2.6 원격 데스크톱의 Django 설정

  • 프로젝트 폴더로 이동해 아까 만든 requirements.txt를 통해 라이브러리들을 설치한다

  • 현재 프로젝트는 DB 서버를 본 컴퓨터의 가상 사용한다. AWS 서버는 외부 서버이므로 본 컴퓨터의 가상 서버에 접속이 불가능하다. 따라서 원격 데스크톱에 옮긴 프로젝트의 settings.py의 DB_HOST를 설정해준다

  • 해당 프로젝트에는 DB가 없으므로 migrate 해준다

  • 설정 후 Apache 서버를 재실행하고, public ip로 다시 접속하면, 본 프로젝트가 실행된다. 아직 기능 실행은 안된다

  • 이번에는 Apache 프로그램으로 서버를 실행하므로, python 명령어가 아닌 httpd 파일을 통해 실행한다

  • 인스턴스 종료는 인스턴스를 삭제한다

profile
멋진 엔지니어가 될 때까지

0개의 댓글

관련 채용 정보