[삽질 가득 서버 설치기] [Apache + Tomcat] 5 - 리눅스에서 JSP와 DB 연동하기(MySQL)

반응형

개요

아파치, 톰캣, 우분투, Apache & Tomcat on Ubuntu with AWS
우분투(리눅스)에 mysql 설치

시작하기 전에

  • 커맨드는 $ 표시로 구분하였다.
  • 중요한 내용이 아닌 경우 [참고] 라는 이름으로 별도의 타이틀링을 하였다. 삽질 과정의 주저리로서 무시해도 괜찮은 내용이다.삽질 과정을 모두 기록한 글이기 때문에, 중간 중간 과도하게 상세한 설명이 들어가있다.
  • JDK 설치를 위해서 반드시 진행해야 하는 부분은 [👨🏼‍💻 중요] 표시로 구분하였다. 이 표시만 따라가면 우분투 리눅스에 JDK 를 설치할 수 있다.

지금까지 (이전과정 요약)

  • AWS 인스턴스 생성
  • Tomcat 설치 및 설정
  • Apache 설치
  • mod_jk 활용한 Tomcat 과 Apache 연동
  • 원격 파일 제어(업로드, 다운로드) 및 소스코드 원격 제어(수정) 환경 구축

이제 하려고 하는 것

서버에 DB 를 설치하고 DB 에 저장된 정보를 바탕으로 JSP 파일에서 입출력을 제어할 것이다.
따라서 먼저는 DB 인 MySQL 을 설치하고 이를 JSP 파일로 제어하는 환경을 만들어보자.

과정 요약

  • MySQL 설치
  • 동작 확인
  • 데이터베이스 및 테이블 생성 후 테스트 데이터 입력해보기
  • JSP 동작확인
  • MySQL Connector JAR 파일 다운로드
  • mysql-connector-java 파일을 CLASSPATH 에 이동시키기
반응형

MySQL 설치 및 접속

이 과정은 매우 간단하다.

우분투에서 MySQL 설치 및 설치 확인

[👨🏼‍💻 중요]

$ apt-get install mysql-server

  • mysql은 없다. mysql-server 가 정확한 명칭인 것 같다.
  • 설치 중 password 를 묻는다. 정확히 두 번 입력해주자.
  • 설치가 완료되면 다음과 같은 프롬프트가 뜬다.
  • mysql>
  • > show databases; 를 입력하여 데이터베이스가 제대로 동작하는지 확인해보자.

MySQL 종료

[👨🏼‍💻 중요]

> exit
위 명령어를 입력하면 mysql 이 종료되고, 다시 리눅스 명령 프롬프트로 돌아온다.

MySQL 접속

[👨🏼‍💻 중요]

$ mysql -u root -p

  • -u : user는 'root'
  • -p : 비밀번호를 입력하겠다.
  • -p 바로 뒤에 비밀번호를 입력해도 되지만, 보안상 권장되지 않는다.
  • 접속이 되면 다음과 같은 메시지를 볼 수 있다.
    리눅스-mysql-접속성공-스크린샷
    MySQL 접속 성공시
  • mysql 명령어를 통해 접속하는 이 프로그램의 명칭은 'MySQL monitor'이다.

MySQL DB 및 Table 조회 SQL

MySQL Basic SQL 참고자료 (Cheat Sheet)

MySQL 한국어 Cheat Sheet

http://leechoong.com/posts/2018/MySQL_Basic

MySQL 영어 Cheat Sheet

http://www.mysqltutorial.org/mysql-cheat-sheet.aspx
https://gist.github.com/hofmannsven/9164408

위 정도만 알아도 기초적인 DB 조작이 가능할 것이라 생각한다. 역시 생활코딩의 매우 좋은 강의가 있다.

아래는 db 제어를 위한 (자주 쓰이는)기본적인 sql 들이다. 맨 앞의 > 본 글에서 SQL 제어 프롬프트를 의미하므로, > 기호는 입력시 생략한다.

MySQL 데이터베이스 리스트 조회

[👨🏼‍💻 중요]

> SHOW DATABASES;

현재 존재하는 database 들의 목록을 보여준다.

mysql-show-databases-명령어-수행-결과
SHOW DATABASES;

MySQL 데이터베이스 선택

[👨🏼‍💻 중요]

> USE mysql;

사용할 데이터베이스를 선택한다.

mysql-use-mysql-명령어-수행결과
USE mysql;

MySQL 테이블 리스트 조회

[👨🏼‍💻 중요]

