spring boot 시작하기 복습 / MVC패턴

·2022년 7월 13일
0

spring

목록 보기
22/22

https://start.spring.io/

스프링 스타터 사이트를 통해 쉽게 스프링 프로젝트를 생성하였다.

gradle project / intellij / java 11

Dependencies

  • Spring Web

  • template engines : 데이터를 받아 html 처리를 한다.

  • Lombok : 코드를 간소화해주는 라이브러리 (Refactoring, Logging)

웹페이지 동작 원리

client <--> server

브라우저가 클라이언트고, 스프링부트가 서버를 수행한다.

서버는 model , view, controller의 세가지 일을 한다. = MVC 패턴

스프링 웹 개발 기초

  • 정적콘텐츠

  • MVC와 템플릿 엔진

  • API

1. 정적 컨텐츠

내장 톰켓 서버가 스프링 컨테이너에 해당 컨트롤러가 없는 것을 확인하곤 HTML 파일을 통째로 웹으로 보낸다.

2. MVC와 템플릿 엔진

스프링 컨테이너에서 @Controller를 찾고 return과 model을 viewResolver로 보낸다.

viewResolver에서 Thymeleaf 템플릿 엔진 처리 ( = HTML처리) 를 한다.

(Dependencies로 설치해둔 tymeleaf)

3. API

스프링 컨테이너에서 @Controller와 @ResponseBody를 발견한다.

@ResponseBody 어노테이션이 있어서 viewResolver를 사용하지 않고 HttpMessageConverter를 사용한다.

1) 문자를 return 한다면 StringHttpMessageConverter 가 동작하고

2) 객체를 return 한다면 MappingJackson2HttpMessageConverter 가 동작한다.

JSON으로 변환된 데이터가 웹 브라우저로 보내진다.


일반적인 웹 애플리케이션 계층 구조

cotroller : 웹 mvc의 컨트롤러

service : 핵심 비즈니스 로직 구현

repository : 데이터베이스에 접근하여 도메인 객체를 저장하고 관리

domain : 비즈니스 도메인 객체

실습에서 사용할 DB : 메모리 기반의 데이터 저장소를 사용

데이터 저장소를 우선 정하지 않고 인터페이스로 구현 클래스를 변경할 수 있도록 설계한다.


DOMAIN

Member : 회원 객체 ( id, name)

REPOSITORY

MemberRepository 인터페이스 (save, findById, findByName, findAll)

MemoryMemberRepository


지금까지의 코드가 정상적으로 작동하는지 테스트 코드를 작성해보았다.

TEST

MemoryMemeberRepositoryTest

예상 결과 B와 실제 결과 A를 아래 메소드들에 넣어 테스트할 수 있다.

( + @Transacntional 어노테이션 )

Assertions.assertEquals( A , B )

assertThar( A ).isEqualTo( B )

각각의 테스트 동작이 서로 의존성이 없도록 afterEach 메소드를 만들었다.


public void afterEach(){

    repository.clearStore();
    
    }
    

기억할 내용

Optional findByName(String name);

optional로 감싸서 가져오는 것은 값을 가져올때 null을 처리하는 새로운 방법이다.

Member result = repository.findByName("milk").get();

get()은 optional을 한번 제거할 수 있다.

0개의 댓글