IT 직무캠프 3주차 -1

박상현·2025년 7월 31일

IT 직무캠프

목록 보기
4/7
post-thumbnail

2주차 과제 피드백을 받고 난 뒤에 비용산정 관해서 이제 어떤지 대충 감이 왔다. 지난 과제를 통해서 기본적인 클라우드 비용 구조를 이해할 수 있었다. AWS 비용은 단순히 인스턴스 사용료만이 아니라
EC2(온디맨드, 예약, 스팟) -> EBS 스토리지 -> 네트워크 전송량 -> 부가서비스 로 구성돼있다는 사실을 알게 됐다. 그리고 최적화 옵션에 있어서는 프리티어와 Reserved Instance(RI), 온디맨드, 스팟 인스턴스 가 있는데, 과제에서 최종적으로 27개월이기 떄문에 온디맨드로 해야 현실적인 비용을 추정 가능해서 온디맨드로 선택한다고 했다. RI는 짧은 기간이 안되고 최소 1년 계약을 해야했기 때문에 초기 2개월, 5개월 이런 구간은 적용할 수 없다.

인스턴스 수와 인스턴스 종류를 선택한다.

여기서 온디맨드를 선택한다.
비용 산정 자료 조건에 맞춰서 서버 대 수를 월별로 변경하고 추가하면서 총 금액을 계산하면 완성!

3주차 기술 업무 목표


이번 주 과제는 AWS 네트워크 구성과 wordpress를 설치 후 RDS DB 구축과 EC2 연결, 그리고 로드밸런서를 통한 EC2 이중화 구성까지 해보는 것이다.

AWS 네트워크 구성과 wordpress설치

이번에는 DB와 연동되어 사용하는 2-tier를 구축해보자.
2-tier란 웹 서버-DB로 연동되는 구조로, 트래픽이 많지 않은 경우 자주 사용되는 구조이다. 서브넷은 가용영역 존을 지정하여 물리적으로 다른 위치에 배치시킬 수 있다. 이번 과제에서는 프리티어 사용에 제약이 없는 A,C존을 사용했다. 최종적으로는 웹서버를 안정적으로 구동시키기 위해 2대의 웹 서버가 하나의 도메인을 사용하도록 LB(로드밸런서)를 구성해본다.

1주차 및 2주차 과제를 참조하여 네트워크를 구성해보자.
먼저 VPC와 서브넷을 구성한다. 이전 과제들과 동일하게 VCP IP는 10.12.0.0/16을 사용하고
서브넷 IP들은 총 4개의 가용영역 10.12.0.0/18, 10.12.64.0/18, 10.12.128.0/18, 10.12.192.0/18 로 각각 server-a, server-c, db-a, db-c로 설정한다.

다음으로 인터넷게이트웨이 생성과 라우팅 테이블 연결까지 동일하게 진행한다.


다음으로 EC2를 위한 보안그룹을 생성한다. 인바운드 규칙은 TCP 포트번호 22와 80을 내IP주소에 허용하고, 아웃바운드 규칙은 전체허용으로 설정한다.

EC2 1대 구성

EC2는 총 2대가 필요하다. EC2 1대를 먼저 만들고 필요한 설정을 한 다음에, 추후에 복제하여 2대로 사용하는 방법으로 진행했다.

1) EC2 구성
프리티어 사용이 가능한 리눅스 AMI와 A존으로 구성한 EC2용 서브넷을 사용하여 보안그룹 연결을 하고 키페어까지 기존에 사용하던 것으로 설정한 후 EC2 인스턴스 생성을 완료한다.
2) EC2 진입 후 유저생성
wordpress 프로그램에서 사용할 유저를 만든다.

wordpress는 웹 페이지의 테마를 손쉽게 구성할 수 있게 해주는 도구이며, 시장점유율 30%로 가장 대중적인 도구입니다. 웹 개발을 해봤다면 반드시 사용한 적이 있어야 하는 도구입니다.

라고 하셨는데... 프론트 개발 깊이가 깊지 않지만.. 진짜 처음 써봄... 반성하겠습니다
wordpress에 관해서는 워드프레스란? 이 글을 통해서 자세하게 살펴볼 수 있다
먼저

sudo useradd acwordpress
sudo passwd acwordpress

를 통해서 비밀번호를 입력한다.
sudo vi /etc/sudoers를 통해 유저에 대한 권한도 설정한다.
키보드 방향키로 root ALL = (ALL) 부분을 찾고, shift + A 키를 입력해서 insert모드로 전환한 후, acwordpress 유저에 모든 권한을 주는 설정을 추가한다.
acwordpress ALL=(ALL) ALL



