먼저 외부에서 요청이 들어오면 컨트롤러에서 요청에 대한 처리를 하고 서비스로 보내며 서비스에서 요청한 주요 기능을 처리하기 위하여 레포지토리에 데이터에 대한 조작,변경,삽입,삭제 등을 요청하게 되고 레포지토리는 이 요청을 받아 결과를 반환하며 이걸 서비스에서 데이터를 처리한 후 컨트롤러로 보내 클라이언트는 다시 요청을 보낸 외부로 보내게 되는 구조이다.
라우터를 통해서 요청이 들어오는 경우 해당하는 클라이언트로 들어가는 역할을 한다.
여기서 의존성 주입을 위해서 컨트롤러,서비스,레포지토리를 전부다 선언하여 생성자로 값을 넣어주게 된다.
라우터에서 생성하면서 받은 postsService의 기능을 각각 연결시켜주어서 컨트롤러에서 서비스로 이동을 시키고 이 값을 받았으면 외부(라우터)에 응답을 보내주는 곳이다.
라우터에서 레포지토리를 생성자로 받아서 해당하는 레포지토리에 정보의 생성,삽입,삭제,갱신 등을 요청하게 되며 요청을 통해서 얻은 값들을 컨트롤러에 return 해준다.
DB와 직접 연결 되어 있는 부분으로써 DB에서 하는 작업들을 전부 다 처리하는 작업 공간이다.
서비스에서 요청을 처리하여 리턴된 값을 서비스에 보내준다.
이런식으로 밖에서부터 안쪽으로 안쪽에서부터 밖으로 이어지는 아키텍처 패턴을 가지고 있는 구조로써 이 방식의 장점은 의존성이 높고, 응집도가 낮게(서로가 연결이 되어 있으나 하나의 기능이 다수의 기능을 한번에 처리하지 않고 나누어서 처리하게 된다.) 짤 수 있는 패턴이다.
jest는 테스트 코드 작성 및 실행을 위한 외부 라이브러리다.
여기서 테스트 코드란, 말 그대로 코드를 테스트 하기위해서 작성하는 코드이다.
일단 자주 사용하는 함수들은 이렇게 있으며
자주 사용하는 jest 문법으로는
mock는 의존성이 높은 함수나 메서드들을 직접 실행하지 않고 호출 여부, 입력한 값의 일치 여부와 같은 정보를 확인하기 위해 사용하는 가짜 객체입니다.
특정 함수의 인자값이 필요한 경우에 mock 객체를 사용하거나, 특정 DB의 값이 필요할 때도 mock 객체를 사용하는 등 다양하게 테스트를 할 수 있으며 특정 메서드가 몇번 호출되었는지, 어떤 값을 전달받았는지, 전달 받은 데이터의 형식이 맞는지 등에 대한 다양한 조건 검사를 할 수 있게 된다.