10. SpringBoot Backend 서버 구축

SpringBoot Mariadb 설정

spring boot 에 mariadb(mysql) 연결하는 방법에 대해서 알아보겠습니다.

1. mariadb user 생성

전 사용하는 pc가 mac 이라 mac 에 설치를 진행했고 자세한 설치 방법은 아래 url을 참고하세요

/setup/mariadb/z101-install_mac_mariadb.html

2. 법정코드 테이블 생성

아래 sql 문장을 실행하여 테이블을 생성합니다. 아래 테이블은 /spring/springboot/z101-freemarker.html
에서 사용한 테이블 입니다. 이를 동일하게 mariadb에서 생성해 보겠습니다.

1
2
3
4
5
6
7
8
9
CREATE TABLE HCODE (
id INT PRIMARY KEY AUTO_INCREMENT,
LCODE VARCHAR(2),
LNAME VARCHAR(255),
MCODE VARCHAR(5),
MNAME VARCHAR(255),
SCODE VARCHAR(7) NOT NULL,
SNAME VARCHAR(255)
);

아래 파일을 다운로드 받아 insert 문장을 실행합니다.

inser sql

3. spring start 에서 프로젝트 구조 잡기

아래 url 을 클릭하여 spring 프로젝트 구조를 잡고 파일을 다운로드 한후
적당한 위치에 압축을 풀어 주세요

spring start

완성된 폴더 및 파일 구조는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pom.xml
src
└── main
├── java
│ └── com
│ └── io.github.goodsaem.mariadb
│ ├── MariadbApplication.java
│ ├── model
│ │ └── HCode.java
│ ├── controller
│ │ └── HCodeController.java
│ ├── repository
│ │ └── HCodeRepository.java
│ └── service
│ ├── HCodeService.java
│ └── IHCodeService.java
└── resources
├── application.properties
├── static
│ └── index.html
└── templates
└── showHCodes.ftlh

4. pom.xml

pom.xml은 아래와 같으며 spring start 에서 만든내용에서 변경된 사항은 없습니다.

Spring Boot starter 를 이용하여 spring boot 를 쉽게 설정할수 있습니다.

  • spring-boot-starter-web은 Spring MVC를 사용하는 RESTful 애플리케이션을 포함한 웹 구축을위한 스타터입니다.
  • spring-boot-starter-freemarker는 Freemarker 뷰(html template)를 사용하여 MVC 웹 애플리케이션을 구축하기위한 스타터입니다.
  • spring-boot-starter-data-jpa는 Hibernate에서 SpringData JPA를 사용하기위한 스타터입니다.
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
59
60
61
62
63
64
65
66
67
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.github.goodsaem.mariadb</groupId>
<artifactId>mariadb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mariadb</name>
<description>springboot with mariadb</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

</project>

5. application.properties

처음시작 할때 spring boot 배너를 삭제하고 mariadb의 드라이버 및 접속 정보를 아래와 같이 생성합니다.

1
2
3
4
5
6
7
spring.main.banner-mode=off
logging.level.org.springframework=ERROR

spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/goodsaem?useSSL=false&serverTimezone=KST
spring.datasource.username=goodsaem
spring.datasource.password=xxxxxxxx

6. HCode.java

HCode 엔티티입니다. @Entity 및 @Id 어노테이션은 필수로 지정되어 있어야 됩니다. 그리고 getter 와 setter를 만들어야 되는데
편하게 lombok을 이용하여 자동 구성 했습니다. 그리고 @GeneratedValue(strategy = GenerationType.AUTO) 을 이용하여 id 키가
자동 채번되도록 설정했습니다.

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
package io.github.goodsaem.mariadb.model;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;

@Getter
@Setter
@ToString
@EqualsAndHashCode
@Entity
@Table(name = "hcode")
public class HCode {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String lcode;
private String lname;
private String mcode;
private String mname;
private String scode;
private String sname;
}

7. HCodeRepository.java

Spring CrudRepository를 상속받습니다. 해당 객체를 상속받으면 findAll ()을 포함하여 이미 구현 된 데이터 저장소에 대한 메소드들을 활용할수 있습니다.

1
2
3
4
5
6
7
8
9
package io.github.goodsaem.mariadb.repository;

import io.github.goodsaem.mariadb.model.HCode;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface HCodeRepository extends CrudRepository<HCode,Long> {
}

8. IHCodeService.java

데이터를 가져오기 위한 인터페이스를 선언합니다.

1
2
3
4
5
6
7
8
9
package io.github.goodsaem.mariadb.service;

import io.github.goodsaem.mariadb.model.HCode;

import java.util.List;

public interface IHCodeService {
List<HCode> findAll();
}

9. HCodeService.java

실제 데이터를 가져오는 findAll 메소드를 구현합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package io.github.goodsaem.mariadb.service;

import io.github.goodsaem.mariadb.model.HCode;
import io.github.goodsaem.mariadb.repository.HCodeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class HCodeService implements IHCodeService{
@Autowired
private HCodeRepository hCodeRepository;

@Override
public List<HCode> findAll() {
return (List<HCode>) hCodeRepository.findAll();
}
}

10. HCodeController.java

/hcodes 페이지에 접속하면 데이터베이스의 행정코드 전체를 가져와서 showHCodes.ftlh에서
출력하는 컨트롤러를 작성합니다.

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
package io.github.goodsaem.mariadb.controller;

import io.github.goodsaem.mariadb.model.HCode;
import io.github.goodsaem.mariadb.service.IHCodeService;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

@Controller
public class HCodeController {
@Autowired
private IHCodeService ihCodeService;

@GetMapping("/hcodes")
public String findHcodes(Model model) {
var hcodes = (List<HCode>) ihCodeService.findAll();
model.addAttribute("hcodes",hcodes);

return "showHCodes";
}
}

11. showHCodes.ftlh

컨틀롤러에서 받은 데이터를 표현하는 템플릿 파일 입니다.

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
<!DOCTYPE html>
<html>
<head>
<title>HCodes</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h2>행정구역 코드</h2>

<table border="1">
<tr>
<th>고유번호</th>
<th>시도코드</th>
<th>시도명칭</th>
<th>시군구코드</th>
<th>시군구명칭</th>
<th>읍면동코드</th>
<th>읍면동명칭</th>
</tr>
<#list hcodes as hcode>
<tr>
<td>${hcode.id}</td>
<td>${hcode.lcode}</td>
<td>${hcode.lname}</td>
<td>${hcode.mcode}</td>
<td>${hcode.mname}</td>
<td>${hcode.scode}</td>
<td>${hcode.sname}</td>
</tr>
</#list>
</table>
</body>
</html>

12. index.html

최초 접속시 행정코드 전체 데이터를 불러오는 페이지 입니다.

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
<title>행정코드</title>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<a href="hcodes">행정코드 확인하기</a>
</body>
</html>

13. MariadbApplication.java

스프링 부트 시작 java 파일 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
package io.github.goodsaem.mariadb;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MariadbApplication {

public static void main(String[] args) {
SpringApplication.run(MariadbApplication.class, args);
}

}

14. 테스트

application 을 실행하면 아래와 같은 페이지를 확인할수 있습니다.

  1. http://localhost:8080/ 아래 링크를 클릭하면 전체 행정코드를 출력하는 화면으로 이동합니다.

    1
    행정코드 확인하기
  2. http://localhost:8080/hcodes 여기에서 데이터를 확인할수 있습니다.

공유하기