SpringBoot를 사용해서 20분만에 만드는 유연한 CRUD 애플리케이션 빌드하기

2023. 3. 20. 19:44프로그래밍

728x90

 

 

Tutorial: Build a Flexible CRUD App with Spring Boot in 20 Minutes - Stormpath User Identity API

In this tutorial, we’ll show you how simple it is to create compliant and flexible REST services using the incredible frameworks Spring and Spring Boot.

stormpath.com

 

Spring Boot로 쉽고 빠르게 CRUD 어플리케이션을 개발할 수 있습니다!

이 자습서에서는 일부 기본 Java 환경을 제외하고는 아무 것도 가정하지 않습니다. 수퍼 울트라 프레임 워크 Spring and Spring Boot를 사용하여 유연하고 준수 한 REST 서비스를 만드는 것이 얼마나 간단한 지 보여줄 것입니다. 우리는 전체적으로 이 어떻게 그리고 왜라는 물음을 편안하게 단계 단계를 거쳐가면서 자신만의 것으로 만들어가는 과정으로 갈 것입니다.

 

Spring Boot와메이븐을 처음부터 시작하기

여기에 어떻게 할 것인지를 이해하기 위해 처음부터

프로젝트를 파일 별 라인 단위로 작성하는 것이 좋습니다.

Spring Boot와 Maven을 사용하면 20 분 만에 쉽게 끝낼 수 있습니다.

하지만 먼저 Spring에 대해 빠르게 이야기해 보도록 합시다.

 

Spring 과Spring Boot

Spring 은 Java 상에 구축 된 애플리케이션 프레임 워크입니다.

이 프레임워크는 dependency injection 을 사용한 분리 시스템을 구축 할 수

있도록 해 줍니다.

이 튜토리얼에서는 임베디드 (즉, 메모리 내장) 데이터베이스를 사용하는 앱을

만들고 코드를 사용하지 않고 이를 수행 할 것입니다.

이 의도 된 구현 라이브러리는 단순히 프로젝트에 포함될 필요가 있습니다.

Spring으로 뭘 써보지 않았다면, 컴포넌트가 얼마나 쉽게 교환되는지 놀랄 겁니다.

.

Spring Boot 는 거의 스프링에 대한 환경구성을 요구하지 않음으로써

Spring 애플리케이션을보다 쉽게 ​​구축 할 수있게 해줍니다.

라이브러리 버전과 같은 요소는 자동으로 해결되며 배포가 간편합니다.

기본적으로 Java 개발 상에 Spring단순화가 배가됩니다.

마지막으로, Spring Data 는 데이터 액세스를위한 Spring의

도우미 라이브러리입니다.

Spring Data JPA는 JPA 표준을 따르는 엔진에 연결할 수 있게 해주는 것이

주요 용도입니다.

이 라이브러리가 우리를 데이터베이스로 연결 해 줄 것입니다.

 

Creating a CRUD App CRUD 애플리케이션 생성하기

 

이 모든 Spring Magic을 사용하여 일관되고 호환되는

REST 웹 서비스를 만들려면 다음의 총 4 개의 파일이 필요합니다.

 
· pom.xml
· Application.java
· Object.java
· ObjectRepository.java

놀랍게도, 이게 다입니다. 하나의 명령으로 배포 가능한 CRUD 및 검색 작업이

포함 된 완벽하게 작동되는 REST 서버가 되는 것입니다.

이 뿐만 아니라 각 파일의 길이는 12 라인을 넘지 않습니다.

 

pom.xml 파일설정하기

Maven은 pom.xml 파일을 사용하여 빌드를 구성합니다.

세 가지 섹션 - 일반 propertiesdependencies 및 build 그것입니다.

대부분의 pom.xml 파일은 많은 xml 세부 정보로 시작합니다.

 

<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
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
 

그러나 우리의 목적에 이것이 꼭 필요한 것은 아닙니다.

(자세한 내용은 Maven의 pom 소개를 참조하십시오.)

이 튜토리얼에 필요한 최소 pom 파일은 다음과 같습니다.

 

<project>
	<modelVersion>4.0.0<modelVersion>
	<groupId>com.mycompany.app</groupId>
	<artifactId>my-app</artifactId>
	<version>1</version>
</project>
 

다음과같이빌드가잘됩니다.

참고 : 스크린 샷을 읽을 수 있도록 >/dev/null 로 빌드 로그를 표시하지 않았습니다.

 

이 부분에서 필요한 것은 maven 패키지일 것이고 PATH 상에 maven 설치 디렉토리의 bin이 설정되어야 하며, 자바가 설치 되어야 한다.

 

출력로그는다음과같다.

C:\DEV\SERVER\spring_boot>dir
 Volume in drive C is SYSTEM
 Volume Serial Number is 30BA-E687
 

 Directory of C:\DEV\SERVER\spring_boot
 

