본문 바로가기

DevOps

(16)
AWS S3, CloudFront로 CDN 구축하기 개발하게 된 배경 내가 개발한 웹사이트가 Performance에 많은 문제가 있었다. 그 중, 이미지가 성능을 낮추는데 가장 큰 요인이여서 CDN 구축을 하게 되었다. 1. S3 버킷 생성 Amazon S3 를 생성해준다. 테스트용으로 이미지 하나를 업로드 후 이미지 url을 열면 액세스가 차단되어 있다. 2. CloudFront 생성하기 생성된 CloudFront domain으로 접속해보면 똑같이 접근이 안된다. 3. CloudFront > Originis 설정 수정 S3 버킷 Access 제한을 풀어준다 이제 CloudFront 객체 URL로 접근하면 이미지에 접근할 수 있다. 결과 200KB로 매번 불러오던 이미지가 -> CloudFront에 캐싱되면서 200B로 줄어들었다.
AWS RDS 등급 정하기 웹 서비스 개발을 하면서 AWS infra를 구축할 때, 비용이 가장 많이 들어가는 것은 RDS 쪽일 것이다. ( 4xlarge가 한달에 천달러니까... ) 내가 사용하고 있는 RDS 등급이 서비스에 적합할까? 개발을 하면서 항상 애매한 것이 AWS ec2나 RDS 등급 설정이 였다. 과연 RDS에서 어떤 지표를 보고 등급을 조정해야 할까? CPU 사용량 : 보통 20~70%면 적당하다고 함. 이렇게 범위가 넓은 이유는 보통 트래픽과 비례하기 때문 ( 새벽, 피크타임 트래픽잉 보통 10배 차이남 ) 커넥션 RDS CPU에 영향을 미치는 쿼리 개선하기 RDS > slow_logs 를 가보면 3초 이상 걸리는 쿼리가 검색이 된다. 이러한 쿼리는 보통 개선이 필요하다 range 쿼리를 최대한 줄인다 ( 아무리..
Docker 이슈 - no space left on device 도커로 환경을 구성했는데 로그가 많이 쌓여서 해당 인스턴스에 문제가 생겼다.
Docker 이슈 - 시스템 자원 부족 ( lack of system resources ) 현상 테스트 환경 t3.medium EC2에 docker container 10개 정도를 띄워놨었고 다음 날 출근을 해보니 instance status 가 죽어 있어서 모든 연결이 끊어졌다. 그래서 로그를 살펴보니 아래와 같은 것을 발견하였다. HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=4m40s450ms660µs405ns). 이 로그로 구글 검색을 해보면 대부분 답변이 시스템 자원이 부족해서라 한다. 시스템 자원 중에 어떤 부분이 부족하며? 이걸 방지할 수 있는 방법은 없을까? 아래 나오는 내용은 정답이 아니라 내가 스스로 검색한 부분이다. 잘못된 부분이나 잘 아신다면 댓글 부탁드립니다.... 도커의 자원을 제한..
Docker Image 가볍게 만들기 1. Layer를 적게 사용하자 먼저 같은 내용이지만 두가지 버전의 Dockerfile을 살펴보자 FROM ubuntu:14.04 RUN apt-get update -y # Install packages RUN apt-get install -y curl RUN apt-get install -y postgresql RUN apt-get install -y postgresql-client # Remove apt cache to make the image smaller RUN rm -rf /var/lib/apt/lists/* CMD bash FROM ubuntu:14.04 RUN apt-get update -y && \ apt-get install -y curl postgresql postgresql-clie..
AWS SNS란? AWS SNS(Simple Notification Service)란?구독 중인 엔드포인트 또는 클라이언트에 메시지 전달을 조정 및 관리하는 웹 서비스이다. ( 메시지 브로커라고 보면 될 거 같네 ) 이벤트 생산하는 쪽을 게시자 ( Publisher )라 하고, 이벤트를 구독하는 쪽을 구독자 ( Subscriber )라 한다. Amazon SNS Message Delivery Status AWS SNS는 구독자( ex : Application, HTTP, Lambda, SQS ) 에게 전송된 메시지 전달 상태에 log를 남겨 준다. log는 CloudWatch 로그로 전송이 된다.
CloudFront란? CloudFront란?html, css, js 및 이미지 파일과 같은 정적 및 동적 웹 컨텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹서비스라고 한다. 정의에 나온대로 가장 대표적인 사용사례가 정적 웹 사이트 콘텐츠 전송 속도 향상이다. CloundFront에서 콘텐츠를 어떻게 제공하길래 빨라지는 걸까? CloudFront에서 콘텐츠를 제공하는 방법1. 사용자가 웹사이트에 접속하면 이미지 파일 및 HTML 파일을 요청합니다. 2. DNS가 요청을 최적으로 서비스 할 수 있는 CloudFront 엣지 로케이션으로 요청을 라우팅합니다. ( 지연시간과 관련해 가장 가까운 CloudFront 엣지 로케이션임 ) 3. 엣지 로케이션에서 CloudFront는 해당 캐시에 요청된 파일이 있는지 확인한다. 파일이 ..
Docker tag 잘 활용하기 Tip #1. Docker Tag를 명시적으로 관리하기 ( latest x )Docker Image 태그는 기본적으로 latest이기 때문에 따로 명시해줄 필요가 없어 편해보일 것이다. 이렇게 버전을 명시해주지 않으면, 변화를 추적하기 힘들고 Production 환경에서 무엇을 실행하였는지 판단하기 어렵다. Docker wiki에도 latest에 의존하지 않고 의미있는 tag를 사용하라고 되어 있다.Latest가 안정화된 latest 인지 개발중인 latest인지 판단할 수 없음 Latest가 항상 최신 버전임을 보장해주지 않음 Tip #2. Docker Tag 이름 잘 짓기 일단 dev, staging, prod 환경과 상관없이 하나의 docker repo를 가진다. env마다 repo를 하나씩 가진다..
AWS DynamoDB - (3) AWS SDK for Java 설정하기 OverviewAWS SDK for Java는 Amazon Web Service를 위한 JAVA APi이다. 즉, Amazon S3, Amazon DyanmoDB의 서비스를 사용하는 Java application을 만들 때 사용하게 된다. 이번 포스팅의 목표는 EC2 Instance에서 실행하는 Spring Boot project가 DyanmoDB service를 사용할 수 있도록 AWS SDK를 설정하는 것이다. 아래의 그림은 해당 설정이 끝났을 때 요약도이다. 1. AWS SDK for JAVA 설치하기build.gradle에 dependency를 추가해주자.// AWS Dynamic DB compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb',..
AWS DynamoDB - (2) 인증 및 접근 제어 ( Authentication and Access Control ) 시작하기 전에지난 포스팅에서는 Local 환경에서 DynamoDB를 띄우고 Spring Boot와 연결하는 방법에 대해 다루었다. 이번 포스팅에서는 EC2 instance에서 실행되는 Spring boot에서 DynamoDB에 접근하기 위한 인증과 접근제어 설정에 관해 다루어 보겠다. DynamoDB에 접근 권한을 가진 Credential만 접근이 가능하도록 하여 resource를 보호할 수 있다. 이 번 장에서 리소스를 보호하기 위해 AWS IAM(identity and access management)와 DynamoDB를 어떻게 설정해야 되는지에 대해 다루어보자. 인증 ( Authentication ) 접근 제어 ( Access Control ) Request를 인증할 Credentail이 있다하더라..