목차
  1. 개요
  2. 도메인/SSL
  3. Elastic Load Balancer
  4. Auto Scaling Grouop
  5. EC2 Template
  6. S3
  7. CI/CD
  8. 기타

개요

"내일까지 대표님이 서비스 하나 구축해오라고 하면 뚝딱 만드실 수 있나요?"

- 넥스트리 수석 개발자 -



안타깝게도 우리는 모든 개발 분야의 전문가가 되기엔 시간이 부족합니다. 위 질문에 자신있게 "네!" 라고 외칠 수 있는 사람도 거의 없을 거예요.

하지만 👨‍💻개발자라면 누구나, On-My-Own 하면서, A to Z 할 수 있는 무언가를 만들고 싶은 법. 만약 당신이 서비스 개발부터 인프라 구축, DevOps 까지 다 해보고 싶다면, 게다가 만약 IaaS 로 AWS를 사용하면서 공부해보고 싶다면! 인프라로 구축을 고려해 볼만한(찍먹해 볼만한) 몇가지를 소개합니다.


고려해야 할 키워드들은...

  • Logo
  • Logo
  • Logo
  • Logo
  • Logo
  • Logo

(back to top)

도메인/SSL
Logo

월드 와이드 웹에 여러분의 서비스를 제공해보세요. 웹 표준 프로토콜도 따라야겠죠. 도메인을 사고, SSL 인증서를 발급 받아 등록하는 건 간단해보이지만 생각보다 쉽지 않습니다.

AWS 에서는 Route 53과 Certificate Manager 서비스를 사용하면 됩니다.

(back to top)

Elastic Load Balancer
Logo

Elastic Load Balancer(이하 ELB)는 트래픽 분산시켜 여러 대의 인스턴스를 운용할 수 있게 해주는 서비스 입니다. 프로젝트가 대박 조짐이 보인다면, 서버를 증설하고 ELB를 통해 트래픽을 분산 시키세요. ELB는 AWS에서 운용되는 어플리케이션들의 가용성(Availability)와 가변성(Scalability)을 증진합니다. 또한 상태가 정상인 서버로 라우팅 해주기 때문에 장애 대응에도 유용합니다.

ELB를 사용해보고 싶다면 다음 스텝을 따라오세요.

  1. 대상 그룹을 생성하세요.

  2. 대상 그룹에 target을 설정하세요.

  3. 대상 포트를 열고 리스닝 규칙을 생성하세요.

  4. 기본 규칙은 Round robin(차례대로 request를 할당하는 방식)입니다.

    이 외에 Least Outstanding Requests(request를 가장 적게 가지고 있는 서버에게 할당하는 방식)이 있습니다.

(back to top)

Auto Scaling Group
Logo

Auto Scaling Group(이하 ASG)은 ELB와 찰떡궁합입니다. 서버 수평 확장(Scale out)의 자동화는 신속한 대응으로 안정적인 서비스 제공에 도움을 줄 것 입니다. 비용적인 장점도 있습니다. 트래픽이 없을 때 사용중인 서버 인스턴스를 자동으로 셧다운합니다.

ASG를 사용해보고 싶다면 다음 스텝을 따라오세요.

  1. ELB의 대상 그룹으로 ASG를 연결해놓고 ASG의 최소용량과 최대용량을 설정하세요.
  2. 설정된 용량 안에서 인스턴스를 가용 댓수를 조정하세요.
  3. ASG가 가용 크기를 조정하는 정책을 만드세요.
  4. 마지막으로, ASG가 가용하는 인스턴스의 Health Check을 할 수 있는 API를 만들어 제공해주세요.

(back to top)

EC2 Template
Logo
Logo

ASG가 서버를 증설할 때, 어떤 서비스를 띄워야할지, 정보가 필요하겠죠. 이 때 사용하는것이 인스턴스 템플릿입니다. EC2 Template에는 사용자가 원하는 OS, 초기 세팅, 원하는 인스턴스 스펙 템플릿으로 만들고 필요할때 재사용할 수 있습니다. 입맛에 맞게 script를 짜고 인스턴스를 런칭할 때 script를 동작하는지 확인해보세요.