이제 :wq!를 입력해서 저장한 후 종료한다.
3) httpd 프로그램 설치
웹서버 프로그램 Apache httpd를 설치한다.

아파치 HTTP 서버는 아파치 소프트웨어 재단에서 관리하는 오픈 소스, 크로스 플랫폼 HTTP 웹 서버 소프트웨어다. BSD, 리눅스 등 유닉스 계열 뿐 아니라 마이크로소프트 윈도우나 노벨 넷웨어 같은 기종에서도 무료로 운용할 수 있다.

아파치 관련해서도 Apache란 무엇인가? 를 참고했다.
sudo yum install httpd -y를 통해 잘 설치된 모습

4) sql 클라이언트 프로그램 설치
MySQL에 접속할 수 있도록 클라이언트 프로그램을 설치한다.
sudo yum insatll mysql -y를 실행한다.
Amazon Linux 2023 AMI 버젼이라 오류가 발생했는데, mysql80-community를 직접 설치해서 해결했다.

5) wordpress 프로그램은 php를 사용하기 때문에 php도 사전에 설치해야함
먼저 다음 명령어로 사용가능한 php 버젼 목록을 살펴보자.
sudo amazon-linux-extras list | grep php
목록에 나온 8.2 버젼을 설치했다.
sudo amazon-linux-extras install -your php8.2
하지만 마찬가지로 나는 Amazon Linux 2023으로 인스턴스를 생성했기 때문에 오류가 발생해서
sudo dnf install php -y를 통해서 해결했다

6) wordpress에서 DB를 연결할 때 php-mysqlnd 프로그램이 필요하므로 설치한다
sudo yum install -y php-mysqld

7) wordpress 설치
wordpress 설치 파일을 다운로드 받는다
sudo yum install wget

이미 wget이 설치되어서 추가 설치가 불필요하다는 메시지가 출력됐다.(여기서 오류가 발생헀다면 EC2가 인터넷을 사용할 수 없는 것으로, 네트워크 환경을 점검해야한다!)
worpress 최신 버젼을 wget프로그램으로 다운로드한다.
sudo wget https://wordpress.org/latest.tar.gz
sudo tar zxcf latest.gz
다운로드 받은 파일 압축을 해제하면 wordpress라는 폴더가 생성되고 그 안에 여러 파일들이 존재하는 것을 확인할 수있다.
이제 wordpress 폴더로 이동한후 폴더의 모든 내용을 강제로 httpd가 읽고 있는 폴더로 옮겨준다.
sudo cp -rf * /var/www/html

8) httpd 구동
이제 httpd를 구동한다.
다음 명령어를 통해 EC2가 재가동되어도 계속해서 httpd가 실행되도록 설정한다. (EC2 복제를 위한 명령어이므로 필수적으로 수행한다)
sudo systemctl enable httpd
그리고 httpd의 현재 상태가 running이라면 정상!

RDS DB구축과 EC2연결

RDS는 AWS에서 DB(DataBase)를 제공해주는 서비스입니다. DB 중 시장점유율 1위인 MySQL을 프리티어로 구축합니다. RDS MySQL도 EC2처럼 서버이기 때문에 보안그룹을 설정해야 하며 서버간 통신을 위한 보안 설정도 해야합니다.
AWS RDS 공식문서

RDS 구축
다음을 구성해보자

1) DB Subnet Group

DB는 EC2와 같은 가상서버와 다르게 데이터가 저장되어 보안이 중요한 서버이기 떄문에 이중화가 필수입니다. RDS는 자동으로 이중화 서비스를 구성하도록 제공해주는데, 그렇게 되기 위해서 DB용 서브넷을 2개 이상 사용해야 합니다. DB Subnet Group은 서브넷 2개 이상을 묶어서 DB용으로 사용이 가능하도록 해줍니다.

RDS 서비스에 입장해서 서브넷 그룹 생성을 진행한다. 이름과 VPC를 선택하고 (EC2가 사용하는 VPC와 동일한 VPC이어야 한다. VPC 안에서 통신하기 때문!) DB용 서브넷이 생성되어 있는 가용영역을 선택한다.
DB용으로 만든 서브넷을 선택한다.생성 버튼을 눌러 생성하면 완료!

2) DB의 보안그룹

_DB도 서버이기 때문에 보안그룹이 필요합니다. MySQL의 기본포트는 3306입니다. 여기서는 EC2가 3306포트를 통해 MySQL에 접속이 가능하도록 해야 합니다.

