# 2021๋…„ 2์›” 2์ผ

SpringBoot ์‹ค์ „ ํ”„๋กœ์ ํŠธ

# ์ œ1์ฐจ์‹œ

# 1. ๊ฐ•์˜์†Œ๊ฐœ๋ฐ ํ™œ์šฉ๋ฒ•

"๋ญ”๊ฐ€ ์ž˜๋ชปํ–ˆ๊ฒ ์ง€"

๋ฐ˜์„ฑ์˜ ์‹œ๊ฐ„ ๊ฐ€์ง€๊ธฐ "๋ฌด์—‡์„ ํ–ˆ๋‚˜?", "๋ญ๊ฐ€ ์–ด๋ ค์› ๋‚˜?", "๋‹ค์Œ์—” ์–ด๋–ป๊ฒŒ ํ• ๊ฒƒ์ธ๊ฐ€?" (๊ณ„ํš์„ธ์šฐ๊ธฐ) -> ์ด๋ฅผ ํ†ตํ•ด์„œ ์„ฑ์žฅํ• ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๊ณ , ๊ธฐ๋กํ•˜๊ธฐ (๋งค์ผ ๊ธฐ๋กํ•˜๊ณ  ๋ฐ˜์„ฑํ•˜๋Š” ์Šต๊ด€์„ ๊ฐ€์ ธ์•ผํ•จ)

๊ธ‰ํ•œ์ผ VS ์ค‘์š”ํ•œ์ผ -> ์‚ฌ๋žŒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธ‰ํ•œ ์ผ ์šฐ์„ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ธ‰ํ•œ์ผ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•˜์ง€๋ง์ž -> ๋ฌด์—‡์ด ์ค‘์š”ํ•œ๊ฐ€? ํ™•์ธ ํ›„ ์ฒ˜๋ฆฌํ•˜๊ธฐ

# 2. ๋ฌด์—‡์„ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€?

  1. ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ๊ฐ€? -> ๋ถˆํŽธํ•œ์  -> ๋ถ„์•ผ๋ฅผ ์„ ํƒ (ex) ๋ฒ„์Šค๋ฅผ ํƒ€๊ณ  ๋‹ค๋‹ˆ๋ฉด ๋ถˆํŽธํ•จ = Domain -> ์˜ฌ๋ฐ”๋ฅธ๋ฌธ์ œ ์ฐพ๊ธฐ -> ๋Œ€๋ฐ•

์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ œ ์ฐพ๊ธฐ๋Š” ์–ด๋ ต๋‹ค

  1. ์˜ค๋Š˜ ๋ญ ๋จน์ง€? -> Why? -> ์™œ ๊ณ ๋ฏผํ•˜๋‚˜? -> ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ๊ฐ€? -> ์ฃผ๋ณ€์— ์–ด๋–ค ๊ฐ€๊ฒŒ๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅธ๋‹ค. ๋งค์ผ ๊ฐ™์€ ๊ณณ์„ ๊ฐ„๋‹ค. ์–ด๋–ค ๊ฐ€๊ฒŒ๊ฐ€ ์ข‹์€์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ธฐ์กด์— ๋ฐฉ๋ฌธํ•œ ์‚ฌ๋žŒ๋“ค์€ ๋ญ๋ผ๊ณ  ํ‰๊ฐ€ํ•˜๋Š”๊ฐ€? ์˜ˆ์ „์— ๋ด๋‘”๊ฐ€๊ฒŒ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค. ๊ฐ€๋ณด๊ณ  ์‹ถ์€ ๊ณณ์„ ๊ธฐ๋กํ•˜๊ณ  ์‹ถ๋‹ค. ๊ฐ€๊ฒŒ์— ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์‹ฌ๋ฆฌ์ ์œผ๋กœ ๋ถˆํŽธํ•œ ์ „ํ™” ๋Œ€์‹  ์˜จ๋ผ์ธ์œผ๋กœ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์„๊นŒ?

  2. ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์Šคํ† ๋ฆฌ๋ฅผ ๊ตฌ์„ฑ (์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ) = ๊ธฐ๋Šฅ๋ช…์„ธ์„œ์™€ ๊ฐ™์ง€ ์•Š์„๊นŒ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ๊ธฐ๋Šฅ์„ ์„œ์ˆ 

