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
ย 
Srping data rest
Srping data restSrping data rest
Srping data restChangHyeon Bae
ย 
[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)๊ด‘ํฌ ์กฐ
ย 
๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์ด ์‹ซ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ
๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์ด ์‹ซ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์ด ์‹ซ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ
๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์ด ์‹ซ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ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
ย 
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

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
ย 
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
ย 
Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)
Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)
Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)Wonjun Hwang
ย 
Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)
Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)
Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)Wonjun Hwang
ย 
์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ
์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ
์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค
ย 

Recently uploaded (6)

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)
ย 
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
ย 
Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)
Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)
Console API (Kitworks Team Study ๋ฐฑํ˜œ์ธ ๋ฐœํ‘œ์ž๋ฃŒ)
ย 
Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)
Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)
Merge (Kitworks Team Study ์ด์„ฑ์ˆ˜ ๋ฐœํ‘œ์ž๋ฃŒ 240426)
ย 
์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ
์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ
์บ๋“œ์•ค๊ทธ๋ž˜ํ”ฝ์Šค 2024๋…„ 5์›”ํ˜ธ ๋ชฉ์ฐจ
ย 

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. ๋๊นŒ์ง€ ๋ฐœํ‘œ ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.