과거 다른 블로그에서 쓴 글을 퍼왔습니다. Introduction 내가 관리하는 API 서버는 다양한 타입의 클라이언트들로 오는 요청을 처리하고 있다. 기본적인 oauth 인증을 이용하는 웹 어플리케이션 뿐만 아니라, Windows server application, aws lambda 등 많은 어플리케이션이 HMAC 인증을 사용하고 있다. DRF (django Rest Framework)의 Permission Class 로 구현되지 않고, view 로직에 signature 검증 로직이 있는 상태다. 즉, 아무 인증 없이 django 의 Authentication 을 통과하여 view 로직 초반에서 signature를 검증한다. 나는 이 signature 검증 로직을 view 함수 밖으로 끄집어내어 pe..
2020년 말, AWS Lambda의 새로운 기능으로 컨테이너 이미지 지원이 발표되었다. 기존 lambda 의 프로비저닝에 비해 얻을 수 있는 이점을 요약하자면 다음과 같다. - 최대 10GB 크기의 컨테이너 이미지로 패키징 및 배포할 수 있는 기능 제공 - Dependencies 관리 및 설치의 용이성 - 다른 linux distro 의 이미지에서도 사용 가능함. (다만, 좀 까다로움. aws lambdaric 를 설치해야함.) 나는 Dependencies 설치가 쉽다는 점 하나만으로 docker 이미지를 사용할만한 가치가 있다고 생각한다. Boilerplate byunjuneseok/container-image-lambda-boilerplate Deploy python lambda functions ..
Github Actions 에서의 crontab 스케쥴링? Github Actions은 crontab scheduling 을 지원한다. 적당히 간단한 job 을 주기적으로 돌리고 싶을 때, aws 에서 cron event 로 lambda 를 트리거하는 방법을 선택할 수도 있겠다. 하지만 이는 lambda 를 위한 추가적인 구현 수정이 필요하고 aws를 잘 모르는 개발자라면 이유모를 비용 청구에 대한 두려움이 있을 것이다. (사실 비용 청구는 전혀 문제되지 않을 것이다. AWS lambda의 비용청구는 100만건 단위로... 자세한 것은 문서를 참고하기 바란다.) 항시 켜두는 리눅스 서버에 cron 데몬에 의존하는 방식도 부담스럽다. 언제 꺼질지 모르는 심리적/물리적 관리비용이 있다. Github Acti..
들어가기 전에 예전에 잠깐 창업에 발을 살짝 들였을 때, 팀 사이트를 오늘 소개한 방법으로 배포한 적이 있다. 새로운 블로그를 최근에 만들었는데, 이 페이지를 배포할 방법으로 netlify 같은 서비스도 고민했지만, 그냥 깔끔하게 내가 다 만들어버리고 블로그 포스팅도 하자는 생각으로 다시 시도하면서 정리하게 되었다. 이 포스트에서는 vue, react 의 Client side application 뿐만 아니라 jekyll 과 같은 static web page 를 aws S3와 Cloudfront라는 CDN을 통해 배포하는 과정, 그리고 github Actions 을 통해 모든 것을 자동화하는 과정을 설명한다. 이 자동화 배포를 완성하기 위해서는 직접 초기 작업을 수행해야 한다. 물론 AWS CLI 를 사..
지난 블로깅을 통해 Amazon Linux 1 환경의 Elastic Beanstalk 어플리케이션을 새로운 Amazon Linux2 환경으로 마이그레이션 하는 과정을 소개하였다. 이번 포스팅에서는 Elastic Beanstalk 웹 콘솔과 Amazon Cloudwatch 를 통해서 내가 원하는 로그를 볼 수 있는 기능을 소개하려고 한다. 우리의 API 서버인 sachiel 은 모니터링을 위해 API 호출과 exception 로그를 분리해서 저장하고 있었다. 각각 /var/log/sachiel/info\_api\_call.log와/var/log/sachiel/exception.log경로로 저장하고 있었는데, 아무런 설정을 하지 않는다면 Amazon Cloudwatch 와 Elastic Beanstalk 웹..
HBsmith 는 메인 백엔드 API 서버와 백오피스 어플리케이션을 aws 의 elastic beanstalk 서비스를 이용하여 배포하고 있다. 2011년에 출시된 서비스인 만큼 많은 레퍼런스와 자료들이 존재하고 있으며, 모든 조직/서비스가 항상 컨테이너라는 기술이 항상 답이 될 수 없기 때문에 아직도 많이 사용되고 있는 서비스이다. 우리는 “Amazon Linux 2018.03 v2.9.20 running Python 3.6” 환경을 이용하여 배포하고 있었다. 그리고 새로운 기능과 보안의 이유로 2020년 4월에 출시한 Amazon Linux2 Python3 로의 마이그레이션 작업을 진행한 후기를 소개하고자 한다. 현재 우리는 “64bit Amazon Linux 2 v3.2.1 running Pytho..
새 아이폰을 구매하고 기존 아이폰에서 마이그레이션했다. 나는 마이그레이션을 하면, Google Authenticator 앱 정보가 그대로 넘어올 거라 생각했다. 사실 아무 생각도 안하고 쓰던 아이폰을 초기화했다. 😅 매일 aws 웹콘솔을 접속하는 나에게 MFA OTP를 잃어버린 사고는 매우 치명적이었다. 이걸 당장 복구하지 않는다면, 업무에 큰 차질을 빚을 수 있었다. 급한 마음에 aws 로그인 화면에서 복구할 수 있는 옵션에 진입했다. email 인증, 그리고 그 이후엔 전화번호로 ARS인증을 해야하는데 aws 시스템에 문제가 있는지, 내 전화번호로는 전화가 걸려오지 않았다. [AWS Support로 문의하십시오.] 버튼을 눌러 Support case를 남겼다. 그랬더니 30분 안으로 전화가 왔다. 인..
대규모 인프라 운영에 사람의 수작업을 최소화하려면 결국 자동화만이 해답이다. 자동화는 곧 스크립트나 소프트웨어의 영역이라는 점에서 클라우드 인프라 운영자라면 어쩔 수 없이 개발 세계를 기웃거릴 수 밖에 없게 된다. 계발 세계의 초기 진입 장벽을 고려하려면 개발자가 인프라 운영을 배우는 게 더 나아보이기도 한다. 어쨌든 인프라 운영자는 자동화를 위한 최소한의 개발 능력과 한두 가지의 언어를 익히는 일이 필수가 되었으며, 반대로 개발자도 네트워크와 스토리지는 물론이고 가상화와 구성관리까지 아우르는 전반적인 개념을 이해해야 하는 고단한 시대가 오고 말았다. 위의 인용에서 확인할 수 있듯 개발자와 운영자 사이의 장벽을 없애려는 개발 문화를 추구하는 움직임이 많은 곳에서 이루어지고 있고, DevOps 엔지니어라는..
파이썬은 파이썬만의 배우기 쉬운 문법때문에 잘 다루기 쉽다는 오해를 받습니다. 공식 문서를 꼼꼼히 살펴보면 파이썬의 구현을 잘 설명되어 있는데, 꽤 복잡한 구조로 구현이 되어 있음을 확인할 수 있습니다. 시간이 허락한다면 꼭 공식 문서를 읽어보시기 바랍니다. C vs Python (Cpython) /* C code */ int a = 1; int b = 2; int c = a + b; 위 코드는 C 코드의 일부분이며, 간단하게 두 변수를 선언, 초기화하고 덧셈 연산을 수행하는 코드 조각입니다. 이 프로그램을 실행한다면 아래와 같이 작동하게 됩니다. int 4바이트 만큼의 메모리를 할당하고 a라는 이름을 붙인다 (컴퓨터는 a를 방금 할당한 메모리의 주소로 기억한다.) 변수 a 자리에 1을 저장한다. (0x..