SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Booting Spring Data REST
for SLiPP 17.06.14
이경원(woniper)
leekw3747@gmail.com
http://blog.woniper.net
 REST API
 Spring Web MVC
 Spring Data JPA 또는 Java ORM
 를 사용해 봤거나, 무엇인지 알고있어야합니다.
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!?
Deep Dive Spring Data REST
Spring Web MVC
@RepositoryRestController
RepositoryController
OPTIONS : /
HEAD : /
GET : /
RepositoryEntityController
OPTIONS : /{entity}
HEAD : /{entity}, /{entity}/{id}
GET : /{entity}, /{entity}/{id}
POST : /{entity}
PUT : /{entity} /{id}
PATCH : /{entity} /{id}
DELETE : /{entity} /{id}
RepositoryPropertyReferenceController
GET : /{entity}/{id}/{property}, /{entity}/{id}/{property}/{propertyId}
DELETE : /{entity}/{id}/{property}, /{entity}/{id}/{property}/{propertyId}
PATCH: /{entity}/{id}/{property}
PUT : /{entity}/{id}/{property}
POST : /{entity}/{id}/{property}
RepositorySearchController
OPTIONS : /{entity}/search, /{entity}/search/{search}
HEAD : /{entity}/search, /{entity}/search/{search}
GET : /{entity}/search, /{entity}/search/{search}
소스 까보기
 extends HandlerMapping, HandlerAdapter
 extends @RepositoryRestController
 extends HandlerMethodArgumentResolver
장점
 빠르게 REST API 개발 가능
 확장이 쉽다.
 표준을 알 수 있다.
보이는게 다가 아니다.
REST API
DDD
(ORM + Database)
Spring
WEB
DATA
DATA REST
예상 질문
 DTO는 어떻게 쓰나요?
 HATEOAS는 반드시 써야되나요?
 보안은 어떻게 하죠?
 Spring Boot에서만 동작하나요?
적용!!!
적용!!!
의존성이 낮은 도메인
적용!!!
의존성이 낮은 도메인
사내 시스템
적용!!!
의존성이 낮은 도메인
사내 시스템
조회만 적용
적용!!!
의존성이 낮은 도메인
사내 시스템
조회만 적용
prototype
Q & A
끗.

Weitere ähnliche Inhalte

Ähnlich wie Booting spring data rest for SLiPP

Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[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
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaYounghan Kim
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3plusperson
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)JiandSon
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Leonardo YongUk Kim
 

Ähnlich wie Booting spring data rest for SLiPP (20)

Srping data rest
Srping data restSrping data rest
Srping data rest
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中
스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中
스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
스프링 3.0 & RESTful
스프링 3.0 & RESTful스프링 3.0 & RESTful
스프링 3.0 & RESTful
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
vine webdev
vine webdevvine webdev
vine webdev
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
GraphQL 적용기
GraphQL 적용기GraphQL 적용기
GraphQL 적용기
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
 

Kürzlich hochgeladen

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
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
 
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
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
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
 

Kürzlich hochgeladen (7)

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
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 ...
 
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)
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
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 for SLiPP

