ECS로 Nexus 구축하기

최근에 Jenkins 서버의 용량이 가득 차면서 함께 올라가있던 다른 서비스들도 멈춰버리는 문제점이 발견되었습니다. 그래서 그 중 하나인 Nexus를 분리하고 Blob Store를 Local Storage가 아닌 S3로 설정하여 비용 절감을 꾀하기로 합니다. 기왕 이렇게 하기로 결정하였으니, ECS에 서비스 형태로 올려보고자 합니다. EFS 설정하기 ECS의 Fargate는 EBS를 지원하지 않습니다. 대신에 조금 더 비싼 요금을 자랑하는 EFS를 볼륨으로 제공합니다.…

Continue reading ECS로 Nexus 구축하기

ECS 서비스에 Auto Scaling 적용하기

EC2를 이용하여 서비스의 크기를 조절하기 위해서는 충분한 시간이 필요했습니다. Auto Scaling 기능의 매력은 충분하나, 급변하는 트래픽이나 사용량에 대해서 민첩하게 대응하기는 어렵습니다. 아무래도 OS부터 부팅되고 서비스가 올라가려면 5분 정도의 시간이 필요한데 그때쯤에는 급격한 트래픽이 다시 돌아오기에 충분하죠. 컨테이너 이미지의 장점은 이러한 상황에서도 빠르게 대응하는 것이 가능하다는 점일 것입니다. 준비된 OS 레이어 위에서 서비스만 배포되면 되기 때문에…

Continue reading ECS 서비스에 Auto Scaling 적용하기

Terraform 시작하기

인프라 관리를 시작하고 처음 든 생각은 이것이었습니다. 왜 배포 환경 (이하 스테이지)마다 인프라 형상이 다른가? 같은 형상으로 배포하는 것은 정말로 어려운 일인가? 원인은 크게 두 가지라고 생각합니다. 첫째는 인프라 구축을 담당하는 팀이 따로 있었는데, 능동적으로 서비스 개발에 참여하는 것이 아니라서 인프라를 잘 모르는 개발팀의 요건을 그대로 수용하였던 것입니다. 둘째는 이러한 상황에서 개별 이슈 처리를 위해…

Continue reading Terraform 시작하기

ECS 서비스 배포 파이프라인 구축하기

제가 OpsNow의 레거시 환경을 개선하기 위해서 가장 처음 도입하고자 마음먹은 것은 어쩌면 당연하게도 개별 서비스를 컨테이너로 만드는 것입니다. 그리고 이렇게 생성된 컨테이너 이미지를 ECS에서 Fargate에 배포함으로써 Serverless 서비스를 만들고자 하였습니다. 많은 시간과 노력을 들인 끝에, 코드에서부터 서비스 배포까지 이어지는 CI/CD 파이프라인을 구축할 수 있었습니다. 이번 글을 통해서 어떻게 OpsNow의 레거시 서비스가 Serverless로 나아갈 수 있었는지…

Continue reading ECS 서비스 배포 파이프라인 구축하기

ECS의 Service Discovery 소개

ECS에서 Fargate로 서비스를 생성하고 로드 밸런서에 연결하게 되면, 추후 서비스 배포를 위해서는 반드시 CodeDeploy를 이용해야 합니다. 그리고 블루/그린 배포는 선택이 아닌 필수가 됩니다. 그리고 의외로, 이러한 설정 과정은 결코 쉽지가 않습니다. ECS의 구성으로 EC2를 선택하면 Rolling Update 같은 방식을 제공하지만, Fargate는 그렇지가 않았기 때문입니다. 그렇다고 배치성 작업이라 할지라도 호출이 필요한 서비스를 로드 밸런서에 연결하지 않을…

Continue reading ECS의 Service Discovery 소개

EC2에서 EKS가 아닌 ECS로 전환한 이유

OpsNow가 처음 개발이 시작될 때부터 지금까지 대다수의 서비스는 EC2에 올라가 있습니다. 초창기에는 AWS 인프라로부터의 독립성을 보장받고 싶었고 그에 따라서 대부분의 기능을 EC2에 올려서 단순 VM처럼 이용했기 때문입니다. 시간이 지남에 따라서 비용 절감과 유지보수를 최소화하기 위한 노력이 시도되었는데, 이를 위해서는 AWS의 다양한 관리형 서비스를 이용하는 것이 훨씬 유리하다는 사실을 알게 되었습니다. 관리형 서비스는 개발자가 정말로 서비스…

Continue reading EC2에서 EKS가 아닌 ECS로 전환한 이유

EC2 스케쥴링 손쉽게 하기

AWS에서는 EC2에 대해서 정말 많은 기능을 제공하고 있지만, 특이하게도 스케쥴링 기능을 네이티브로 제공하고 있지 않습니다. 필요하면 알아서 만들어서 사용하라고 가이드는 하고 있습니다. (관련 문서) 이러나 저러나, 사용자가 직접 만들어야 한다면 역시 태그를 기반으로 하는 스케쥴러가 가장 좋은 방법일 것입니다. 그래서 본 글에서는 OpsNow의 개발계에서 사용하는 EC2 스케쥴링 방법과 그 사용 방법을 소개하고자 합니다. Lambda 함수…

Continue reading EC2 스케쥴링 손쉽게 하기

코드 품질 관리하기

아마 이 글을 읽고 계신 개발자라면 한번쯤은 이런 고민을 해봤을 것이라고 생각합니다. 내가 작성하고 있는 코드의 품질은 어떨까? 잘 짜여진 코드라고 할 수 있을까? 과연 좋은 품질의 소스 코드, 좋은 품질의 소프트웨어란 무엇일까요? 그리고 좋은 품질의 소프트웨어를 만들기 위해서는 어떠한 노력을 해야할까요? 소프트웨어 품질의 정의 우선 소프트웨어 품질의 정의에 대해서 먼저 얘기해보겠습니다. 소프트웨어 공학에서 품질은…

Continue reading 코드 품질 관리하기

ITSM과 인시던트 관리

ITSM이 무엇인가요? IT 관련 학과 전공자이거나 IT 업계에 종사하고 계신 분이시라면 ITSM이라는 용어는 익숙하거나 낯설지 않으실 것이라고 생각합니다. ITSM은 IT 서비스 관리 (IT Service Management)의 약자로 아래와 같은 의미를 가지고 있습니다. IT 서비스를 수명주기 전반에 걸쳐 관리하고 지원하기 위한 정책 및 프로세스의 집합  잘 이해가 가지 않으실 수도 있는데 기존의 기술 중심 관리에서 벗어나 경영…

Continue reading ITSM과 인시던트 관리

Ngrok 사용하여 개발하기

웹사이트나 API 서버를 개발할 때 일반적으로는 로컬 개발환경을 구축하고 개발을 진행합니다. 하지만 때에 따라서는 외부 서비스와 연동을 하거나 외부에서 접근이 필요한 경우가 있는데 상용(Production) 환경이 아니라 개발 환경에서 외부 접근을 열어주는 일은 굉장히 번거로운 일이 될 수도 있습니다. 이런 경우 간단하게 사용할 수 있는 Ngrok이라는 프로그램을 소개해 드리고자 합니다. Ngrok Ngrok은 외부(Public)에서 로컬에 접속할 수 있게…

Continue reading Ngrok 사용하여 개발하기