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

[๊ฐœ์ •ํŒ 2023-11-27] Spring Boot 3.x ๋ฅผ ์ด์šฉํ•œ RESTful Web Services ๊ฐœ๋ฐœ

์ด ๊ฐ•์˜๋Š” Spring Boot๋ฅผ ์ด์šฉํ•ด์„œ RESTful Web Services ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๋Š” ๊ฐ•์˜์œผ๋กœ์จ, REST API ์„ค๊ณ„์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ ์ง€์‹์— ๋Œ€ํ•ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Thumbnail

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

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

  • Spring Boot

  • REST API

  • RESTful services

  • JPA

  • OAS 3.0 (Swagger Specification)

์Šคํ”„๋ง ๋ถ€ํŠธ RESTful API ์ž…๋ฌธ์˜ ๋ฐ”์ด๋ธ”!

์ด๋„์› / Dowon Lee - Spring Boot (์Šคํ”„๋ง๋ถ€ํŠธ) RESTful Web API

๋ณธ ๊ฐ•์˜๋Š” Spring Boot์™€ Spring Cloud๋ฅผ ์ด์šฉํ•œ Microservice๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์— ์žˆ์–ด์„œ 
RESTful ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , Spring Cloud API๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„ ๋ฐ ์šด์˜์— ๊ด€ํ•ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.


๐Ÿ“ ๊ฐ•์˜ ์†Œ๊ฐœ

# ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(Microservices)๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

"Microservices are a software development technique โ€”a variant of the service-oriented architecture (SOA) structural styleโ€” that arranges an application as a collection of loosely coupled services. In a microservices architecture, services are fine-grained and the protocols are lightweight." - wikipedia

2011๋…„ ๋ฒ ๋‹ˆ์Šค์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์›Œํฌ์ˆ์ด ๊ฐœ์ตœ๋œ ์ดํ›„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์— ์ „ํ†ต์ ์ธ ๋ชจ๋†€๋ฆฌ์Šค ๊ฐœ๋ฐœ ๋ฐฉ์‹ ๋Œ€์‹  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ๋„์ž…ํ•จ์œผ๋กœ์จ, ๊ฐœ๋ฐœ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์ง€/๋ณด์ˆ˜์— ์žˆ์–ด์„œ๋„ ๋น„์šฉ ์ ˆ๊ฐ ๋ฐ ํšจ์œจ์„ฑ ์ฆ๊ฐ€๊ฐ€ ์ด๋ฃจ์–ด์กŒ์œผ๋ฉฐ ๊ณ ๊ฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋˜ํ•œ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์˜ ์ธ๊ธฐ์™€ ๋”๋ถˆ์–ด์„œ RESTful์ด๋ผ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

Microservice Architecture๋ž€ ๊ธฐ์กด ํ•˜๋‚˜์˜ ํฐ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœ/์šด์˜๋˜๋˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ, ๋งŽ๊ฒŒ๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ์ž‘์€ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ/์šด์˜ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ Microservice๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์„œ๋น„์Šค๋ผ๋ฆฌ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ์„œ๋น„์Šค์— ์ตœ์ ํ™”๋œ ๊ฐœ๋ฐœ ์–ธ์–ด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๋Š” Polyglot Programming(ํด๋ฆฌ๊ธ€๋ž ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์˜ ์š”๊ฑด์„ ๊ฐ–์ถ”์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ์ด๊ธฐ์ข…(็•ฐๆฉŸ็จฎ)์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ ํ‘œ์ค€ํ™”๋œ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” RESTful ์„œ๋น„์Šค๋ฅผ ๋„๋ฆฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Boot๋Š” ๋…๋ฆฝ ์šด์˜ ๊ฐ€๋Šฅํ•œ Spring ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์ด์ž Spring Project์ž…๋‹ˆ๋‹ค. Spring Boot๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝํ˜• Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Spring framework์™€ ๊ธฐํƒ€ Third-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์„ค์ • ์ž‘์—…์„ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Spring Boot์˜ Starter ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ด์šฉํ•˜๋ฉด, ์ƒ์šฉํ™”์— ํ•„์š”ํ•œ ํ†ต๊ณ„, ์ƒํƒœ ์ฒดํฌ, ์™ธ๋ถ€ ์„ค์ • ๋“ฑ์— ๊ด€ํ•œ ์ž‘์—…๋„ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์šฐ๋ฆฌ์˜ ์ตœ์ข… ๋ชฉํ‘œ๋Š” Spring Boot์™€ Spring Cloud๋ฅผ ์ด์šฉํ•ด์„œ
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ์„ค๊ณ„๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„
์„ค๊ณ„ํ•˜๊ณ , ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


โœ๏ธ ์ˆ˜์—… ๊ณผ์ •

๐Ÿ’ก ๋ณธ ๊ณผ์ •์„ ํ†ตํ•ด Spring Boot์™€ Spring Cloud๋ฅผ ์ด์šฉํ•˜์—ฌ Microservice Architecure๋กœ ์›น ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ๊ตฌํ˜„, ์šด์˜ ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๊ณผ์ •์„ ํ•™์Šตํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋กœ๋“œ๋งต ๋ณด๊ธฐ)

