웹 개발로 급여를 받는다면 꼭 알아야 한다고 생각하는 아주 기본적인 서비스와 간단한 설명을 작성했다.
회사 문서에 러프하게 적었던 내용이라 쓸모가 있을지는 모르겠다.
- 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 |