알아두면 좋은 간단한 인프라 상식

2022. 1. 11. 10:23

웹 개발로 급여를 받는다면 꼭 알아야 한다고 생각하는 아주 기본적인 서비스와 간단한 설명을 작성했다.

회사 문서에 러프하게 적었던 내용이라 쓸모가 있을지는 모르겠다.

 

  • Nginx
    • 사용자 접속시 어플리케이션에 리버스 프록시로 연결하기 위해 사용
    • 보안을 위해서 사용한다고 주로 알려져 있지만 인프라 측면에서의 관리 요소를 분리하기 위한 아키텍처 측면에서의 역할이 강함
    • 추가 모듈들을 이용하여 다양한 기능을 추가할 수 있음

 

  • AWS Cloudfront (CF)
    • AWS에서 제공하는 CDN 서비스로 다양한 기능을 제공하여 간편하게 사용할 수 있음
    • CDN: static한 에셋들을 캐싱하는 서버로 nginx 모듈을 이용해 직접 구현할 수도 있음 (그냥 돈 쓰는게 나음)
    • 비용은 AWS S3보다는 저렴하지만 꽤 비싼 편이기에 라이벌 업체도 찾는 경우가 많음 (ex. Cloudflare는 제약이 크지만 무료임 + 엔터프라이즈급에서는 돈내지만 훨씬 쌈)
    • 외부 CDN 사용 시 cache invalidation, public IP 설정 필요 등 사용에 복잡함이 가중될 수 있음
    • 개인적인 경험 → 동영상 서비스에서는 영상 크기가 너무 커서(너무 비쌈) 비디오 파일만 외부 CDN 사용함
    • 트래픽이 큰 경우 업체와 직접 계약하여 비용을 조절함
    • 경로별로 헤더, 캐시 등 다양한 설정이 가능하여 주로 사이트의 ‘진입로’로서 역할을 하고 있음
      • 대부분의 사이트는 /static, /asset 하위 경로만 캐싱 
    • 기본적인 AWS 서비스 접속 방향
      • Browser(User) → Cloudfront[DNS → IP] → LoadBalancer → EC2[Nginx → Application]
    • 위 리다이렉션으로 인해 유저의 IP는 X-Forwarded-for 헤더에서 추출해야 함
      • 이 작업을 위해 nginx access logging 커스텀 설정이 필요

 

  • AWS Elastic Load balancer (ELB)
    • 물리적 라우팅 구성에서 스위치에 해당하는 서비스
    • 어플리케이션 서버가 여러대인 경우 부하를 나누기 위해 사용
    • L7급 스위칭의 경우 Haproxy등을 이용해 직접 구현 가능 (그냥 돈 쓰는게 나음)
    • AWS에서는 L7 스위치에 해당하는 ALB, L4 스위치에 해당하는 NLB 등 서비스를 제공하고 있음
      • 웹소켓(SSE 등) 사용시 ALB 사용해야함 (당연히 어플리케이션 레벨이니)
    • 접근한 유저가 항상 같은 서버로 라우팅되는 sticky 세션 설정시 쿠키가 추가됨
      • 보안 처리로 쿠키 제거 시 주의

 

  • AWS Beanstalk
    • 어플리케이션 배포를 위해 사용되는 AWS의 서비스 중 하나
    • LoadBalancer, EC2 instance, Security Group, S3 등의 서비스를 묶어 간편하게 어플리케이션 단위로 배포할 수 있도록 해줌
    • 내부 작업이 블랙박스에 가깝기 때문에 컨트롤에서 벗어나는 경우가 있음 (자동 롤백 등)
    • 컨트롤에서 벗어난 경우 - 특정 상황에서 빠르게 임의 복구가 불가능 (배포/업그레이드 등 동작 중 조작이 아예 불가능)
    • EC2 instance가 각각 설정되어 하나의 인스턴스에서만 문제가 발생할 확률이 있음 (full storage, cron 등)
    • 위 이유들 때문에 서비스가 많아지는 경우, 혹은 인프라 전문 인력이 있는 경우 EKS로 전환을 고려함

 

  • Beanstalk 배포 프로세스
    • 기본 배포 프로세스 
    • beanstalk 어플리케이션에 해당하는 S3 버킷이 생성됨
    • 배포를 위한 신규 버전을 어플리케이션 S3 버킷에 업로드
    • beanstalk에서 배포 준비
      • 퍼센테이지 배치배포 / 롤링 배포 등 방법에 따라 인스턴스 구성  
      • beanstalk 내 /var/app/staging 디렉토리에 신규 버전 업로드
      • 추가한 전처리 hook에 따라 인스턴스에서 쉘 실행 (nginx 설정 등)
      • /var/app/current 디렉토리로 버전 이동 후 실행
      • 추가한 후처리 hook에 따라 인스턴스에서 쉘 실행 (cron 등록 등)
      • 배포 완료됨

'ETC' 카테고리의 다른 글

전략과 전술  (0) 2022.01.29
책임과 기술, 그리고 오버엔지니어링  (0) 2022.01.26
알아두면 좋은 간단한 인프라 상식  (0) 2022.01.11
개발하는 직장인  (0) 2021.11.30
공변성과 반공변성, 무공변성  (0) 2018.06.05
Angular, Nginx 프록시 설정  (0) 2018.02.26

BELATED ARTICLES

more