서비스간 연결 확인하는 것을 하고 있다.
Nginx와 톰캣을 연결 하는 것
Nginx로 웹서버를 띄울때 가장 중요하게 보아야 할 곳은
nginx.conf 와 conf.d/의 *.conf 파일들이다.
nginx 설정파일은 기본 nginx.conf 인데 만약 사이트를
직접 만들고 설정을 하게 될 경우에는
conf.d 폴더안에 .conf 파일을 만들면 nginx.conf 가
include를 통해서 직접 커스텀한 .conf 파일을 읽어 들여
default.conf
server {
listen 80;
server_name localhost;
location / {
root /ncp/data/www/; # 요청시 어떤 폴더에서
index index.html, index.htm; # 어떤이름의 파일을 가져올것인지
proxy_pass http://192.168.203.201:8080;
# proxy
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
}
참고링크 : https://phsun102.tistory.com/45
proxy를 통해서
이렇게 하면 192.168.203.201:80 포트로 받은 값을
8080 포트인 톰캣 서버로 넘겨주게된다.
proxy에 대해서 참고링크 : https://narup.tistory.com/238
80포트의 nginx 사이트 대신
tomcat으로 부터 뿌려주는 사이트가 나오게되면 성공이다.
하지만 중간에 selinux가 proxy를 방해하고 있어서
setenforce 0
getenforce
설정을 해주니 되었다.
Tomcat 서버는 설정 파일이 Tomcat이 깔려 있는 곳에서
conf 에 server.xml에 있다.
ex)/tomcat10/conf/server.xml
여기서 어느 폴더의 파일을 참조할것인지 정할수 있다.
참고링크 : https://indienote.tistory.com/496
이 부분인데
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="." reloadable="false"/>
</Host>
그렇게 localhost의 webapps를 참조하는데
톰캣 폴더에 이렇게 webapps가 있다
이안의 ROOT 폴더의 index.js 혹은 jsp 파일이 기본적으로 렌더링된다.
tomcat10/webapps/ROOT/index.js
그래서 만들어놓은 index.jsp로 갈아 끼워야하는데
백업은 언제나 생활화 해야한다.
cp index.js index.js.backup #기존 index.js 파일 백업
index.jsp
<%@ page import="java.sql.*" contentType="text/html;charset=utf-8"%>
<%
String DB_URL = "jdbc:mysql://192.168.203.201/"; # DB_URL 변경예정
String DB_USER = "root";
String DB_PASSWORD= "mypass";
ResultSet rs = null;
Connection conn;
Statement stmt;
try {
Class.forName("com.mysql.cj.jdbc.Driver"); #뒤 에서 변경 예정 mysql->mariadb
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.createStatement();
// conn.close();
out.println("MySQL Connection Success!");
/*
rs = stmt.executeQuery("테스트 쿼리");
while(rs.next()) {
out.println("<tr>");
out.println("<td>" + rs.getString("test1") + "</td>");
out.println("<td>" + rs.getString("test2") + "</td>");
out.println("</tr>");
}
*/
}
catch(Exception e){
out.println(e);
}
%>
~
그렇게 사이트의 index.js를 띄우는 연결까지는 어떻게 성공했다.
하지만 사이트 내에서는 js에 대한 에러들을 내보냈다.
tomcat10/lib/*
해당 경로에 jar 파일들이 있는데 톰캣 서버가 실행때마다 이곳에서 jar 패키지를 읽어들인다.
설정을 몇번 고쳤는데 고칠때마다 catalina.sh을 통해 재로딩 시켜주어야 설정이 반영된다.
catalina.sh stop # 사용시 tomcat 서버 닫히고 502 Bad Gateway 도출
catalina.sh start # 실행시 모든 설정 재로딩, 서버 실행
그래서 제대로 읽어들이는 것이 아닌지 확인을 해주어야 한다.
위의 소스를 참고해서 작성하였는데
jdbc 클래스를 찾을수 없다는 에러가 떴다.
그래서 찾다보니 CLASSPATH를 지정해주면 된다고 해서
vi /etc/profile
unset i
unset -f pathmunge
export PATH=$JAVA_HOME/bin:$PATH:$CATALINA_HOME/bin
export JAVA_HOME=/usr/lib/java/jdk-20
export CLASSPATH=$CLASSPATH:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/ojdbc10.jar
export CATALINA_HOME=/usr/share/tomcat10
이렇게 CLASSPATH에 tomcat10/lib 하위의 jar 파일을 잡아주었다.
처음에는 ojdbc10.jar를 다운받아서 연결해주려고 했는데
ojdbc는 Oracle DB에 대해서 자바와 연결해주는 connector 패키지였고
우리는 MariaDB를 사용하기 때문에 MariaDB Connector 파일을 사용해야한다.
MariaDB Connector는
MariaDB Connector/J 라는 것을 사용해야 한다.
MariaDB Connector/J 3.1.3v 링크
https://mariadb.org/download/?t=connector&p=connector-java&r=3.1.3&os=source&pkg=java-source-jar&m=blendbyte
그러다가
index.jsp
try {
Class.forName("org.mariadb.jdbc.Driver");
...
...
이렇게 수정했다.
이번에는 클래스는 찾았는데, Driver를 찾지 못한다는 에러가 나왔다.
찾아본 결과 jdk, jre에 Driver를 추가해주면 된다고 한다.
참고링크 : https://blog.base-on.co.kr/344
현재 tomcat의 lib에 있는
mariadb-java-client-3.1.3.jar 를
java jdk의 lib에도 넣어주었다
그래도 같은 에러 메시지가 나왔고
계속보니 URL 링크가 좀 이상한거같아서
String DB_URL = "jdbc:mariadb://192.168.203.201:3306/test";
또 수정했습니다.
이번에는 SQL 에러가 떠서 보니
DB 서버에서 접근을 허용하지 않아서
user도 직접 만들어서 권한을 부여했다.
CREATE USER 'test'@'192.168.203.201' IDENTIFIED BY 'test'; # USER 생성
GRANT ALL PRIVILEGES ON test.* TO 'test'@'192.168.203.201';
# 모든권한 부여 DB 이름이 'test'인 모든 테이블에 대해서, user'test'이고 host는 '192.168.203.201'
인 사람에 대해서;
FLUSH PRIVILEGES; # DB에 명령 적용
mariadb # mariadb 접속
SHOW DATABASES; # DATABASES 조회
USE mysql; # mysql 이라는 DB로 접속
SELECT host,user,password FROM user; # user 테이블에서
host,user,password 로
다시 만든 유저를 jsp에 적용하여, 작성하였고
이번에는 이런 에러가 떴다.
그래서 이번에는 mysql에서 bind 할수 있도록 address를 설정해주었다.
참고링크 : https://tyrannocoding.tistory.com/42
host | user | password |
---|---|---|
192.168.203.201 | test | test |
Tomcat MariaDB 연결 완료
CREATE TABLE test;
USE test;
Creating Tables
CREATE TABLE t1 ( a INT );
CREATE TABLE t2 ( b INT );
CREATE TABLE student_tests (
name CHAR(10), test CHAR(10),
score TINYINT, test_date DATE
);
Inserting Records
INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (2), (4);
INSERT INTO student_tests
(name, test, score, test_date) VALUES
('Chun', 'SQL', 75, '2012-11-05'),
('Chun', 'Tuning', 73, '2013-06-14'),
('Esben', 'SQL', 43, '2014-02-11'),
('Esben', 'Tuning', 31, '2014-02-09'),
('Kaolin', 'SQL', 56, '2014-01-01'),
('Kaolin', 'Tuning', 88, '2013-12-29'),
('Tatiana', 'SQL', 87, '2012-04-28'),
('Tatiana', 'Tuning', 83, '2013-09-30');
Using AUTO_INCREMENT
CREATE TABLE student_details (
id INT NOT NULL AUTO_INCREMENT, name CHAR(10),
date_of_birth DATE, PRIMARY KEY (id)
);
INSERT INTO student_details (name,date_of_birth) VALUES
('Chun', '1993-12-31'),
('Esben','1946-01-01'),
('Kaolin','1996-07-16'),
('Tatiana', '1988-04-13');
SELECT * FROM student_details;
SELECT
출처 링크 :
https://mariadb.com/kb/en/useful-mariadb-queries/
연결 성공 테스트로
index.js로 어느 서버가 띄워졌는지 확인할 수 있도록 했습니다.
<%@ page import="java.sql.*" contentType="text/html;charset=utf-8"%>
<%
out.println("<td>This is demo07 tomcat server</td><br>");
String DB_URL = "jdbc:mariadb://192.168.203.201:3306/test";
String DB_USER = "test";
String DB_PASSWORD= "test";
ResultSet rs = null;
Connection conn;
conn = null;
Statement stmt;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.createStatement();
// conn.close();
out.println("MySQL Connection Success!<br>");
rs = stmt.executeQuery("SELECT * FROM student_details;");
while(rs.next()) {
out.println("<tr>");
out.println("<td>" + rs.getString("id") + "</td>");
out.println("<td>" + rs.getString("name") + "</td>");
out.println("<td>" + rs.getString("date_of_birth") + "</td>");
out.println("</tr>");
out.println("<br>");
}
}
catch(Exception e){
out.println("This is demo07 tomcat server");
out.println(e);
}
%>
~
demo 07
demo 08