(์‚ฌ์šฉ์ž)๋Š” (๊ฐ€์น˜)๋ฅผ ์œ„ํ•ด (๊ธฐ๋Šฅ)์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๋Š” ๋ˆ„๊ตฌ์ธ๊ฐ€? = ์œ ์Šค์ผ€์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๋น„์Šทํ•˜์ง€ ์•Š์„๊นŒ

๊ณ ๊ฐ ๊ฐ€๊ฒŒ ๊ด€๋ฆฌ์ž

๊ณ ๊ฐ์€ ๋ญ˜ ๋จน๊ณ  ์‹ถ์€์ง€ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๊ฒŒ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. -> ๋ญ˜ ๋จน๊ณ  ์‹ถ์€์ง€ ๋ฐœ๊ฒฌ ์ด๋ถ€๋ถ„์„ ์ง‘์ค‘ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. ๊ณ ๊ฐ์€ ์ •ํ™•ํžˆ ๋จน๊ณ  ์‹ถ์€ ๊ฒŒ ๋ญ”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๊ฒŒ์˜ ๋ฉ”๋‰ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ณ ๊ฐ์€ ์ข‹์€ ๊ฐ€๊ฒŒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ‰์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณ ๊ฐ์€ ์„ ํƒ์˜ ํญ์„ ์ขํžˆ๊ธฐ ์œ„ํ•ด ๊ฐ€๊ฒŒ ๋ชฉ๋ก์„ ๋ถ„๋ฅ˜์— ๋”ฐ๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ณ ๊ฐ์€ ๋‚˜์™€ ๋‚จ์„ ์œ„ํ•ด ๊ฐ€๊ฒŒ์— ํ‰์ ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ->'๋‚˜์™€ ๋‚จ์„ ์œ„ํ•ด' ๊ณ ๊ฐ์€ ๋‚˜์ค‘์— ์ฐพ์•„๋ณด๊ธฐ ์‰ฝ๋„๋ก ๊ฐ€๊ฒŒ๋ฅผ ์ฆ๊ฒจ์ฐพ๊ธฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณ ๊ฐ์€ ๊ฐ€๊ฒŒ์—์„œ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ฐ€๊ฒŒ์— ์ธ์› ๋ฉ”๋‰ด๋ฅผ ์—์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€๊ฒŒ๋Š” ๊ด€์‹ฌ์žˆ๋Š” ๊ณ ๊ฐ์„ ๋ฐ›๊ธฐ์œ„ํ•ด ์˜ˆใ…‘์•ฝ์š”์ฒญ์„ ํ™•์ธํ• ์ˆ˜์žˆ๋‹ค. ๊ฐ€๊ฒŒ๋Š” ๋”๋‚˜์€ ๊ณ ๊ฐ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์˜ˆ์•ฝ์š”์ฒญ์— ์‘๋‹ตํ• ์ˆ˜์žˆ๋‹ค.

๊ด€๋ฆฌ์ž๋Š” ๊ณ ๊ฐ์ด ์„œ๋น„์Šค๋ฅผ ์“ธ์ˆ˜์žˆ๋„๋ก ๊ฐ€๊ฒŒ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธ๊ฐ„์˜ ์š•์‹ฌ์€ ๋์ด ์—†๊ณ , ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์€ ๋ฐ˜๋ณต๋œ๋‹ค. -> ๊ณ„ํš์„ ์„ธ์šฐ์ž. (์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ์€ ์ข‹์€ ์‹ ํ˜ธ)

  • ์–ด๋–ค์‚ฌ๋žŒ์ด ์–ด๋–ค๊ฐ€์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํ•ญ์ƒ ์ƒ๊ฐํ•˜๋Š” ์Šต๊ด€์„ ๊ฐ€์ง€์ž

# 3. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€?

๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง Restaurant Menu Item Food & Beverages User ์ •๋ณด (๊ณ ๊ฐ, ์‚ฌ์žฅ๋‹˜, ๊ด€๋ฆฌ์ž) Favorite Review Reservation

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ Sysytem Architecture

  • ์ œ์•ฝ์กฐ๊ฑด
  • ์›น Web
  • Mobile์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅ (๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜)

