SlideShare a Scribd company logo
1 of 52
Booting Spring Data REST
이경원(woniper)
leekw3747@gmail.com
http://blog.woniper.net
 REST API
 Spring Web MVC
 Spring Data JPA 또는 Java ORM
 를 사용해 봤거나, 무엇인지 알고있어야합니다.
Modern Application
다양한 Client 등장
Client To Server
Server To Server
네트워크 인터페이스 REST
API
Spring Data REST
REST API를 쉽게 만들기 위한 기술
 Repository 인터페이스 정의만으로 REST API 제공
특징
 Repository 인터페이스 정의만으로 REST API 제공
 Query Method : 메소드 선언으로 검색 API 지원
특징
 Repository 인터페이스 정의만으로 REST API 제공
 Query Method : 메소드 선언으로 검색 API 지원
 Projection : 데이터 표현 방식을 다양하게 정의/표현 가능
특징
 Repository 인터페이스 정의만으로 REST API 제공
 Query Method : 메소드 선언으로 검색 API 지원
 Projection : 데이터 표현 방식을 다양하게 정의/표현 가능
 HATEOAS : MetaData 표현 (Model, Link, Resource)
특징
Spring Data
Spring Data REST
Spring Data REST
게시판을 만들어 볼까요?
회원만
게시글 작성이
가능합니다.
@Entity
public class Board {
@Id @GeneratedValue
private Long boardId;
@Embedded
private Contents contents;
@ManyToOne(optional = false) // 매핑 필수
private Member member;
}
@Embeddable
public class Contents {
@Column(name = "title", nullable = false)
private String title; // 제목
@Lob
@Column(name = "body", nullable = false)
private String body; // 본문 내용
}
@Entity
public class Member {
@Id @GeneratedValue
private Long memberId;
@Column(name = "username", unique = true, nullable = false)
private String username;
@Column(name = "first_name", nullable = false)
private String firstName;
@Column(name = "last_name", nullable = false)
private String lastName;
@OneToMany(cascade = CascadeType.ALL)
private List<Board> boards = new ArrayList<>();
}
Spring MVC
@Controller
@RequestMapping("/boards")
public class BoardController {
@ResponseBody // 생성
@RequestMapping(method = RequestMethod.POST)
public Board post(@RequestBody Board board) {};
@ResponseBody // 조회
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Board get(@PathVariable("id") Long boardId) {};
@ResponseBody // 수정
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public Board put(@PathVariable("id") Long boardId,
@RequestBody Contents contents) {};
@ResponseBody // 삭제
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public void post(@PathVariable("id") Long boardId) {};
}
Controller
@Service
@Transactional
public class BoardService {
public Board new(Board board){}; // 생성
public Board get(Long boardId){}; // 조회
public Board update(Board board){}; // 수정
public void remove(Long boardId){}; // 삭제
}
Service
@Repository
interface BoardRepository
extends CrudRepository<Board, Long> {
Board save(Board board); // insert, update
Board findOne(Long boardId); // select
void delete(Long boardId); // delete
}
Repository
반복되고
단순한 코드
이제 우리가 할 것.
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {}
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {}
나는 REST API 입니다.
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {}
/{entity}s/{id}
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {}
/boards/1
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {}
메소드가 곧 API
POST : /boards
PUT | PATCH : /boards/{id}
GET : /boards/{id}
POST : /boards
PUT | PATCH : /boards/{id}
GET : /boards/{id}
POST : /boards
PUT | PATCH : /boards/{id}
GET : /boards
GET : /boards/{id}
POST : /boards
PUT | PATCH : /boards/{id}
DELETE : /boards/{id}
GET : /boards
검색 API도 만들고 싶어요.
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {
@RestResource(path = "starts-title")
List<Board> findByContentsTitleStartsWith(
@Param("title") String title);
}
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {
@RestResource(path = "starts-title")
List<Board> findByContentsTitleStartsWith(
@Param("title") String title);
}
/boards/search/starts-title
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {
@RestResource(path = "starts-title")
List<Board> findByContentsTitleStartsWith(
@Param("title") String title);
} ?title={}
/boards/search/starts-title
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {
@RestResource(path = "starts-title")
List<Board> findByContentsTitleStartsWith(
@Param("title") String title);
}
제목이 h로 시작하는
게시글 리스트를 조회하고 싶어요.
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {
@RestResource(path = "starts-title")
List<Board> findByContentsTitleStartsWith(
@Param("title") String title);
} /boards/search/starts-title?title=h
제목이 h로 시작하는
게시글 리스트를 조회하고 싶어요.
@RepositoryRestResource
interface BoardRepository
extends CrudRepository<Board, Long> {
@RestResource(path = "starts-title")
List<Board> findByContentsTitleStartsWith(
@Param("title") String title);
}
SELECT *
FROM board
WHERE title LIKE h%
LiveCoding!?
장점
 빠르게 REST API 개발 가능
 확장이 쉽다.
 기존 프로젝트에 설정 가능. (Spring Data 사용하는 경
우)
보이는게 다가 아니다.
REST API
DDD
(ORM + Database)
Spring
WEB
DATA
DATA REST
적용!!!
적용!!!
의존성이 낮은 도메인
적용!!!
의존성이 낮은 도메인
사내 시스템
적용!!!
의존성이 낮은 도메인
사내 시스템
조회만 적용
끗.

