Spring MVC, DB 연결하기

2021. 4. 18. 20:41Spring

반응형

안녕하세요 ~.~ 

요즘은 Spring을 다시 잡고 있어서  스프링 시리즈를 기획하고 있어요.

 

2부에서는 lombok과 JDBC를 연결하는 과정에 대해서 다뤄볼 예정입니다.

 

 

****************  INDEX  *****************

1 부

🌱 Spring Project

 

2부

🤖 JDBC

🌷 Oracle 11g

🐬 MySQL

 

******************************************** 

 

 


🕶  개발 환경

운영체제 - macOS Big Sur (version 11.2.3) 

IDE - IntelliJ (Eclipse와는 생성되는 프로젝트 구조가 다릅니다)

Server - Apache Tomcat

JDK - 1.8

 

 

🎲 JDBC

JDBC는 Java Database Connectivity의 약자로, 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다.

JDBC를 통해 데이터베이스에 접속하여 데이터들을 다룰 수 있게 되죠.

 

사용하는 코드는 복잡하지 않아요.

코드 예시를 가져와 봤는데요, 아래와 같이 작성하면 연결할 수 있습니다.

 

try (Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword" ) ) {
     /* you use the connection here */
} 

 

만약, 오라클 DB에 연결한다고 하면 아래와 같은 방식입니다.

 

try(Connection conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@localhost:1521:XE", 
    "system", 
    "oracle")) {
    /* you use the connection here */
} catch (Exception e) {
	fail(e.getMessage());
}

 

저는 oracle database 11g를 사용했는데요.

11g가 macOS 지원을 안해줘서 Docker로 설치해줘야 합니다.

 

11g 설치 방법은 검색하시면 많이 나오는데, 기록을 위해 간단하게 적어두겠습니다.

 

$ docker pull jaspeen/oracle-xe-11g
$ docker run -d -p 8080:8080 -p 1521:1521 jaspeen/oracle-xe-11g

 

 

docker에서 oracle-xe-11g의 이미지를 pull 받고,

받아온 이미지를  컨테이너로 실행하는 명령어입니다.

 

11g를 테스트 할 때에는 sqlplus를 입력해서 연결해야하는데,

docker로 설치했다면 terminal에서 exec 명령어를 사용하면 됩니다.

$ docker exec -it oracle11g-test sqlplus

 

이제 1부에서 만들었던 프로젝트에 데이터베이스를 연결하는 작업을 해보도록 할게요.

 

 

 

 

🌷 Oracle 11g

Ojdbc 설치

먼저, jdbc을 사용하기 위해 Oracle에서 제공하는 jdbc driver인 ojdbc를 다운받겠습니다.

저는 version 8 을 사용했습니다. 

설치는 해당 링크에서 하실 수 있습니다.

 

 

위의 jar파일을 설치해주세요.

 

 

 

Jdbc 등록

이번엔 스프링 프로젝트에 방금 받은 jdbc driver을 추가해줄거에요.

File > Project Structure ...  (단축키 : ⌘ ; )

 


창이 떴으면 Libraries > + > Java 를 선택해주세요.

 

 

 

 

방금 다운받은 odbc jar 파일을 선택하고

Choose Modules가 나온다면 생성한 프로젝트를 선택 후 OK > Apply 해주세요!

 

 

 

 

위와 같이 추가가된 것을 확인할 수 있는데요.

아직 끝나지 않았어요. 이번에는 Artifacts 탭으로 이동하겠습니다 ~ 

 

 

 

Available Elements에 ojdbc 8가 추가된 것을 볼 수 있어요.

두번 클릭을 하거나 우클릭 > Put into /WEB-INF/lib 을 선택해주세요.

했다면 Apply 후 창을 닫아주세요.

 

 

TEST CODE

자, 이제 연결이 잘되나 테스트 코드를 작성해보도록 할게요.

 

 

 

1부에서 생성한 프로젝트 구조입니다. 

src/test/java 에 테스트 코드를 작성해보도록 하겠습니다.

이곳에 JDBCTest.java class 파일을 생성해주세요.

 

import lombok.extern.log4j.Log4j;
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;

import static org.junit.Assert.fail;

@Log4j
public class JDBCTest {
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void connection() {
        try(Connection conn = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:XE", "system", "oracle")) {
            log.info(conn);
            log.info("DB 연결 성공");
        } catch (Exception e) {
            fail(e.getMessage());
            log.info("DB 연결 실패");
        }
    }
}

 

getConnection 내의 두 번째 인자는 사용자고, 세 번째 인자는 사용자에 해당하는 비밀번호에요.

