전체 글
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Nginx Docker Build
프록시 프록시 서버란 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킵니다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부릅니다. 프록시 서버는 크게 포워드 프록시 서버, 리버스 프록시 서버로 나눠집니다. 그리고 리버스 프록시 서버를 설명하기 전에 프록시 서버에 대해 먼저 이해하려면 리버스 프록시 서버를 이해하는데 도움이 됩니다. 포워드 프록시 서버란? 간단히 우리가 흔히 말하는 '프록시 서버'란 포워드 프록시 서버를 의미합니다. 프록시 서버는 아래 그림처럼 클라이언트 앞에 놓여 있습니다. 다음 그림을 보면 클라이언트가 인터넷 웹서버에 요청을 보..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Docker Django Build
이제 docker로 django의 이미지를 만들고 run해보도록 하겠습니다. 먼저 이전에 했던 과정을 모두 다 진행해 보도록 하겠습니다. 간단히 리스트업 해보자면 ec2환경을 하나 만듭니다. ssh-keygen으로 deploy key와 ssh key를 만들어 줍니다. Django-Deploy를 cloning해 옵니다. requirements.txt에 uwsgi를 추가해 줍니다. docker for linux를 curl을 통해 설치해 줍니다. docker의 권한을 올려줍니다. ( + docker Version check ) 루트 파일에 Dockerfile을 만들어 주고 내용을 수정해 줍니다. docker build를 통해 이미지를 생성해 줍니다. image를 통해 container를 실행해 줍니다. 이 과..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) Docker 개요
Docker 개요 만약에 내가 개발하고 있던 환경에서는 잘 돌아갔지만, 배포 서버에서는 잘 돌아가지 않는 경우가 있을 수 있습니다. 그리고 하나의 서버 안 즉 EC2안에서 여러개의 프로그램이 돌아가게 할 수 있습니다. 위 그림에서 프로그램 3개가 유기적으로 연결되어 있지는 않습니다. 또한 각 프로그램의 환경을 따로 분리하고 싶다고 해 봅시다. 왜냐하면 프로그램1에서 깐 django 3.6버전이 프로그램2에는 영향을 미치게 하고 싶지 않을 수도 있기 때문이죠. 이러한 니즈에 의해 Docker가 사용됩니다. 위와 같은 문제점은 Docker가 아니더라도 가상환경으로 어느정도 해결할 수 있습니다. 위에서 django나 많은 의존성을 깔 때 python의 가상환경을 만들어 주었었던것과 비슷하게요. 하지만 엄청난 ..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (백엔드) Django Session 활용2
이제 로그인 폼과 화면에 대한 접근권한을 설정하는 법에 대해 알아보도록 하겠습니다. /fastcampus/user/urls.py from django.urls import path from user import views urlpatterns = [ path('user/', views.user, name="user"), path('login/', views.login, name="login"), ] /fastcampus/user/views.py from django.utils import timezone from django.shortcuts import render from django.http import HttpResponse, JsonResponse from user.serializers impo..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (백엔드) Django Session 활용1
우선 Django로 User를 만들고 user를 확인하고 삽입할 수 있는 백엔드 앱을 추가해 보도록 하겠습니다. $python manage.py startapp user 를 해주고 기초적인 작업을 위한 틀을 구축해 주도록 하겠습니다. /fastcampus/user/models.py from django.db import models class User(models.Model): user_name = models.CharField(max_length=20) user_type = models.IntegerField() # 0: 사용자, 1: 사장님, 2: 배달 기사 일단 모델을 만들고 마이그레이션 해주겠습니다. $python manage.py makemigrations $python manage.py mig..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 오토스케일링 설정 (AWS Autoscaling Group와 AMI)
오토스케일링 기존의 방법대로 EC2를 여러개 만들어서 ELB에 붙이는 방법이 있습니다. 근데 만약에 트레픽이 없는데, 놀고 있는 EC2가 생기게 되면 엄청난 자원낭비가 될 수 있습니다. 그래서 트레픽에 따라서 인스턴스를 늘리고 줄일 수 있는 오토스케일러를 사용하면 좋습니다. 이는 ELB에 연결된 EC2를 늘렸다가 줄이는 역할을 하는 겁니다. 유저가 적을 때는 비용을 아끼고, 유저가 많을 때는 서버 과부화를 막습니다. 그리고 서버를 늘리는 기준도 오토스케일러를 만들 떄 설정할 수 있습니다. 만약에 기본의 개수가 3개고 이들의 CPU 점유율이 50%가 넘어가면 1개를 추가하고 추가했는데도 50%를 넘어가면 1개를 추가하는 방식으로 설정할 수 있습니다. CPU외에도 다양한 것을 활용할 수 있습니다. 이를 만들..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 어플리케이션 구동 (Nginx, Gunicorn, Supervisor)
기존의 EC2를 여러개 만들고 이들에게 ELB가 트레픽을 분산시켜주는 과정에서 가장 큰 불편한점? 이라고 하면 당연히 EC2인스턴스를 5개면 5개 10개면 10개, 100개면 100개를 일일히 다 만들어 주어야 했다는 점입니다. 당연히 이를 AMI즉 이미지를 만들어서 그 안의 파일들과 그 환경을 통해 새로운 인스턴스를 만들 수 있었습니다. 하지만 배포를 하고 python manage.py runserver 0.0.0.0:8000을 계속 해주어야 했고, 이를 100개 다 일일히 해주는 일이란 너무 불편하지 않을 수 없습니다. 그런데 웹서버 요즘 유명한 NginX같은 것은 그냥 파일형태로 저장되면 이 자체가 그냥 웹으로 보여지는 것이라고 보면 됩니다. 그래서 Nginx, Gunicorn, Supervisor..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - AWS CloudFront 생성 및 캐싱 설정
실습 우선 AWS CloudFront를 배포하기 전에, origin을 ELB로 하겠습니다. 우선 원본 도메인인 origin을 이전에 만들었던 ELB로 설정해 주었습니다. 그리고 모든 엣지 로케이션에서 사용하도록 했습니다. 이는 가격과 연동되어 있어서, 나중에 바로 실습하고 지워버릴 겁니다. 다음으로는 이제 Route53에 들어가셔서 호스팅영역 수정을 진행해 주어야 합니다. 그 이유는 저기 A 레코드를 보시면 기존에 ELB와 연결되어 있음을 보실 수 있습니다. 이제는 ELB가 아닌 Cloud Front와 연결 시켜주어야 합니다. 그리고 위에서 설정 못한 cloud front의 대체 도메인 이름인 CNAME을 추가해 주어야 하는 과정을 수반해야 합니다. 그리고 SSL인증서는 이전에 발급한 인증서가 먹히지 않..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - AWS CloudFront와 CDN의 동작원리
AWS Cloudfront 이제 AWS의Cloudfront는 기본적으로 Cache를 위한 서버입니다. 이를 위해 자연스럽게 CDN도 제공한다고 보시면 됩니다. 그리고 이 Cache서버는 전 세계에 흩어져 있는 인프라를 활용하기 때문에 추가적으로 CDN의 기능도 보유합니다. 만약에 싱가폴에 있 는 사람이 서울에 만든 제 서버에 들어오게 된다면 당연히 조금 느리게 될 것입니다. 하지만 이가 해결해 줍니다. 그럼 캐싱이 뭐냐. 기존의 방식은 클라이언트가 요청할 때마다 서버가 응답해 주는 방식입니다. HTML문서를 준비해놨다가 뿌려주는 것이 아니라, 동적으로 생성하는 방식인 것입니다. 당연히 연산이 많으니까 서버 과부화가 날 수도 있고 유저 입장에서는 너무 느릴 수 있고, 서버 입장에서는 서버 비용이 너무 많이..
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - AWS Route53 DNS기반 인증서 발급과 ALB https 설정하기
간단히 http와 https의 차이를 살펴 보도록 하겠습니다. 일종의 프로토콜이라는 점에서 공통점이 있습니다. 하지만 http에서는 그 안의 내용을 전혀 암호화하지 않고 보내는 반면 https는 암호화를 합니다. 만약 http를 사용하는데 해커가 중간에서 우리의 결제내역이나 신상을 가로채버린다면 이는 큰 사고로 이어질 수도 있습니다. 하지만 https는 암호화를 하고 풀고 하는 작업이 들어가다보니까 조금 느릴 수 있습니다. 그리고 서버 보안인증서를 발급받아야 합니다. 하지만 AWS는 서버보안인증서를 싸고 쉽게 우리에게 제공합니다. 일단 그 전에 저번에 못본 http://www.knu-kert.com/order/order와 http://www.knu-kert.com/delivery/orders로 들어가서 ..