본문 바로가기

전체 글

(124)
CORS (simple, preflight request) https://developer.mozilla.org/ko/docs/Web/HTTP/CORS 교차 출처 리소스 공유 (CORS) 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다. developer.mozilla.org https://nhj12311.tistory.com/69 CORS 처리 시 options는 왜 부르는거지?(Simple, Pre-flight) 이번에 별도 시스템을 개발하..
AWS S3 Events(SNS) or CloudWatch Event Trigger(S3 -> SNS) S3에 오브젝트 업로드 시 SNS로 받은 후 HTTP(S) 트리거 시에 "Permissions on the destination topic do not allow S3 to publish notifications from this bucket" 같은 에러 발생. 이는 SNS의 Policy 문제로 SNS의 Access policy - optional에 아래와 같은 Policy를 넣어줘야 함. CloudWatch Event Trigger에서도 S3가 Source일 경우 동일하게 동작하지 않음. { "Version": "2008-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Princi..
Amazon API Gateway Proxy 모드 Amazon API Gateway 사용 시, 기본적으로 모든 Path, Method, Header, QueryString 등을 아래와 같이 미리 프로비저닝 해야 한다. 그러나 API Gateway {Proxy+} 사용 시 해당 매개 변수들을 일일히 설정할 필요가 없이, Lambda 등 BackEnd에서 받을 수 있다. 참고https://aws.amazon.com/ko/blogs/korea/api-gateway-update-new-features-simplify-api-development/ 실제로 {Proxy+} 테스트를 진행해보자. 먼저 API Gateway와 연동할 Lambda를 생성한다. (Node v.12)exports.handler = async (event) => { // TODO implem..
Route53 NS 레코드 위임 문제(재귀쿼리) 및 DNS Query 트래픽, 로그 확인 기존 DNS 서버에서 Route53으로 NS 레코드를 이관할 때, Route53에서 위임된 다른 NS에 정의된 레코드들을 응답받지 못한다. 가령 아래와 같이 DNS 쿼리를 수행했을 경우, Route53에서 app.testhtm.com을 다른 NS로 위임했을 때 A레코드까지 질의되지 않는 경우다. dig +trace app.testhtm.com @ns-638.awsdns-15.net 와 같이 질의한 경우, NS 레코드까지만 응답. 로컬 DNS를 Route53으로 지정하고 Query를 하면 NS에 대한 DNS 재귀쿼리(Recursive Query)까지는 수행되지 않는다. 이유를 누가 알려주실 분.. AWS Support에서도 그냥 Zone Apex를 위임하면 된다고까지만 얘기해 줌.. 이 경우 실제 Zone..
AWS Batch 사용법 AWS Batch 서비스는 말 그대로 Batch 서비스용 서비스다. S3의 오브젝트 파일 프로세싱이나 로그 전처리 등 배치성 일을 처리할 때, AWS Batch를 사용할 수 있다. Tutorial은 S3 Bucket에 업로드 되는 오브젝트의 네임을 인덱싱하여, DynamoDB에 적재하는 예제를 진행한다. AWS Batch는 EC2로 서비스 되나요? 아니면 Lambda와 같은 서버리스? AWS Batch는 Amazon ECS와 연동된다. Batch에 수행되는 VM은 컨테이너 기반으로 동작하기 때문에 도커 이미지를 미리 생성해놔야 한다. Batch는 AMI를 사용하나요? 레파지토리는 어떻게 구성하죠? Batch는 사용자가 만든 AMI를 이용할 수도 있고, Amazon의 AMI를 사용할 수도 있다. 또한 도커..
AWS Lambda Edge를 이용한 이미지 리사이징 먼저 기본 내용은 아래 AWS Blog를 통해 확인하자. Resizing Images with Amazon CloudFront & Lambda@Edge | AWS CDN Blog | Amazon Web Services Do you have lots of images that need to be modified before delivery? No problem with Amazon CloudFront and Lambda@Edge. Read more on how you can use our services to modify image dimensions, apply watermarks, or optimize formats based on browser support all aws.amazon.com 중요 키..
알리바바 클라우드(Alibaba cloud) CDN 분석 알리바바 클라우드 CDN에 대한 Basic Architecture 구성 가능 여부 및 AWS 와의 기능 비교 검토를 진행했다. - Basic Architecture Test 가장 일반적으로 사용되는 이미지, 비디오 스티리밍, 실시간 비디오 스트리밍 CDN에 대한 기본적인 기능을 알리클라우드 환경에서 검증을 진행했다. - Detailed Function Test 알리바바 클라우드 CDN에서 제공하는 기능들에 대해서 기술 검토를 진행했고, AWS CloudFront와의 비교 검증을 진행했다. 1. 이미지 캐싱 캐싱을 위한 가장 단순한 구성으로 CDN과 Storage 구성이다. 알리바바 환경에서는 아래와 같이 대체 구성이 가능하다. AWS CloudFront -> Alibaba Cloud CDN AWS S3 ..
도커 컨테이너(docker container)를 이용해서 node app 환경 구성하기 VScode를 이용해서 간단한 node 샘플 app.js을 생성한다. 먼저 node init을 통해 package.json을 생성한다. 사용하는 lib는 express, nodemon 이다. { "name": "nodeindocker", "version": "1.0.0", "description": "node express app in docker", "main": "app.js", "dependencies": {}, "devDependencies": { "express": "^4.17.1", "nodemon": "^1.19.4" }, "scripts": { "start": "node app.js" }, "author": "leedoing", "license": "ISC" } 샘플 node 서버 스크립트..
도커 컨테이너(docker container)의 docker-compose.yml를 이용하여 워드프레스(wordpress) 구성하기 도커 컴포즈를 이용하여 워드프레스를 쉽게 구성할 수 있다. 먼저 환경변수를 생성한다. .env 파일 MYSQL_ROOT_PASSWORD=mysql_root MYSQL_USER=wp_user MYSQL_PASSWORD=wp_password 그리고 도커 컴포즈를 생성한다. docker-compose.yml version: '3.3' services: db: image: mysql:latest env_file: .env environment: - MYSQL_DATABASE=wordpress volumes: - dbdata:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password wordpress: depends_on: - db ..
도커 컨테이너(docker container) Apache, PHP, MySQL 컨테이너 환경 구성하기 도커 컨테이너를 이용하여 로컬 APM 개발 환경을 구성해보자. /php/web_dev 경로에 Dockerfile을 저장한다. (파일명 Dockerfile) Dockerfile은 단순히 도커 컨테이너 이미지를 빌드해주는 파일이다. docker-compose의 경우 도커 컨테이너를 정의해주는 파일이다. 아래와 같이 Dockerfile은 php:7.3.3-apche 이미지를 빌드한다. FROM: 도커 이미지 선택 RUN: 도커 컨테이너 내에서 실행하는 커맨드 EXPOSE: 포트 바인딩 FROM php:7.3.3-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli EXPOSE 80 docker-compose의 경우 아..
AWS Managed VPN Service 구성 AWS Managed VPN Service를 이용하여 On-premise와 IPsec VPN을 구성하는 방법을 설명한다. 아래 항목을 순차적으로 구성하도록 하겠다. 1) AWS Managed VPN Service 개요 2) Customer Gateway 생성 3) Virtual Private Gateway 생성 및 VPC 연결 4) Site-to-Site Connection 생성 5) VPN Routing 설정 6) Tunnel 상태 확인 7) considerations 8) Appendix - IPsec Tunneling 지원 (GRE 등 다른 Tunneling 은 지원하지 않음, 2019년 08월 현재 기준) - Static Routing과 Dynamic Routing(BGP)을 제공 - 고가용성을 ..
AWS Step Functions 이해 AWS Step Functions은 AWS Lambda 및 Amazon ECS의 워크플로우를 연결하여 Serverless 서비스의 설계를 명확하고 유연하게 만들어준다. - AWS Step Functions을 사용하면 Serverless의 가시성이 확보되어 서비스를 빠르게 빌드하고 업데이트 할 수 있다. - Lambda Function들을 유기적으로 연결하여 오류와 예외처리를 쉽게 할 수 있다. - 각 단위 Function들의 결합으로 코드를 간결하게 개발할 수 있다. 그럼 오늘은 간단한 샘플을 통해 Step Functions의 튜토리얼을 진행한다. 위 그림과 같이 AWS Step Functions을 이용하여 간단한 구매, 환불 스크립트를 샘플로 진행한다. 샘플은 아래 링크를 참고했다. djg07’s gi..
Windows 10 Local 환경에서 도커(docker) 개발 환경 구성하기 예전 Local 환경에서 docker를 잠시 공부할 때 구성해놨는데, 윈도우가 맛이 가서 Hyper-V가 정상 동작하지 않았다. 그래서 이번 기회에 PC 포맷도 하고 도커 환경을 다시 구성하며 블로깅 한다. 주요 명령어도 한 번 훑어보고, 또한 VSCode를 통해 Web App도 한 번 띄워보자. 도커는 많은 이유에서 사용된다. 내 경우에는 사내에서 개발 한 프로젝트의 OS 환경이 바뀌어 이관해야 하는데, 각종 라이브러리 문제 등 너무 힘들었다. 개빢... 그래서 애초에 Local 윈도우 10 환경에서 도커 환경을 구성해보고 개발해야겠다는 생각이 들었다. (참고로 나는 개발자는 아니고 잡부) 먼저 도커 설치는 매우 간단하기 때문에 구글링을 통해 미리 설치하길 바란다. 아래 설명이 잘 되어 있는 링크를 첨..
Amazon Athena의 SQL 정리 Amazon Athena의 SQL 기초를 정리한다. 이번 내용에는 Amazon Athena의 기본 사용 방법을 익히고, 활용하여 S3에 업로드 된 CloudTrail 로그들을 이용해서 MFA 없이 AWS Web Console에 접근하는 사용자를 찾아보도록 하자. Amazon Athena의 기본적인 구성은 아래와 같다. S3 Location 확인 분석하기 위한 로그 파일들이 S3 버킷에 업로드 되었다는 가정하에 진행한다. 따라서 사전에 각종 로그 파일들을 S3에 업로드 해놓도록 하자. DDL Create Query(테이블 생성) 기본적으로 Athena 쿼리 엔진의 DDL은 Hive DDL을 기반으로 한다. Create Syntax는 아래와 같다. CREATE Syntax CREATE [EXTERNAL] T..
AWS WAF 로그 수집 방법 AWS WAF에서 로그 확인 방법은 세 가지가 있다. 1. AWS WAF 화면에서 Get new samples를 통해 샘플링 된 로그 확인 방법 2. Application Load Balancer 로그에서 WAF 관련 로그 확인 (ALB의 로그 target:port 필드에서 WAF로 차단된 요청의 경우 "-"로 표시되며 상태코드는 403으로 분류) Access Logs for Your Application Load Balancer - Elastic Load Balancing The AWS Documentation website is getting a new look! Try it now and let us know what you think. Switch to the new look >> You can ..
AWS WAF Rate-based Rules 사용하기(Brute force) WAF Rate Rules은 공격자의 악의적인 요청(Reqeust)에 대해 일정 임계치(Threshold)를 통해 공격자의 요청을 블록킹(Blocking)하는 기능이다. (e.g 5분 간 100개가 넘는 요청들이 왔을 때, 공격자의 IP를 차단) 설정 방법은 매우 간단하다. 먼저 AWS 웹 콘솔(Web Console)에서 WAF 구성 항목으로 들어간다. 그리고 Rules 페이지에서 Craete Rule을 선택한다. (AWS WebConsole -> WAF -> Rules) 위 그림과 같이 각 항목을 입력한다. Rate limit의 경우 현재 최소 100개의 요청까지 임계치 구성을 할 수 있다. 그리고 WAF ACLs 페이지에서 Create web ACL을 선택한다. 위 그림과 같이 각 항목들을 채워준다...
AWS Spot Instance 이해하기 AWS 스팟 인스턴스는 사전 약정 없이 On-demand 요금보다 70~90% 절감된 비용으로 사용할 수 있는 EC2 Instance(VM)이다. 시작하려는 인스턴스에 대해 현재 시간에 유효한 가격만 지불하면 된다. 주로 Batch Job 등 용도로 사용하는 서버에 잘 어울린다. 장점은 세 가지로 나열할 수 있다. 첫 번째, 용량 활용 EC2 스페어 용량의 수요와 공급량에 따라 가격이 결정되기 때문에 시장 중심의 낮은 가격으로 Amazon EC2의 안정성, 보안성, 성능, 제어 및 탄력성을 제공 받을 수 있다. 두 번째, 운영비용 절감 On-demand Instance와 비교하여 최대 70~90%의 운영 비용을 절감할 수 있다. 세 번째, 처리량 향상 상태 비저장 웹 서비스, 이미지 랜더링, 빅데이터 분..
AWS와 GCP 클라우드 상품 비교 클라우드란 기존 서버를 구입하고 IDC에 상면을 임차하여 IT 서비스를 하던 방식과 달리 Google, Amazon, MS 그리고 국내 NAVER 등 밴더 업체를 통해 웹 콘솔로 서버를 빌려서 사용하고 사용한 시간만큼만 비용을 지불하는 방식을 말한다. 클라우드 시장의 지속적인 성장으로 인해 많은 관심을 받고 있다. 그래서 클라우드 사업자 1위인 AWS와 후발주자인 Google Cloud를 비교해본다. 현재 클라우드 시장에서 1위는 단연 Amazon의 AWS 다. 그 이유는 아래 그림을 통해 알 수 있다. AWS의 경우 고객의 요구사항을 충실하게 서비스에 반영하고 있으며 매우 많은 옵션들이 있다. 반면 GCP는 빅쿼리 등을 앞세워 빅데이터, ML 등 특화된 영역을 앞세워 시장에 대응하고 있다. 실제로 고객..
도커 컨테이너(docker container)를 이용해서 리액트(React) 환경 구성하기 도커 컨테이너를 이용해서 React App 개발 환경을 구성해보도록 하자. 리액트를 사용하기 위해서는 먼저 npx 라이브러리가 설치되어 있어야 한다. npm -i npx -g npx를 설치한 후에 아래 명령어를 통해 리액트를 로컬 환경에서 셋업할 수 있다. npx create-react-app movie_app 로컬 개발 환경을 구성했다면, 이제 Docker-compose.yml과 Dockerfile를 통해 도커 환경을 구성하자. 아래와 같이 Docker-compose.yml 파일을 생성한다. 마지막 CHOKIDAR_USEPOLLING=ture은 App이 수정되었을 경우 Reload이 가능하도록 하는 설정이다. 이거 찾느라 4시간을 삽질했다. version: '3.7' services: movie_app..
CSS flex, grid 정리 주로 사용하는 엘리먼트 div: 개행 처리(display: block) section: 개행 처리(display: block) a: 개행 X(display: inline) span: 개행 X(display: inline) display block은 크기 조절이 가능 inline은 크기 조절이 불가능 inline-block은 인라인과 블록 속성을 동시 display: flex flex는 container에 적용 flex-direction: row(기본), column flex-wrap: wrap(브라우저 스크롤에 따라 정렬) justify-content: flex-start(기본), flex-end, center, space-between, space-around (row 정렬) align-items: s..
Windows 10에서 Linux 사용하기 윈도우10 에서 Virtual Box 등 가상화 도구 없이 간단하게 리눅스를 사용할 수 있다. 로컬에서 쉘 스크립트 등 간단한 프로그래밍을 할 때 유용하다. 먼저 Microsoft Store에서 Linux를 검색한다. Linux를 검색하면 아래와 같이 Ubuntu부터 Debian 등 여러 리눅스 OS의 유틸리티 도구를 확인할 수 있다. Ubuntu 유틸리티를 설치하고 실행하면 아래와 같은 에러를 볼 수 있다. Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x8007019e The Windows Subsystem for Linux optional component is not enabled. Ple..
AWS MediaConvert(S3 event lambda) AWS MediaConvert를 이용하여 VOD mp4 파일에서 블랙화면과 함께 Audio 파일만 추출한다. 아래 AWS Github의 샘플 코드를 이용한다. aws-samples/aws-media-services-vod-automation Sample code and CloudFormation scripts for automating Video on Demand workflows on AWS - aws-samples/aws-media-services-vod-automation github.com 샘플코드는 S3에 mp4 파일이 업로드 되었을 시에 미리 생성해놓은 미디어컨버트에서 미디어 프로파일을 구성하고 청크 파일을 만들어 HLS 서비스가 가능하도록 컨버팅 하는 예제이다. 링크를 그대로 따라서 하면 적..
Amazon Transcribe 한국어 STT 변환 Amazon Transcribe은 S3에 담긴 오디오 파일의 음성을 번역해주는 프로그램이다. 현재 영어, 아랍어, 중국어, 불어, 독일어, 힌두어, 이태리어, 한국어, 포르투칼어, 러시아어, 스페인어를 지원한다.?왜 일본어가 없지? 아무튼 2019-10-18 기준으로 Amazon Transcribe도 No Japan을 동참?하고 있다.그리고 언어가 같아도 영국, 미국 억양이 다르듯이 옵션 값을 다르게 줄 수 있다. 오디오 포맷의 종류는 WAV, MP3, MP4 및 FLAC?를 비롯한 여러 오디오 인코딩을 지원한다. 또한 실시간 번역도 가능하다. 오디오 컨텐츠는 API 호출당 컨텐츠 길이 4시간이나 2GB로 제한된다. 따라서 동영상 파일의 경우 MediaConvert를 사용해서 음성 파일만 따로 추출하는 ..
Amazon SageMaker & ML(sklearn) 이번 글은 SageMaker를 활용하여 기본적인 데이터 시각화 분석과 결과 평가 방법부터, 캐글의 Bike Rental 데이터를 통해 데이터 전처리, 트레이닝, 모델 생성, 배포 일련의 작업을 다룬다. 기본 sklearn을 사용해보고 SageMaker의 high level interface의 estimators 사용 방법과 비교한다. 개인적으로 학습한 내용이라 두서 없다. 1. Introduce 1-1. np, pd, plt(plt.hist/블록, plt.scatter/분산, plt.plot/선형) 1-2. 데이터 전처리 vehicle = df['Vehicles'].fillna(0) plt.plot(vehicles, ls='-.', alpha=0.8, label='mean') fillna(0), fill..
ES6, 7, 8 정리 [1] Variables 1. Var - var는 더이상 쓰지마라. - const를 써라. 대신 const의 하위 오브젝트 제어는 가능. - let도 지양 하지만 오브젝트를 변경해야 할 일이 있을 변수에는 사용. 그래도 웬만하면 const. 2. Hoisting / Block Scope - 지겨운 호이스팅 - const, let 사용 시 호이스팅에 트랩에서 빠져 나올 수 있음 3. Block Scope - f a{ f b{}} a에서 b의 object로 접근할 수 없고, b에서 a는 가능 - 당연히 if, for 등 {} 버블 내에서는 모두 적용 4. 정리 - const, let, hoisting, block scope를 기억해라. [2] Functions 1. Arrow Functions const n..
AWS EC2 User data script sample(node.js) AWS EC2의 User data에서 yarn install/run 명령어 수행이 되지 않음.. 초기 EC2 생성 시의 User data 아래와 같이 구성하면 되고 시작 시 Linux 인스턴스에서 명령 실행 - Amazon Elastic Compute Cloud 시작 시 Linux 인스턴스에서 명령 실행 Amazon EC2에서 인스턴스를 시작할 때 사용자 데이터를 인스턴스에 전달하여 일반적인 구성 작업을 자동으로 수행하는 데 사용하도록 할 수 있고, 인스턴스가 시작된 후에 스크립트를 실행할 수도 있습니다. Amazon EC2에 shell 스크립트 및 cloud-init 명령이라는 두 가지 유형의 사용자 데이터를 전달할 수 있습니다. 시작 마법사에 이 데이터를 일반 텍스트, 파일(명령줄 도구를 사용하여 인..
Babel 6/7 후아 이틀 삽질한 내용.... 1. Error: only one instance of babel-polyfill is allowed babel을 전역변수로 단 한 번의 정의만 가능하므로, 어딘가에 너는 babel-polyfill을 import 하고 있을 것이야.. 2. ReferenceError: regeneratorRuntime is not defined async function myFunc(){} -> const myFunc = async function(){} 3. Runtime Error 문제(.babelrc) @babel/transform-runtime 플러그인 추가 { "presets": [["@babel/preset-env"]], "plugins": [["@babel/transform-ru..
AWS MediaStore 오랜만에 업데이트... 요새 딴 일을 하느라...🙏 아무툰... AWS MediaStore는 Live 스트리밍 전용으로 메모리 기반의 S3로 이해하면 된다. 그러니까 실시간 레이턴시가 중요한 Live 미디어 서비스의 MediaStore 사용을 권장한다. S3만큼 여러 기능도 없다. 그냥 easy easy... 보편적인 Live Streaming 구성 [Encoder Appliance] -> [MediaLive] -> [MediaStore] -> [CloudFront] MediaStore를 사용 시에는 MediaLive에서 endpoint에 mediastore(ssl)://mediastoreEndpoint/'path' chunk: '/path' 혹은 'path' 로 구성하면 되는데, /path로 구성했을 ..
s3 sync shell S3 cli 쓰레드 늘리는 설정(10 -> 50~80) aws configure set default.s3.max_concurrent_requests 20 (default 10) aws configure set default.s3.max_queue_size 10000 4 core / 16 Mem 기준 1 core에서 90% 이상 sync 명령어가 점유 평균 50~80MB/s Throughput 까지 성능이 나옴, 하루 5~7TB 업로드 가능 Path 별로 병렬처리 시 더 나은 성능을 뽑을 수는 있음(bandwidth 고려) #!/bin/bash while true do psCount=$(ps -ef |grep /usr/local/bin/aws) if [ "$psCount" = 2 ] then echo "..
Amazon API Gateway Signature v4(Authorization) API Gateway는 AWS의 Managed HTTP(S) Proxy 서비스로 HTTP(S) / Websocket 프로토콜을 지원하며, EC2 / Lambda / DynamoDB / 외부 HTTP(S) 통신 등 다양한 Application과 Integration 되어있다. API Gateway는 기본적으로 AWS에서 관리하는 VPC 내에 존재하기 때문에 Public 서비스로 WAF와 연동도 가능하다. 또한 End-Point(Private Link)도 지원하기 때문에 사용자의 VPC 내에서 Security Group을 통해서도 네트워크 제어가 가능하다. 그 외 Caching, Header, QueryString 조작, 요청 Threshold 관리 등 매우 다양한 기능이 있음. 이번 블로깅은 API Gat..