์ฒซ๋ฒˆ์งธ ๊ณผ์ • (ํ˜„์žฌ ๊ฐ•์˜)

REST API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด Spring Boot๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„๋ถ€ํ„ฐ, REST API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

๋‘๋ฒˆ์งธ ๊ณผ์ • (์ด์–ด์ง€๋Š” ๊ฐ•์˜)

Spring Boot์™€ Spring Cloud๋ฅผ ์ด์šฉํ•˜์—ฌ Microservice Architecture๋ฅผ ์„ค๊ณ„, ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

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

  • ๊ฐ•์˜์— ์‚ฌ์šฉ๋œ ๊ฐœ๋ฐœ ํˆด ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 
    • Java 17 + IntelliJ IDEA + Postman 
    • Spring Boot 3.1.5 (Spring Boot Security, Actuator, Starter, Spring Data JPA ๋“ฑ)
    • OpenAPI Specification 3.0  
    • Swagger UI 5.2.0
    • H2 2.1.214
  • ๊ฐ•์˜์— ์‚ฌ์šฉ๋œ ์ฝ”๋“œ๋Š” Github์—์„œ ํ™•์ธํ•ด ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

  • Spring Boot๋ฅผ ์ด์šฉํ•ด์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ คํ•˜๋Š” ๋ถ„๋“ค

  • REST API ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ๋ถ„๋“ค

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ๋ถ„๋“ค

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

  • Java

  • Web Application

  • Spring framework์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹

์•ˆ๋…•ํ•˜์„ธ์š”
Dowon Lee์ž…๋‹ˆ๋‹ค.

27,628

๋ช…

์ˆ˜๊ฐ•์ƒ

1,408

๊ฐœ

์ˆ˜๊ฐ•ํ‰

1,322

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

7

๊ฐœ

๊ฐ•์˜

