프로젝트/창업 프로젝트 (DRF + AWS)

[AWS EC2 배포][ubuntu] 배포하며 쌓은 내실을 정리해 보자

Supersett 2022. 8. 31. 01:28

Q. Linux가 뭐예요? Ubuntu가 뭐예요?

이걸 알기전에 운영체제(Operation System)에 대해서 알 필요가 있어.

 

[운영체제]

: 컴퓨터 시스템의 각종 하드웨어,소프트웨어 자원을 효율적으로 운영,관리 함으로써 사용자가 시스템을 이용하는데 편리함을 제공하는 시스템 소프트웨어야.

→ 핵심 목적 : 사용자가 편리하고 효율적인 방식으로 프로그램을 실행하는 환경을 제공하는데 있어.

 

[커널]

 : 컴퓨터 운영체제의 핵심이 되는 컴퓨터 프로그램의 하나. 시스템의 모든것을 완전히 통제해. 보안,자원관리,추상화 역할

 

■ 운영체제 = 사용자 영역 + 커널 영역

■ 리눅스에서 작동하는 여러 종류의 프로그램을 꾸러미 하나로 모아놓은 것 = Linux 배포판

Ubuntu는 상호작용이 잘되는 Linux 배포판 중에 하나

■ 리눅스는 커널이고, 이러한 리눅스 커널을 기반으로 운영체제가 만들어졌다. 배포판.


Q. NGINX, WSGI 는 뭐고 왜 필요한건가요?

[웹 서버] web server

■ 웹 페이지를 클라이언트로 전달. 주로 정적컨텐츠를 전달한다.

 

[웹 어플리케이션 서버(WAS)] web application server

■ 동적 컨텐츠를 제공하기 위해 만들어진 어플리케이션 서버(db 조회, 로직처리)

■ 웹서버+컨테이너 = WAS

 

Q. WAS 만 사용해도 되는거 아니야?

 아니! , was의 역할은 db조회 및 로직 처리하게 두고, 정적인 컨텐츠를 웹서버에 맡기고 기능을 분리하는것이 서버부하를 방지하고 효율을 높일 수 있어

 

uwsgi, gunicorn

WSGI 규칙을 따라 만들어진 소프트웨어. 정적인 웹서버(Apache,Nginx) 와 python으로 작성된 웹프레임워크(Django)사이의 통신을 도와주는 역할

 nginx는 python을 모르기 때문에 gunicorn을 통해 http request를 python으로, django로 부터 받은 응답을 nginx가 알 수 있도록 변환해줌!

 

WSGI(Web Server Gateway Interface)

  파이썬 어플리케이션이 웹 서버와 통신하기 위한 명세.프레임워크의 웹 서버로 파이썬 스크립트가 웹 서버와 통신하도록 도와주며 웹 서버와 웹 애플리케이션 사이에 위치한다.

 

Nginx 쓰면 좋은 점!

 도메인 라우팅 관리, 정적 파일 제공, 한번에 들어오는 많은 요청 처리, 느린 클라이언트 처리, 동적 요청을 wsgi에 전달, ssl(HTTPS),컴퓨터 리소스 절약, 로드밸런싱, 캐싱

 

WSGI 기능

작업자 프로세스,스레드 풀 실행 , NGINX에서 들어오는 요청을 WSGI와 호환되도록 번역

앱의 WSGI 응답을 적절한 HTTP 응답으로 변환


Q. HTTP → HTTPS 어디에 무슨 설정을 해야 하나요?

[문제 상황]

 AWS의 Elastic Load Balancing 설정으로 해서 적용이 되지 않았음.

[해결]

Nginx의 웹서버 설정을 바꿔줌

#80번 포트로 전달되는 http 요청을 https 요청으로 변환
server {
        listen 80;
        server_name cameet.site;
        rewrite        ^ https://$server_name$request_uri? permanent;
}

#웹서버에서 발급받은 보안인증서를 토대로 https 세팅
server {
        listen 443 ssl;
        server_name cameet.site;
        charset utf-8;
		(ssl 세팅)
        
		(경로 세팅)
}