[인프런] 김영한님 스프링 입문 정리 [1]

김영신·2022년 4월 14일
0

InfLearn

목록 보기
1/5

아직 모르는 내용이 많은 것 같다.
부채의식을 가지고 항상 공부하자.

컨트롤러를 먼저 찾는다

처음에 웹 도메인에서 hello로 라는 도메인이 서버로 들어가면
서버는 Controller에서 hello와 매칭이 되는 도메인 매핑을 찾는다.
Model을 넘겨 주면 해당 페이지에서 타임리프가 처리를 하여
넘겨 주게 된다.

컨트롤러가 없다면 static

만일 값이 들어오고 해당 도메인에 맞는 Controller가 없으면 Tomcat 서버는 static 폴더에 있는 경로를 찾아서 웹 브라우저로 넘겨주게 된다.

MVC 패턴

Model, View, Controller로 구분하여 개발을 하는 것

@RequestParam(대상, required?, defaultValue?)

@ResponseBody
메서드 밖에서 ResponseBody를 쓴다면 데이터를 그대로 내린다는 뜻
기본으로 JSON 객체를 반환한다.

파라미터에서 ResponseBody를 쓰고 객체를 쓴다면 들어온 정보를 바탕으로 객체를 만들어준다.


만약 서버에서 컨트롤러로 들어왔을 때 어노테이션에 ResponseBody가 사용 된다면 HTTP의 BODY에 문자내용을 그대로 반환한다.
인텔리제이는 기본 정책으로 객체가 반환 될 경우 JSON으로 반환되도록 한다.


컨트롤러 : 웹 MVC의 컨트롤러 역할
서비스 : 핵심 비즈니스 로직 구현
리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
도메인 : 비즈니스 도메인 객체

JUnit 테스트 코드 사용

Spring 프로젝트 안에서 테스트 폴더에 기본적으로 main과 동일한 이름 + test를 붙인 파일을 만든다.

어노테이션으로 @Test 를 사용한다.

테스트 코드에서 사용하는 실패처리 클래스 Assertions

org.assertj.core.api.Assertions


static 메서드라 이렇게 사용해도 되지만 해당 클래스에 alt + enter를 눌러 static import를 하면
아래 처럼 사용해도 된다.
앞으로 Assertions.assertThat() 할 필요 없이 그저 assertThat()으로 이어 나가면 된다.

Assertions.assertThat(result).isEqualTo(expected)

결과값 result가 기대했던 값 expected와 같다면 테스트는 성공적으로 통과되지만 만일 기대된 값과 다르다면

이런 결과가 나온다.

테스트 코드에서는 앞으로 System.out.println()보다는 Assertions.assertThat()을 쓰도록 하자.

테스트 코드 전체를 실행하는 경우

이 경우 메서드는 동기적으로 실행되는 것이 아닌 비동기적으로 실행되는 것이기에 따로 리소스를 반납할 필요가 있다.

그래서 repository에 clearStore()라는 메서드를 만들어 자원을 반납하였다.

public class MemoryMemberRepository implements MemberRepository{
    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;
    
    ...
    ...
    ...
    
    public void clearStore(){
        store.clear();
        Map의 함수 clear()를 사용하면 안에 있는 모든 값들이 비워진다.
    }
}

또한 테스트 하나가 실행되고 나서는 리소스가 반납이 되야 되므로 테스트 코드에서 afterEach()라는 메서드를 추가했다.

class MemoryMemberRepositoryTest {

	MemoryMemberRepository repository = new MemoryMemberRepository();

    @AfterEach
    public void afterEach(){
        repository.clearStore();
    }
}

@AfterEach 어노테이션을 사용함으로써 테스트 메서드가 하나 실행이 완료되었을때
AfterEach 어노테이션이 붙은 메서드를 실행시켜 자원을 반납시켜준다.

profile
어제보다 오늘 더 Developer

0개의 댓글