์ €๋Š” IT ์—”์ง€๋‹ˆ์–ด์ž…๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€ ์ง์—…๋ž€์— "ํšŒ์‚ฌ์›?", "๊ฐœ๋ฐœ์ž?", "๊ฐ•์‚ฌ?" ์–ด๋–ค ๋‹จ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•  ์ง€ ๊ณ ๋ฏผ์ด ๋˜์—ˆ๋˜ ๋•Œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€, IT ์—”์ง€๋‹ˆ์–ด๋ผ๋Š” ํ‘œํ˜„์ด ์ œ๊ฐ€ ์ž˜ ์–ด์šธ๋ฆฌ๋Š” ์ง์—…๋ช…์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ์ง€๊ธˆ๊นŒ์ง€๋„ ์ง์—…๋ž€์—๋Š” "IT ์—”์ง€๋‹ˆ์–ด"๋ผ๊ณ  ์ ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ง์—…์ด๋ผ๋Š” ๊ฒƒ์€ ์ž์‹ ์˜ ์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๊ณ , ์ผ์ด๋ผ๋Š” ๊ฒƒ์€ ์žฌ๋ฏธ์žˆ๊ณ , ๋„์›€์ด ๋˜๋Š” ์ผ์ด๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ๋‹ค ์›ํ•˜๋Š”๋Œ€๋กœ ์ผ์„ ํ•˜๋ฉฐ ์‚ด์ˆ˜๋Š” ์—†์ง€๋งŒ, ์ €๋Š” ์ œ๊ฐ€ ํ•˜๋Š” ์žˆ๋Š” ์ด ์ผ์„ ์ข‹์•„ํ•˜๋Š” ์žˆ๊ณ , ์ž˜ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ์จ, ๊ฐ•์‚ฌ๋กœ์จ, ์ปจ์„คํ„ดํŠธ๋กœ์จ์˜ ์—ญํ• ์„ ํ•ด ์˜ค๋ฉด์„œ, ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ์ถœ์‹œ๋˜๊ณ  ๋ณ€ํ™”ํ•˜๋Š” IT ์‹ ๊ธฐ์ˆ ์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ์— ๊ธ‰๊ธ‰ํ•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„, ๋‚จ๋“ค๋ณด๋‹ค ์กฐ๊ธˆ์ด๋ผ๋„ ๋จผ์ € ์ ‘ํ•˜๊ณ , ์ „ํŒŒํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ ์ค‘ ํ•œ๋ช…์ž…๋‹ˆ๋‹ค. 

์ตœ๊ทผ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ถ„์•ผ๋Š” ์˜จ๋ผ์ธ ๊ต์œก ์ปจ์„คํŒ…์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ด€์‹ฌ์žˆ๋Š” ๊ธฐ์ˆ ์€ Cloud Native Architecture, Blockchain, Machine Learning, Kafka, Kuberbetes ๋“ฑ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์€ ์‹ค์ œ๋กœ ๊ฐ•์˜๋„ ํ•˜๊ณ  ์žˆ๊ณ  ์—…๋ฌด์— ์ ์šฉํ•ด์„œ ์‚ฌ์šฉ๋„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์›Œ๋‚™ ๋ฐฉ๋Œ€ํ•œ ์ฃผ์ œ์ด๋‹ค ๋ณด๋‹ˆ, ์•„์ง๊นŒ์ง€๋„ ๊ณ„์† ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋จธ๋ฆฌ์†์— ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ง„์ •ํ•œ ์ง€์‹์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ œ๊ฐ€ ๊ฐ€์ง„ ์ง€์‹๊ณผ ๊ฒฝํ—˜์„ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ™์„ ํ†ตํ•ด ๊ณต์œ ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ƒˆ๋กœ์šด ๋ถ„์•ผ, ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์— ๊ณ„์† ๋„์ „ํ•˜๊ณ  ์žˆ๋Š” IT ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.  

 

 

  • ็พ) ์—”์ œ์ด์›์ปดํผ๋‹ˆ ๋Œ€ํ‘œ 
  • ็พ) ๋™๊ตญ๋Œ€ํ•™๊ต ๊ตญ์ œ์ •๋ณด๋Œ€ํ•™์› ์ •๋ณด๋ณดํ˜ธํ•™๊ณผ ๋Œ€์šฐ๊ต์ˆ˜
  • ๅ‰) JP Mogan Chase AMJ Tech consultant (์ผ๋ณธ)
  • ๅ‰) ์‚ผ์„ฑ SDS CMS ์‚ฌ์—…๋ณธ๋ถ€ ์ฑ…์ž„ ์—”์ง€๋‹ˆ์–ด

 

 

๋”๋ณด๊ธฐ

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

์ „์ฒด

52๊ฐœ โˆ™ (6์‹œ๊ฐ„ 57๋ถ„)

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

์ˆ˜๊ฐ•ํ‰

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