진짜 대충 그린 그림...
이런 아키텍처를 만들어볼 것이다.
1. nginx (10.10.10.10)
1) ngnix 설치
apt update
apt install -y nginx
2) nginx 설정
vi /etc/nginx/sites-enabled/default
설정 파일 들어가서 아래 내용 붙여넣기 (필요 없는 주석들 다 지운 상태)
이때, tomcat_backend 서버 IP 주소에는 내가 설정할 톰캣 서버 IP 주소를 입력해야 한다.
upstream tomcat_backend {
server 10.10.10.40:8080;
server 10.10.10.50:8080;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location /api {
rewrite ^/api(/.*)$ $1 break;
proxy_pass http://tomcat_backend; # 업스트림 그룹으로 프록시
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;
}
}
3) html 파일 다운로드
미리 작성해놓은 html 압축 파일을 다운 받고 압축을 푼다.
html 폴더 안에 들어가서 안에 내용을 다 지우고, wget과 tar zxvf를 통해서 받아준다.
cd /var/www/html
rm -rf ./*
wget [압축파일]
tar zxvf [압축파일]
2. tomcat (10.10.10.40, 10.10.10.50)
1) 자바 설치
apt update
apt install -y openjdk-17-jdk
2) 톰캣 압축파일 다운로드 후 압축 해제
wget [톰캣 압축파일]
tar zxvf [압축 파일]
3) 폴더 이동
mv apache-tomcat-10.1.33 /usr/local/tomcat10
잘 옮겨진 것 확인
4) JSP 코드 파일 생성
기존에 있던 파일들 지워주기
rm -rf /usr/local/tomcat10/webapps/ROOT/*
db.jsp 라는 파일 생성 후 백엔드 코드 입력
vi /usr/local/tomcat10/webapps/ROOT/db.jsp
dbURL = Haproxy 서버 IP 주소
dbUser 랑 Password는 내 꺼에 맞게 입력
<%@ page import="java.sql.*" %>
<%
String dbURL = "jdbc:mariadb://10.10.10.100:3306/web";
String dbUser = "psy";
String dbPassword = "qwer1234";
Connection conn = null;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbUser, dbPassword);
System.out.println("DB success!");
} catch (Exception e) {
e.printStackTrace();
response.setContentType("text/html;charset=UTF-8");
out.println("DB failed!");
}
%>
5) 라이브러리 다운
cd /usr/local/tomcat10/lib
wget [mariadb client jar 파일]
6) 톰캣 실행
/usr/local/tomcat10/bin/shutdown.sh
/usr/local/tomcat10/bin/startup.sh
톰캣 실행된 걸 확인할 수 있다.
7) 톰캣 실행 확인
ps -ef | grep /usr/bin/java
netstat -anlp | grep :8080
DB 서버에서 web이라는 DB 생성 후 권한 부여
CREATE DATABASE web;
GRANT ALL PRIVILEGES ON web.* TO 'psy'@'%';
FLUSH PRIVILEGES;
http:/[톰캣 서버 주소]:8080/db.jsp 해서 db failed 안 뜨면 성공
8) jsp 압축 파일 다운 받기
간단한 로그인 기능을 구현한 jsp 압축 파일을 다운 받고 압축을 푼다.
/usr/local/tomcat10/webapps/ROOT 폴더 안에 압축 풀기
cd /usr/local/tomcat10/webapps/ROOT
wget [압축파일]
tar zxvf [압축파일]
일단 실행이 잘 되는지 확인해보기 위해 nginx 설정에서 주석처리를 해주고
http://10.10.10.10/index.html 에 들어가면 간단한 로그인 창이 뜬다.
회원가입을 눌러서 아이디와 비밀번호 입력 후 회원가입 버튼 클
방금 입력한 아이디와 비밀번호로 로그인하면 게시판 창이 뜬다.
게시판에서 제목과 내용을 입력 후 글 작성을 누르면 게시글이 뜬다!
백엔드 서버가 두 개일 때 실행 안 되는 문제
로그인 했다는 정보를 세션으로 저장하는데, 세션은 일반적으로 백엔드 서버 컴퓨터에 메모리로 저장된다.
= 컴퓨터가 꺼졌다가 켜지면 없어진다.
아이디와 비밀번호를 확인하면 서버 1의 메모리에 로그인 했다는 정보를 저장한다.
두 번째 요청할 때는 서버 2로 가는데, 서버 2에는 로그인 했다는 정보가 없으니까 로그인이 되지 않는다.
해결 방법
1) 세션 클러스터링
- 서버들끼리 세션을 공유해서 똑같이 저장한다.
- 단점 : 서버가 많아질 때 낭비가 심하다.
2) 스티키 세션
- 갔던 서버로 또 가게 한다.
- 사용자 1은 계속 서버 1과 연결하고, 사용자 2는 계속 서버 2와 연결하는 방식
- 단점 : 한 서버에 사용자가 많고, 한 서버는 놀 수 있다.
3) DB에 세션 저장
- 세션을 백엔드 서버 메모리에 저장하는 것이 아니라, DB 서버에 저장한다.
- 단점 : 속도가 느리다.
- DB는 하드디스크에 파일을 저장하기 때문에 백엔드보다 훨씬 느리다.
- 사용자가 많이 들어온다고 했을 때 그만큼 느려진다.
- 로그인 같은 경우, 접속하는 페이지마다 로그인 했는지 확인해야 한다.
4) Redis에 세션 저장
- Redis를 사용해서 저장한다.
5) 클라이언트한테 토큰을 저장하게 하고 서버는 토큰을 확인한다.
- 요즘 가장 많이 쓰는 방식이다.
- 액세스 토큰이라는 것을 사용
- 액세스 토큰 : 로그인했다 라고 하는 정보 (보통 eyJ로 시작한다.)
'CS > DB' 카테고리의 다른 글
[DB] DB 클러스터 설정 (0) | 2024.12.04 |
---|---|
[DB] 3계층 아키텍처 - 다중화 실습 (2) (0) | 2024.12.04 |
[DB] DB 서버 핫 사이트 구성 실습 (Active - Standby) (0) | 2024.12.03 |
[DB] DB 서버 부하 분산 (HAProxy) (0) | 2024.12.03 |
[DB] 재해 복구(DR) / DB 서버 Replication 설정 / 미러 사이트 구성 실습 (0) | 2024.12.03 |