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() 메서드도 똑같이 잘 확인될 것이다.
'백엔드(Back-End) > Spring Boot' 카테고리의 다른 글
[sts4-Spring Boot] 04. CRUD Test 작성 (0) | 2023.11.28 |
---|---|
[sts4-Spring Boot] 03. 데이터베이스 CRUD (0) | 2023.11.28 |
[스프링부트] main 실행하기 (1) | 2023.11.26 |
[스프링부트] 프로젝트 생성 옵션 spring initializr (1) | 2023.11.26 |
[sts4-Spring Boot] 01. OOP and Spring Framework (0) | 2023.11.09 |