Skip to content

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/

가게추가 POST /restaurants

가게수정 PATCH /restaurants/

가게 삭제 DELETE /restaurants/

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