이제 내 사이트가 어떻게 구성되는지 고민해야 할 시기가 왔다.
공부를 핑계삼아 나도 모르게 피해왔다는 느낌이 들었다.
하지만 이런 두려움을 극복하고 본격적으로 프로젝트를 만들어 나가자.
기초준비에 1달넘게 썼으면 충분히 공들였다고 생각한다.

클라이언트에서 데이터를 요청했을때의 요청 흐름이다.
기본적인 client - front - back 구조이다.
특별할 것도 없이 요청 - 반환 작업만을 하기에 구조가 단순하다.

이부분이 좀 독특하다. 과정을 설명하자면
캐싱을 하는 데이터는 전국 날씨/전기요금 평균 등
누가 데이터를 요청해도 항상 일정한 값을 줄 수 있고 미리 계산해야 하는데이터를 저장하는 것이다.
이러한 계산을 요청시마다 한다면 수많은 중복계산으로 인한 오버헤드가 꽤 커질것이라 생각했다.

(was는 web을 포함하지않나? 싶지만 apache는 http 서버, tomcat는 servlet container이다.)
아파치 톰켓과 AWS는 로드 밸런싱 기능을 제공한다.
AWS는 Elastic Load Balancing 라는 L4 로드밸런싱 서비스를 제공하고,
아파치는 L7 로드밸런싱을 제공한다.
(AWS에서 Application Load Balancing이라는 L7 로드밸런싱도 제공하지만 일단은 넘어가자.)
레퍼런스1 : https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html
레퍼런스2 : https://tomcat.apache.org/tomcat-9.0-doc/balancer-howto.html
레퍼런스3 : https://ko.wikipedia.org/wiki/아파치_톰캣
아파치 톰켓이라는 것은
Apache Http Server - Tomcat의 연동을 의미하는 것이다.
mod-proxy를 통해 Tomcat 단독으로는 하지 못하는 로드밸런싱, 보안 등의 이점을 얻는다.
따라서 우리는 (아파치로드 밸런싱의 수 * 아마존 로드밸런싱의 수) 만큼의 was를 가질 수 있게 되었다.
어차피 서버 인스턴스가 하나밖에 안되고, 멀티코어로 돌릴것도 아니라서 성능에는 별 차이가 없을수도, 많은 서버를 돌리기 위해서 성능이 떨어질 수도 있다.
라고 예상을 하고 찾았더니 역시나 우리 스택오버플로우 큰형님들도 맞다고 했다.
정리를 하자면
가 되겠다.
즉, 진짜 소규모 서버만 돌리고 확장도 안하고 공부도 안할것이라면 단일 서버만 써도 충분하지만,
로드 밸런싱 공부와 확장 가능성에 초점을 맞춘다면 충분히 해볼 가치가 있다고 판단하였다.
또한 추후 변경될수도 있는데,
아파치 / ALB 사이에서 고민중이다.
아파치를 했을때
ALB를 사용했을때의 장점은
프리티어를 사용할 것이기 때문에 비용이 크게 발생하지는 않을것이라 예상이 되지만,
Locust를 활용한 부하테스트를 할 예정이기에 거슬리는건 사실이다.

프론트 서버 배포이다.
React S3에 배포할 예정이다.
정적 웹페이지를 올리는 것이라서 딱히 추가적인 설명은 안해도 될 것 같다.

마지막은 배포 자동화 이다.
배포 자동화를 검색했고, 많은 레퍼런스가 있는 모델을 따왔다.
CI/CD 라고 말은 많이 들어봤지만 실제로는 어떤것인지 잘 몰랐다.
따라서, 이번 프로젝트에서 배포를 해보며 자세하게 알아볼 예정이다.
(나중에 다시 다룰 예정)

복잡한 마음이 들지만 아키텍처를 그려봤다.
firewall, builder 등등 빠진 부분이 많지만 전체적인 흐름을 나타내고자 했다.
또한 프로젝트를 진행하면서 변경사항이 생길 수도 있기에, 바뀌게 된다면 지속적으로 업데이트 할 것이다.
레퍼런스 : https://www.youtube.com/watch?v=6C9284C-zP4
CDN, CloudFront 관련 레퍼런스이다.