서버 구동시 DataBase DataSource정보가 필요한
Spring Boot의 특성을 고려하여
새프로젝트를 생성하기전에 DataBase를 먼저 준비하겠습니다
MariaDB를 사용할것이므로 아래 링크에서 설치파일을 받아 설치를 진행합시다
https://downloads.mariadb.org/mariadb/10.2.31/
설치시 기재하는 포트정보는 이후에 필요할 수 있으므로 기억해둡시다
이는 모든 DB에 해당합니다
MariaDB에 접근 할때는
바탕화면에 바로가기 아이콘이 없을 시
작업표시줄에 위치한 검색 탭에서 HeidiSQL을 검색하여, 찾아 실행합시다 (윈도10에 해당)
정상적으로 실행되면 다음과 같은 화면을 확인 할 수 있습니다
사실 MariaDB의 경우 포트를 쉽게 변경할 수도 있습니다
이제 gradle 기반으로 Spring Boot 프로젝트를 생성해보도록 해보겠습니다
Spring Boot의 특징 중 하나는
프로젝트를 생성할때 의존성을 미리 설정해줄 수 있습니다
여기선 MariaDB 의존성 설정이 없기 때문에
테스트를 위해 우선 MySQL 그리고 JPA 의존성을 추가해줬습니다
프로젝트 생성이 완료되면
다음과 같은 구성을 확인 할 수 있습니다
~Application.java 우클릭 Spring Boot App을 선택하여
서버도 실행해보겠습니다
보시는 바와 같이 에러가 발생합니다. 에러의 원인은
맨 하단에 embedded(내장된) database 설정을 해줘야한다
고 나오네요
그래서 프로젝트를 다시 생성하겠습니다
이 후 DB 설정도 하겠습니다
프로젝트 생성 후 우선
gradle 프로젝트 build 파일에 JPA와 MariaDB 의존성을 추가 하겠습니다
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
plugins {
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mariadb.jdbc:mariadb-java-client:2.1.2'
testImplementation 'junit:junit:4.12'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
|
그리고 DB연동에 필요한 Data Source 정보를
yml이나 properties 파일에 기재합니다
참고로 yml과 properties의 작성 방법(문법)은 다릅니다
application.yml
이 다음에는 JPA Interface를 implements하는 Repository를 꼭 생성해주어야 합니다
Repository가 사용할 DTO도 필요할 것입니다
CustomerRepository.java (Repository Class 입니다)
1
2
3
4
5
6
7
8
|
package com.example.demo;
public interface CustomerRepository extends CrudRepository<Customer, Long>{
}
|
Customer.java (DTO로 사용할 Class입니다)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package com.example.demo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Customer")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "firstName")
private String firstName;
@Column(name = "lastName")
private String lastName;
protected Customer() {}
public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return String.format(
"Customer[id=%d, firstName='%s', lastName='%s']",
id, firstName, lastName);
}
public Long getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
|
여기까지 하셨다면 JPA Hibernate를 사용할 준비가 되셨습니다
그러면 우리가 구현한 소스들이 서로 연동이 잘되는지
JUnit으로 테스트를 진행해보겠습니다
@Test 소스를 작성하고
~ApplicationTests.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package com.example.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Optional;
import javax.annotation.PostConstruct;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(locations = "classpath:application.properties")
class Example2ApplicationTests {
@Value("${spring.datasource.url}")
private String URL;
@Value("${spring.datasource.driver-class-name}")
private String DRIVERNAME;
@Value("${spring.datasource.username}")
private String USERNAME;
@Value("${spring.datasource.password}")
private String PASSWORD;
@Test
void connTest() throws SQLException, ClassNotFoundException {
Class.forName(DRIVERNAME);
try(Connection conn =
DriverManager.getConnection(URL, USERNAME, PASSWORD)) {
System.out.println("connTest: "+conn);
} catch(Exception e) {
e.printStackTrace();
}
}
@Autowired
CustomerRepository customerRepository;
@PostConstruct
public void init() {
}
@Test
void queryTest() throws SQLException, ClassNotFoundException {
Optional<Customer> result=customerRepository.findById(1L);
System.out.println("queryTest: "+result);
}
}
|
다음과 같이 JUnit을 실행합니다
여기까지 잘 따라오셨다면 다음과 같은 결과를 확인 할 수 있을 것입니다
2탄에서는 컨트롤러와 View를 연결하는 시간을 갖도록 하겠습니다
그럼 이만
'웹개발 > server-side' 카테고리의 다른 글
3탄) spring boot gradle project + JPA Hibernate + MariaDB + React.js 프로젝트 (0) | 2020.03.06 |
---|---|
2탄) spring boot gradle project + JPA Hibernate + MariaDB + React.js 프로젝트 (0) | 2020.03.06 |
5탄) 전자정부프레임워크 + spring legacy MVC + Oracle 프로젝트 (0) | 2020.02.28 |
4탄) 전자정부프레임워크 + spring legacy MVC + Oracle 프로젝트 (0) | 2020.02.24 |
3탄) 전자정부프레임워크 + spring legacy MVC + Oracle 프로젝트 (0) | 2020.02.19 |