> SHOW tables;

선택된 데이터베이스의 테이블들을 보여준다.

mysql-show-tables-수행결과
SHOW tables;

MySQL 테이블 메타데이터 표시

> DESCRIBE user;

테이블 정보를 표시한다. 'SHOW tables;' 결과의 'user'(화면에는 보이지 않지만) 테이블의 컬럼 정보를 표시한다.

mysql-describe-user-명령어-수행결과
DESCRIBE user;

MySQL 데이터베이스 생성

[👨🏼‍💻 중요]

> CREATE DATABASE test; #test라는 이름의 DB 생성
> USE test; #제어할 테이블 선택(아래 테이블 생성 과정은 이 명령이 선행되어야 한다.)

MySQL 테이블 생성

[👨🏼‍💻 중요]

> CREATE TABLE user(id int AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, create_time DATETIME);
  • CREATE TABLE user,user라는 이름의 테이블을 생성하는데
  • id AUTO_INCREMENT PRIMARY KEY, id 컬럼은 자동증가(AUTO_INCREMENT)하는 컬럼이며, PRIMARY KEY이다.
  • name VARCHAR(50) NOT NULL,name 컬럼은 길이 50의 가변길이 문자열(VARCHAR(50))이며 NULL 일 수 없다.
  • create_time DATETIME, 일시에 관한 데이터타입이다. DATE 와 TIME 각각도 분리된 타입으로 기록될 수 있다.

MySQL CHAR vs VARCHAR

가변 문자와 고정문자의 차이
가변문자와 고정문자

  • VARCHAR(50)
    주어진 바이트(50) 안에서 입력된 문자의 길이만큼 저장된다. 저장공간이 절약된다.
    하지만, 검색이 CHAR 에 비해 느리다. 문자열의 끝의 위치가 항상 바뀌기 때문이다.
  • CHAR(50)
    CHAR(50) 이라면 입력된 글자가 10글자이더라도 뒤의 나머지 40글자의 공간은 공백으로 저장된다.
    저장공간 낭비라고 생각할 수 있으나, offset의 길이가 명확하기 때문에 검색속도가 빠르다.

MySQL 정보 입력 및 조회

MySQL INSERT, 데이터 삽입

[👨🏼‍💻 중요]

> INSERT INTO user VALUES(NULL, "COLDMATER", now());
> INSERT INTO user VALUES(NULL, "WARMMATER", now());
> INSERT INTO user VALUES(NULL, "DARKMATER", now());
  • NULL, 은 첫 번째 컬럼인 id를 의미하는 것으로, AUTO_INCREMENT 이기 때문에 자동으로 값이 증가하며 입력된다. 즉, 사용자는 최근 입력한 id 가 몇인지 기억할 필요 없이, NULL 을 넘겨줌으로써 MySQL 이 자동으로 처리하게 할 수 있다.

Auto Increment, MySQL vs Oracle DB

  • Oracle 11g db 에서는, AUTO_INCREMENT 기능이 없다. Sequence 라는 기능을 사용하여 자동 id 증가를 한다.

MySQL SELECT, 데이터 조회

[👨🏼‍💻 중요]

> SELECT * FROM user;
  • test 테이블의 모든(*) 컬럼의 정보를 불러온다.
    mysql-select-문-쿼리-수행결과
    SELECT * FROM user;

JSP 동작 확인

[👨🏼‍💻 중요]

이제 DB에 저장된 정보를 표현하는 JSP 페이지를 만들어보자.

여기까지 성공했다는 것은 리눅스(우분투) 위에서 WAS(Tomcat)DB Server(MySQL) 이 정상적으로 동작한다는 의미일 것이다.

JSP 페이지가 동작하는지 확인하기

  • 본 글 03 에서 Tomcat 과 Apache 두 서버를 연동했다. *.jsp 파일은 톰캣이 처리하여 화면에 띄워줄 것이고, *.html 파일은 Apache 가 처리하여 화면에 띄워준다.
  • 다음의 Test.jsp 파일을 리눅스의 root 폴더에 만들고 제대로 동작하는지 확인하자.

아래 소스는 윈도우 환경에서 이클립스의 Dynamic Web Project 를 생성시킨 후 JSP 파일을 만들었을 때 자동 입력되는 내용에 h1 태그만 덧붙였다.

 

[👨🏼‍💻 중요]

Test.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
        <title>Insert title here</title>
    </head>
    <body>

        <h1> Hello Universe !</h1>

    </body>
</html>

