[SPRING] WIL - 5

진규빈·2024년 11월 10일
0

스프링 WIL

목록 보기
5/8

1. 스터디 복습

Spring MVC의 개념 및 구조

MVC 패턴

애플리케이션을 Model, View, Controller로 분리하여 역할을 명확히 하고 유지보수를 용이하게 하는 디자인 패턴
◦ Model - 모델 - 애플리케이션의 데이터와 비즈니스 로직 담당
◦ View - 출력 - 사용자에게 데이터 표시
◦ Controller - 처리 - 사용자 입력 처리하고 모델과 뷰 연결

MVC를 지키며 코딩하는 방법

  1. Model은 Controller와 View에 의존하지 않아야 함 => Model 내부에 Controller와 View에 관련된 코드 없어야 함
  2. View는 Model에만 의존하고 Controller에는 의존하면 안 됨 => View 내부에 Model의 코드만 있어야 하고 Controller의 코드는 없어야 함
  3. View가 Model로부터 데이터를 받을 때는 사용자마다 다르게 보여줘야 하는 데이터에 대해서만 받아야 함
  4. Controller는 Model과 View에 의존해도 됨
  5. View가 Model로부터 데이터를 받을 때 반드시 Controller를 통해 받아야 함

Spring MVC


MVC 패턴을 웹 애플리케이션 개발에 최적화된 형태로 구현한 프레임워크
• 스프링 프레임워크의 모듈 중 웹 계층 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈

Spring MVC 요청 처리 흐름


1. 들어오는 모든 요청을 전면 컨트롤러로 작동하는 Dispatcher Servlet이 가져감
2. DispatcherServlet은 XML 파일에서 Handler Mapping 항목 가져와 Controller에 전달
3. ModelAndView의 object가 컨트롤러에서 반환
4. DispatcherServlet은 XML 파일에서 View Resolver의 항목을 확인하고 적절한 View 구성 요소 호출

View Resolver


• MVC 패턴에서 Controller가 처리 마친 후 어떤 View로 응답 생성할지 결정
• Controller가 반환한 View 이름을 실제 템플릿 파일로 매핑

RESTful 웹 서비스 설계

REST (Representational State Transfer)

• 네트워크 아키텍처 원리 중 하나로, 자원의 표현에 의한 상태 전달을 의미

REST 구성요소

• 자원 (Resource) - HTTP URI
• 자원에 대한 행위 (Verb) - HTTP Method
• 자원에 대한 행위의 내용 (Representations) - HTTP Message Payload

REST 설계 원칙

• Client-Server Architecture
• Layered System
• Stateless
• Uniform Interface
• Cacheability
• (Code on Demand)

RESTful

REST 아키텍쳐 스타일을 완전히 준수하는 웹 서비스
◦ HATEOAS를 포함한 REST의 여섯 가지 제약 조건 모두 만족해야 함
◦ GET, POST, PUT, DELETE ...

Richardson Maturity Model for REST APIs

HATEOAS를 활용한 REST API 설계

HATEOAS

• 클라언트가 서버로부터 어떤 요청을 받았을 때, 그 다음에 어떤 행동을 할 수 있는지에 대한 정보를 포함하여 응답 제공하는 것
◦ 이를 통해 클라언트는 서버로부터 받은 응답만으로도 어떤 행동을 해야 할지 알 수 있게 됨 => 클라이언트와 서버 간 통신 더 유연해짐, 클라언트와 서버 간 의존성 줄어듦 => RESTful 아키텍처의 확장성 극대화
◦ HATEOAS 적용 시 클라이언트는 특정 요청의 응답으로 필요한 정보를 링크 형태로 전달받고, 이 링크 통해 서버가 제공하는 다른 리소스와 상호작용 가능

2. 과제


main/resources/application.properties


build.gradle의 dependencies에
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.h2database:h2' 추가

📂 src/main/java
├─ 📂 week5
⎪  ⎪   └─ 📂 controller
⎪  ⎪   ⎪  ⎪   └─  UserController.java
⎪  ⎪   └─ 📂 domain    
⎪  ⎪   ⎪  ⎪   └─  User.java
⎪  ⎪   └─ 📂 exception
⎪  ⎪   ⎪  ⎪   └─  GlobalExceptionHandler.java  
⎪  ⎪   ⎪  ⎪   └─  UserNotFoundException.java 
⎪  ⎪   └─ 📂 repository
⎪  ⎪   ⎪  ⎪   └─  UserRepository.java
⎪  ⎪   └─ 📂 service
⎪  ⎪   ⎪  ⎪   └─  UserService.java
⎪  ⎪   └─ Week5Application              

폴더 구조


Week5Application 실행 후 http://localhost:8080/h2-console 접속

Postman에서 GET 요청 => 현재 아무 사용자 정보 없으므로 빈 배열 뜸

Postman에서 POST 요청
이때 Headers의 Key에는 Content-Type, Value에는 application/json 입력 후 Body에서 카테고리 raw 선택하여 예시 코드 작성


id가 1인 사용자만 GET 했을 때 잘 불러와짐

DELETE도 잘 됨

3. 김영한 스프링 입문 강의

15강. 회원웹기능 홈 화면 추가


main/java/study.hello_spring/controller/HomeController

main/resources/templates/home.html

HelloSpringApplication 실행 후 localhost:8080 방문

16강. 회원웹기능 등록


main/java/study.hello_spring/controller/MemberController

main/resources/templates/members/createMemberForm.html

MemberController에 해당 코드 추가
• spring이 setName으로 값 넣어주고 우리가 getName으로 꺼냄

17강. 회원웹기능 조회


main/resources/templates/memberList.html

MemberController에 해당 코드 추가

0개의 댓글