Development Artist

[웹 서비스 A-Z][Deployment] #15 Architecture 본문

Project_Personal

[웹 서비스 A-Z][Deployment] #15 Architecture

JMcunst 2023. 3. 22. 10:50
728x90
반응형

이번 배포를 위해 먼저 아키텍처를 설계해야합니다.

가장 중요한 작업으로 볼 수 있습니다.

 

인프라를 구축할 때 설계를 저는 가장 중요한 부분이라고 늘 생각하는데요, 설계에 허점이 있으면 장애 발생의 가능성을 높히고 장애 발생 시 복구에도 지장을 줄 수 있기 때문입니다.

이번 배포는 설계시 기본적인 부분들만 챙겨가보도록 하겠습니다.

 

아키텍처입니다.

 

사용자는 Internet Gateway를 통해 WAS에 접근합니다.

WAS에 Vuejs의 build 결과물인 dist/ 를 배포하구요, WAS에서 사용자에게 /dist 안의 웹 페이지(index.html, etc)를 뿌려줍니다. 사용자는 웹 페이지에서 ALB->NAT Gateway를 통해 Private Subnet에 있는 Django Server로 API 요청을 합니다. Django 서버는 DB 서버와 연동하여 데이터 조작 하게 됩니다.

사전 작업을 위해 아래 리소스들을 만들어 줍니다.

  • VPC
  • Public Subnet 2 / Private Subnet 2
  • Routing Table for Public 1 / Routing Table for Private 2
  • Internet Gateway
  • NAT Gateway (과금 요소)

편리하게 Console에서 만들어주겠습니다.

자, 이제 Public 서브넷에 WS 역할을 할 EC2 한개와 Private 서브넷에 Django Server 역할의 EC2, DB Server 역할의 EC2를 만들어 보겠습니다. OS는 전부 Centos 7로 세팅하려고 합니다.

그 전에, 키페어를 만들어주셔야 합니다.

EC2 - WS

  • OS : Centos 7, 220825
  • 크기 : t3.micro
  • 서브넷 : public 1
  • 퍼블릭 IP : 활성화
  • 보안그룹 : jmcunst-depl-ws-sg
    • ssh : 22

EC2 - Django

  • OS : Centos 7, 220825
  • 크기 : t3.medium
  • 서브넷 : private 1
  • 퍼블릭 IP : 비활성화
  • 보안그룹 : jmcunst-depl-ws-django
    • ssh : 22

아래와 같이 만들어 진 것을 확인할 수 있습니다.

이제 로컬에서 jmcunst-depl-ws로 접속을 해보겠습니다.

# ssh -i test_jmcunst.pem centos@[퍼블릭 IPv4 주소]
ssh -i test_jmcunst.pem centos@3.38.169.124

원활한 세팅을 위해, root 접근 허용과 패스워드 접속 허용 및 selinux를 disabled 하도록 하겠습니다.

아래 명령어들을 차례대로 입력하시면 됩니다.

# root로 사용자 변경
sudo su
# selinux off
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# root 접속 허용과 패스워드 접속 허용
sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/#PasswordAuthentication no/' /etc/ssh/sshd_config
# ssh 데몬 재시작
systemctl restart sshd
# 패스워드 변경
passwd
# 재부팅
reboot
---
# reboot 후
ssh root@3.38.169.124
# 패스워드 입력 후
# selinux disabled 확인
getenforce

그리고 pem 키를 scp로 옮겨 오도록 하겠습니다. 로컬로 돌아갑니다.

scp test_jmcunst.pem root@3.38.169.124:~
# ws 접속 후
ls

pem키를 왜 옮겨주냐면, Django와 DB는 Private 서브넷에 있기 때문에 외부에서 접속할 수 없고 같은 VPC내 Public 서브넷의 WS에서 NAT Gateway를 통해서만 접속이 가능하기 때문입니다.

따라서 WS에 pem키를 옮겨주었습니다.

먼저 Django 서버에 접속해보겠습니다.

#chmod 600 [key_pair.pem]
chmod 600 test_jmcunst.pem
# ssh -i test_jmcunst.pem centos@[프라이빗 IPv4 주소]
ssh -i test_jmcunst.pem centos@10.0.140.203

접속 후 root 접근 허용과 패스워드 접속 허용 및 selinux를 disabled 해주세요.

여기까지 기본적인 준비를 마쳤습니다.

다음 시간에는 각각의 인스턴스에 배포를 위한 디테일한 세팅을 진행해보도록 하겠습니다.

감사합니다.

 

Addtional

WS(Web Server)와 Django(Backend Server)를 분리한 이유가 무엇일까요?

https://webisfree.com/2020-05-07/[서버구축]-단일-서버와-데이터베이스-서버의-분리가-왜-필요할까 해당 글을 참고해보면 좋을 것 같습니다.

728x90
반응형
Comments