AWS

각 서비스에 맞는 아키텍처는 무엇일까? - WordPress 웹앱의 아키텍처를 개선하면서 설계해보자

S_N_Y 2024. 4. 1. 07:22

일단 세 가지를 먼저 다루기로 했는데

그 마지막 예시 서비스를 다뤄보려고 한다.

 

#0 들어가기 앞서

여러 가지 서비스들을 정리해봤는데 이것들이 실제로 어떻게 연결되고 관리되는지도 조금 다뤄보는게 좋을 것 같아 올려본다..! 아키텍처에 관한 부분은 꼭 정답이라고 할 수는 없지만 여러 가지 사례를 통해 어떤 서비스들이 어떤 식으로 동작하는지에 대해 정리해본다면 많은 분들께도 도움이 될 것 같아 정리해보려고 한다.

+) ⚠️ 가장 기초적인 아키텍처 설계 예시이기 때문에 확장성을 고려해서 초반부터 서버리스 세팅을 할 수 있지만 일단 기초 자료로써 이 글을 다루려고 하니 실제 아키텍처 설계와 똑같이는 할 수 없다는 것을 먼저 언급하고 시작하겠다!

 

#1 사례 3️⃣) WordPress 웹앱

먼저 WordPress란 웹페이지 제작을 위한 오픈 소스 콘텐츠 관리 시스템인데

웹상에서 콘텐츠를 저작하고 출판할 수 있기도 하고

홈페이지처럼 자체적인 도메인과 배포(호스팅)를 할 수 있다는 것이다.

 

<조건>

- 유저들은 WordPress를 호스팅하기도 하지만 그걸 AWS에 배포하는 걸 좋아한다는 설정

- 그 웹사이트에 접근하고 싶고 업로드한 그림이 바로 나타나길 원한다.

(어떤 드라이브에 그림을 저장하고 기본적으로 모든 인스턴스들이 그 데이터에 접근해야 한다.)

- 유저들의 데이터와 블로그 내용 등 모든게 MySQL에 저장되어야 한다.

- 글로벌하게 확장하고 싶다.

 

✳️ 데이터베이스 측면

✴️  - RDS가 있는 계층 생성 - 확장 필요할 땐 Aurora

백엔드에 RDS가 있는 형태는 개발자들에게 매우 익숙한 형태인데

여기에 추가적인 특징이 있다면 다중AZ이고 모든 EC2 인스턴스에 걸쳐 적용된다.

...

만약 정말로 크게 확장하고 싶다면 어떻게 해야할까?🤔

=>  RDS를 Aurora로 교체한다!

 

✴️ - 확장 필요할 땐 Aurora

이렇게 하면 다중AZ, 읽기 전용 복제본, 글로벌 데이터베이스까지 적용시킬 수 있다👍

Aurora를 선택하면 보다 확장성있고 기록하기가 쉽다는 장점이 있다.

 

✳️ 이미지 저장 측면

✴️ - EBS에 이미지 저장하기

이번에는 이미지 저장에 대해 다뤄본다.

하나의 EC2 인스턴스가 있고 하나의 EBS볼륨이 연결되어 있는 단일 AZ의 아주 단순한 아키텍처인데 이거는 로드 밸런서에 연결되어있는 형태이고 사용자는 로드 밸런서로 이미지를 보내고 싶을 것이다.

그러면 그 이미지는 EBS까지 도달하게 되고 EBS에 저장되는 형태인데 EC2가 하나일 때는 이런 방식으로 해도 잘 돌아가나확장하기 시작하면 문제가 생겨버린다.🥶

이제 2개의 EC2 인스턴스와 2개의 AZ가 있다.

그리고 각각의 EC2 인스턴스는 각각의 EBS 볼륨을 가지고 있는 형태로 커지게 될텐데

어떤 문제가 있는지 예를 들어서 자세하게 설명하면

한 유저가 이미지를 보내면 어쨌든 하나의 인스턴스로 갈텐데(지금은 위에 있는 인스턴스로 갔다고 가정) 해당 EBS 볼륨에 저장되는 형태로 진행될 것이다.

=> 그런데 여기서 생기는 흔한 오류는 이미지를 읽어들이기 위해 아래로 간다는 것이다..!

그러면 같은 EBS 볼륨이 아니기 때문에 아래쪽에는 이미지가 없고 이미지에 접근할 수 없다

이렇게 EBS 볼륨의 단점하나의 인스턴스만 있을 때는 잘 작동하지만 다중AZ나 다중 인스턴스로 확장을 시작하면 큰일난다.

...

확장해버려서 이미지를 불러오지 못 하는 이 문제를 어떻게 해결하면 좋을까?🤔

=> EFS를 사용하면 된다!

 

✴️ - EFS 사용하기

이번에는 EBS대신 EFS(네트워크 파일 시스템 드라이브)를 사용한다.

EFS는 Elastic Network Interface를 위해 각각의 AZ에 ENI를 생성한다!

이 ENI는 EFS 드라이브에 접근하는 모든 EC2에 사용할 수 있다.

...

=> 여기에서 정말 좋은 건 EFS 자체가 모든 인스턴스에게 공유된다는 점😀

즉, M5 인스턴스로 이미지를 보내면 ENI를 거쳐 EFS로 전달되고 이미지가 EFS에 저장된다.

이미지를 불러오고 싶다면 아래쪽으로 가서 ENI를 거쳐 EFS로부터 읽어들이면 된다.

 

+)

그런데 확실히 EBS보다 좋은 점이 많으니 가격이 더 비싸다는 점을 같이 고려하면 좋다.

그래도 이점이 훨씬 많으니 확장성을 고려하고 싶으면 EFS를 추천한다!