๋‹ค๋ฅธ๋ถ€๋ถ„์ด ์กด์žฌ, ๊ณตํ†ต์ธ ๋ถ€๋ถ„ ๊ธฐ๋Šฅ์€ ๊ณตํ†ต -> Front-end, Back-end

Multi-tier Architecture ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ ์„œ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑ

3-tier Architecture Presentataion, Business, Data Source -> Front-end, Back-end, DB -> HTML/CSS/JS , REST API, DBMS

Back-end์— ์ง‘์ค‘

*Layerd Architecture -UI Layer -Application Layer -Domain Layer -Infrastructure Layer ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด์„œ

*๊ธฐ์ˆ  Java Spring Boot REST API

# 4. Hello, World

Spring Initializr Demo

Spring.io Quick start

Gradle Java 2.1.5

option

Group kr.co.fastcampus Artifact eatgo ์„ค๋ช… eatgo Desce Eat Go Project Jar , 8

Depencencies

Web -> Spring Web Starter devtools -> Spring Boot DevTools lombok -> Lombok

Gererate the project

  1. ์••์ถ•ํ’€๊ธฐ
  2. ํ”„๋กœ์ ํŠธ ์‹คํ–‰
  3. IntelliJ ์„ค์น˜

Refactor Rename

README.md

interfaces WelcomeController

  • devTools๊ฐ€ ์•Œ์•„์„œ ์žฌ์‹œ์ž‘ํ•จ

  • test๋ฅผ ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ 

# 5. Test Driven Development

  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ = ๋ชฉํ‘œ ์ฃผ๋„ ๊ฐœ๋ฐœ = ์‚ฌ์šฉ์ž ์ค‘์‹ฌ ๊ฐœ๋ฐœ = ์ธํ„ฐํŽ˜์ด์Šค ์ค‘์‹ฌ ๊ฐœ๋ฐœ (๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ)
  • TDD์˜ ๋ชฉํ‘œ
  1. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š”๊ฒŒ ๋ชฉํ‘œ

Refactoring Test Code ์ž‘์„ฑ Test First

TDD์˜ ๊ณผ์ • Red (์‹คํŒจํ•˜๋Š” ์ฝ”๋“œ) Green (Add ๊ฐ€๋Šฅํ•˜๋„๋ก) Refactoring (x + y ๋“ฑ์„ ๊ตฌํ˜„ํ•ด์„œ ์‹คํ–‰ํ•˜๋„๋ก)

์‹คํ–‰ํ•˜๋Š”๊ฒŒ ์˜ค๋ž˜๊ฑธ๋ฆด๋•Œ TDD๋ฅผ ํ™œ์šฉ

  • Demo

Restaurant

Go TO > Test

*Tip ctrl + shift ๋กœ ๋งค์„œ๋“œ ์œ„์น˜ ๋ณ€๊ฒฝ

# 6. REST API

๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์ง€์›

์„œ๋กœ๋‹ค๋ฅธ Front-end ํ•˜๋‚˜์˜ Back-end

Create Read Update Delete

POST GET PUT/PATCH DELETE

URI URL (Uniform Resource Locator)

  • Collection ์—ญํ•  Read(List), Create

ex http://host/restaurants/

  • Member ์—ญํ•  Read(Detail), Update, Delete

ex http://host/restaurants/{id}

  • JSON

  • APIs ๊ฐ€๊ฒŒ๋ชฉ๋ก GET /restaurants GET /restaurants/1 GET /restaurants/{id}

๊ฐ€๊ฒŒ์ถ”๊ฐ€ POST /restaurants

๊ฐ€๊ฒŒ์ˆ˜์ • PATCH /restaurants/{id}

๊ฐ€๊ฒŒ ์‚ญ์ œ DELETE /restaurants/{id}

# 7. ๊ฐ€๊ฒŒ๋ชฉ๋ก

์‹ค์ œ ๊ตฌํ˜„

# 8. ๊ฐ€๊ฒŒ์ƒ์„ธ -1

์‹ค์ œ ๊ตฌํ˜„

