[MSA Prepare] Spring Data Rest

·2024년 5월 2일
0

MSA Prepare

목록 보기
4/21
post-thumbnail

Spring Data Rest

What is?

  • Entity와 Repository를 작성하면 자동으로 RESTful API를 제공해줌
  • JPA와 HATEOAS등 기능 자동으로 결합
  • 빠르게 RESTful API의 구현이 가능하다.
  • 단순한 CRUD만 가능하며 복잡성을 감당하기에 부족

사용이유

  • MSA를 위해서 사용할 간단한 예제를 만들기에 적합하다고 판단함
  • 무엇보다 RESTful API를 만드는데 빠름

Start

dependencies

  • build.gradle
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	implementation 'org.springframework.boot:spring-boot-starter-data-rest'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'com.h2database:h2'
	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.4.0'

}
  • DB로 h2데이터 베이스를 사용하였다.
  • org.springframework.boot:spring-boot-starter-data-rest: 다음을 추가하면 spring data rest를 사용할 수 있다.
  • 문서화 도구로 swagger을 위해 openapi를 사용하였다.

설정하기

  • application.properties
spring.data.rest.basePath=/api
spring.data.rest.defaultMediaType=application/json
spring.data.rest.maxPageSize=100
spring.data.rest.pageParamName=page
spring.data.rest.limitParamName=limit
spring.data.rest.sortParamName=sort
spring.data.rest.defaultPageSize=20
spring.data.rest.returnBodyOnCreate=true
spring.data.rest.returnBodyOnUpdate=true
spring.data.rest.detectionStrategy=annotated
spring.data.rest.enableEnumTranslation=true
spring.data.rest.enableDefaultExposure=true
spring.data.rest.detection-strategy=annotated
  • 다음과 같은 것을 설정할 수 있다.
  • spring.data.rest.detection-strategy의 경우 등록할 Repo를 지정할 수있다.
  • ANNOTATED으로 지정하면 @RepositoryRestResource을 붙인 Repo만 사용가능 하다.

Entity와 Repository 구성하기

  • Team.java
@Entity
public class Team {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private String city;
    private int championships;

    @OneToMany(mappedBy = "team")
    @JsonIgnore
    private List<Player> players;

}
  • TeamRepository.java
public interface TeamRepository extends JpaRepository<Team, Long> {
}
  • Player.java
@Entity
public class Player {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String name;
    private long number;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "team_id")
    private Team team;

}
  • PlayerRepository.java
public interface TeamRepository extends JpaRepository<Team, Long> {
}

Swagger config

  • SwaggerConfiguration.java
@Configuration
public class SwaggerConfiguration {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components())
                .info(apiInfo());
    }

    private Info apiInfo() {
        return new Info()
                .title("APIs")
                .description("Team API")
                .version("1.0.0");
    }
}
  • application.properties
# Swagger
springdoc.swagger-ui.path=/api-docs

JPA 및 H2 DB 설정

  • application.properties
# DATABASE
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:~/local
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update

Use

  • swagger 문서에 접속하면 자동으로 api가 생성되었다.
  • Player을 등록할때는 다음과 같은 방식을 사용한다.
  • "team": "http://localhost:8080/teams/1" 다음의 방식으로 팀을 가져온다!

profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보