1차 3Tier - 서비스 간 연결

송전영·2023년 4월 4일
0

실습

목록 보기
3/4
post-thumbnail

서비스간 연결 확인하는 것을 하고 있다.

Nginx와 톰캣을 연결 하는 것

Nginx-Tomcat 연결 확인

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-MariaDB

Tomcat Host 설정

server.xml

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 &quot;%r&quot; %s %b" />
        <Context path="" docBase="." reloadable="false"/>

      </Host>

index.js

그렇게 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);

         }

%>
~

MariaDB 연결

그렇게 사이트의 index.js를 띄우는 연결까지는 어떻게 성공했다.

하지만 사이트 내에서는 js에 대한 에러들을 내보냈다.

tomcat10/lib/*

해당 경로에 jar 파일들이 있는데 톰캣 서버가 실행때마다 이곳에서 jar 패키지를 읽어들인다.

설정을 몇번 고쳤는데 고칠때마다 catalina.sh을 통해 재로딩 시켜주어야 설정이 반영된다.

Tomcat 재가동

catalina.sh stop # 사용시 tomcat 서버 닫히고 502 Bad Gateway 도출
catalina.sh start # 실행시 모든 설정 재로딩, 서버 실행

그래서 제대로 읽어들이는 것이 아닌지 확인을 해주어야 한다.

위의 소스를 참고해서 작성하였는데

dbconnect (MariaDB)

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

hostuserpassword
192.168.203.201testtest

Tomcat MariaDB 연결 완료

mariadb test query(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

profile
클라우드(9개월근무)퇴사, 정보컴퓨터교사 지망, 코딩트리에듀센터 학원 근무중.AI프롬프트공부중.

0개의 댓글