- http api는 가장 심플한 레거시 방식으로 오랫동안 많은 사람들이 써왔던 방식이다. 특정 url로 규격에 맞는 json 포맷을 통해 전송하기 만하면 된다.
- http v1 api는 http api를 보안한 api라고 생각하면 될 것 같다. 가장 크게 강조하는 2가지는 보안과 멀티 플랫폼이다.
+ (1) 보안 : http v1 api 는 oauth 방식을 통해 fcm 서버와 연결하고 인증한다. (때문에 좀 더 까다롭다..)
+ (2) 멀티 플랫폼 : 기존 http api를 통해 메시지를 전송할 때는 보내는 형식이 기기 중심적이었다. 여러 기기를 묶어서 공통된 메시지를 보낼 수 밖에 없었는데, 이를 보완하고 플랫폼 별(ios, android..) 다양한 메시지 내용과 포맷을 하나의 json 포맷으로 구성할 수 있고 때문에 한 번의 전송으로 여러 플랫폼에 메시지 전송이 가능하다.
다시 정리하면 FCM은 메시지 전송 플랫폼이다. 위 그림은 FCM이 어떻게 메시지를 클라이언트에게 전송하는지 모든 걸 나타낸다.
flow
(1) Firebase Console GUI 에서 메시지를 전송
(2) 3rd-party-server 혹은 모바일 클라이언트 에서 http 혹은 xmpp 프로토콜을 통해 메시지를 전송
- firebase는 손쉽게 메시지를 전송하도록 library를 제공한다.
(3) firebase 서버에서는 특정 기기로 메시지 전송 요청을 받으면 장치(ios, android, web)으로 알림을 전송
(4) 클라이언트는 메시지 수신
정리
- FCM을 사용함으로써 얻는 장점은 간단하다. cloud 서비스를 이용함으로써 서버리스 아키텍쳐를 구성하고 메모리나 CPU의 오버헤드, 트래픽, 서버 등 관리포인트가 크게 줄어들기 때문에 비용을 크게 감소시킬 수 있다. 특히 FCM은 완전히 무료다. (물론 완전히 관리하지 않아도 된다는 말은 아니다.. 사용자 관리, 토픽 등.. 여러가지 있다.. )
- VPC를 적용하면 EC2 인스턴스 간의 네트워크 복잡성을 줄일 수 있으며, 각 각 네트워크 환경의 독립적인 설정이 가능해진다.
Subnet
- VPC 내에서 더 작은 범위로 나눈 것
- 더 많은 네트워크를 구성하기 위한 목적
- AWS의 가용영역에 의해 subnet이 나눠진다.
- 인터넷과 Public Access가 가능하면 puplic subnet, 불가능하면 private subnet
Router
- 라우터란 둘 혹은 그 이상의 네트워크와 네트워크 간 데이터 전송을 위해 최적 경로를 설정해주며 데이터를 해당 경로를 따라 한 통신망에서 다른 통신망으로 통신할 수 있도록 도와주는 인터넷 접속 장비이다.
CIDR
- Classless Inter-Domain Routing(CIDR)로 클래스 없는 도메인 간 라우팅 기법으로 IP주소를 할당하는 최신 방법
- ip 주소 뒤에 /로 구분하고, 서브넷 마스크의 비트수를 적어 표시하는 방법
- ex) 10.0.0.16/16
NETMASK
- 네트워크 주소 부분의 비트를 1로 치환한 것이 netmask
- IP 주소와 netmask를 and 연산하면 네트워크 주소를 얻을 수 있다.
Routing Table
- 네트워크 이동에 대한 이정표
- 상위 그림의 Subnet A에 존재하는 인스턴스들에 대한 네트워크 요청은 로컬(local)을 찾게 되어 있다.
- 하지만 외부로 나가는 요청은 인터넷 게이트웨이(igw-id)가 대상이 된다.
Internet Gateway
- 인터넷과 연결해주는 중간 매개체
- 라우팅 테이블에서 상위부터 매칭되는 IP에 대한 타깃을 찾고, 없으면 가장 마지막 igw ip를 찾게 된다.
NAT Gateway
- private subnet이 인터넷과 연결하기 위한 아웃바운드 instance
- private network가 외부에서 요청되는 인바운드는 필요 없더라도 인스턴스의 펌웨어나 혹은 주기적인 업데이트가 필요하여 아웃바운드 트래픽만 허용되야할 경우가 있다. 이때 퍼블릭 서브넷상에서 동작하는 NAT 게이트웨이는 private subnet에서 외부로 요청하는 아웃바운드 트래픽을 받아 인터넷 게이트웨이와 연결한다.
NACL (Network ACL) 과 보안 그룹
- 네트워크 ACL과 보안그룹은 방화벽과 같은 역할을 하며 인바운드 트래픽과 아웃바운드 트래픽 보안정책을 설정할 수 있다.
- 먼저 보안그룹은 Stateful 한 방식으로 동작하는 보안 그룹은 모든 허용을 차단하도록 기본 설정되어있으며 필요한 설정은 허용해주어야 한다.
- 네트워크 ACL은 Stateless하게 작동하며 모든 트래픽을 기본 설정되어있기 때문에 불필요한 트래픽을 막도록 적용해야 한다. 서브넷 단위로 적용되며 리소스 별로는 설정할 수 없다. 네트워크 ACL과 보안 그룹이 충돌한다면 보안 그룹이 더 높은 우선순위를 갖는다.