2017-09-13  오후 04:06    <DIR>          .
2017-09-13  오후 04:06    <DIR>          ..
2017-09-13  오후 03:59               379 pom.xml
2017-09-13  오후 04:06    <DIR>          target
               3 File(s)            551 bytes
               3 Dir(s)  11,271,372,800 bytes free
 

C:\DEV\SERVER\spring_boot>mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ my-app ---
[INFO] Deleting C:\DEV\SERVER\spring_boot\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app ---
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\DEV\SERVER\spring_boot\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-app ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-app ---
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\DEV\SERVER\spring_boot\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-app ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-app ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-app ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: C:\DEV\SERVER\spring_boot\target\my-app-1.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.926 s
[INFO] Finished at: 2017-09-13T16:07:07+09:00
[INFO] Final Memory: 7M/18M
[INFO] ------------------------------------------------------------------------
 

C:\DEV\SERVER\spring_boot>dir
 Volume in drive C is SYSTEM
 Volume Serial Number is 30BA-E687
 

 Directory of C:\DEV\SERVER\spring_boot
 

2017-09-13  오후 04:07    <DIR>          .
2017-09-13  오후 04:07    <DIR>          ..
2017-09-13  오후 03:59               379 pom.xml
2017-09-13  오후 04:07    <DIR>          target
               3 File(s)            551 bytes
               3 Dir(s)  11,271,368,704 bytes free
 
C:\DEV\SERVER\spring_boot>

 

Parent 추가하기

다음으로parent를추가합니다.:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.3.6.RELEASE</version>
</parent>
 

parent 태그는 Maven을 캡슐화하기 위해 다른 POM을 사용하고 싶다는 것을

Maven에게 알립니다. 즉, 다양한 속성과 태그를 상속합니다.

여기서는 Spring Boot Starter Parent 라고 불리는

스프링 부트 (Spring boot) 그룹 (org.springframework.boot 그룹 참고)을

상속받습니다.

우리는 starter parent 로부터 상속받을 필요가 없습니다.

거의 세팅을 쉽게 해 줄 수 있습니다. 이런 가장 좋은 기능 중 하나는

Pom에 Spring Boot 라이브러리의 버전 번호를 포함 할 필요가 없다는 것입니다.

 

Spring Boot Starters

다음으로 우리는 dependencies (우리가 사용하고자 하는 라이브러리)을

정의하는 것입니다.

Spring Boot에는 기존 애플리케이션 용으로 필요한 모든 것을 포함하는

Starters라는 one-stop-shop 패키지가 함께 제공됩니다.

(이들은 일반적으로 Spring Initialzr 내의 모든 의존성을

연결 시켜 주는 것들입니다.)

우리는 두 개의 Spring Data Rest와 Spring Data JPA를 사용할 것입니다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
 

기억해야 할 두가지 부분

 

첫째, 두 패키지 모두 org.springframework.boot 그룹에서 온 것입니다.

둘째, 버전 번호를 지정할 필요가 없었습니다. Starter Parent 가

모두 해 줄 것입니다!

이 방법에 대한 자세한 내용은 Spring Boot Starters 튜토리얼을 참조하십시오.

 

데이터베이스 추가하기

우리가 필요로 하는 마지막 dependency는 데이터베이스입니다.

만약 우리가 지금까지 수행한 것을 바탕으로 빌드 하려고 한다면,

영속성을 위해 연결 할 무언가를 찾기 전까지 실패 할 것입니다.

 

설정하는 가장 쉬운 방법은 임베디드 된 것을 사용하는 것입니다.

이는 메모리에 있다는 것을 의미하므로(in-memory) ,

URL과 로그인 세부 정보가 있어야 하는 MySQL같은 데이터베이스를

연결할 필요가 없습니다.

(나중에 이를 어떻게 할 수 있을 지 살펴 볼 것입니다)

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
</dependency>
 

다시놀라는것이지만, 데이터베이스 세팅이 이것으로 끝입니다!

 

Dependency Wrapper

dependencies (Maven에게 "프로젝트 J의 클래스 패스에 이 JAR 파일을 다운로드하십시오"라고 그냥 말하는 정말 멋진 방법)는 의존성 dependencies 이라는 노드에 싸여 있어야 합니다.

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-rest</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>com.h2database</groupId>
		<artifactId>h2</artifactId>
	</dependency>
</dependencies>
 

Maven Boot Plugin

마지막 작업은 Maven을 위한 플러그인을 포함하는 것입니다.

일반적으로 프로젝트를 실행하는 것은 복잡합니다.

java -jar target / demo-0.0.1-SNAPSHOT.jar을 시도 할 수는 있지만

클래스 경로를 모두 설정하지 않았기 때문에 일반적으로 실패합니다.

실제로 발생하는 첫 번째 일은 manifest 오류가 발생하는 것입니다.

 

 

