본문 바로가기

소프트웨어-이야기/인프라

[beanstalk]애플리케이션 버전 관리 Beanstalk Application Version 빈스톡은 배포 이력을 애플리케이션 버전으로 관리한다. 그래서 새로운 코드를 배포하면, 새로운 애플리케이션 버전이 생성된다. 애플리케이션 버전은 AWS Console 페이지에서 확인할 수 있다. 애플리케이션 버전으로 배포된 코드 이력을 확인할 수 있고, 롤백도 쉽게 할 수 있다. 나는 배포를 할 때, 애플리케이션의 Description을 추가해주고 있다. Description을 관리해줘야, 이 당시에 어떤 기능이 배포되었는지 이해하기가 쉽다. eb deploy -m "신규 기능 설명" 이런식으로 배포할 때, message 옵션을 넣어주면, 이 값이 application의 Description으로 추가된다. 참고 자료 AWS Elastic Beanstal..
[beanstalk]eb deploy timeout 옵션 현상 EB CLI 명령문으로 로컬에서 코드를 배포할 때, 시간이 오래걸리면 배포 로그가 터미널에 안보이는 현상이 발생한다. ( 이 때, timeout과 관련된 에러가 떠서 당황스러울 수 있다. 그런데 뒷단에서 배포가 잘 진행되고 있기 때문에, 당황할 필요는 없다. 그냥 배포 로그만 안보일 뿐이다. ) 방법 배포할 때, 아래처럼 timeout 옵션을 주는게 좋다. eb deploy -m "이슈번호-브랜치명" --timeout 100000
(넷플릭스) 넷플릭스의 카오스 엔지니어링 백그라운드페이스북을 하다가, AWS 사용자 모임에서 카오스 엔지니어링 관련 밋업을 한다는 글을 발견했다.마이크로서비스 아키텍처, 카오스라는 단어 때문에 카오스 엔지니어링이라는 것에 관심을 갖게 되었다.카오스 엔지니어링이란 어떤 개념인지 찾아보고, 정리해보고자 한다. 카오스 엔지니어링 탄생 배경규모있는 시스템을 빠르게 나눠서 개발하고, 관리를 편하게 하기 위하여 마이크로서비스 아키텍처 같은 분산 시스템 아키텍처가 등장했다.그러나 서비스별 로직을 개별 서버로 분리해냈어도, 각 시스템들은 서로 상호작용하고 있다.그래서 한 군데에서 장애가 발생하면, 이 장애가 여기저기 퍼지게 된다. 게다가 문제들이 여러 시스템에서 얽히고 설켜서, 디버깅하기도 어려운 상황이 발생되기도 한다. 이러한 영향은 아래와 같은 문제들을 ..
[CURL]같은 파라미터 키로 여러개의 파일을 전송하는 방법 같은 파라미터키로 여러개의 파일을 CURL으로 보낼 때, 보내는 방법은 아래와 같다$ curl -F 'files[]=@/path/to/fileX' -F 'files[]=@/path/to/fileY' ... http://localhost/upload 파라미터명에 []를 붙여주는거다. 샘플$ curl -X POST 'http://localhost:80/movie/create?moview%5Bname%5D=movie_name'; -H 'cache-control: no-cache' -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' -F 'files[]=@/Users/hong/Downloads/movie.mp..
(Phusion Passenger) 웹서버 - 패신저를 구성하는 방식 ( Mode ) 패신저에서 지원하는 3가지 패신저 & 웹서버 조합패신저에서 지원하는 패신저 & 웹서버 조합은 위처럼 세가지가 있다. StrandardAlone 모드 패신저안에 Nginx 엔진이 내장되어 있는 구조이다.그래서 따로 이것저것 Nginx나 Apache를 설치하지 않아도 된다.그래서 패신저 문서에서는 개발 환경 때 StrandAlone을 쓰는게 편하니, 이걸 사용하라고 권장한다.그리고 만약 한 서버에서 하나의 애플리케이션만 띄우는 방식으로 서버를 운영한다면, 프로덕션 모드에서도 StandardAlone 모드를 사용해도 괜찮다. Apache / Nginx Integration 모드 Apache나 Nginx 모듈을 사용해서, 패신저를 운영하는 방식을 의미한다. 이 모드는 개발 환경에서는 사용되지 않고, 프로덕션 환..
[인프라]방화벽 열려있는지 확인하기 1. 텔넷이 설치되어있는 경우, 텔넷으로 통신가능 여부를 확인할 수 있다. telnet naver.com 80 2. 그렇지 않은 경우, 아래의 명령문을 치면 통신 가능 여부를 확인할 수 있다. nc -z -v naver.com 80 만약, 방화벽 문제 등으로 서버에 붙을 수 없다면, Connection이라는 결과가 뜨지 않는다
[AWS] 애플리케이션 서버에서는 200을 내려줬는데, LB 단에서는 왜 5XX 응답 코드가 내려올까? 이번주는 트러블 슈팅을 많이 했던 한 주였다.그러면서 배웠던 내용을 정리하고자 한다. 호기심의 발단이번주에 메인 어플리케이션에서 통신하는 서버에서 장애가 발생하여, 에러가 발생했던 적이 있다. 그래서 AWS Cloud Watch로 당시의 응답코드를 확인해봤다. 확인해보니, 애플리케이션 서버 단에서는 항상 200을 리턴해줬었다. 반면 ELB에서는 5xx대의 HTTP 응답코드를 내려준 적이 있다는 이력이 남아 있었다.애플리케이션 단에서는 항상 200을 내려줬는데, ELB 단에서는 5XX대의 응답코드를 받았다고 하기에, 이상했다. 이 차이는 어디서 발생한걸까? 원인알고보니, 로드밸런서 단에서 알아서 5XX대의 응답코드를 내려주는 케이스가 있다는걸 알게되었다.(나와 비슷한 문제를 경험한 사람이 스택오버플로우에 ..
[RUBY]루비로 AWS Athena 사용하기 Gemaws-sdk gem 안에 athena 서비스를 사용할 수 있는 함수도 포함되어 있다. 함수 사용하는 방법 처음에 aws-sdk를 사용할 때는, 아테나에 쿼리를 보내면 바로 결과값을 리턴해주는 기능이 있을거라고 기대했다.마치 jdbc를 사용하듯이 사용할 수 있을줄 알았다. 그런데 약간 개념이 달랐다.참고링크 : ATHENA RUBY SDK 사용법 이렇게 클라이언트를 만들고client = Aws::Athena::Client.new(region: 'us-east-1') 이렇게 쿼리를 날리면, 이 때 날린 쿼리의 아이디가 담긴 객체가 리턴된다resp = client.start_query_execution({ query_string: "SELECT * FROM impressions WHERE year='2..