전체 글

전체 글

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - API 구동 테스트

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - API 구동 테스트

    이제 이제까지 짠 order, shop API가 잘 작동하는지 알아보겠습니다. GET /api/order 아직 아무것도 추가 안해주었으므로 빈 배열이 나타납니다. POST /api/shop GET /api/shop 다음과 같이 추가된 shop이 잘 확인됩니다. 그리고 만약에 잘못된 field를 넣게되면 어떻게 될까요? POST /api/shop 다음과 같이 json형태로 딱 떨어지게 오류가 표시됩니다. 그리고 pk를 통해 id=1인 가게를 가져와 보도록 하겠습니다. GET /api/shop/1 네 잘 작동합니다. 그리고 PUT을 통해 데이터 업데이트가 잘 동작하는지 확인해보도록 하겠습니다. PUT /api/shop/1 이도 잘 동작함을 확인할 수 있습니다. 마지막으로 삭제까지 잘 되는지 확인하겠습니다. ..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, RestFramework - Viewsets

    이제 RestFramework를 스피드하게 구현해 보도록 하겠습니다. 이번 포스팅의 새로운점이라고 하면 Viewsets를 사용한다는 점입니다. 전보다 더 깔끔한 코드와 체계적인 구조를 보실 수 있을겁니다. 바로 rest_framework의 viewsets를 통해 구조를 짜보겠습니다. /user_order/views.py from rest_framework import viewsets, status from .models import Shop, Order from .serializers import ShopSerializer, OrderSerializer from rest_framework.response import Response from rest_framework.parsers import JSONP..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, Models

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, Models

    이번에 할 작업도 기존에 했던 작업과 많이 겹치는 작업입니다. 스피드하게 진행해 보도록 하겠습니다. /user_order/models.py from django.db import models class Shop(models.Model): shop_name = models.CharField(max_length=20) shop_address = models.CharField(max_length=40) class Order(models.Model): shop = models.ForeignKey(Shop, on_delete=models.CASCADE) order_date = models.DateTimeField('date ordered') address = models.CharField(max_length=40..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, Mysql

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, Mysql

    우선 Django와 mysql을 직접 연결하는 과정을 진행해 보도록 하겠습니다. 우선 docker-compose.yml을 수정해 주도록 하겠습니다. /docker-compose.yml version: '3.8' services: backend: build: context: . dockerfile : Dockerfile ports: - 8000:8000 volumes: - .:/app depends_on: - db db: image: mysql:5.7.22 restart: always environment: MYSQL_DATABASE: admin MYSQL_USER: root MYSQL_PASSWORD: root MYSQL_ROOT_PASSWORD: root volumes: - .dbdata:/var/li..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, Docker

    여기에서는 간단히 order서비스를 Django를 통해서 만들고 docker compose 설정까지 간단히 해보겠습니다. $django-admin startproject order 이를 통해 간단한 order틀을 만들어 주었습니다. 그리고 루트 폴더에 requirements.txt, Dockerfile, docker-compose.yml을 작성해 주도록 하겠습니다. /requirements.txt Django==3.1.3 djangorestframework==3.12.2 mysqlclient==2.0.1 django-mysql==3.9 django-cors-headers==3.5.0 pika==1.1.0 개발에 필요한 의존성을 다 적어 주었습니다. pika는 RabbitMQ를 위한 툴입니다. /Docke..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (설계) 마이크로서비스 아키텍쳐

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (설계) 마이크로서비스 아키텍쳐

    마이크로서비스 아키텍쳐 여기에서는 이제 본격적으로 마이크로서비스를 개발하기 위한 아키텍쳐를 설명해보도록 하겠습니다. 아마 Frontend는 하지 않을것같습니다. Order와 Boss의 구현에 집중을 하겠습니다. Order는 Django로 짜고, Boss는 Flask로 짜겠습니다. 아예 독립적으로 구현한다는 말이죠. 각각을 Docker 컨테이너로 만들겁니다. 그리고 각각 Order와 Boss사이의 인터렉션을 Internal API로 동기적으로, RabbitMQ를 이용하여 비동기적으로 소통해보도록 하겠습니다. 그리고 Order와 Boss가 사용하는 DB가 다를겁니다. 이 두개가 다르다는 것은 두 DB간의 동기화가 필요하다는 것입니다. 만약 Boss의 DB가 바뀌었다고 해 봅시다. 그럼 RabbitMQ를 통해..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (설계) 마이크로서비스 간의 통신 방식(Kafka, RabbitMQ)

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (설계) 마이크로서비스 간의 통신 방식(Kafka, RabbitMQ)

    마이크로서비스 간의 통신방식에 대해 알아보겠습니다. Synchronouse Solution에는 당연히 동기적으로 하는 것이므로, Rest API가 있습니다. 이는 매우 익숙한 방법입니다. Asynchronouse Messaging는 서비스 A가 서비스 B로 메세지를 보낼 때, 서비스A는 브로커한테 바로 메세지를 보냅니다. 그리고 서비스A는 응답을 기다리지 않습니다. 그래서 일단 비동기라고 지칭합니다. 그리고 서비스B는 준비가 되었을 때, 결과를 브로커에게 보냅니다. 그리고 브로커가 A에게 결과를 보내는 방식입니다. 이를 위해서는 RabbitMQ와 Apache Kafka를 사용합니다. 우리의 실습에서는 RabbitMQ를 일단 사용해보도록 하겠습니다. 만약 서비스 A가 B로 요청을 보냈는데 B가 오프라인상태..

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개요) 마이크로서비스의 장단점

    [ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개요) 마이크로서비스의 장단점

    마이크로서비스를 하기전에 이에대한 개념에 대해 알아보겠습니다. 모놀리식 아키텍쳐 대부분의 토이프로젝트가 모놀리식 아키텍쳐입니다. 상황을 가정하여봅시다. 프로젝트를 하다보면 A라는 기능을 완성해서 배포하는데, 기획단에서 다른 기능을 기획해서 B라는 기능을 추가해야 된다고 봅시다. A라는 기능을 할때는 버그터질게 별로 없었습니다. 하지만 B를 추가하니까 갑자기 버그나 나타나는 현상을 일으킬 수 있습니다. 분명 A는 아무것도 만지지 않았음에도 불구하고 말이죠. 독립적이지 않았기 때문이죠 만약 백엔드를 Java Spring으로 구현하는데, 머신러닝을 python으로 구현하고 싶다고 해 봅시다. 이게 모놀리식이게 된다면 머신러닝을 무조건 Java로 해야합니다. 아주 불편한 상황이 됩니다. 하지만 모놀리식도 장점이..

    [ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS CodeDeploy 2

    [ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS CodeDeploy 2

    우선 기존에 IAM에 대해 깊게 다루지 못한거 같아 서론에서 이에 대해 조금 다루고 넘어가도록 하겠습니다. IAM IAM은 AWS클라우드 인프라 안에서 신분과 접속/접근을 관리하기 위한 서비스이며, 크게 사용자, 그룹, 역할, 정책으로 구성되어 있습니다. IAM 정책(Policy) 정책은 권한을 부여하는 방법입니다. 하나 이상의 AWS리소스에 어떤 작업을 수행할 수 있는지 허용 규칙을 JSON형식으로 작성하면 됩니다. 이렇게 만들어진 정책이 IAM 사용자와 그룹, 역할에 연결되게 됩니다. IAM 사용자(User) 이는 실제 사용자 단 한명을 의미합니다. 하지만 AWS계정을 처음 만들었을 때 만든 루트 계정(email)이랑 완전 다르다는 점을 알아야 합니다. 왜냐하면 루트 계정은 모든 권한을 갖고 있고, ..

    [ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS CodeDeploy 1

    [ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS CodeDeploy 1

    AWS CodeDeploy 이는 이제 EC2, on-premise instances, Serverless에 와 같이 자동배포를 가능하게 합니다. 우리는 git - CodeCommit보다는 git - CodeDeploy를 더 많이 씁니다. 그리고 이를 더 심도있게 다룰 수 있게 되면, 서버의 무중단 배포 ( 무정지 재배포 )가 가능하게 됩니다. Compute Platform은 간단히 위에서 본 EC2, on-premise isntance, Serverless Lambda중 뭐를 활용해서 배포를 할거냐 라는 의미입니다. 우리가 이전에 EC2를 모아놓은 대상그룹을 지정했던 적이 있습니다. 이는 로드벨런서가 어디로 가야하는지 알려줄 떄 사용했던 개념입니다. Deployment Types & Groups도 마찬가..