클라우드 | 가상화/AWS

AWS - 5. Nginx <-> Tomcat 통신, RDS 설치

mamdragors 2025. 12. 10. 18:35

 

 

https://mamdragors.tistory.com/28

 

AWS - 4. 이중화(ALB) 및 Tomcat 설치

이중화(ALB)다음과 같은 구성으로 2중화를 진행할 것이다.보안 서버는 공인아이피로 접속하고 NAT 게이트웨이를 통해 was 서버에 접속할 것임web 서버는 공인아이피를 할당받아 다이렉트로 접속해

mamdragors.tistory.com

 

 

전 단계에서 이중화 및 톰켓 설치 까지 진행함.

퍼블릭 영역의 Nginx 2A 를 호출시 Tomcat 2A  로 연결되도록,

퍼블릭 영역의 Nginx 2C 를 호출시 Tomcat 2C  로 연결되도록

설정 할 것이다.

Nginx2A 에 접속하여 진행한다.

Nginx 설정파일 편집

sudo vi /etc/nginx/conf.d/default.conf

 

원래 내용을 전부 지우고  아래 코드를 붙여넣는다

server {
        listen 80;
        server_name localhost;

        # 톰캣 서버(10.250.2.240:8080)로 모든 요청 프록시
        location / {
            proxy_pass http://10.250.2.240:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 300;
            proxy_send_timeout 300;
            proxy_read_timeout 300;
        }
    }

 

 

GPG 키 추가

sudo nginx -t

 

nginx 재가동

sudo systemctl restart nginx

 

재가동 후 "http://nginx 의 ip" 로 접속하면 tomcat의 화면을 볼 수 있음

 

Nginx2C 도 동일하게 진행.

default.conf 파일의 ip 만 다르고 나머지는 동일하다. 아래 빨간 글씨 참고

 

Nginx 설정파일 편집

sudo vi /etc/nginx/conf.d/default.conf

--- 내용 --- 
server {
        listen 80;
        server_name localhost;

        # 톰캣 서버(10.250.12.240:8080)로 모든 요청 프록시
        location / {
            proxy_pass http://10.250.12.240:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 300;
            proxy_send_timeout 300;
            proxy_read_timeout 300;
        }
    }

--- 내용 끝--- 

 

예제 jsp 를 FTP로 보안서버(BASTION 서버) 영역에 올린다.

DB 연결하여 insert/update/delete/select 기능이 작성되어 있다.

 

 

 

Tomcat2A, Tomcat 2C 에 파일을 전송한다.

Bastion 접속된 쉘에서 진행

scp *.jsp tomcat2a:/home/ubuntu/
scp *.jsp tomcat2c:/home/ubuntu/

 

위에서 tomcat2a 라는 별칭을 사용할수 있는것은

/home/ubuntu/.ssh/config 파일에 해당 정보를 설정해 두었기 때문이다

위 명령어 대신  서버주소와  보안 키파일을 명시하여 복사할 수 있다.

 

명령어 형식

scp -i [키파일] [로컬 파일 경로] [사용자ID]@[서버주소]:[원격 저장 경로]

