ETC

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

partner_jun 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) 2021.11.30
공변성과 반공변성, 무공변성  (0) 2018.06.05
Angular, Nginx 프록시 설정  (0) 2018.02.26