AWS SAM을 사용하면서 느꼈던 것들

왜 SAM을 사용하게 되었나? 시스템 내부에서 관리하는 Lambda 함수들이 늘어나면서, 이를 관리할 방법을 찾아야 했다. 기존에는 Apex를 Lambda 함수 배포에 이용했지만, 뭔가 자동화된 방법을 찾고 싶었다. 그래서 Serverless Framework, Terraform, SAM과 같은 도구들을 검토해 봤다. 그러다가 SAM을 최종적으로 선택했는데, 이유는 다음과 같다. Serverless Framework는 다양한 클라우드 벤더를 지원하지만, 다른 AWS 서비스를 연동하는 데 제약이 있지 않을까? 하는 막연한 생각이 들었다. (잘 찾아보니 내가 원하는 것들은 구현 가능할 것 같더라. 내가 잘못 생각했던 것 같다)

Hortonworks Sandbox를 AWS에서 사용하기

들어가며 최근에 ‘하둡과 스파크를 활용한 실용 데이터 과학’이라는 책을 읽고 따라해 보고 있다. 이 책에서는 실습을 위해 호튼웍스(Hortonworks)의 Sandbox 이미지를 사용해 보기를 권장하고 있다. 그런데 설치 방법을 찾다 보니, 권장 사양이 높은 것 같다는 생각이 들었다. 이 이미지를 VirtualBox에서 사용할 때, 메모리 용량이 8GB로 설정되어 있었다. 그런데 지금 내가 쓰고 있는 노트북의 메모리 용량이 8GB라 좀 어려울 것 같았다. 그래서 AWS에 이 이미지를 올려보게 되었다. (주의: 이 글에서 설명하는 내용은 AWS의 Free Tier 범위를 넘어가므로 사용한 만큼 요금이 부과됩니다.

EC2에 Bitnami MongoDB 이미지 올리기

최근에 AWS에서 MongoDB와 호환되는 DocumentDB를 출시했지만, 아직 서울 리전에서는 사용할 수 없다. (2019년 5월에 서울 리전에 출시되었습니다. 링크한 글을 확인해 주세요~) 그렇지만 필요에 따라 MongoDB를 쓸 일이 있을 것이다. AWS에서 Bitnami의 이미지를 활용해서 EC2에 MongoDB를 올려보고, 시험 삼아 데이터를 넣어보자. EC2 설정 EC2 인스턴스를 생성하기 위해 AWS의 EC2 콘솔로 들어간다. 아래 스크린샷과 같은 화면이 나오면, ‘인스턴스 시작’을 누른다. 그리고 검색어에서 MongoDB를 입력하고, 왼쪽에서 AWS Marketplace를 누른다. 스크롤을 아래로 내리다 보면, ‘MongoDB Certified by Bitnami’가 있다.

2018년 회고

개인적으로는 변화가 많은 한 해였습니다. 업무의 분야가 바뀌었고, 새로운 환경에 적응해야 했으며, 주로 쓰는 프로그래밍 언어도 바뀌었습니다. 2018년에 일어났던 일들 중 주요한 몇 가지에 대해 다루어 보려고 합니다. 서비스를 만드는 경험 서비스를 만드는 기업으로 이직하겠다는 생각은 계속 했지만, 이를 행동으로 옮긴 건 작년이 처음이었습니다. 그 과정에서 제가 느낀 점은 두 가지로 요약할 수 있을 것 같아요. 1. 협업 이야기 저는 서비스를 기반부터 개발하는 경험이 부족했습니다. 교육 분야에서 비슷한 서비스를 개발한 사례가 많지 않아, 특히 데이터를 다루는 서비스를 어떻게 개발하는지에 대해 많이 찾아봤었습니다.

Netstat으로 리눅스 서버에서 클라이언트 접속 확인하기

회사에서 개발한 웹 서비스의 내부 테스트 버전을 배포하고, 다음과 같은 질문을 받았다. 박대리님, 서버에서 클라이언트가 몇 명이 접속 중인지 알 수 있는 방법이 있을까요? 사실 여러 사람을 대상으로 하는 웹 서비스를 개발하고 배포하는 건 처음이라, 이걸 어떻게 알 수 있는지 궁금하긴 했다. 그래서, how to get the number of connections from web server라는 키워드로 구글 검색을 해 보았다. 여기 나오는 문서들 중에서 가장 많이 언급되는 유틸리티가 netstat인데, 여기서 연결 개수를 어떻게 체크해 볼 수 있는지 알아보자.

파이썬 문자열 다루기 - str.format()

문자열을 다루다 보면 .format()을 사용하는데, .format()으로 어떻게 문자열 중간을 채워볼 지에 대해 알아보겠다. 이 글은 필요할 때 매번 찾아보다가 귀찮아서 정리해 본 것이다. 들어가기 전에… 혹시 C를 배워본 적이 있는지? C에는 printf()라는 함수가 있다. 변수의 내용을 표시하기 위해 아래 코드와 같이 %d, %f등의 문자열을 사용한 적이 있을 것이다. int a = 0; printf('%d', a); 파이썬 또한 이런 방법을 지원한다. 하지만 튜플이나 딕셔너리와 같은 자료형은 제대로 표시되지 않는 문제가 있다고 한다. 자세한 내용은 링크를 참조하자.

책 리뷰 - '인문학도, 개발자되다'

책 소개 제 주변에는 학교를 졸업하고 만난 분들을 제외하면 개발자로 일하시는 분이 거의 없다시피 합니다. 그러다 보니 저에게 개발자의 업무 또는 어떻게 개발자가 될 수 있는지에 대해 물어보시는 분들이 가끔씩 계십니다. 하지만 저는 경력이 아직 5년이 되지 않았고, 말빨(?)이 약한 편이라 개발자라는 직업에 대해 섣불리 말씀드리기 조심스럽습니다. 그러던 와중에 ‘인문학도, 개발자되다(마르코 저, 영진닷컴)’ 라는 책을 접하게 되었습니다. 이 책은 저자인 마르코님이 개발자로 전직을 하게 된 계기와 과정, 개발자로 일하기 위해서 어떤 능력이 필요한지, 그리고 앞으로 어떻게 개발 능력을 키워나가야 될 지에 대해 이야기하고 있습니다.

S3 버킷의 객체가 1,000개를 넘을 때 객체 목록 조회하기

S3 버킷에는 여러 파일들을 저장할 수 있다. 그런데, 버킷에 저장된 파일의 목록을 보고 싶은 경우가 있을 것이다. 하지만, AWS의 Python SDK인 Boto3에서 list_objects()나 list_objects_v2() 함수를 이용하면 최대 1,000개까지의 object만 가져올 수 있다. [참고] (근본적으로는 AWS의 API가 최대 1,000개까지의 object만 가져오도록 구현되어 있다. - [참고]) 이런 문제를 해결하기 위해, 다음과 같이 Paginator를 이용해 보자. Paginator 이용하기 get_paginator()로 Paginator 가져오기 기본적으로 S3를 담당할 클라이언트를 생성한 뒤, get_paginator()로 Paginator를 가져온다. 여기서는 하나의 버킷에서 object들을 가져오기 위해 list_objects_v2를 이용한다.

Python으로 Step Functions 활동 만들기

AWS에는 Step Functions라는 서비스가 있다. 여러 개의 활동(activity)를 조합해서 순서대로 또는 반복적으로 원하는 작업을 실행할 수 있도록 해 주는 서비스이다. 일반적으로는 여러 개의 Lambda 함수를 연결해서 사용하는 경우가 많다. 하지만 Lambda 함수의 실행 시간이 5분을 넘어가면, 다른 방법을 고려해야 한다. 이럴 때 활동을 생성하고 이를 수행하는 코드를 작성하면, 오래 걸리는 작업도 Step Functions로 이용할 수 있다. 활동(Activity) 만들기 Step Functions 콘솔의 왼쪽 메뉴에서 활동을 클릭한다. 화면이 바뀌면 우측의 활동 생성을 클릭하여 새로운 활동을 만든다.

VSCode와 oh-my-zsh를 사용할 때 터미널 글꼴이 깨진다면

최근에 oh-my-zsh를 써 보기 시작했다. (써보면 편하다고는 하는데, 아직까지는 체감을 못하고 있긴 하다.) 그런데 Visual Studio Code에서 터미널을 쓸 때, 아래처럼 글꼴이 깨지는 현상이 있었다. (현재 테마는 “agnoster"이다.) 이 문제에 대해 찾아보니, 다음과 같은 이슈를 발견할 수 있었다. https://github.com/Microsoft/vscode/issues/7116 여기서 제시하는 해결책은 다음과 같다. “SourceCodePro+Powerline+Awesome Regular” 글꼴을 받아 설치한다. 링크 Visual Studio Code 설정에서 terminal.integrated.fontFamily 항목에 'SourceCodePro+Powerline+Awesome Regular'를 넣는다. (작은 따옴표를 포함해야 한다!) 그러면 아래와 같이 터미널의 글꼴이 깨지지 않게 된다.