VPC 보안그룹으로 들어가서 EC2용 보안그룹 ID를 복사한다. 보안그룹에 DB용 보안그룹 기본 정보를 입력한다. (VPC가 다르면 사용할 수 없으니 DB가 사용할, EC2와 같은 VPC를 선택해야 한다.)
인바운드 규칙에서는 TPC 3306번 포트, 소스에는 복사한 EC2와 보안그룹 아이디를 넣은 선택한다.
아웃바운드는 기본으로 모두 열려있으므로 건드리지 않고 생성한다.
이제, 보안 그룹 상 EC2의 아웃바운드와 DB의 인바운드가 가능해졌다. EC2도 아웃바운드는 기본적으로 모두 열려져 있는 상태이니 MySQL 3306포트로 아웃가능하다. DB는 인바운드로 EC2의 보안그룹에 대해서 3306을 허용해주었으니, 3306으로 들어오는 것이 가능하다.

3) MySQL 프리티어 구축
RDS에서 DB 생성을 한 후 프리티어가 지원되는 표준생성에서 MySQL을 선택한다. DB인스턴스의 이름을 지어주고, 아이디와 비밀번호를 입력한다. 네트워크 관련된 설정들을 진행해준다.

  • VPC 아이드를 확인하여 EC2와 같은 VPC인지 확인한다
  • EC2와 연결할 것이지만, 사전에 보안그룹 설정을 해 놓았으므로 여기서는 연결 안함을 선택한다
  • 퍼블릭 엑세스는 인터넷 연결 사용 여부이므로 아니오를 선택한다.
    추가 구성에서 옵션을 변경한다. DB이름을 설정하고 백업과 암호화를 해제한다.(요금 나감!!)

여기서 처음에 오류가 떴었는데 VPC가 기본값으로 설정되어있지 않았어서 DNS 설정에서 DNS 호스트 이름 활성화를 통해서 해결했다

4) 복제설정 확인하기
생성한 데이터베이스 인스턴스 아이드를 클릭하여 설정을 확인한다.

  • RDS는 자동으로 이중화가 되어 있기 때문에 별도로 설정하지 않아도 된다.
  • 엔드포인트를 확인한다. 다른 이름으로는 호스트라고도 불린다. DB 서버의 주소이다.
  • 포트는 MySQL의 기본값인 3306이다. 엔드포인트와 포트로 DB인스턴스 위치를 찾을 수 있다.
    구성 탭에서 DB접속 시 사용되는 ID와 비밀번호를 기억해두자

EC2와 DB연결

이제 EC2에서 DB로 접근하는 화살표가 추가된 구성을 진행해보자.

1) EC2 접속
EC2에 접속한다

2) DB연결 테스트
기존에 mysql client 프로그램을 설치했기 때문에 그 프로그램으로 DB에 연결되는지 확인해본다.
mysql -u(db ID) -p -h (RDS endpoint 주소)
연결이 되면 shell 입력 시작 부분이 mysql로 변경된다.

3) DB 확인 및 wordpress DB 생성
mysql이 가지고 있는 DB명을 불러오자
show dayabases;

wordpress용 DB도 생성해보고 다시 show databases;를 통해 생성이 잘 되어있는지를 확인한다.
create database wordpress;
이제 mysql shell을 빠져나온다

4) wordpress db연결 설정

wordpress는 wp-config.php 파일로 DB연결을 제어한다.

wordpress 프로그램도 DB를 사용할 수 있도록 설정한다.
cd /var/www/html 로 wordpress가 동작하고 있는 폴더로 이동한 후 현재 위치의 파일 목록을 조회한다. ll

DB연결 설정파일은 wp-config.php파일인데, 샘플 파일만 존재한다. 파일을 복사하여 wp-config.php파일을 만든다. sudo cp wp-config-sample.php wp-config.php

VI편집기로 설정파일에서 DB_NAME, DB_USER, DB_PASSWORD, DB_HOST에 값을 준다.

sudo vi wp-config.php를 실행하고 insert모드로 변경한후 수정하면 된다(사진은 예시)
wordpress 일부 테마설정파일은 서버에 대한 보다 많은 권한을 요구하기도 한다고 했다. 그래서 apache 리눅스 유저에게 더 많은 권한을 부여해야한다.
sudo chown -R apache:apache /var/www/html
권한 설정이 정상적인지 확인한다. ll -al

전에는 root root였지만 지금은 apache apche가 나와서 정상적으로 설정된 모습이다.

이제 웹 브라우저로 EC2 퍼블릭 IP를 입력하여 접속한다.
http://(ec2@public ip)

다음 단계인 로드밸런스를 통한 EC2 이중화다음 글에서 이어서 해야지...

profile
안되면 되게하라

0개의 댓글