서버-접속-성공-웹화면-스크린샷
Test.jsp 파일을 브라우저로 확인

JSP 페이지에서 DB에 접속코드 삽입하기

  • JSP 페이지는 결국 servlet 이라는 *.java 파일로 동작한다.
  • java 는 DB에 접근하여 DB 를 제어할 수 있는 'Driver' 가 필요하다. 'Driver'는 *.jar 파일이다.

jar 파일이란?

JAVA Archaive, 클래스의 집합이다. 누군가가 미리 만들어 놓은 클래스를 우리는 부품처럼 사용할 수 있다.
즉, MySQLJAVA(JRE) 환경에서 DB 를 제어할 수 있는 기능을 가진 클래스들의 집합인 JAR 파일을 제공한다.

MySQL Driver for JAVA 다운로드

MySQL 에서 Driver 의 이름을, Connector/J라고 부른다.

mysql-driver-다운로드-웹화면-스크린샷
Connector/J 다운로드

우분투 버전 확인

$ lsb_release -a 또는 $ cat /etc/*release
lsb - linux standard base???

정석대로 설치해보기

우리가 필요한 파일은 mysql-connector-java-version.jar 이거 하나다.

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing.html(매뉴얼인데)

MySQL 드라이버 다운로드 받기

[👨🏼‍💻 중요]

$ wget

  • 설치하기 (경로 지정)
  • 보통 한국 블로그에서는 tomcat 폴더의 lib 폴더에 넣으라는 이야기가 많다.
  • MySQL 매뉴얼에 따르면, CLASSPATH 환경변수에 해당 jar 파일의 위치를 명시해주라고 되어있다.
  • mysql-connector-java-version.jar 파일 다운로드
  • 먼저 나는 Connector/J 메뉴에서 바로 위 스크린샷과 같이, *.deb 패키지 파일을 받을 수 있었다.

MySQL 드라이버 설치하기

dpkg 명령어로 deb 파일 실행

[👨🏼‍💻 중요]

deb 은 패키지 파일로서 설치시 설정까지 함께 진행한다.
$ dpkg -i [deb 파일 명]

리눅스-dpkg-명령어-스크린샷
dpkg 이용한 deb 파일 설치

$ dpkg -s mysql-connector-java

리눅스-dpkg-명령어-스크린샷
설치된 패키지의 정보 확인

$ dpkg -L mysql-connector-java

패키지 설치 위치 확인

패키지가 설치된 위치 확인 : /usr/share/java/
확인했더니 /usr/local/java/ 라는 폴더에 생성되었다. 이게 *.dep 파일이 원하던거다. 이 정보는 -e 옵션을 통해서 *.deb 파일을 풀어 해칠 수가 있는데, DEBIAN 이라는 폴더의 파일 내용과 동일하다. 만약 이 스크립트의 내용만을 통해서 설치된 파일과 설정을 확인할 수 있는것이라면, 현재 받은 *deb 파일에는 설정 파일이 없다.

jar 이동하기

[👨🏼‍💻 중요]

$ mv mysql-connector-java-version.jar /usr/local/java/jre/ext/
jar 파일이 설치된 위치에서 JAVA 설치시 설정했던 CLASSPATH 의 경로에 mysql-connector-java-version.jar 파일을 이동시켜준다.

MySQL 접속 JSP 파일 작성하기

[👨🏼‍💻 중요]

$ vim /local/usr/tomcat8/webapps/ROOT/test.jsp

vim 에서 다음과 같은 코드를 입력한다.
(vim 이 익숙하지 않다면, vim 에 대해서 간단히 학습하거나, 이전 ftp 글을 참고하여 test.jsp 파일을 옮기자.)

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>DB Connection Test</title>
    </head>
    <body>
           <%
              String DB_URL = "jdbc:mysql://127.0.0.1:3306/test";
              String DB_USER = "id";
              String DB_PASSWORD = "dbpw";
              Connection conn;
              Statement stmt;
              PreparedStatement ps;
              ResultSet rs;
              try {
                     Class.forName("com.mysql.jdbc.Driver");
                     conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
                     stmt = conn.createStatement();

                    /* SQL 처리 코드 추가 부분 */

                     conn.close();
                     out.println("MySQL JDBC Driver Connection Test Success!!!");
              } catch (Exception e) {
                     out.println(e.getMessage());
              }
          %>
    </body>
    </html>

브라우저로 접속 확인

[👨🏼‍💻 중요]

