์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
BEST

์Šคํ”„๋ง ๊ธฐ๋ฐ˜ REST API ๊ฐœ๋ฐœ

๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ Self-Descriptive Message์™€ HATEOAS(Hypermedia as the engine of application state)๋ฅผ ๋งŒ์กฑํ•˜๋Š” REST API๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

Thumbnail

์ค‘๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[๋ฐฑ์—”๋“œ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • Self-Describtive Message์™€ HATEOAS๋ฅผ ๋งŒ์กฑํ•˜๋Š” REST API๋ฅผ ์ดํ•ด

  • ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ REST API ๊ฐœ๋ฐœ

  • ์Šคํ”„๋ง HATEOAS์™€ ์Šคํ”„๋ง REST Docs ํ”„๋กœ์ ํŠธ ํ™œ์šฉ

  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)

์Šคํ”„๋ง์œผ๋กœ REST๋ฅผ ๋”ฐ๋ฅด๋Š” API๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž!
๋ฐฑ๊ธฐ์„ ์˜ ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ REST API ๊ฐœ๋ฐœ

์Šคํ”„๋ง ๊ธฐ๋ฐ˜ REST API ๊ฐœ๋ฐœ

์ด ๊ฐ•์˜์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ Self-Descriptive Message์™€ HATEOAS(Hypermedia as the engine of application state)๋ฅผ ๋งŒ์กฑํ•˜๋Š” REST API๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ REST API๋กœ ๊ดœ์ฐฎ์€๊ฐ€

2017๋…„ ๋„ค์ด๋ฒ„๊ฐ€ ์ฃผ๊ด€ํ•œ ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค Deview์—์„œ ๊ทธ๋Ÿฐ REST API๋กœ ๊ดœ์ฐฎ์€๊ฐ€๋ผ๋Š” ์ด์‘์ค€๋‹˜์˜ ๋ฐœํ‘œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ REST API๋กœ ๋ถˆ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ API๊ฐ€ ์‹ค์ œ๋กœ๋Š” ๋กœ์ด ํ•„๋”ฉ์ด ์ •์˜ํ•œ REST๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ ์ค‘์—์„œ๋„ ํŠนํžˆ Self-Descriptive Message์™€ HATEOAS๊ฐ€ ์ง€์ผœ์ง€์ง€ ์•Š์Œ์„ ์ง€์ ํ–ˆ๊ณ , ๊ทธ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ์ œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ฐ•์˜๋Š” ํ•ด๋‹น ๋ฐœํ‘œ์— ์˜๊ฐ์„ ์–ป์–ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. 2018๋…„ 11์›”์— KSUG์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์„ธ๋ฏธ๋‚˜๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. 4์‹œ๊ฐ„์ด๋ผ๋Š” ์งง์ง€ ์•Š์€ ๋ฐœํ‘œ์˜€์ง€๋งŒ, ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•˜๋Š๋ผ ์ถฉ๋ถ„ํžˆ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋˜ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์šฉ์„ ๋” ๋ณด์ถฉํ•˜๊ณ , ๋˜ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์„ ํƒ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ด ๊ฐ•์˜๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ด ๊ฐ•์˜์—์„œ๋Š” ์ œ๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” IntelliJ ๋‹จ์ถ•ํ‚ค๋„ ํ•จ๊ป˜ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ข ์ˆ˜๊ฐ• ์ „ ํ™•์ธํ•ด์ฃผ์„ธ์š”! 

  • ์ด ๊ฐ•์˜์—์„œ๋Š” ์—๋””ํ„ฐ๋กœ IntelliJ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. IntelliJ ์„ค์น˜ ๋“ฑ์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋„๋กœ ๋‹ค๋ฃจ์ง€ ์•Š์œผ๋‹ˆ ์ด ์  ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ฐ•์˜ ์†Œ๊ฐœ

์ด ๊ฐ•์˜์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ REST API๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‰์†Œ ํ…Œ์ŠคํŠธ ๋˜๋Š” TDD์— ๊ด€์‹ฌ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ
  • ์Šคํ”„๋ง ๋ถ€ํŠธ
  • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
  • ์Šคํ”„๋ง HATEOAS
  • ์Šคํ”„๋ง REST Docs
  • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ OAuth2

