Web101_배포(1)

네코·2022년 7월 4일
0

[도서]웹개발101

목록 보기
6/6

프로덕션 환경

과정

클라이언트가 프론트 주소 app.myapp.com로 접근 요청
1. 프론트 서버에 연결된 로드 벨런서를 거쳐 연결된 오토 스케일링 그룹 내 EC2 인스턴스 중 하나에 트래픽이 전달된다
2. EC2 인스턴스 내부에서 실행 중인 프론트 애플리케이션이 필요한 결과값을 반환한다.

로그인 정보 입력하고 로그인 버튼 클리
1. 백 서버 로드 벨런서를 거쳐 백 애플리케이션에 전달된다.
2. 백 서버는 Mysql 서버와 통신해 데이터 처리한다.

이러한 과정 중 라우트 53, 로드 밸런서, 오토 스케일링 그룹, EC2 등의 리소스가 필요하다.

리소스

EC2

서버 컴퓨터로 로컬에서 구현한 애플리케이션이 실행되는 것과 같이 앱이 실행할 수 있다.
로컬에서는 localhost:8080 or 3000등으로 접근했으나 EC2에선 EC2의 ip나 EC2에서 제공하는 퍼블릭 도메인을 이용해 접근해야한다.

라우트53(DNS)

네트워크에 연결된 컴퓨터는 고유 IP주소를 갖는다.
서버는 자신의 IP주소를 불러주지 않는 이상 통신할 수 없다.
ip주소를 기억하고 있기 어려워 ip주소와 이름을 맵핑하고 그 이름을 부르며 사용한다.
이렇게 맵핑한 이름을 도메인 이름, 도메인이름과 주소를 맵핑해 놓는 시스템을 domain name system

DNS에 도메인 이름을 물어보고 ip 주소를 가져오는 것은 브라우저가 대신한다.

컴퓨터는 고유 ip 외에 인터넷 서비스 제공자(-텔레콤,-통신)등이 제공하는 DNS서버 ip 갖고있다.
이를 통해 해당 DNS 서버에 맵핑된 도메인 이름에 대한 ip주소가 없으면 다른 DNS 서버에게 물어 원하는 주소를 받아온다.
이 때 다른 DNS서버에 해당하는 것이 라우트 53

따라서 내 애플리케이션의 도메인 이름 app.myapp.com을 지정할 ip에 매핑하게 될텐데 이 때 ip는 어떤 ip이어야 할까

  1. 간단하게 현재 실행 중인 EC2 인스턴스의 ip
    그러나 이 경우 다음의 문제가 생긴다.

    늘어난 서비스 요청을 처리 하기 위해 서버를 추가했다. 그렇지만 라우터에서는 추가된 서버에 대한 ip를 알 수가 없다.따라서 증설된 서버의 ip로 트래픽을 분산해 처리할 수 가 없다.

로드 밸런서


두 인스턴스가 공유하는 virtual ip가 추가되었다. 각 인스턴스는 당연히 다른 ip주소를 갖는다.
로드: 트래픽, 밸런서 : 균형을 잡는다의 의미
=> 간단히 연결된 여러 서버의 트래픽을 처리해주는 시스템이다

오토 스케일링 그룹

로드밸런서에 2개의 인스턴스가 연결되어 있다고 하자.
연결된 인스턴스들을 AWS에서 타깃 그룹이라고 한다.
운영 중 한개의 인스턴스가 다운될 경우 로드밸런스는 이를 알고 다운된 인스턴스로의 트래픽을 차단한다. 자연스럽게 스케일 다운된 상태로 운영된다.
관리자가 다시 EC2를 실행하고 타깃 그룹에 올리고 서비스 상태를 매번 확인해줘야한다.

오토 스케일링 그룹(ASG)이 이 문제를 대신 처리해준다.
오토 스케일링 그룹에 최소,최대, 적정 인스턴스 수를 설정할 수 있다.
적정 인스턴스 수만큼 ASG가 실행시킨다.

도중 하나의 인스턴스가 다운될 경우
로드 밸런서가 ASG에게 다운된 인스턴스를 알려주면 ASG가 해당 인스턴스를 제거하고 새 인스턴스를 실행한다.

또한 트래픽의 변동에 따라 자동으로 scale in, out하도록 설정할 수 있다.

VPC, 서브넷

VPC(virtual private cloud)
설정한 로드밸런서, ec2 인스턴스들은 계정의 소유자만이 접근가능한 네트워크인 것
vpc안에는 서브넷이라는 여러 개의 쪼개진 네트워크가 존재한다. 우리는 vpc의 한 서브넷 내 ec2서버를 생성한다. 서브넷 설정환경에 따라 ec2의 사설 ip주소가 결정된다.

일라스틱 빈스톡

위의 인프라를 대신 구축해 주는 서비스가 AWS 일라스틱 빈스톡이다.
일라스틱 빈스톡에 필요한 리소스를 설정하면 이에 맞게 설정 후 애플리케이션을 실행한다.

내부적으로 AWS ClouldFormation이라는 서비스를 사용한다.
이 서비스는 json or YML 파일을 입력받는데 해당 설정 파일에 원하는 리소스 간의 관계를 적을 수 있게 한다.
이렇게하면 AWS 콘솔에 들어가 GUI 환경에서 환경을 생성하거나 업데이트 필요없이 인프라르 구축할 수 있다. 이렇게 코드로 인프라 구축하는 것을 IaC(infrastructure as Code)라 한다.

0개의 댓글