MySQL과 JDBC연결하기

dev.teon·2023년 4월 19일
0

목표
1. MySQL과 eclipse의 JDBC 연결하기(Pooling 방법)
2. 한명의 IP주소로 여러 사용자가 DB이용할 수 있게 하기

MySQL에서 해야 할일

MySQL의 외부 IP 접속 허용하기

한 사람의 MySQL DB를 여러 사람이 접속하여 사용할 수 있도록 하기 위해
모든 호스트를 허용하는 user를 생성하고
그 user에게 어떤 DB를 사용하게 할지 권한을 부여해야 한다.

  1. MySQL의 Command Line Client에서 아래 명령어를 입력하면
    mysql> select host, user from user;

    itemfarm의 host가 local만 가능함을 볼 수 있다.

  2. 아래 명령어를 통해 모든 host에 접속할 수 있는 itemfarm 계정을 생성해준다.
    create user itemfarm@'%' identified by '비번';
    ('%' 기호가 모든 외부 IP 접근이 가능하다는 뜻)
    ❗syntax 에러가 많이 났는데 대부분 작은따옴표를 붙였는지 아니였는지 문제였다.

  3. 다시 user table를 조회해보면
    select host, user from user;

    모든 호스트가 접근할 수 있는 itemfarm user가 새로 생김을 볼 수 있다.

  4. 아래 명령어를 통해 itemfarm user가 itemfarm 아래 모든 테이블에 접속할 수 있도록 권한을 부여한다.
    grant all privileges on itemfarm.* to itemfarm@'%';

  5. 위에서 생성한 계정으로 connection을 만들어 접속후 지정한 hostname을 이용해 JDBC에 연결하도록 한다.

아파치와 MySQL

우리의 프로젝트는 아파치 서버를 사용하고 있다.
(아파치에서 Connection Pool 방법으로 연결하는 방법 안내 사이트 바로가기)
Connection Pool 방법으로 데이터베이스를 이용하기 위해

  1. MySQL 연결 라이브러리를 다운 받고
  2. Apache Commons DBCP 또한 다운 받아야 한다.
    다운 받는 사이트 바로가기
  3. 모두 web-inf의 lib폴더 안에 넣어준다.
  4. java 프로젝트에서 사용하는 아파치 서버 폴더 밑의 context.xml를 수정해준다.
    파란색 부분은 connction에서 지정한 IP 주소와 같다.

java-web 프로젝트 설정

  1. WEB-INF 폴더 밑의 web.xml 안에 아래와 같이 수정한다.
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/itemfarm</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
  1. MySQL과 JDBC를 연결하는 파일을 따로 생성해주어 연결한다.
public class MysqlUtil {
	
	//MySQL과 JDBC연결
	public static Connection getConnection() {
		Connection conn = null;
		Context initContext;
		try {
			initContext = new InitialContext();
			Context envContext  = (Context)initContext.lookup("java:/comp/env");
			DataSource ds = (DataSource)envContext.lookup("jdbc/itemfarm");
			conn = ds.getConnection();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
	}
	
	
	//자원반납
		public static void dbDisconnect(ResultSet rs, Statement st, Connection conn) {
			try {
				if(rs!=null) rs.close();
				if(st!=null) st.close();
				if(conn!=null) conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
}

※참고 사이트

MySQL의 외부 IP 접속 허용하기: https://developer-joe.tistory.com/166
PHP8 이후로 바뀐 권한 허용 SQL문1 : https://dzzienki.tistory.com/22
PHP8 이후로 바뀐 권한 허용 SQL 2: https://javagwanjin.tistory.com/entry/MYSQL-%EC%9C%A0%EC%A0%80%EB%A7%8C%EB%93%A4%EA%B8%B0
아파치와 MySQL 다운 참고 사이트 : https://ondolroom.tistory.com/498

0개의 댓글