백엔드(Back-End)/Spring Boot

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

기딩 2023. 11. 9. 10:54
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