목록인프라 (11)
훈훈훈
Introduction 이번 글은 AWS Aurora MySQL 를 사용할 때 어떤 MySQL JDBC driver 라이브러리 사용할지 고민하면서 찾아보게 된 내용을 정리해보기로 하였다. 간단하게 요약하자면 MariaDB connector / J 와 AWS MySQL JDBC 사이에 고민을 했고, 두 라이브러리를 비교해보게 되었다. MariaDB connector / J MariaDB Connector / J 공식문서를 보면 아래와 같이 auroa 옵션을 부여할 경우 replication 과 failover 기능을 사용할 수 있는 것을 알 수 있다. 해당 기능의 장점은 별 다른 구현 없이 failover 와 replication 를 쉽게 이용할 수 있다는 점이다. 하지만, MariaDB JDBC drvi..
해당 내용 및 그림은 공식문서, 블로그 등을 참고하였습니다. 출처는 글 하단에 작성하였습니다. 서비스(Service) 란? - 파드에서 실행되고 있는 애플리케이션을 외부로 노출 시키는 추상적인 방법 - 디플로이먼트로 관리되고 있는 여러 파드들은 재시작 할 때마다 부여받은 IP 주소가 변경되기 때문에 관리가 어렵다. - 위의 문제점은 서비스를 이용하여 해결할 수 있다. - 서비스는 지정된 IP로 생성 및 여러 파드들을 묶어서 관리 할 수 있으며, DNS로 조회가 가능하다. - 서비스도 파드와 마찬가지로 REST Object 이며, 서비스 생성 시 API Server에 POST하여 새 인스턴스를 생성할 수 있다. - 기본 프로토콜은 TCP, 다른 프로토콜은 해당 링크 참고 - 예시 1 2 3 4 5 6 7 ..
해당 내용은 공식문서와 쿠버네티스 인 액션을 참고하였습니다. LivenessProbe - Kubernets에서 제공하는 컨테이너 헬스체크 방식 중 한가지 - LivenessProbe를 사용하면 컨터이너가 서비스를 시작할 수 있는지 판별할 수 있다. - 즉, 외부로부터 Request를 요청받을 수 있는 상태인지 판별 - 같이 쓰이는 헬스체크 방식 중 ReadinessProbe도 있다. 해당 속성을 사용하면 서비스가 계속 유지되고 있는지 체크할 수 있다. 예제로 사용한 Deployment 매니페스트 파일은 아래와 같다. apiVersion: apps/v1 kind: Deployment metadata: name: test-depolyment labels: app: test-api spec: replicas:..
해당 내용은 공식문서, 쿠버네티스 인 액션 책을 참고 하였습니다. HPA(Horizontal Pod Autoscaler) - 파드를 수평적으로 오토스케일링함, Scale Out(파드 수 증가) - 컨트롤러가 주기적으로 Metric을 수집 후, 조건에 부합하면 HPA 리소스에 설정되어 있는 레플리카 수 계산 Metric 수집 과정 - kubelet 자체에 내장된 cAdvisor 에이전트에서 실행되는 개별 컨테이너 및 노드 전체 리소스 사용 데이터 수집 - cAdvisor 에이전트로 부터 수집된 데이터를 바탕으로 전체 클러스터에 대한 리소스 연산은 Metirc Server 혹은 힙스터에서 진행 - HPA는 Metric Server 혹은 힙스터의 API 호출을 통해 메트릭 수집 * 최근에는 힙스터 보다는 Me..
이번에는 쿠버네티스를 사용해서 웹 서버를 구축하려고 한다. 사실 AWS와 같은 클라우드 벤더사를 사용할 경우 로컬 내에서 웹 서버랑 데이터 베이스 서버를 동시에 실행 시킬 일은 없지만, 쿠버네티스에 대한 개념도 잡을 겸 해보았다. 예제로 사용한 웹 서버는 이전 글에서 Spring boot와 코틀린으로 작성한 코드를 사용하였다. 사용한 기술은 아래와 같다. - Spring boot - Postgresql - Docker - Kubernetes - Helm 구성도는 아래와 같다. 웹 서버(Spring boot)와 DB서버(Postgresql) 컨테이너를 각각 파드로 나누었다. 그 다음 서비스도 서로 다른 포트로 통신하기 때문에 서로 다른 서비스로 나누었다. Service까지 설정이 되면 이제 파드에 접근할 ..
이번에 프로젝트를 진행하면서 REST API를 만들어 backend 서버를 AWS를 사용하여 배포하게되었다. 처음에는 로컬 환경에서 진행하듯이 python manage.py runserver 명령어를 사용하였지만, 터미널 종료 후에 서버도 같이 종료되는 현상이 발생하였다. 만약 실제 서비스를 제공하고 있다면 서버가 다운되는 현상은 기업 입장에서 매우 큰 크리티컬일 수 밖에 없다. 따라서 다음과 같은 조건을 만족 시켜야 한다. # Django 배포 조건 1. Terminal 이 종료되어도 서버는 24/365 유지되어야한다. 2. Request 혹은 Response 시 로그가 남아야한다. 이제 아래와 같은 배포 방법을 소개하려고 한다. # 배포 방법 1. gunicorn - gunicorn 이란 ? pyth..
# 글을 쓴 계기 - 프로젝트 진행 중 지인의 RDS에 저장된 Scheme가 랜섬웨어에 감염되었다는 소식을 듣게 된다 ........ # 원인 1. Security Group 상에서 any open 정책 2. 아주 간단한 password 사용 그렇기 때문에 해커가 간단하게 RDS서버에 접근하지 않았나 싶다 .. # 대응 방안 1. MySQL Default Port 변경 RDS 생성 시 Default Port가 3306으로 설정되어있다. 따라서 RDS서버에는 3306포트가 오픈되어 있다는 점은 예상하기 쉽다. 따라서 AWS Console에서 포트를 하는 것이 좋다. 필자는 15001 포트로 변경하였다. 참고로 MySQL Default Port를 번경하였다면, my_settings.py에 등록된 Port도 ..
1. EC2 인스턴스에 mysqlclient 모듈 설치 Django에서 mysql을 연동하기 위해서는 mysqlcinent 모듈이 필요하다. 로컬환경에서는 pip 로 바로 설치가 가능하지만, EC2 인스턴스에서는 gcc 및 libmysqlclient-dev 설치가 선행되어야한다. 이 두개가 설치 되었다면, git에서 받은 파일에 첨부된 requirement.txt 파일에 있는 리스트들을 그대로 설치하거나, pip install mysqlclient를 진행해주면 된다. sudo apt install gcc sudo apt install libmysqlclient-dev /*conda 가상환경에서 */ pip install -r requirement.txt 2. my_settings 생성 및 설정 보통 gi..