본문 바로가기

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

(넷플릭스) 넷플릭스의 카오스 엔지니어링 백그라운드페이스북을 하다가, 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..
[AWS]beanstalk ssh 접속 에러 - NotAuthorizedError 상황예전에 EB CLI 명령문으로 빈스톡 서버에 접속하려고 하는데 에러가 난 적이 있었다. 당시의 에러 로그는 아래와 같았다. ebcli.objects.exceptions.NotAuthorizedError: Operation Denied. Signature expired: 20170626T164026Z is now earlier than 20170627T023518Z (20170627T024018Z - 5 min.) 원인로컬 컴퓨터의 시간이 실제 시간과 다르게 설정되어있으면 접속이 안된다. 기능 테스트 때문에 잠시 컴퓨터의 시간을 바꿔놨었는데, 이거 때문에 접속이 막혔던거다.
[AWS]beanstalk에서 로그 확인하기 빈스톡 서버에서 애플리케이션, 웹 서버의 로그를 확인하려면 아래의 폴더 경로에 들어가서 확인하면 된다. 그리고 예전에 만들어졌던 로그 파일을 확인해보고 싶을 때는, s3에 들어가서 확인하면 된다 내가 찾고자 하는 서버의 로그가 있는 폴더 경로를 찾기가 좀 어려우니, 잘 추적해서 들어가야한다. beanstalk를 사용하면, 앱 / 웹 서버 로그 로테이션도 알아서 관리해준다. (굿뜨~) 참고 문서 경로 : using-features.logging.html