본문 바로가기
백엔드(Back-End)/Spring Boot

[sts4-Spring Boot] 02. Java and Spring Project - STS에서 db연동하기

by 기딩 2023. 11. 9.
728x90

sts (spring tool suite4)를 사용하여 mysql 데이터베이스를 연동해보자

이를 위해 먼저 프로젝트를 생성한다.

 

new 프로젝트 생성

 

게시판 만들 거라서 이름 board로 설정

type은 라이브러리 관리해줌. 각 문법이 다름

원래는 편해서 Maven을 많이 사용했는데 버전 다를 때 원활하지 않음

그래서 나온 게 Gradle(나온지 3년?)

자바는 Groovy스타일이 더 맞음

 

(Lombok은 지금 안 쓰긴 함)

 

next > Finish

 


프로젝트를 생성했으면 각 폴더 및 파일에 대해 알아보자

 

1.  src/main/java directory

기존 spring legacy(일반적인 스프링 프레임워크 프로젝트)와 마찬가지로 자바 파일이 위치하는 디렉토리

- BoardApplication 클래스

 

main() 메서드 : SpringApplication.run()을 호출

-> 웹 어플리케이션 실행 역할

 

@SpringBootApplication

- @EnableAutoConfiguration : 다양한 설정들을 자동으로 완료

- @ComponentScan : 의존성 주입 과정을 간편화

- @Configuration : XML기반의 설정을 자바 기반의 설정 파일로 인식

의존성 주입
: 클래스간 의존성을 클래스 외부에서 주입하는 것

이게 없으면 돌아가지 않어서 건드릴 일 없다.

 

2. src/main/resources directory

- templates :  화면 관련 파일 관리

- static : 정적 리소스 파일 위치

 

- application.properties : 웹 어플리케이션 실행하면서 자동으로 파일 로딩

ex) WAS 설정,  DB 정보 등

 데이터베이스 세팅하는 곳

 

데이터베이스 연결을 위해 properties를 설정한다.

username과 password는 사용자에 맞게 입력

 

 

3. src/test/java directory

- BoardApplicationTests class

spring에선 없었는데 생김

단위 테스트 제공

단위 테스트 : 전체가 아닌 기능 하나하나 잘 돌아가는지 확인, db와 잘 연동되는지

 

나중에 다음과 같이 작성하여 test Sources를 실행할 예정

package com.board;

import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;

@SpringBootTest
class BoardApplicationTests {
	
	@Autowired
	private ApplicationContext context;
	
	@Autowired
	private SqlSessionFactory sessionFactory;

	@Test
	void contextLoads() {
	}
	
	@Test
	public void testByApplicationContext() {
		try {
			System.out.println("=======================");
			System.out.println(context.getBean("sqlSessionFactory"));
			System.out.println("=======================");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testBySqlSessionFactory() {
		try {
			System.out.println("=======================");
			System.out.println(sessionFactory.toString());
			System.out.println("=======================");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

4. build.gradle

라이브러리 버전 문제 

충돌 문제

종속적인 문제

maven -> gradle

help에서 선택했던 것 코드로 확인 가능

 

 

프로젝트 구조

MVC pattern

M (JavaBean) : 비즈니스 로직 처리

V (JSP) : HTML과 타임리프 이용해서 화면 처리

C (서블릿) : 데이터 제어

 

 


이제 DBConfiguration 클래스 생성하자

src/main.java 디렉토리의 com.board 패키지에 configuration 패키지를 생성한다.

그 안에 DBConfiguratoin  클래스를 생성한다.

클래스에 다음과 같이 코드 작성

package com.board.configuration;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@PropertySource("classpath:/application.properties")
public class DBConfiguration {
	
	@Autowired
	private ApplicationContext applicationContext;
	
	@Bean
	@ConfigurationProperties(prefix="spring.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}
	
	@Bean
	public DataSource dataSource() {
		return new HikariDataSource(hikariConfig());
	}

	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception{
		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
		factoryBean.setDataSource(dataSource());
		factoryBean.getObject();
//		factoryBean.setMapperLocations(applicationContext.getResources("classpath:/mappers/***Mapper.xml"));
		return factoryBean.getObject();

	}
	
	@Bean
	public SqlSessionTemplate sqlSession() throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory());
	}
}

 

그럼 코드 작성은 모두 끝났고,

아까 위의 BoardApplicationTests.java에 적은 test source를 실행해보자.

 

다음과 같이 해당 메서드를 더블클릭하여 파란 블럭으로 선택되게 하기 > 마우스 오른쪽 키 > Run as > Junit Test

 

그럼 다음과 같이 확인된다.

이와 같이 안 나오고 에러 문구가 떴다면 다른 코드에 오타가 있거나 무언가 잘못된 거니 에러 내용을 잘 읽고 고치도록 하자.

 

바로 위의 testByApplicationContext() 메서드도 똑같이 잘 확인될 것이다.

728x90