이 문제는 POM을 사용하여 해결할 수 있지만 Spring Boot를 사용하면 더 쉽게 해결할 수 있습니다. 아래 내용을 파일하단에 하단에 간단히 추가하십시오.

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>
 

그렇게 하면 앱을 간단하게 실행할 수 있습니다. mvn spring-boot : run 만 입력하면 됩니다.

하지만 지금은 아닙니다. 지금 실행하면 이제 실패 할 것입니다 -

먼저 메인 클래스가 필요합니다. 이는 pom을 통해서 가능한데,

전체 예제는 다음과 같습니다.

<project>
 
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.6.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>
 

pom.xml 파일에 자바 추가하기

지금까지 우리가 한 모든 것은 하나의 파일, 즉 pom.xml로 만들어졌습니다.

그럼 우리는 어떤 자바 파일를 포함 시켜야 합니다.

가장 먼저 필요한 것은 애플리케이션 진입 점입니다.

Maven은 src / main / java에서 코드를 찾습니다.

응용 프로그램은 패키지에 있어야 하므로 데모에 넣으십시오.

 

 

 

 

The contents of Application.java are remarkably straight forward.

Application.java 의내용은놀랍게도직관적입니다.

package demo;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
 

깊은 인상을 받지 못한다면, 앞으로 무슨일이 일어 날 지 모른다는 것입니다.

모든 것이 자동으로 붙어버릴 것입니다.

우리는 pom에 이 클래스를 지정할 필요조차 없었습니다!

우리를 위해 Spring Boot는 src/main/java에서

main 함수를 정의하는 클래스를 검색함을 수행해 줄 것입니다.

이제 우리는 이 두 파일만으로

완벽하게 작동하는 응용 프로그램을 갖게 되었습니다.

 

 

 

눈으로보듯이, 8080 포트의 톰캣 인스턴스가 시작되었습니다.우리는REST와 표준 로깅 버전의 구동 서버를 가지게 된 것입니다.

 

Curl

 

서버에무엇이있는지는 curl을 사용해서 알아봐야 합니다.

나는 여기서 mingw를 사용한다.

 

 

curl을 모른다면, 우리는 서버에서 방금 GET을 호출하였으며 JSON을 반환 받았습니다.

반환되는 것은 서버에서 수행 할 수 있는 작업 목록 (_links 섹션)입니다.

지금은 당장은 사용할 수 있는 서비스는 다음의 유일한 것이 있다고 서버에서 응답이 온 것이죠

http://localhost:8080/profile.

 

오브젝트 추가

영속성을 위해서 만들어야 할 무언가 위해 우리는 두 Java 파일,

즉 객체 자체의 정의와 저장소에 사용되는 리포지터리를 사용합니다.

 

Person.java 의 경우 표준 Java bean을 정의하지만,

몇 가지 어노테이션들이 있습니다

package demo;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity
public class Person {
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
 
    private String firstName;
    private String lastName;
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
 

리포지터리의 경우 CrudRepository 를 상속하는 인터페이스를 정의하고

어노테이션 @RepositoryRestResource를 추가합니다.

package demo;
 
import java.util.List;
 
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 
@RepositoryRestResource
public interface PersonRepository extends CrudRepository<Person, Long> {
 
}
 

Booyah!

그리고끝났네요~! 이제 우리는 모든 REST 호환용 CRUD 서버를 갖게

되었습니다!

 

 

 

 

이제 서버에서 GET을 호출하면 people (추가 된 클래스의 이름)이라는

또 다른 링크가 생깁니다. 어떤 persons 들을 가졌는 지

그냥 curl 상에서 url만 치면 됩니다.

 

 

이제 링크 외에도 임베디드 데이터베이스의

내용을 보여주는 임베디드 섹션이 표시됩니다.

하나의 테이블을 가지고 있으며, 섹션은 비어 있습니다.

 

curl -i -X POST -H "Content-Type:application/json" -d '{ "firstname" : "tommybee", "lastName" : "Me" }' localhost:8080/persons
 

JSON 내용을 localhost:8080/persons 에

POST하면 localhost:8080/persons/1의 내용을 받게 됩니다.

 

 

더 알아봐야한다!

이 자습서에서는 기본 CRUD 응용 프로그램과 앞으로 해야할 약간의 부분에 대해서 알아 보았습니다.

여기에서 데이터베이스 전환,

페이징 결과 사용 및 테스트 작성과 같은 기능을 추가 할 수 있습니다.

이 전체 프로젝트를 보려면 GitHub에서 복제하십시오.

또는 Spring Boot에 대해 더 배우고 애플리케이션에 인증을 추가하려면

다음 리소스를 확인하십시오.

 

5 Practical Tips for Building Your Spring Boot API

OZork Auth — Learn OAuth 2.0 + Spring Boot the Fun Way!

A Simple Web App With Spring Boot, Spring Security, and Stormpath —

in 15Minutes

 

이상.

 

728x90