More Related Content

Similar to Booting Spring Data REST

Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
REST Ovewview
REST OvewviewREST Ovewview
REST OvewviewTerry Cho
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발SangHoon Han
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
 
ASP.NET Web API를 이용한 오픈 API 개발
ASP.NET Web API를 이용한 오픈 API 개발ASP.NET Web API를 이용한 오픈 API 개발
ASP.NET Web API를 이용한 오픈 API 개발SangHoon Han
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCampJeikei Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
Restful 제대로 알기(Getting to know the RESTful)
Restful 제대로 알기(Getting to know the RESTful)Restful 제대로 알기(Getting to know the RESTful)
Restful 제대로 알기(Getting to know the RESTful)광희 조
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2기동 이
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게Sungju Jin
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우NAVER D2
 
Webrtc 허영남 20150528
Webrtc 허영남 20150528Webrtc 허영남 20150528
Webrtc 허영남 20150528영남 허
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun Cho
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial우림 류
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Hyunghun Cho
 

Similar to Booting Spring Data REST (20)

Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
Srping data rest
Srping data restSrping data rest
Srping data rest
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
REST Ovewview
REST OvewviewREST Ovewview
REST Ovewview
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
ASP.NET Web API를 이용한 오픈 API 개발
ASP.NET Web API를 이용한 오픈 API 개발ASP.NET Web API를 이용한 오픈 API 개발
ASP.NET Web API를 이용한 오픈 API 개발
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Restful 제대로 알기(Getting to know the RESTful)
Restful 제대로 알기(Getting to know the RESTful)Restful 제대로 알기(Getting to know the RESTful)
Restful 제대로 알기(Getting to know the RESTful)
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우
 
Webrtc 허영남 20150528
Webrtc 허영남 20150528Webrtc 허영남 20150528
Webrtc 허영남 20150528
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3
 

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 