위의 설정은 특별한 설정을 하지 않았다면 default 값입니다.

 

 

자 이제, 잘 동작이 되는지 테스트해볼게요.

 

 

JDBCTest 파일을 우클릭 > Run 'JDBCTest' (단축키 : ⌃⇧R) 를 선택해주세요.

 

 

 

성공적인 실행화면을 확인할 수 있어요.

만약 오류가 난다면 11g가 잘 실행되고 있는지, Library와 Artifacts를 설정할 때 Apply를 잘 눌렀는지 과정을 다시 한 번씩 되짚어보면 좋겠죠.

 

 

 

 

 

 

🐬  MySQL

 

MySQL Connector 설치

이번에는 같은 방식으로 MySQL을 연결해보도록 할게요.
먼저 ojdbc와 같이 connector가 필요한데요.

 

MySQL 페이지에서 다운 받으실 수 있습니다.

os에 맞게 설치하시면 되는데요. 

macOS라면 Platform Independent에서 둘 중 아무거나 설치하시고 압축을 풀어주세요.

 

 

 

 

Jdbc 등록

이 섹션은 오라클과 동일합니다.

 

스프링 프로젝트에 방금 받은 MySQL Connector를 추가해줄거에요.

File > Project Structure ...  (단축키 : ⌘ ; )

 

 


창이 떴으면 Libraries > + > Java 를 선택해주세요.

 

 

방금 다운받은 MySQL Connctor 폴더 내의 jar 파일을 선택하고

Choose Modules가 나온다면 생성한 프로젝트를 선택OK > Apply 해주세요!

 

 

 

 

위와 같이 추가가된 것을 확인할 수 있는데요.

아직 끝나지 않았어요. 이번에는 Artifacts 탭으로 이동하겠습니다 ~ 

 

 

Available Elements에 mysql-connector-java 가 추가된 것을 볼 수 있어요.

두번 클릭을 하거나 우클릭 > Put into /WEB-INF/lib 을 선택해주세요.

했다면 Apply 후 창을 닫아주세요.

 

 

TEST CODE

자, 이제 연결이 잘되나 테스트 코드를 작성해보도록 할게요.

 

 

 

1부에서 생성한 프로젝트 구조입니다. 

src/test/java 에 테스트 코드를 작성해보도록 하겠습니다.

이곳에 JDBCTest.java class 파일을 생성해주세요.  (oracle 테스트를 했다면 파일을 수정해주세요.)

 

import lombok.extern.log4j.Log4j;
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;

import static org.junit.Assert.fail;

@Log4j
public class JDBCTest {
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void connection() {
        try(Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC", "root", "mysql password")) {
            log.info(conn);
            log.info("DB 연결 성공");
        } catch (Exception e) {
            fail(e.getMessage());
            log.info("DB 연결 실");
        }
    }
}

 

getConnection 내의 두 번째 인자는 사용자고, 세 번째 인자는 사용자에 해당하는 비밀번호예요.

첫 번째 인자의 test 데이터베이스 이름이니, 존재하는 데이터베이스 이름을 적어주세요.

 

 

여기서 characterEncoding=UTF-8&serverTimezone=UTC 이 부분은 왜 하는지 궁금하시죠?

안적으면

java.lang.AssertionError:The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize ti

me zone support.

위와 같은 오류가 뜨거든요 ,,ㅎㅎ

 

 

자 이제, 잘 동작이 되는지 테스트해볼게요.

 

 

JDBCTest 파일을 우클릭 > Run 'JDBCTest' (단축키 : ⌃⇧R) 를 선택해주세요.

 

 

 

성공적인 실행화면을 확인할 수 있어요.

만약 오류가 난다면 MySQL가 실행되고는 있는지, Library와 Artifacts를 설정할 때 Apply를 잘 눌렀는지 과정을 다시 한 번씩 되짚어보면 좋겠죠.

 

 

 

 

자 그럼 Spring Project 생성 포스팅은 이것으로 마치겠습니다.

오탈자나 잘못된 부분은 댓글을 통해 남겨주시면 감사하겠습니다!

다음에는 Spring MVC사용법에 대해 적어보려고 합니다 ~.~

반응형

'Spring' 카테고리의 다른 글

@ExceptionHandler, @ControllerAdvice  (3) 2022.03.08
Spring Exception, 제대로 처리하기  (0) 2022.03.06
Spring, 3-Tier-Architecture  (0) 2021.05.06
Spring MVC, 동작 원리  (4) 2021.05.02
Spring MVC, 어렵지 않게 만들기  (0) 2021.04.09

Backend Software Engineer

Gyeongsun Park