서버 이중화를 위한 서버 구조 고민
용어
- WEB 서버: 클라이언트에 프론트엔드 정적 파일을 호스팅 해주는 서버
- webpack-dev-server
- nginx (reverse-proxy 기능 포함)
- APP 서버: 비즈니스 로직 처리가 필요한 동적 파일을 호스팅 해주는 서버
- WEB 서버의 기능을 포함
- express 서버에 API와 함께 static public 폴더를 사용하는 경우
- WAS 서버
- Web Application Server
- 주로 Web + App 기능을 모두 처리하는 경우를 지칭함(=App 서버)
- DB 서버: MySQL, MongoDB 등 데이터베이스 작업 만을 처리하는 서버
- Reverse-proxy
- '모든' 클라이언트가 Reverse Proxy를 통해 '특정' 서버와 통신할 수 있다.
- nginx가 API 요청을 포워딩해줄 경우 Reverse Proxy로 볼 수 있다.
- Sever 쪽을 가려주거나, 대리해준다.
- Forward proxy
- '특정' 클라이언트가 Forward Proxy를 통해 '모든' 외부 서버와 통신할 수 있다.
- VPN의 경우 Forward Proxy로 볼 수 있다.
- Client 쪽을 가려주거나, 대리해준다
방법 1
- 클라이언트에서 APP 서버에 직접 접근
- WEB 서버와 APP 서버에 별도 도메인 사용
- CORS 사용
장점
- WEB 서버가 죽어도 APP 서버에는 접근이 가능하다.
- Admin 페이지가 죽어도 SDK에서 데이터를 보내줄 수 있다.
단점
- CORS
- 별도 헤더 세팅의 불편함
- Preflight Request로 인한 클라이언트 반응속도 저하
- same-origin policy를 사용하지 않음으로 인한 보안성 저하
방법 2
- 클라이언트에서 WEB 서버를 통해 Reverse Proxy로 WAS 서버를 접근