기타

Tomcat - Mysql 연동하기, 1 tier를 2 tier로 쪼개기

슬리퍼는 맨발에 2023. 4. 10. 23:59


순서

1. Tomcat, jdbc 설치
2. mysql 설치
3. 같은 티어내에서 연동
4. 티어를 나누어 연동
5. ssh로 터널링해 연동



1. Tomcat, jdbc 설치

#톰캣 설치
yum install -y tomcat

#톰캣 실행
systemctl start tomcat

#중지
systemctl stop tomcat

#재시작
systemctl restart tomcat

#openjdk설치 #tomcat만 실행은 가능하나 java로된 코드를 짜기 위해 jdk 필요
yum install -y java-1.8.0-openjdk
yum install -y java-1.8.0-openjdk-devel

#설치 경로 확인 #저는 이렇게 나왔어요~ /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre/bin/java
readlink -f /usr/bin/java

#파일을 열어 아래 내용 추가
vi /etc/profile

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

export JAVA_HOME PATH CLASSPATH

#변경 적용
source /etc/profile

#설정 확인
echo $JAVA_HOME
echo $PATH
echo $CLASSPATH

#jdbc 설치 # .java나 .jsp에서 db를 부르고 싶다면 jdbc가 있어야 함.
#다운로드
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.32.tar.gz
#압축해제
tar xvfz mysql-connector-j-8.0.32.tar.gz
#java 설치한 곳에 옮기기
cp -a mysql-connector-j-8.0.32/mysql-connector-j-8.0.32.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre/lib/ext



2. mysql 설치

#mysql 설치
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
yum install -y mysql-server

#설치중 아래와 같은 에러 발생 함
#GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022”

 

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

 

아니면 이분 링크대로 했을 때도 됐습니다.

https://babysunmoon.tistory.com/entry/DBcentos-70이상에서-mysql-80-yum패키지-설치

path : /etc/yum.repos.d/mysql-community.repo


#다시 설치
yum install -y mysql-server

#실행
systemctl start mysqld

#중지
systemctl stop mysqld

#재실행
systemctl restart mysqld

#설치는 했으나 코드 짜 넣고 사용하려면 초기 비밀번호를 바꿔야 함.
#초기 비밀번호 확인, 저의 경우 ed5#G=eO*s+V 가 비밀번호 였습니다.
grep 'temporary password' /var/log/mysqld.log

#mysql 접속
mysql -u root -p
비밀번호 입력 : ed5#G=eO*s+V

#초기 비밀 번호 변경
ALTER USER 'root'@'localhost' IDENTIFIED BY '소문자대문자특수기호쓴비밀번호';

#간단한 db, 테이블 생성(동작 확인용)

#사용법은 이 감사하게도 이 블로그에서 배웠습니다.

https://velog.io/@may_soouu/mysql-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC

 

🎃 mysql 튜토리얼

mysql에 직접 DB와 테이블을 만들어보고, 데이터를 삽입해보자😀지금은 테이블 정보가 없기 때문에, 보여지는 것이 없다.예를 들어 1개의 음료에 서로 겹치지 않게 추천되는 상품들이 여러개 있

velog.io


#생성
CREATE DATABASE centosDB;

#DB선택
USE centosDB;

#테이블 생성
CREATE TABLE drinks
(
id INT NOT NULL AUTO_INCREMENT, # id는 null을 허락하지 않으며, 자동으로 증가하는 pk값
product VARCHAR(100) NOT NULL, #product칼럼은 varchar형식이며 최대 100자이다
PRIMARY KEY(id)  # pk값은 id 이다.
);

# drinks 테이블

INSERT INTO drinks (product) VALUES('아메리카노 말고 러시아노');

INSERT INTO drinks (product) VALUES('라떼는 말이야');

INSERT INTO drinks (product) VALUES('포도당 홍차');
INSERT INTO drinks (product) VALUES('1');

INSERT INTO drinks (product) VALUES('2');

INSERT INTO drinks (product) VALUES('3');




3. 같은 티어내에서 연동

//코드는 좋은 예제들을 올려놓은 블로그가 많으니 url 입력 부분만 기재합니다.

//코드는 감사하게도 이 블로그에서 배웠습니다.

https://osc131.tistory.com/38

 

Tomcat / MySQL 연동

Tomcat/MySQL 연동 작성일시 : 2018년 03월 02일 환경 : Window 2012 R2 Datacenter – Tomcat 7.0.84 / Ubuntu 14.04 – MySQL 5.7 시나리오 : 물리적으로 구분 된 서로 다른 서버간의 WAS ( Tomcat ) / DB ( MySQL ) 연동 Tomcat 서버

osc131.tistory.com

//이 부분에서 URL이 자기자신을 가리키고 있어야 한다.

String DB_URL = "jdbc:mysql://127.0.0.1:3306/mysql";

String query = "select * from something";

 

 

4. 티어를 나누어 연동

#remote server에서 mysql을 접속하려면 권한이 있어야 한다. 없다면 아래같이 에러가 발생한다.
#jsp 파일에서 접속시 발생한 에러
Exception Error...java.sql.SQLException: null, message from server: "Host 'monitoring-server.novalocal' is not allowed to connect to this MySQL server”

#접근하는 DB user에 권한이 있어야 하는데,
#root에서 잠깐 쓸꺼니까 root에 권한을 주면 된다.
#왠진 모르지만 이미 있는 root유저를 또 만들어야됨. 아니면 권한이 안주어짐;;
create user 'root'@'%' IDENTIFIED BY 'DB비밀번호';
#권한 주기, mysql 버전 별로 명령어가 다를 수 있음
GRANT ALL PRIVILEGES ON *.*  TO 'root'@'%' WITH GRANT OPTION;

 

#연동 코드에서 주소를 remote server로 변경

String DB_URL = "jdbc:mysql://'DBserver_IP':3306/mysql";

 

 

5. ssh로 터널링해 연동

 

tomcat에서 짠 코드를 죽어도 바꾸기 싫을 수가 있나보다. was에서 DB server에 코드변경 없이 자동으로 연결해달라는 요구를 받았다.

 

DB URL은 그대로 WAS의 3306번을 가리킨채 db server에 접근해야 한다.

String DB_URL = "jdbc:mysql://127.0.0.1:3306/mysql";

 

 

한참 조사해본 결과 SSH로 터널링을 하면 가능하다는 걸 알게되었습니다.

 

아래 URL을 참고 하였습니다.https://hbase.tistory.com/328

 

[Linux] ssh 터널링(ssh port forwarding) - Local / Remote / Dynamic Tunneling

sh는 Secure SHell의 줄임말로 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜이다. 당연하게도 ssh는 원격 호스트로 접속하기 위해 가장 많이 사용된다. 그런데 ssh는 원격 호스트로의 접속과

hbase.tistory.com

 

ssh -CNf -i 인스턴스키.pem -L 3306:127.0.0.1:3306 centos@DB_IP

 

톰캣 index.html 접속, WAS서버 톰캣에서 db.jsp 접속 -> WAS서버의 3306포트를 지나 -> DB 서버에서 데이터 읽기

 

이렇게 tomcat - mysql 연동 테스트를 1 tier, 2 tier에서 간결하게 해보았습니다.