์ค‘๋ณต Respository

# 9. ๊ฐ€๊ฒŒ์ƒ์„ธ -2

์‹ค์ œ ๊ตฌํ˜„

# 10. ์˜์กด์„ฑ ์ฃผ์ž…

Dependency Injection

์˜์กด์„ฑ ์ฃผ์ž…

์˜์กด๊ด€๊ณ„

A๋Š” B์— ์˜์กด = A๊ฐ€ B๋ฅผ ์‚ฌ์šฉ -> B์˜ ๋ณ€ํ™”๊ฐ€ A์— ์˜ํ–ฅ => ๊ด€๋ฆฌ ํ•„์š”

Controller๋Š” Repository์— ์˜์กด

Controller์— Repository๋ฅผ ์‚ฌ์šฉ

Spring IOC Container์˜ ์—ญํ•  @Component @Autowired

extract interface

# 11. ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ-1

Layered Architechture

UI Layer Application Layer Domain Layer

interfaces application domain

Menu, Item์„ ์ถ”๊ฐ€

๋ณต์žกํ•œ ๋กœ์ง -> Application Layer ๋„์ž… -> Restaurant Service

์‹ค์Šต

# 12. ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ-2

์‹ค์Šต

# 13. ๊ฐ€์งœ๊ฐ์ฒด

Mock Object

Mockito

Spring Test

POJO (Plain Old Java Object)

# 14. ๊ฐ€๊ฒŒ ์ถ”๊ฐ€-1

Header Location

Empty {} Httpie ์„ค์น˜

UI Layer = Controller Application Layer = Service

http GET localhost:8080 http POST localhost:8080/restaurants name=BeRyong address=Busan http GET localhost:8080/restaurants

Controller

# 15. ๊ฐ€๊ฒŒ ์ถ”๊ฐ€-2

# 3์ฐจ์‹œ Spring Boot ์‹ค์ „ ํ”„๋กœ์ ํŠธ 03

# JPA

# ํ”„๋ก ํŠธ์—”๋“œ

# ๊ฐ€๊ฒŒ ์ˆ˜์ •

# Lombok - 1

# Lombok - 2

# Validation

# ์—๋Ÿฌ ์ฒ˜๋ฆฌ

# 4์ฐจ์‹œ Spring Boot ์‹ค์ „ ํ”„๋กœ์ ํŠธ 04

# ๋ฉ”๋‰ด ๊ด€๋ฆฌ -1

# ๋ฉ”๋‰ด ๊ด€๋ฆฌ -2

# ๋ฉ”๋‰ด ๊ด€๋ฆฌ -3

# ๋ฆฌ๋ทฐ ์ž‘์„ฑ -1

# ๋ฆฌ๋ทฐ ์ž‘์„ฑ -2

# ๋ฆฌ๋ทฐ ์ž‘์„ฑ -3

# 5์ฐจ์‹œ Spring Boot ์‹ค์ „ ํ”„๋กœ์ ํŠธ 05

# ํ”„๋กœ์ ํŠธ ๋ถ„๋ฆฌ -1

# ํ”„๋กœ์ ํŠธ ๋ถ„๋ฆฌ -2

# ํ”„๋กœ์ ํŠธ ๋ถ„๋ฆฌ -3

# ํ”„๋กœ์ ํŠธ ๋ถ„๋ฆฌ -4

# ํ”„๋กœ์ ํŠธ ๋ถ„๋ฆฌ -5

# ์ง„์งœ ์˜์†ํ™”

# 6์ฐจ์‹œ Spring Boot ์‹ค์ „ ํ”„๋กœ์ ํŠธ 06

# ๊ฐ€๊ฒŒ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง -1

# ๊ฐ€๊ฒŒ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง -2

# ๊ฐ€๊ฒŒ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง -3

# ๊ฐ€๊ฒŒ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง -4

# ๊ฐ€๊ฒŒ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง -5

# ๊ฐ€๊ฒŒ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง -6

# 7์ฐจ์‹œ Spring Boot ์‹ค์ „ ํ”„๋กœ์ ํŠธ 07

Last Updated: 4/13/2025, 11:14:44 PM