# 2021๋ 2์ 2์ผ
SpringBoot ์ค์ ํ๋ก์ ํธ
# ์ 1์ฐจ์
# 1. ๊ฐ์์๊ฐ๋ฐ ํ์ฉ๋ฒ
"๋ญ๊ฐ ์๋ชปํ๊ฒ ์ง"
๋ฐ์ฑ์ ์๊ฐ ๊ฐ์ง๊ธฐ "๋ฌด์์ ํ๋?", "๋ญ๊ฐ ์ด๋ ค์ ๋?", "๋ค์์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?" (๊ณํ์ธ์ฐ๊ธฐ) -> ์ด๋ฅผ ํตํด์ ์ฑ์ฅํ ์ ์์ ๊ฒ์ด๊ณ , ๊ธฐ๋กํ๊ธฐ (๋งค์ผ ๊ธฐ๋กํ๊ณ ๋ฐ์ฑํ๋ ์ต๊ด์ ๊ฐ์ ธ์ผํจ)
๊ธํ์ผ VS ์ค์ํ์ผ -> ์ฌ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธํ ์ผ ์ฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ค. ๊ธํ์ผ๋ถํฐ ์ฒ๋ฆฌํ์ง๋ง์ -> ๋ฌด์์ด ์ค์ํ๊ฐ? ํ์ธ ํ ์ฒ๋ฆฌํ๊ธฐ
# 2. ๋ฌด์์ ๋ง๋ค ๊ฒ์ธ๊ฐ?
- ๋ฌด์์ด ๋ฌธ์ ์ธ๊ฐ? -> ๋ถํธํ์ -> ๋ถ์ผ๋ฅผ ์ ํ (ex) ๋ฒ์ค๋ฅผ ํ๊ณ ๋ค๋๋ฉด ๋ถํธํจ = Domain -> ์ฌ๋ฐ๋ฅธ๋ฌธ์ ์ฐพ๊ธฐ -> ๋๋ฐ
์ฌ๋ฐ๋ฅธ ๋ฌธ์ ์ฐพ๊ธฐ๋ ์ด๋ ต๋ค
์ค๋ ๋ญ ๋จน์ง? -> Why? -> ์ ๊ณ ๋ฏผํ๋? -> ๋ฌด์์ด ๋ฌธ์ ์ธ๊ฐ? -> ์ฃผ๋ณ์ ์ด๋ค ๊ฐ๊ฒ๊ฐ ์๋์ง ์ ๋ชจ๋ฅธ๋ค. ๋งค์ผ ๊ฐ์ ๊ณณ์ ๊ฐ๋ค. ์ด๋ค ๊ฐ๊ฒ๊ฐ ์ข์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ธฐ์กด์ ๋ฐฉ๋ฌธํ ์ฌ๋๋ค์ ๋ญ๋ผ๊ณ ํ๊ฐํ๋๊ฐ? ์์ ์ ๋ด๋๊ฐ๊ฒ๊ฐ ์์๋๋ฐ ๊ธฐ์ต์ด ์๋๋ค. ๊ฐ๋ณด๊ณ ์ถ์ ๊ณณ์ ๊ธฐ๋กํ๊ณ ์ถ๋ค. ๊ฐ๊ฒ์ ์๋ฆฌ๊ฐ ์๋์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ฌ๋ฆฌ์ ์ผ๋ก ๋ถํธํ ์ ํ ๋์ ์จ๋ผ์ธ์ผ๋ก ์์ฝํ ์ ์์๊น?
์ฌ์ฉ์ ์ ์ฅ์์ ์คํ ๋ฆฌ๋ฅผ ๊ตฌ์ฑ (์ฌ์ฉ์ ์คํ ๋ฆฌ) = ๊ธฐ๋ฅ๋ช ์ธ์์ ๊ฐ์ง ์์๊น ์ฌ์ฉ์ ์ ์ฅ์์ ๊ธฐ๋ฅ์ ์์
(์ฌ์ฉ์)๋ (๊ฐ์น)๋ฅผ ์ํด (๊ธฐ๋ฅ)์ ํ ์ ์๋ค.
- ์ฌ์ฉ์๋ ๋๊ตฌ์ธ๊ฐ? = ์ ์ค์ผ์ด์ค ๋ค์ด์ด๊ทธ๋จ๊ณผ ๋น์ทํ์ง ์์๊น
๊ณ ๊ฐ ๊ฐ๊ฒ ๊ด๋ฆฌ์
๊ณ ๊ฐ์ ๋ญ ๋จน๊ณ ์ถ์์ง ๋ฐ๊ฒฌํ ์ ์๋๋ก ๊ฐ๊ฒ ๋ชฉ๋ก์ ๋ณผ ์ ์๋ค. -> ๋ญ ๋จน๊ณ ์ถ์์ง ๋ฐ๊ฒฌ ์ด๋ถ๋ถ์ ์ง์คํด์ ์ด๋ป๊ฒ ํด์ผํ๋ค. ๊ณ ๊ฐ์ ์ ํํ ๋จน๊ณ ์ถ์ ๊ฒ ๋ญ์ง ํ์ธํ๊ธฐ ์ํด ๊ฐ๊ฒ์ ๋ฉ๋ด๋ฅผ ๋ณผ ์ ์๋ค. ๊ณ ๊ฐ์ ์ข์ ๊ฐ๊ฒ์ธ์ง ์ ์ ์๋๋ก ํ์ ์ ํ์ธํ ์ ์๋ค. ๊ณ ๊ฐ์ ์ ํ์ ํญ์ ์ขํ๊ธฐ ์ํด ๊ฐ๊ฒ ๋ชฉ๋ก์ ๋ถ๋ฅ์ ๋ฐ๋ผ ๋ณผ ์ ์๋ค. ๊ณ ๊ฐ์ ๋์ ๋จ์ ์ํด ๊ฐ๊ฒ์ ํ์ ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ธธ ์ ์๋ค. ->'๋์ ๋จ์ ์ํด' ๊ณ ๊ฐ์ ๋์ค์ ์ฐพ์๋ณด๊ธฐ ์ฝ๋๋ก ๊ฐ๊ฒ๋ฅผ ์ฆ๊ฒจ์ฐพ๊ธฐ์ ์ถ๊ฐํ ์ ์๋ค. ๊ณ ๊ฐ์ ๊ฐ๊ฒ์์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ธฐ ์ํด ๊ฐ๊ฒ์ ์ธ์ ๋ฉ๋ด๋ฅผ ์์ฝํ ์ ์๋ค.
๊ฐ๊ฒ๋ ๊ด์ฌ์๋ ๊ณ ๊ฐ์ ๋ฐ๊ธฐ์ํด ์ใ ์ฝ์์ฒญ์ ํ์ธํ ์์๋ค. ๊ฐ๊ฒ๋ ๋๋์ ๊ณ ๊ฐ ์๋น์ค๋ฅผ ์ํด ์์ฝ์์ฒญ์ ์๋ตํ ์์๋ค.
๊ด๋ฆฌ์๋ ๊ณ ๊ฐ์ด ์๋น์ค๋ฅผ ์ธ์์๋๋ก ๊ฐ๊ฒ์ ๋ณด๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
์ธ๊ฐ์ ์์ฌ์ ๋์ด ์๊ณ , ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ ๋ฐ๋ณต๋๋ค. -> ๊ณํ์ ์ธ์ฐ์. (์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ์ ์ข์ ์ ํธ)
- ์ด๋ค์ฌ๋์ด ์ด๋ค๊ฐ์น๋ฅผ ์ป์ ์ ์๋์ง๋ฅผ ํญ์ ์๊ฐํ๋ ์ต๊ด์ ๊ฐ์ง์
# 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
- ์์ถํ๊ธฐ
- ํ๋ก์ ํธ ์คํ
- IntelliJ ์ค์น
Refactor Rename
README.md
interfaces WelcomeController
devTools๊ฐ ์์์ ์ฌ์์ํจ
test๋ฅผ ํ์ฉํด์ผํ๋ ์ด์
# 5. Test Driven Development
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ = ๋ชฉํ ์ฃผ๋ ๊ฐ๋ฐ = ์ฌ์ฉ์ ์ค์ฌ ๊ฐ๋ฐ = ์ธํฐํ์ด์ค ์ค์ฌ ๊ฐ๋ฐ (๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋์ง ํ ์คํธ)
- TDD์ ๋ชฉํ
- ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๊น๋ํ ์ฝ๋๋ฅผ ๋ง๋๋๊ฒ ๋ชฉํ
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
โ - sql - springboot-jpa โ