์ด ๊ฐ•์˜๋ฅผ
์ด๋Ÿฐ ๋ถ„๋“ค์—๊ฒŒ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)์—
๊ด€์‹ฌ์žˆ๋Š” ๋ถ„

๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์˜
ํ™œ์šฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์€ ๋ถ„

REST API๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”
๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์€ ๋ถ„

์ด ๊ฐ•์˜๋Š”
์ด๋Ÿฐ ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค

  • Self-Describtive Message์™€ HATEOAS๋ฅผ ๋งŒ์กฑํ•˜๋Š” REST API๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ REST API๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง HATEOAS์™€ ์Šคํ”„๋ง REST Docs ํ”„๋กœ์ ํŠธ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)์— ์ต์ˆ™ํ•ด์ง‘๋‹ˆ๋‹ค.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํ•ต์‹ฌ ๊ธฐ์ˆ ์„ ์ˆ˜๊ณผ๋ชฉ

์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ์Šคํ”„๋ง์„ ์ฒ˜์Œ ์ ‘ํ•œ ๋ถ„๋“ค์—๊ฒŒ ๋„์›€๋ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ ๊ฐœ๋…๊ณผ ํ™œ์šฉ์„ ์ˆ˜๊ณผ๋ชฉ

์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ธฐ ์œ„ํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ํ•™์Šตํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ๋„์›€๋ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์„ ํƒ๊ณผ๋ชฉ

JPA(Java Persistence API)๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์— ๋Œ€ํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)์— ๊ด€์‹ฌ์žˆ๋Š” ๋ถ„

  • ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ธฐ์ˆ ์˜ ํ™œ์šฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์€ ๋ถ„

  • REST API๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์€ ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ใ€Š์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํ•ต์‹ฌ ๊ธฐ์ˆ ใ€‹ ๊ฐ•์˜

  • ใ€Š์Šคํ”„๋ง ๋ถ€ํŠธ ๊ฐœ๋…๊ณผ ํ™œ์šฉใ€‹ ๊ฐ•์˜

  • Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜

์•ˆ๋…•ํ•˜์„ธ์š”
๋ฐฑ๊ธฐ์„ ์ž…๋‹ˆ๋‹ค.

91,159

๋ช…

์ˆ˜๊ฐ•์ƒ

4,048

๊ฐœ

์ˆ˜๊ฐ•ํ‰

2,009

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

20

๊ฐœ

๊ฐ•์˜

๋„ค์ด๋ฒ„์™€ ์•„๋งˆ์กด์„ ๊ฑฐ์ณ ํ˜„์žฌ Microsoft์—์„œ ์‹œ๋‹ˆ์–ด ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋กœ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ธ์Šˆํƒ€์ธ์€ "๊ต์œก์ด๋ž€ ์‚ฌ์‹ค์„ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ํž˜์„ ๊ธฐ๋ฅด๋Š” ๊ฒƒ์ด๋‹ค."๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋„ ๊ทธ ๋ง์— ๊นŠ์ด ๊ณต๊ฐํ•˜๋ฉฐ ๊ฐ•์˜๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ํŠœ๋ธŒ:
'๋ฐฑ๊ธฐ์„ ' ์ฑ„๋„์—์„œ ๊ฐœ๋ฐœ์ž ๊ณ ๋ฏผ ์ƒ๋‹ด ๋ฐ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์œ ์šฉํ•œ ์ง€์‹ ๊ณต์œ 
๋ฒˆ์—ญ: ์Šคํ”„๋ง ๋ฐ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ด€๋ จ ์„œ์  ๋‹ค์ˆ˜ ๋ฒˆ์—ญ
์ €์ˆ : ์‰ฝ๊ฒŒ ๋”ฐ๋ผํ•˜๋Š” ์ž๋ฐ” ์›น ๊ฐœ๋ฐœ

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

43๊ฐœ โˆ™ (8์‹œ๊ฐ„ 48๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!