Spring DI, AOP

12. Spring으로 DB연결하기 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 26. 12:44

1. DBConnectionTest1

public class DBConnectionTest {
    public static void main(String[] args) throws Exception {
        // 스키마의 이름(springbasic)이 다른 경우 알맞게 변경해야 함
        String DB_URL = "jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=utf8";

        // DB의 userid와 pwd를 알맞게 변경해야 함
        String DB_USER = "root";
        String DB_PASSWORD = "4862";

        Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // 데이터베이스의 연결을 얻는다.
        Statement stmt  = conn.createStatement(); // Statement를 생성한다.

        String query = "SELECT now()"; // 시스템의 현재 날짜시간을 출력하는 쿼리(query)
        ResultSet rs = stmt.executeQuery(query); // query를 실행한 결과를 rs에 담는다.

        // 실행결과가 담긴 rs에서 한 줄씩 읽어서 출력
        while (rs.next()) {
            String curDate = rs.getString(1);  // 읽어온 행의 첫번째 컬럼의 값을 String으로 읽어서 curDate에 저장
            System.out.println(curDate);       // 2022-01-11 13:53:00.0
        }
    } // main()
}
  • No suitable driver found 에러가 나올때... JDBC Driver가 필요

  • 가장 최신버전을 받아주었다.
  • pom.xml에 넣고 리로드 해주면...

 

  • ResultSet은 2차원 형태로 테이블을 가져온다.
  • JDBC API : Java DB Connection(연결) -> Spring JDBC

  • pom.xml에 추가해주고, 스프링 버전과 일치하게 맞춰준다
public class DBConnectionTest2 {
        @Test
        public void jdbcConnectionTest() throws Exception {
//        // 스키마의 이름(springbasic)이 다른 경우 알맞게 변경
//        String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8";
//
//        // DB의 userid와 pwd를 알맞게 변경
//        String DB_USER = "asdf";
//        String DB_PASSWORD = "1234";
//        String DB_DRIVER = "com.mysql.jdbc.Driver";
//
//        DriverManagerDataSource ds = new DriverManagerDataSource();
//        ds.setDriverClassName(DB_DRIVER);
//        ds.setUrl(DB_URL);
//        ds.setUsername(DB_USER);
//        ds.setPassword(DB_PASSWORD);

            ApplicationContext ac = new GenericXmlApplicationContext("file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
            DataSource ds = ac.getBean(DataSource.class);

            Connection conn = ds.getConnection(); // 데이터베이스의 연결을 얻는다.

            System.out.println("conn = " + conn);
            assertTrue(conn != null);
        }
}
  • @Test 애너테이션이 안된다면... Junit을 받아주자
  • root-context.xml에 코드를 추가
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- Root Context: defines shared resources visible to all other web components -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/springbasic?useUnicode=true&amp;characterEncoding=utf8"></property>
		<property name="username" value="asdf"></property>
		<property name="password" value="1234"></property>
	</bean>
</beans>
  • url과 username, password를 잘 바꿔주면...

  • Test 성공 이라고 나온다 위에 빨간 글씨는 jdbc.Driver가 deprecated 되었음을 알려주는거라 신경쓰지말자
  • assertTrue : 괄호 안의 조건식이 ture면, 테스트 성공, 아니면 실패
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/root-context.xml"})
public class DBConnectionTest3 {

    @Autowired
    DataSource ds;

    @Test
    public void jdbcConnectionTest() throws Exception {

        Connection conn = ds.getConnection(); // 데이터베이스의 연결을 얻는다.

        System.out.println("conn = " + conn);
        assertTrue(conn!=null);
    }
}
  • 빨간 줄이 나와서 안나오게 고치려고 했으나 오히려 빨간줄일때 컴파일이 성공했다...

  • @Test가 안된다면 pom.xml에서 <scope>test</scope>를 삭제해보자
  • 파일경로와 @Autowired는 빨간줄이 나와도 당황하지 말자...

  • Test 성공이라고 나온다.
  • SpringJUnit4ClassRunner.class가 자동으로 ApplicationContext를 만들어준다.
  • 메서드 내에서 반복적으로 AC를 생성하는 것보다 성능향상이된다.
  • JUnit 버젼은 4.12 이상이어야한다.
  • 데이터베이스 연결성공, 인텔리제이가 제공하는 데이터베이스 연결기능을 사용해보자

  • 인텔리제이 오른쪽에 DB를 선택

  • 아이디와 비밀번호를 넣어주고

  • Download missing driver files가 나오는데 Download를 눌러주면된다.

  • Test Connetion까지 마치면 OK

  • Schema를 생성하고  Table을 생성해주었다.
use spring;

create table user_Info(
  id VARCHAR(30) primary key,
  pwd VARCHAR(50),
    name VARCHAR(30),
    email VARCHAR(30),
    birth DATE,
    sns VARCHAR(30),
    reg_date datetime
);
  • 만들어진 테이블을 보면...
select * from user_Info;

  • insert가 없어서 아무것도 없는 모습

  • 트렌잭션이 Auto로 되어있는데 쿼리문을 실행할때마다 자동으로 commit이 된다.

  • Manual로 바꿔주면 커밋버튼과 롤백버튼이 생긴다.

  • Query Console을 누르면 SQL콘솔창이 열린다.

  • *에 마우스를 가져가보면 노란 전구가 나오는데 저기서 Expand column list를 눌러주면...

  • user_Info에 집어넣은 컬럼들이 자동으로 나온다.

  • Insert문 자동 생성

insert into user_info (id, pwd, name, email, birth, sns, reg_date)
values ('asdf2', '1234', 'smith', 'aaa@aaa.com', '2021-01-01', 'facebook', now());
  • insert를 해주면...

  • 데이터베이스에 저장이된 모습