Recently uploaded (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

Booting Spring Data REST

Editor's Notes

  1. 안녕하세요. Booting Spring DATA REST 발표를하게된 이경원입니다. 저는 올해로 개발 경력 4년차가 됐구요. 현재는 우아한형제들에서 배민프레시라는 서비스를 개발하고있습니다.
  2. 발표 시작하기 전에 이 발표를 듣기 위해서 REST API가 무엇인지, Spring MVC를 사용해 봤고, Spring Data JPA 또는 Java ORM을 사용해보셨거나 무엇인지 아셔야 듣기에 수월하실거 같습니다. 발표 시작하겠습니다.
  3. 먼저 요즘 애플리케이션에 모습은 어떤 모습인지 한번 살펴 보고 가겠습니다.
  4. 1. 요즘은 굉장히 많은 클라이언트 기기들이 생겨났습니다. 2. 이 기기들은 우리가 만든 서버와 통신을 하며 데이터를 주고 받습니다. 서버 또한 외부 API 서버와 수많은 통신을 하는데요. 3. 클라이언트 관점에서 보면 서버는 단순히 데이터를 주고 받을 수 있는 인터페이스로 볼 수 있는데요. 4. 그래서 요즘 서버 통신을 하기 위해서 네트워크 인터페이스 중 하나인 REST API를 많이 사용합니다.
  5. 과거에는 현재보다 클라이언트 기기의 종류도 많지 않았고, 서버의 요구사항도 비교적 단순했기 때문에 비즈니스 로직과 데이터 영속화 기술 그리고 데이터베이스까지 하나로 통합된 프로젝트에 모습을 볼 수 있었습니다.
  6. 하지만 다양한 기기가 생겨나면서 서버는 점점 비대해지고, 도메인 요구사항은 복잡해지고 있기 때문에 도메인을 기준으로 서버를 분리하고, 이 각각의 서버 역시 REST API로 통신합니다.
  7. 그래서 이렇게 네트워크 인터페이스로 많이 사용하는 REST API를 Spring Data REST를 통해 어떻게 쉽고 빠르고 간편하게 개발할 수 있을지 알아 보겠습니다.
  8. Spring Data REST는 REST API를 쉽고 빠르게 만들기 위한 기술입니다. 혹시 Spring Data REST를 현업에서 사용하시는분 계신가요? 아니면 개인적으로 써보신분? 사용해보지 않으셨어도 이 발표를 들으시고 Spring Data REST가 무엇인지, 어떻게 사용할 수 있는지 알아가셨으면 좋겠습니다.
  9. 다음은 Spring Data REST에 몇 가지 특징을 보겠습니다. Spring Data에서 제공하는 Repository 인터페이스 정의만으로 REST API를 만들 수 있습니다.
  10. 정의한 Repository 인터페이스에 메소드 선언만으로 검색 API가 제공됩니다. Spring Data에서는 이 메소드를 쿼리 메소드라고 하는데요. 쿼리 메소드는 Spring Data에서 제공하는 문법에 따라 메소드명을 정의하면 메소드명을 기준으로 조회쿼리를 만들고 이 조회쿼리가 검색 API로 제공됩니다.
  11. Projection은 엔티티의 데이터를 다양하게 정의하고 표현할 수 있는 기능입니다.
  12. HATEOAS는 Hypermedia As The Engine Of Application State의 약자입니다. HATEOAS는 애플리케이션에서 사용 가능한 1. 데이터 모델의 메타데이터나, 2. 링크정보, 3. 리소스 등을 Response Body로 표현할 수 있는 기능입니다.
  13. 특징 이야기를 하면서 Spring Data에 대해서 몇번 언급했는데 잠깐 설명을 해야 될거 같습니다. Spring Data는 Data 레이어를 추상화한 프로젝트입니다. 우리가 많이 사용하는 jpa나 mongodb, redis 같은 구현체들을 우리가 직접 구현하지 않고 Spring Data에서 이미 만들어진 구현체를 사용할 수 있게 인터페이스를 제공합니다.
  14. 1. Spring Data REST는 Spring Data API와 Spring Web MVC API가 결합된 프로젝트입니다. 2. Spring Data는 데이터 레이어를 추상화한다고 했는데요. Spring Data REST는 추상화된 데이터 레이어를 REST API로 제공하는 기술입니다. 3. 요즘 no_sql 저장소를 보면 바로 REST API를 제공하는 경우가 많은데 그런 의미에서 보면 Spring Data REST는 다양한 저장소를 추상화를 하고 바로 REST API로 표현할 수 있는 기술입니다.
  15. 그리고 Spring Data REST는 JPA, Gemfire, MongoDB, Redis, Solr(쏠라) 이렇게 총 5가지 영속화 기술을 지원하고 오늘 예제는 Spring Data JPA를 기준으로 설명할 예정입니다
  16. Spring MVC와 Spring Data REST로 게시판 REST API를 만든 코드를 비교해보겠습니다.
  17. 게시판 요구사항을 정의한 엔티티 UML을 보겠습니다. 1. 회원을 표현하는 Member엔티티와 2. 게시판을 표현하는 Board 엔티티 3. 그리고 게시글의 제목과 본문 내용을 관리하는 Contents 타입이 있습니다. 게시글 작성은 반드시 회원만 작성이 가능합니다.
  18. Board 엔티티는 Board를 식별할수 있는 boardId와 게시글의 제목과 본문 내용이 포함된 Contents 타입이 있고요. 게시글을 작성한 Member 엔티티가 필수 매핑으로 설정되어 있습니다.
  19. Contents 클래스는 제목을 표현하는 title 변수와 본문 내용을 표현하는 body 변수가 선언되어있습니다.
  20. 마지막으로 유저를 표현하는 Member 엔티티입니다. 1. memberId인 식별자가 있고요. 2. 유니크 컬럼으로 설정된 username과 3. firstName, lastName이 있고, 4. 그리고 이 Member가 작성한 게시글 리스트인 Board List가 매핑되어있습니다.
  21. 그러면 이 엔티티를 기준으로 Spring MVC에서 REST API를 어떻게 만드는지 보겠습니다.
  22. BoardController는 boards라는 url로 생성, 조회, 수정, 삭제할 수 있는 API를 제공합니다. 장표에 구현체는 없어요. 이렇게 작성한다 정도만 보여드리려고합니다.
  23. 그리고 BoardRepository를 의존해 생성, 조회, 수정, 삭제할 수 있는 BoardService 클래스입니다.
  24. 게시글을 데이터베이스에 insert, update, select, delete할 수 있는 BoardRepository 입니다.
  25. 1. 생성, 조회, 수정, 삭제는 대부분 반복적이고 단순합니다. 2. 쿼리도 마찬가지고 예제로 보여드린 API도 대부분 반복적이고 단순합니다.
  26. 그럼 Spring Data REST는 REST API를 어떻게 만드는지 볼까요? 놀랄수도 있으니까, 심호흡 한번씩 하고 보겠습니다.ㅋㅋ
  27. 자 끝났습니다! BoardRepository 인터페이스 정의만으로 모든게 끝났습니다. 생성, 조회, 수정, 삭제 API를 다 만들었고요. 진짜 다 만들어졌는지, 데모를 한번 보여드리게요.
  28. BoardRepository를 자세히 설명드리겠습니다. RepositoryRestResource 애노테이션을 붙이면 BoardRepository 인터페이스는 REST API로 설정하는 것입니다.
  29. url 매핑은 제네릭 타입으로 설정된 Board 엔티티명에 복수인 boards가 됩니다. 그리고 id path는 Board 엔티티의 식별자 타입인 Long 타입이 됩니다.
  30. 이런식으로 URL 매핑이 됩니다.
  31. CrudRepository interface만 상속받았는데 어떻게 REST API가 만들어졌을까요??
  32. 1. 바로 메소드가 REST API로 표현되기 때문입니다. 2. CrudRepository interface에는 여러 메소드가 정의되어 있는데, 이 메소드들이 어떤 API를 제공하는지 살펴보겠습니다.
  33. 엔티티를 데이터베이스에 저장, 수정할 수 있는 save 메소드는 게시글 작성과 수정 가능한 REST API가 지원됩니다. 이해가셨죠??
  34. findOne 메소드는 id로 조회 가능한 API를 제공하고요.
  35. findAll 메소드는 게시글 리스트 조회 API를 제공합니다.
  36. Delete 메소드는 게시글 삭제 API를 제공합니다.
  37. 특징에서 Query-Method를 이용해서 검색 API도 쉽게 만들 수 있다고 했죠? 검색 API는 어떻게 만드는지 볼까요?
  38. 게시글 제목이 특정 문자열로 시작하는 게시글 리스트 검색 API를 findByContentsTitleStartsWith 메소드 선언만으로 만들었습니다.
  39. RestResource 애노테이션에 path를 starts-title로 설정하면 /boards/search/starts-title로 url 매핑이됩니다.
  40. 그리고 Param 애노테이션에 설정된 title이 url 파라미터로 제공됩니다.
  41. 그러면 제목이 h로 시작하는 게시글 리스트를 검색하는 요구사항이 있다고 가정하고 URL을 만들어보겠습니다.
  42. 그러면 /boards/search/starts-title url에 title 파라미터로 h로 URL을 만들어 요청하면
  43. findByContentsTitleStartsWith 메소드는 Title 컬럼을 like 검색 쿼리로 데이터를 조회한 후에 API로 데이터를 표현합니다. 제가 지금까지 구현체를 하나도 만들지 않고 API를 만들었죠? 여기까지가 Spring Data REST에 기본 사용법이였습니다.
  44. 그래서 Spring Data REST를 어떻게 어디에 활용할 수 있을지는 조금 뒤에 이야기하기로 하고 라이브 코딩을 하며 사용법을 더 알아보겠습니다.
  45. 장점입니다. 단순한 생성, 조회, 수정, 삭제에 대한 API를 빠르게 개발할 수 있고 확장이 쉽습니다. 그리고 Spring Data를 사용하는 경우에 쉽게 붙여서 사용할 수 있습니다.
  46. 하지만! 보이는게 다가 아닙니다.
  47. 제가 장점만 써 놓고 단점은 써놓지 않았는데요. 제가 생각했을때 Data REST는 알아야할 기술이 많습니다. KSUG 큰 일꾼인 박용권님과 이야기 할때 Spring Data REST를 종합 예술이라고 표현했는데요. 사용하기 쉽고 보기엔 좋지만, 이렇게 알아야할 기술이 많다는 뜻입니다.
  48. Spring Data REST를 어디에 적용할 수 있을지 생각을 해봤습니다.
  49. 첫 번째는 의존성이 낮은 도메인에 적합하다고 생각합니다. 예를 들어 커머스 주문 도메인은 상품, 결제, 포인트, 쿠폰 등 다양한 타 도메인에 의존성이 높은 반면 쿠폰이나 포인트는 타 도메인에 의존성이 낮기 때문에 더 적합하다고 생각합니다.
  50. 두 번째는 사내 시스템입니다. Spring Data REST는 data 레이어를 그대로 REST로 표현할 수 있는 기술이라고 말씀드렸는데요. 사내 시스템에서 데이터베이스를 조회하거나 조작해야되는 시스템에 적용해보면 좋을거 같습니다. 그리고 Spring Data REST는 HAL browser라는 REST Client 툴을 디펜던시 추가만으로 제공합니다.
  51. 마지막으로 조회만 적용을 해보는건데요. 라이브코딩을 하면서 봤던 ReadOnlyPagingAndSortingRepository를 만들어서 사용하면 될거 같습니다.
  52. 끝까지 발표 들어주셔서 감사합니다.