Glide를 이용한 go 패키지 관리

우분투 리눅스 17.14에서 설치했다.# curl httpsgo는 1.10 버전이다. 1.6 버전 부터 vendor를 지원하기 시작했으니 따로 GOPATH를 잡을 필요가 없다. 1.6 이하 버전을 사용하고 있다면 업데이트하자.Go언어는 github에서 패키지를 다운로드해서 사용 할 수 있다. 하지만 버전과 상호의존성을 관리해야 한다. 자바스크립트의 경우 npm, 파이선은 pip, 자바는 Maven등을 사용한다. Glide는 go언어를 위한 패키지관리자다.

AWS Elastic Container Service

Amazon EC2 Container Service(ECS)는 EC2 인스턴스위에 관리형 도커 컨테이너 실행환경을 구축하는 서비스다. 도커 컨테이너도 EC2 기반으로 이루어지며, ELB, Rout 53 등을 이용해서 고가용성 & 서비스 디스커버리를 제공한다.

ECS 시작하기

ECS는 Amazon에서 제공하는 컨테이너 서비스다. ECS를 이용하면 도커(Docker)컨테이너를 쉽게 실행학 확장 할 수 있다.익숙한 EC2대신 도커 컨테이너를 이용해서 배포하려는 이유는 "뭔가 운영체제(EC2)환경, 설정 맞추는 것 너무 귀찮아서"다. 프러덕트 레벨에서는 "운영체제가 노출"되는 것만으로 해야 할 일이 산더미처럼 생긴다. 유저 추가/삭제 관리 각 유저에 대한 보안 설정 운영체제 보안 설정. 필요할 경우 서버 백신을 설치해야 한다.

ECS와 다른 컨테이너 관리 시스템들

이 문서는 의 번역문서다. Kubernets, OpenShift Origin, DC/OS, Docker Swarm, Rancher 등의 훌륭한 컨테이너 클러스터 관리 플랫폼들이 있다. 이들 플랫폼은 대부분 AWS에서 사용 할 수 있다. 반면 AWS는 EC2 Container Services(ECS)라는 자체 컨테이너 클러스터 관리 플랫폼을 가지고 있다.개발자는 ECS를 쓸지 아니면, 다른 솔류션들을 AWS 위에 올릴지 고민에 빠질 수 있다. 반드시 그래야만 할 이유가 있는게 아니라면 난 ECS를 선택할 것이다. 하지만 다른 솔류션에 익숙해져 있거나 기능과 성능이 맞지 않다거나 등등의 이유로 다른 툴을 선택하는 개발자도 있을 것이다. ECS가 AWS 컨테이너 관리 플랫폼을 위한 최선의 선택일지 고민해보려 한다.

AWS Architecture

AWS기반 서비스 아키텍처링을 다룬다.

MicroService on AWs

번역 마이크로서비스는 배포주기를 가속화 하고 응용 프로그램의 유지 관리성을 높여서 높은 품질의 제품을 만들기 위한 아키텍처 모델이다. 이 접근법은 개발방법 뿐만 아니라 소프트웨어와 서비스를 제공하는 조직의 변화도 포함하고 있다. 마이크로 서비스의 접근방식을 사용하는 소프트웨어는 잘 정의된 API로 통신하는 작고 독립적인 소프트웨어 컴포넌트들로 구성된다. 이 백서는 마이크로서비스의 일반적인 특징을 요약하고, Amazon Web Serivces(AWS)위에서 어떻게 마이크로서비스 아키텍처를 구성할 수 있는지를 다룬다.

CQRS

CQRS는 Command Query Responsibility Segregation의 약자다. CQRS의 핵심은 정보를 업데이트하는 모델과 정보를 읽는 모델을 분리하는데 있다. CQRS 패턴이 중요한 경우도 있겠지만 오히려 복잡도를 위험할 정도로 높이는 경우도 많다는 것에 주의 해야 한다.정보 시스템과 상호작용하기 위해서 사용했던 가장 대중적인 정보 모델은 CRUD였다. 이것은 레코드를 Create(생성) 하고, Read(읽기), Update(업데이트), Delete를 할 수 있는 구조를 가지고 있음을 의미한다.

State machines

컴퓨터 과학에 대한 이해 없이도 프로그램을 개발할 수 있다. 컴퓨터 과학에 대한 기초가 없으면 좋은 프로그램을 만들 수 없다고 하지만 항상 그런건 아니다. 특히 컴퓨팅환경이 고도화되고 추상화 되면서 이러한 경향이 두드러지고 있다. 자동차 운전을 생각해 보면 된다. 자동차는 엄청나게 복잡한 기계지만 고도로 추상화된 덕분에 단지 몇 개의 패달과 변속기, 스티어링 휠에 대해서만 알고 있다면 운전을 할 수 있다. 대부분의 경우 이정도로 충분하지만, 자동차를 전문적으로 다루어야 하는 사람들이 있다. 이 사람들은 기능의 한계까지 밀어 붙여야 하고, 3개의 페달, 변속레벨, 스티어링 휠 이상의 것들을 알아야 한다.

IAM - AWS Identity and Access Management

이제 우리는 퍼블릭 클라우드 서비스를 이용해서 인터넷상에 가상의 IDC를 만들고 그 위에 서비스를 구축할 수 있게됐다. 클라우드 제공업체는 컴퓨팅 파워, 스토리지, 네트워크, 애플리케이션, 개발 환경의 풀을 가지고 있으며 유저가 요청하면 이 풀에서 적당량만을 떼서 제공한다. AWS는 기존의 IDC가 그랬던 것처럼 컴퓨팅파워, 스토리지, 네트워크등에 대해서 인증,접근,권한에 대한 완전한 기능 세트를 제공해야 한다. AWS는 AWS IAM를 이용해서 자원에 대한 인증,접근,권한 서비스를 제공한다.

Golang를 이용한 S3 serv api 개발

S3에 있는 파일을 서비스하는 방법을 살펴보려 한다. AWS에서 제공하는 공식 말고 좀 더 편하게 쓸만한게 없을까 찾아봤는데 못찾았다. 그냥 aws go sdk 쓰기로 했다.구현을 위해서 아래와 같은 방법들을 고민했다. 1. S3 Static Web Hosting 1. EC2에 S3를 마운트해서 NginX로 파일 서비스 1. EC2에 S3 SDK를 기반으로하는 웹 애플리케이션 서버 개발당연히 1번, 보안이 필요하면 1번에 signed URL 적용하면 될 것이다. 하지만 어른의 사정으로 3번을 선택했다.