브라우저에서 해당 주소로 접속하였을 때 "MySQL JDBC ~~ Success" 문구가 뜨면 try 구문이 성공적으로 실행되었다는 것이므로 접속 성공이다.
위 코드의 "SQL 처리 코드 추가 부분" 주석 부분에 아래 코드를 추가하여 실제로 MySQL test DB 의 user 테이블에 저장했던 정보를 웹페이지에 표시해보자.

ps = conn.prepareStatement("SELECT * FROM user;");
rs = ps.executeQuery();

while(rs.next()){
    out.println(rs.getString(1)+"&nbsp"+rs.getString(2)+"&nbsp"+rs.getString(3)+"<br />");
}

웹페이지-디비정보-확인-스크린샷
웹페이지에 DB 에서 불러온 정보가 제대로 표시되고 있다.

완료!!!

다음 글에서는, 이클립스에서 생성한 웹 프로젝트를 linux로 옮기는 작업(배포)을 해보도록 하자.

그러나 궁금한 것들

여기까지 이번 글의 목표는 완료했다. 다만 진행 중 몇가지 궁금했던 사항들에 대해서 아래에 적어보았다.

이 글의 주요 내용

  • MySQL 서버 동작 확인
  • JAR 파일의 동작 및 참조 원리
  • 이클립스 IDE 의 역할과 기능 리눅스에서와의 비교
  • CLASSPATH 환경변수와 JAR/Connection.forName() 함수와 동적, 정적 로딩
  • Connection Pool 코드의 의미

mysql 서버 상태 확인

MySQL 서버 상태 확인

  • $ mysql status

mysql 서버는 설치함과 동시에 동작시켰다. 즉, 돌아가고 있다는 뜻이다. (위 서버 상태 확인을 통해서도 돌아가고 있음을 확인할 수 있었다.) mysql 서버의 동작 상태를 확인하고 싶었으나 다음과 같은 한계가 있었다.

먼저 코드 안에서 (Connection Pool) MySQL 에 접근할 수 있는지 확인할 수 있어야 했다. 하지만 jar 파일의 위치에 문제가 있었다. Ecplpise로 돌릴 때 GUI 환경에서는 BuildPath 를 자동으로 지정해주지만, Linux에서는 이 방식이 어떻게 작동하는지 몰랐다. 하지만, java CLASSPATH 환경변수를 추가해줄 때, $JAVA_HOME/jre/lib/ext 라고 해줬었으므로, 우리는 이 장소(path)에 *.jar 파일을 넣어주어야 한다. 추가로 이클립스의 BuildPath 는 어떤 방식으로 설정되는지 알아볼 필요가 있겠다.

MySQL 외부 접속

mysql 을 일반적으로 설치한 경우에는, mysql 설정 파일(/etc/mysql/mysql.conf.d/mysql.cnf) 에서 설정된 서버의 ip (mysql.cnf 항목의 bind-address, 기본은 127.0.0.1 로 지정되어있다.) 로 접근하거나, localhost 로 접근하여야 한다. 즉, JSP 또는 Servlet 파일(곧 자바 파일) 내부의 Connection Pool 코드 중 url 은 jdbc:mysql://localhost:3306/databaseName 이 되어야 한다. 외부접속을 허용해야 한다면 검색을 통해 참고하도록 하자.

(심화) *.jar 파일의 참조 설정

CLASSPATH 환경변수와 관련한 *.jar 파일의 명확한 위치

다음의 궁금증을 가진 사람이라면 이번 단락이 도움이 될 것이다.

  • Q1. JAVA 는 어떻게 jar 파일을 참조하는가?
  • Q2. Connection Pool 코드의 의미

JAVA가 *.jar 파일을 참조하는 방식

윈도우즈에서는 이클립스라는 IDE 를 기반으로 '프로젝트'라는 개념을 위주로 개발을 진행하기때문에, 실은 많은 부분들을 '모르더라도' 어느정도 수준의 개발이 가능하다. 하지만, 리눅스는 IDE 개념이 없다. (CUI 환경에서 현재 내가 아는 한 없다. 아시는 분 있으면 댓글로 좋은 정보 부탁드려요 ^^) IDE 는 우리도 모르게 (우렁각시처럼) 개발 환경 설정을 도와준다. 문제는 CUI 리눅스 상에서 자바를 돌려야 할 때 발생한다. 리눅스에는 IDE 가 없고, 개발 환경 설정을 우리도 모르게 도와주던 도움이 더 이상 존재하지 않는다.

Eclipse 가 JAR 를 찾아 연동하는 방식