EC2 Template을 사용해보고 싶다면 다음 스텝을 따라오세요.

  1. 인스턴스에 템플릿으로 사용할 서버 환경을 구성하세요.
  2. 인스턴스가 시작될때 실행될 bash 파일을 설정합니다.
  3. 이 서버를 EC2 Image로 추출합니다.
  4. 추가적인 인스턴스 스펙(cpu, ram) 등을 세팅하세요.
  5. EC2 Template을 만듭니다.

(back to top)

S3
Logo

당연히 로그를 찍어야죠? S3(Simple Storage Service)를 통해 ELB, ASG의 동작을 로그로 관리해보세요. S3는 말그대로 저장소 서비스로 로그 데이터 저장외에도 사용할 수 있지만 여기서 그 내용은 다루지 않습니다.

S3로 로그를 남기려면 다음 스텝을 따라오세요.

  1. S3 콘솔에서 버켓을 생성합니다.
  2. 버킷 정책을 생성합니다.
  3. ELB, ASG의 액세스 로그를 활성화합니다.
  4. 로그가 잘 나오는지 확인하세요.

(back to top)

CI/CD
Logo

CI/CD는 AWS가 아닌 Github Actions을 소개해드리려고 하지만, 중요하기에 뺄 수가 없었습니다. Github Actions와 AWS 인스턴스를 연결해놓으면, 비교적 간단한 작업만으로 CI/CD를 구성해볼 수 있습니다.

Github Actions를 사용해보고 싶으시면 다음 스텝을 따라해보세요.

  1. 먼저 linux 서버에 CI/CD 실행 시 동작해야할 프로세스를 bash파일로 작성하세요.
  2. AWS에서 Access 키와 Secret Access 키를 발급받으세요.
  3. 키들을 Github 레파지토리 Actions Tab의 환경 변수로 등록합니다.
  4. 마지막으로 프로젝트 내부에 위에서 발급받은 키들과 실행할 bash 명령어를 포함한 deploy.yml을 작성하세요.

(back to top)

기타

CORS
Logo

월드 와이드 웹에는 매우 매우 매우 매우 많은 해킹 봇들이 돌아다니고 있고 그럴듯한 HTTP Request를 통해(가령 GET /api/customer/list) 개인 정보를 탈취하고 있습니다.

CORS는 개발자 입장에서 조금 귀찮은 존재이긴 하지만 신뢰할 수 있는 Origin을 설정해주기만 하면 위에 언급한 봇들쯤은 처리할 수 있어요.

리눅스 세팅
Logo

서버 세팅은 아래 리스트와 같은 걸 해보세요

  • 환경 변수 설정 : 중요한 키값들은 프로젝트 내부에 저장하면 안됩니다.

  • bash 파일 작성 : 업무 자동화에 큰 도움이 됩니다.

  • 포트 포워딩 : 81 포트(HTTP) / 443 포트(HTTPS) 포트를 내가 만든 프로젝트 포트로 포워딩 시켜주세요.

테스트 서버
Logo
Logo

서비스 환경에서 테스트를 해볼 수는 없잖아요? 개발자를 위한 샌드박스(소프트웨어 개발을 위한 테스트 환경)를 하나 만들어 놓는 걸 추천합니다.

혹은 실제 서비스 시작 전 파일럿 프로젝트를 만들고싶다면, 비용 부담 없는 무료 서비스로 만들어보세요. AWS의 무료 EC2를 사용하거나, 1년 무료 사용기간이 만료되었다면, Heroku, Firebase라는 서비스를 이용해보세요.

  • EC2 무료 인스턴스는 실제 서비스 환경과 가장 유사한 환경에서 작업이 가능합니다. 또한 무료 인스턴스를 기반으로 이미지를 생성하여 서비스 인스턴스를 구성할 수도 있습니다. 다만 1년이라는 다소 짧은 시간동안만 무료로 제공됩니다.

  • Heroku는 깃헙 레파지토리만 연결시켜놓으면 자동으로 서버를 띄워준다는 장점이 있습니다. 단, 15분동안 동작하지 않으면 Idling 상태로 돌입해서 서버가 셧다운 되는 단점이 있습니다. (2023년 05월 수정 - 현재 유료 서비스로 전환되었습니다.)

  • Firebase는 테스트 웹페이지를 퍼블리시하는 데 강력합니다. 프론트 빌드 결과물을 Firebase에 배포하면 웹/브라우저 환경에서 프론트가 어떻게 동작하는지 테스트 가능합니다.

(back to top)



참고자료

- https://docs.aws.amazon.com/ko_kr/

vlvethund