서버 구동시 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 {
    
    
    testImplementation 'junit:junit:4.12'
    
    }
}
 
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
 
 
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
 
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
 
@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
 
 
import javax.annotation.PostConstruct;
 
@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(locations = "classpath:application.properties")
class Example2ApplicationTests {
    @Value("${spring.datasource.url}")
    private String URL;
    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() {
        customerRepository.save(new Customer("Jack""Bauer"));
        customerRepository.save(new Customer("Chloe""O'Brian"));
        customerRepository.save(new Customer("Kim""Bauer"));
        customerRepository.save(new Customer("David""Palmer"));
        customerRepository.save(new Customer("Michelle""Dessler"));
    }
    
    @Test
    void queryTest() throws SQLException, ClassNotFoundException {
        Optional<Customer> result=customerRepository.findById(1L);
        System.out.println("queryTest: "+result);
    }
}
 
 

 

다음과 같이 JUnit을 실행합니다

 

여기까지 잘 따라오셨다면 다음과 같은 결과를 확인 할 수 있을 것입니다

 

2탄에서는 컨트롤러와 View를 연결하는 시간을 갖도록 하겠습니다

그럼 이만

+ Recent posts