Eclipse IDE 는어떻게 코드를 빌드하고 실행시키며 Driver 를 로드할 수 있을까?맨 처음 코드로 작성된 *.java 파일이 javac 프로그램으로 *.class 파일을 생성해준다. 이 과정이 컴파일이다. 컴파일된 *.class 파일은 java 프로그램에 의해 실행된다(ex) $ java app.jar. 이 때 실행된 프로그램은 Driver를 지정된 경로에서 찾는다. .classpath 라는 파일에 입력된 *.jar 파일을 찾고 해당 클래스를 사용할 수 있게 된다.

실은 이 과정을 이해하는데 꽤 시간이 걸렸다. 리눅스는 직관적인 프로그램 실행 방식을 가지고 있다.(오히려 그 과정 자체를 이해하는 것을 IDE 가 힘들게 하는 것일지도 모른다.) 그렇지만, GUI 환경의 IDE 는 동작 방법 자체는 직관적이더라도 해당 동작을 이해하는데 깊은 이해가 필요했다.

다음은 Eclipse 가 동작을 제어하는 전반적인 과정이다.

    1. 먼저, 프로젝트 파일의 구성이다. WorkSpace 를 생성하고 프로젝트를 생성한 후 해당 프로젝트의 내부 모습이다. 즉 /workspace/project/ 의 모습을 보고 있다.
      • srcjava 코드가 저장된 폴더이다.
      • build 는 컴파일 된 class 파일이 저장된 폴더이다.
        폴더-구조-스크린샷
        프로젝트 폴더 구성
    2. .settings 폴더의 모습은 다음과 같다.
      • 아마 이 파일들은 이클립스에게 중요한 파일이라고 생각한다. 이클립스라는 IDE 프로그램이 java 와 javac 라는 프로그램을 제어하기 위한 각종 설정들인 것 같다.
        . setting-폴더-내부-스크린샷
        .setting 폴더 내부
      • .settings/org.eclipse.wst.common.component 파일을 살펴보자.
        무슨 뜻인지 확실히 이해하기 힘들지만, 현재 프로젝트의 경로와 관련되어 있음을 알 수 있다. 이클립스는, java 와 javac 를 실행시킬 때 이 경로들을 활용할 것이다. 아마도.
        설정-관련-xml-파일-일부-스크린샷
        org.eclipse.wst.common.component
    3. .classpath 파일의 내용은 다음과 같다.

설정-관련-xml-파일-일부-스크린샷
. classpath 파일 내용

    1. 이 상황에서 이클립스의 프로젝트상의 Build Path 를 추가해주게 되면, .classpath 의 파일 내용이 달라지게 된다. 바탕화면에 test.jar 파일을 만들고 Build Path에 추가(Add External JARs)해보았다.
      설정-관련-xml-파일-일부-스크린샷

jar-파일-생성-위치-확인-스크린샷
testjar.jar 가 지정한 path 에 생성된 모습

위의 GUI 환경(Eclipse)에서의 Build Path 설정이 .classPath 에 영향을 준다는 것을 확인할 수 있다.

느낀점 : 자바를 처음 배우면 java 와 javac 의 차이에 대해 먼저 배운다. 또 jre 와 jdk 의 차이점에 대해서도 배운다. 어렴풋이기는 하지만, 왜 그러한 내용을 먼저 배우는지, 알 수 있는 부분이었다.

아무튼 난 지금 산으로 갔다.

Connection Pool 해석해보기

일명 "Connection Pool"이라고 불리는 DB 접근 코드가 있다. 각 코드의 의미가 무엇일까?

stack over flow 의 이 질문에 대한 답
동적 정적에 대한 급한 불 끄기식 이해