scp -i /home/ubuntu/.ssh/jongnoaws.pem /home/ubuntu/*.jsp ubuntu@10.250.2.240:/home/ubuntu
scp -i /home/ubuntu/.ssh/jongnoaws.pem /home/ubuntu/*.jsp ubuntu@10.250.12.240:/home/ubuntu

 

 

Tomcat2A, Tomcat 2C 에서 전부 작업

톰켓 서버의 root 폴더로 jsp 파일을 이동한다.

mv *.jsp /home/tomcat/apache-tomcat-9.0.108/webapps/ROOT/

 

Tomcat2A, Tomcat 2C 를 구분하기 위해 각 서버에서 파일을 수정한다

index.jsp, list.jsp 파일에서 h1 의 color 를 Tomcat2A 는 red, Tomcat 2Cblue 으로 수정한다.

 

브라우저에 도메인을 입력하고 접속해 본다.

 

 

최초화면 하단의 [게시판 시작하기] 클릭시 "데이터베이스 연결 실패:" 라는 메시지가 보일 것이다.


 

RDS(Relational Database Service) 설치

1. 보안그룹 생성

aws.com 에서 EC2 > 보안그룹 에서 데이터베이스 서버를 위한 보안그룹을 생성한다.

 

보안 그룹 이름/설명 : JON-PRD-VPC-DB-PRI-SG-2A

VPC : JON-PRD-VPC

 

생성한 보안그룹 선택 > 인바운드 규칙 > [인바운드 규칙 편집]

 

유형 : MYSQL/Aurora

소스 : Anywhare-IPv4

 

2. 서브넷 생성

VPC > 서브넷 > [서브넷 생성]

 

VPC : JON-PRD-VPC

서브넷 이름 : JON-PRD-VPC-DB-PRI-2A

가용영역 : 아시아 태평양(서울) / ap-northeast-2a

IPv4 서브넷 CIDR 블록 : 10.250.3.0/24

 

서브넷 하나더 생성

 

VPC : JON-PRD-VPC

서브넷 이름 : JON-PRD-VPC-DB-PRI-2C

가용영역 : 아시아 태평양(서울) / ap-northeast-2c

IPv4 서브넷 CIDR 블록 : 10.250.13.0/24

 

3. 라우팅 테이블에 서브넷 추가

목록에서 JON-PRD-RT-PRI 선택 > 서브넷 연결  탭에서 [서브넷 연결 편집]

 

JON-PRD-VPC-DB-PRI-2A, JON-PRD-VPC-DB-PRI-2C 를 추가로 체크하고 [연결 저장]

 

4. 서브넷 그룹 생성

Aurora and RDS > 서브넷 그룹 > [DB 서브넷 그룹 생성] 클릭

 

이름 / 설명 : JON-PRD-VPC-DB-GROUP

VPC : JON-PRD-VPC

서브넷추가

    가용영역 : ap-northeast-2a , ap-northeast-2c 2개선택

    서브넷 : JON-PRD-VPC-DB-PRI-2A, JON-PRD-VPC-DB-PRI-2C 2개 선택

 

하단 서브넷이 생성됨 영역에 선택된 정보가 맞는지 확인하고 [생성]

 

5. 데이터베이스 생성

Aurora and RDS > 대시보드 > [데이터베이스 생성]

 

또는 Aurora and RDS > 데이터베이스 > [데이터베이스 생성]

 

데이터베이스 생성 방식 : 표준생성

엔진 옵션 : MySQL

에디션 : MySQL Community

엔진 버전 : MySQL 8.0.39

템플릿 : 프리티어

가용성 및 내구성 : 단일 AZ DB 인스턴스 배포(인스턴스 1개)

설정

    DB 인스턴스 식별자 : MyDB

    마스터 사용자 이름 : admin

    자격증명관리 : 자체관리

    마스터암호 :  임의로 지정

인스턴스 구성

    DB 인스턴스 클래스 : 버스터블 클래스 의 db.t3.mirco

스토리지

    스토리지 유형 : 마그네틱

    할당된 스토리지 : 5

연결
    컴퓨팅 리소스 : EC2 컴퓨팅 리소스에 연결 안함
    네트워크 유형 : IPv4 
    VPC : JON-PRD-VPC
    DB 서브넷 그룹 : JON-PRD-VPC-DB-GROUP
    퍼블릭 액세스 :
    VPC 보안 그룹 : 기존항목 선택
    기존 VPC 보안 그룹 : JON-PRD-VPC-DB-PRI-SG-2A
    가용 영역 : ap-northeast-2a
    인증기관 : 기본값 
데이터베이스 인증
    데이터 베이스 인증 옵션 : 암호 인증
추가구성
    초기 데이터베이스 이름은 : JON_PRD_DB
    자동 백업 활성화 : 체크 해지
     유지관리 : 마이너 버전 자동 업그레이드 체크 해지
     유지 관리 기간 : 기본 설정 없음

 

생성 버튼을 클릭하면 에러가 날것이다

 

VPC > JON-PRD-VPC 들어가서

[작업] > VPC 설정 편집

 

DNS 호스트 이름 활성화 체크 후 [저장]

 

VPC 설정 후 데이터베이스 생성 화면으로 돌아가서 생성 버튼을 클릭하면 정상 생성될 것이다.

생성과정은 최대 5분까지 걸릴수 있다.

 

6. 로컬PC에서 데이터베이스 접속

 

MySQL Workbench 프로그램을 다운받아 설치한다.

https://dev.mysql.com/downloads/workbench/

 

MySQL :: Download MySQL Workbench

 

dev.mysql.com

 

Aurora and RDS > 데이터베이스 > 생성한 DB  세부정보 에서 앤드포인트 를 복사한다.

 

MySQL Workbench 를 실행하고 버튼 클릭

 

Connection Name : MyDB

Connection Method : Standard TCP/IP over SSH

SSH Hostname : Bastion 서버의 공인 IP

SSH Username : Bastion 서버의 user

SSH Key file : pem 키 선택

MySQL Hostname: 복사한 앤드포인트

MySQL Username : DB 생성시 지정한 마스터 사용자 이름

Store in Vault 는 하지 않는다. 

[Test Connection] 클릭하면 비밀번호 입력창이 나오고 입력하면 성공 실패를 알려준다.

성공하면 [OK] 클릭

 

 

생성된 커넥션을 더블클릭

데이터 베이스에 접속된다.

테이블 생성 및 샘플 테이터를 등록한다.

-- 게시판 테이블 생성
CREATE DATABASE IF NOT EXISTS board_db;
USE board_db;

-- 게시글 테이블
CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    content TEXT NOT NULL,
    author VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

ALTER TABLE posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER DATABASE board_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

-- 샘플 데이터 삽입
INSERT INTO posts (title, content, author) VALUES 
('첫 번째 게시글', '안녕하세요! 3Tier 아키텍처 테스트용 게시판입니다.', '관리자'),
('두 번째 게시글', 'Nginx + Tomcat + MySQL 연동 테스트 중입니다.', '사용자1'),
('세 번째 게시글', 'AWS RDS와 연동이 잘 되고 있나요?', '사용자2');

-- 테이블 확인
SELECT * FROM posts;

 

7. Tomcat 에 데이터베이스 연결

 

Tomcat2A, Tomcat2C  둘 다에 작업한다.

라이브러리 폴더로 이동하여 MySQL JDBC 드라이버 다운로드

cd /home/tomcat/apache-tomcat-9.0.108/lib
sudo wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz

다운로드파일 압축해제

sudo tar -xzf mysql-connector-j-8.0.33.tar.gz

 

압축 해제 후 폴더 안에서  /home/tomcat/apache-tomcat-9.0.108/lib 경로로 jar 파일복사

sudo cp mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar ./

 

소유자:그룹 변경

sudo chown tomcat:tomcat mysql-connector-j-8.0.33.jar

설정파일에 DB 접속정보 등록

sudo vi /home/tomcat/apache-tomcat-9.0.108/conf/server.xml

 

<GlobalNamingResources></GlobalNamingResources> 사이의 내용 지우고 아래 입력

<Resource name="jdbc/MyDB" 
              auth="Container" 
              type="javax.sql.DataSource"
              maxTotal="20" 
              maxIdle="5" 
              maxWaitMillis="10000"
              username="your-db-username
              password="your-db-password
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://your-rds-endpoint:3306/your-database-name?useSSL=true&serverTimezone=UTC"/>

 

context.xml에도 ResourceLink 추가

sudo vim + /home/tomcat/apache-tomcat-9.0.108/conf/context.xml

</context> 바로 위에 추가

<ResourceLink name="jdbc/MyDB" global="jdbc/MyDB" type="javax.sql.DataSource"/>

 

톰켓 재시작

sudo systemctl restart tomcat

 

 

 

브라우저에서 게시글 작성 후 데이터 확인