[03]스프링부트 퀵스타트 - 스프링부트 프로젝트 생성
01 Mar 2020
지난 포스트에서는 메이븐 프로젝트를 활용하여 라이브러리 프로젝트를 생성하고 테스트 하는 코드를 작성해 보았습니다. 이번 포스트에서는 스프링 부트 프로젝트를 생성하는 방법에 대해서 살펴 보겠습니다.
이 포스트의 목표
- 스프링 부트 프로젝트 생성
- 스프링 부트 실행
- 간단하게 프로젝트 기능 구현
이 포스트를 시작하기 전에
이 포스트는 다음의 부분에 대한 설명을 하지 않습니다.
- Java 설치
- maven 설치
- spring cli 설치
프로젝트 생성
spring init --dependencies=web,data-jpa,h2 --groupId="co.storyg.blog" --artifactId="api" api
Output :
Using service at https://start.spring.io
Project extracted to './api'
pom.xml lombok 의존성 추가
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
패키지 구조 설명
-
- co.storyg.blog.api.domain.post
- 포스트 도메인을 위한 도메인 패키지
-
- co.storyg.blog.api.domain.post.controller
- 포스트 도메인에서 사용하는 컨트롤러
-
- co.storyg.blog.api.domain.post.entity
- 포스트 도메인에서 사용하는 엔티티
-
- co.storyg.blog.api.domain.post.repository
- 포스트 도메인에서 사용하는 레파지토리
-
- co.storyg.blog.api.domain.post.service
- 포스트 도메인에서 사용하는 서비스
엔티티 작성
package co.storyg.blog.api.domain.post.entity;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import lombok.Data;
/**
* Post
*/
@Entity
@Data
public class Post {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String title;
private String content;
private String author;
@OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name="post_id")
private Collection<Comment> comments;
}
package co.storyg.blog.api.domain.post.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import lombok.Data;
/**
* Comment
*/
@Entity
@Data
public class Comment {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String content;
private String user;
}
레파지토리 작성
package co.storyg.blog.api.domain.post.repository;
import org.springframework.data.repository.CrudRepository;
import co.storyg.blog.api.domain.post.entity.Post;
/**
* CrudPostRepository
*/
public interface CrudPostRepository extends CrudRepository<Post, Integer> {}
컨트롤러 작성
package co.storyg.blog.api.domain.post.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import co.storyg.blog.api.domain.post.entity.Post;
import co.storyg.blog.api.domain.post.repository.CrudPostRepository;
import co.storyg.post.common.PostDescribe;
@Controller
@RequestMapping(path="/posts")
public class MainController {
@Autowired
private CrudPostRepository postRepository;
@PostMapping()
public @ResponseBody Post addNewUser (@RequestBody Post post) {
return postRepository.save(post);
}
@GetMapping()
public @ResponseBody Iterable<Post> getAllPost() {
PostDescribe describe = new PostDescribe();
String str = describe.byAuthor("author", "alpa2Code");
System.out.println(str);
return postRepository.findAll();
}
}
실행
./mvnw spring-boot:run
요청하기
포스트 생성
포스트 생성 요청은 다음과 같이 합니다.
curl -X POST \
http://localhost:8080/posts/ \
-H 'Content-Type: application/json' \
-d '{
"title":"블로그를 시작하며",
"content":"블로그는 어렵습니다...",
"author":"스토리지",
"comments":[
{
"content":"좋은 글 감사합니다.",
"user":"지나가던 행인"
},
{
"content":"잘 읽고 갑니다.",
"user":"방문자1"
}
]
}'
포스트 생성 요청은 정상처리되면 다음과 같은 값이 리턴 됩니다.
{
"id": 1,
"title": "블로그를 시작하며",
"content": "블로그는 어렵습니다...",
"author": "스토리지",
"comments": [{
"id": 2,
"content": "좋은 글 감사합니다.",
"user": "지나가던 행인"
}, {
"id": 3,
"content": "잘 읽고 갑니다.",
"user": "방문자1"
}]
}
리스트 요청
포스트 리스트 요청은 다음과 같이 합니다.
curl -X GET \
http://localhost:8080/posts \
-H 'Content-Type: application/json'
포스트 리스트 요청은 정상처리되면 다음과 같은 값이 리턴 됩니다.
[{
"id": 1,
"title": "블로그를 시작하며",
"content": "블로그는 어렵습니다...",
"author": "스토리지",
"comments": [{
"id": 2,
"content": "좋은 글 감사합니다.",
"user": "지나가던 행인"
}, {
"id": 3,
"content": "잘 읽고 갑니다.",
"user": "방문자1"
}]
}]