Hinweis der Redaktion

  1. 안녕하세요. Booting Spring DATA REST 발표를하게된 이경원입니다. 저는 올해로 개발 경력 4년차가 됐구요. 현재는 우아한형제들에서 배민프레시라는 서비스를 개발하고있습니다.
  2. 발표 시작하기 전에 이 발표를 듣기 위해서 REST API가 무엇인지, Spring MVC를 사용해 봤고, Spring Data JPA 또는 Java ORM을 사용해보셨거나 무엇인지 아셔야 듣기에 수월하실거 같습니다. 발표 시작하겠습니다.
  3. 오늘의 주제 아키텍처
  4. 써보신분?
  5. 다음은 Spring Data REST에 몇 가지 특징을 보겠습니다. Spring Data에서 제공하는 Repository 인터페이스 정의만으로 REST API를 만들 수 있습니다.
  6. Spring Data Query Method 검색 API
  7. 다양한 Response Body
  8. HATEOAS는 Hypermedia As The Engine Of Application State의 약자입니다. 메타 데이터 표현
  9. 다양한 영속화 기술 데이터 레이어 추상화 대표적으로 JPA(jdbc -> hibernate -> JPA -> Data JPA)
  10. Spring Data + Spring MVC 영속화된 데이터를 그대로 REST API로 표현
  11. 지원 가능한 영속화 기술
  12. Spring MVC 게시판 Spring Data REST 게시판 비교
  13. 회원 Member 게시판 Board 본문 Contents
  14. Member entity는 필수 매핑
  15. Contents 클래스는 제목을 표현하는 title 변수와 본문 내용을 표현하는 body 변수가 선언되어있습니다.
  16. 그러면 이 엔티티를 기준으로 Spring MVC에서 REST API를 어떻게 만드는지 보겠습니다.
  17. 생성, 조회, 수정, 삭제 API 익숙한 코드
  18. 그리고 BoardRepository를 의존해 생성, 조회, 수정, 삭제할 수 있는 BoardService 클래스입니다.
  19. 게시글을 데이터베이스에 insert, update, select, delete할 수 있는 BoardRepository 입니다.
  20. 생성, 조회, 수정, 삭제(CRUD)는 대부분 반복 쿼리도, API도
  21. Spring Data REST는? 놀라지마라!
  22. 끝! 비교 데모 시연
  23. BoardRepository를 자세히 설명드리겠습니다. RepositoryRestResource 애노테이션을 붙이면 BoardRepository 인터페이스는 REST API로 설정하는 것입니다.
  24. Entity 복수명 == URL 식별 타입 == resource
  25. 이런식으로 URL 매핑이 됩니다.
  26. CrudRepository interface만 상속받았는데 어떻게 REST API가 만들어졌을까요??
  27. Method == API로 표현
  28. Save == 저장, 수정 Save == POST, PUT, PATCH
  29. findOne 메소드는 id로 조회 가능한 API를 제공하고요.
  30. findAll == get list
  31. Delete 메소드는 게시글 삭제 API를 제공합니다.
  32. Query method로 검색 API
  33. findByContentsTitleStartsWith == query method Query method == 검색 API 검색 API == 게시글 제목이 특정 문자열로 시작하는 리스트
  34. RestResource 애노테이션에 path를 starts-title로 설정하면 /boards/search/starts-title로 url 매핑이됩니다.
  35. 그리고 Param 애노테이션에 설정된 title이 url 파라미터로 제공됩니다.
  36. 그러면 제목이 h로 시작하는 게시글 리스트를 검색하는 요구사항이 있다고 가정하고 URL을 만들어보겠습니다.
  37. 그러면 /boards/search/starts-title url에 title 파라미터로 h로 URL을 만들어 요청하면
  38. findByContentsTitleStartsWith 메소드는 Title 컬럼을 like 검색 쿼리로 데이터를 조회한 후에 API로 데이터를 표현합니다. 제가 지금까지 구현체를 하나도 만들지 않고 API를 만들었죠? 여기까지가 Spring Data REST에 기본 사용법이였습니다.
  39. 그래서 Spring Data REST를 어떻게 어디에 활용할 수 있을지는 조금 뒤에 이야기하기로 하고 라이브 코딩을 하며 사용법을 더 알아보겠습니다.
  40. 스프링 캠프는 라이브 코딩까지. Deep Dive는 추가 Spring Data REST의 아키텍처 설명
  41. 스프링 캠프는 라이브 코딩까지. Deep Dive는 추가 Spring Data REST의 아키텍처 설명
  42. 다들 아는 내용 DispatcherServlet == FrontController pattern ViewResolver는 제외
  43. 설명
  44. Default 추천서 : 스프링 MVC 프로그래밍 (빨간책)
  45. Data REST 책 없음
  46. 이미 구현된 Contorller 다른 형태의 Controller @RepositoryRestController 종류
  47. @RepositoryRestController Diagram
  48. 장점입니다. 단순한 생성, 조회, 수정, 삭제에 대한 API를 빠르게 개발할 수 있고 확장이 쉽습니다. 그리고 Spring Data를 사용하는 경우에 쉽게 붙여서 사용할 수 있습니다.
  49. 하지만! 보이는게 다가 아닙니다.
  50. 제가 장점만 써 놓고 단점은 써놓지 않았는데요. 제가 생각했을때 Data REST는 알아야할 기술이 많습니다. KSUG 큰 일꾼인 박용권님과 이야기 할때 Spring Data REST를 종합 예술이라고 표현했는데요. 사용하기 쉽고 보기엔 좋지만, 이렇게 알아야할 기술이 많다는 뜻입니다.
  51. Spring Data REST를 어디에 적용할 수 있을지 생각을 해봤습니다.
  52. 첫 번째는 의존성이 낮은 도메인에 적합하다고 생각합니다. 예를 들어 커머스 주문 도메인은 상품, 결제, 포인트, 쿠폰 등 다양한 타 도메인에 의존성이 높은 반면 쿠폰이나 포인트는 타 도메인에 의존성이 낮기 때문에 더 적합하다고 생각합니다.
  53. 두 번째는 사내 시스템입니다. Spring Data REST는 data 레이어를 그대로 REST로 표현할 수 있는 기술이라고 말씀드렸는데요. 사내 시스템에서 데이터베이스를 조회하거나 조작해야되는 시스템에 적용해보면 좋을거 같습니다. 그리고 Spring Data REST는 HAL browser라는 REST Client 툴을 디펜던시 추가만으로 제공합니다.
  54. 마지막으로 조회만 적용을 해보는건데요. 라이브코딩을 하면서 봤던 ReadOnlyPagingAndSortingRepository를 만들어서 사용하면 될거 같습니다.
  55. 마지막으로 조회만 적용을 해보는건데요. 라이브코딩을 하면서 봤던 ReadOnlyPagingAndSortingRepository를 만들어서 사용하면 될거 같습니다.
  56. 끝까지 발표 들어주셔서 감사합니다.
  57. 끝까지 발표 들어주셔서 감사합니다.