데이터베이스-커넥션풀-설정-정보-스크린샷
Connection Pool

  • Class.forName("com.mysql.jdbc.Driver")
    (길다... 과감히 건너 뛸 용기도 필요하다고 본다.)
    심지어 이 방법은 옛날 방법이란다. 링크 참고
      • 일단 이 메소드는 괄호 안의 클래스 파일을 찾아 '동적으로' 로딩한다. 넘겨짚건데, 동적으로 로딩을 하게 되면, 메모리가 절약되기 때문에 이 방식을 사용하는 것 같다. 즉, DB 접근시에만 메모리에 해당 클래스를 로딩한다고 생각된다.
      • java 는 classpath 에 지정된 경로를 돌며 위 패키지에 해당하는 Driver 를 찾을 것이다. 때문에, 찾는 jar 파일이 없다면(또는, classpath 에 지정되지 않은 위치에 *jar 가 있다면) 클래스를 찾을 수 없다. 아래는 확장 프로그램(Ecplipse Archaive Utility)을 이용하여 mysql connector jar 파일을 펼쳐본 것이다.(zip 풀 수 있는 프로그램을 이용할 수도 있다.)
    폴더-구조-스크린샷-class-파일과-meta-파일
    "com.mysql.jdbc.Driver"가 무엇인지, 어디있었는지 확인할 수 있다.
  • DriverManager.getConnection(url,dbid,dbpw)
    • 인자로 전달된 url (매개변수_parameter와 인자_argument의 차이) 에 접속하여, dbid와 dbpw 로 접속을 시도한다.
    • 해당 접속 결과가 conn 이라고 정의한 Connection type 의 변수에 담겨진다.
    • localhost 는 루프백 호스트명이다. 이는 서버에서 자기 자신에게 접근하고자 하는 경우 사용한다. MySQL 은 기본적으로 루프백 호스트명으로만 접근할 수 있도록 설정되어있다.

dpkg 추가 기능과 deb 파일 살펴보기

$ dpkg -e [파일명]
내부 제어 스크립트 파일 풀기(DEBIAN 폴더 생성)

$ dpkg -x [파일명] [위치]
설치 파일 직접 풀기
지정한 위치의 /usr/share/mysql 관련 jar 파일이 있음을 확인할 수 있다.

그렇다면 궁금증이 생긴다. MySQL 사이트의 "Platform Independent" 파일은 어떤 파일들을 갖고 있을까?"
마찬가지로 다른 플랫폼에서 추가적으로 써야하는(?) jar 파일과 함께 동일하게 mysql-connector-java-8.0.11.jar 파일을 갖고 있음을 확인할 수 있다. 결론은 중요한건 mysql-connector-java-version.jar 파일임이 명확해졌다. 우분투 전용 파일은 1.9M, 플랫폼 인디펜던트는 약 5M. 당연히 플랫폼 인디팬던트는 많은 플랫폼을 지원해야하다보니 용량이 크다는 것을 확인 가능하다.

jar 파일을 /java/bin 과 /java/jre/bin 에 복사한다?

이는 잘못된(경우에 따라 되기도 안되기도 하는) 방법이었다. 만약 이렇게 한다면, 해당 폴더에 대한 CLASSPATH 를 또 추가해주어야 했다. 아래 또 설명하겠지만, 우리는 이미 /etc/profile 파일에서 환경변수를 설정했었다. 즉, jar 파일은 그냥 블로그에 나와있는대로 넣으라고 넣는게 아니라, 우리가 JAVA 설치시 환경변수로 설정해준 CLASSPATH가 가리키는 곳에 *.jar 파일을 넣어주어야 한다.

보통 블로그에서는 어떤 디렉토리에 넣으라고만 되어있는데 중요한건 아랫줄처럼 표현해줘야 한다.
!!중요!! Connector JAR 파일은 환경변수로 설정해준 CLASSPATH 가 가리키는 디렉토리에 넣어주어야 한다!

java-환경변수-설정-스크린샷
환경변수 설정 부분

환경변수 설정을 저렇게 해야한다는 것을 알려줄 게 아니라, CLASSPATH 라는 변수가 어떻게 쓰이는지를 알려줘야 한다고 생각한다. 애초에 CLASSPATH 라는 개념에 대해 명확히 이해하는 것이 중요하겠다.

$ javap com.mysql.jdbc.Driver
Driver 클래스가 실제로 동작할 수 있는 상태인지 경로를 확인하는 과정이다.

리눅스-명령어-실행-결과-스크린샷
driver 클래스가 정상동작하는지 확인하는 모습

jar 파일을 /tomcat8/lib/ 에 복사하라고 하는데, 이는 어떻게 작동할지 궁금하다.

  • $ javap 명령어로는 확인되지 않을 것 같다.
  • 예상대로는, 안될 것 같다. 우리가 지정해준 환경변수(CLASSPATH)에 /tomcat8/lib 는 없기 때문이다.
  • 만약 된다면, CATALINA_HOME 이라는 환경변수 아래의 lib 이라는 폴더를 내부적으로 지정하고 있을 것이다.
    (tomcat8 파일에서 거드는게 있을까? 된다면, 외부 jar 까지 tomcat에서 관리해준다는 뜻이 된다.)
반응형

Designed by JB FACTORY