인프런 커뮤니티 질문&답변

bamho님의 프로필 이미지
bamho

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Presentation Layer 테스트 (2)

Mock 반환값 질문

작성

·

53

0

  • 프론트랑 협업 하실 때, 서비스 로직을 먼저 만드는게 아닌 반환값을 먼저 준다고 하셨는데(?) 예를 들어 어떻게 주시는지 궁금합니다. 하드코딩으로 그냥 데이터를 임의로 입력해주시는건지 예시를 보여주시면 감사하겠습니다 !
    컨트롤러, 서비스, 레포지토리에서 어떤식으로 진행되는지 궁금합니다.

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, Doobie 님!

하드코딩하여 데이터를 넣어준다고 보시면 됩니다 ㅎㅎ
FE 에서도 직접 API를 호출하면서 이해하고 개발하는 것이 가장 효율적이기도 해서요.
상호 간 스펙 논의를 하고, 여러 케이스를 정의하고, 대표적인 케이스 한두가지를 하드코딩해서 빠르게 제공합니다.
(물론 API 문서만 제공하고 개발하는 경우도 많습니다. 항상 그런 것은 아니고, 시간이 어느정도 보장될 때 합니다.)

  • Controller

    • 요청과 응답 스펙이 정의되었다는 가정 하이니, 관련 DTO를 만듭니다. 이 부분은 코드 양이 많지 않으니 바로 개발하는 편에 속합니다.

    • 시간이 허락한다면 Controller 테스트도 같이 작성하면 좋겠네요.

  • Service

    • Service에서 특정 케이스에 맞는 가짜 데이터를 하드코딩합니다.

    • 정확하게, 자세히 다 만들 필요는 없고, 그저 API의 정상 동작만을 제공하는 것을 목표로 합니다.

  • Repository

    • 이 부분은 아직 개발 전입니다.

저는 요렇게 해서 개발 서버에 배포하고, 그 이후는 FE, BE가 각자 병렬로 개발한 뒤에 맞춰가는 형태로 진행하고 있습니다.
위에서 언급한 대로 API 문서와 함께 제공하는 것이 가장 좋은 방법입니다.

정답은 아니니, 참고만 해주세요!

감사합니다 🙂

0

안녕하세요, 인프런 AI 인턴입니다.
Doobie님께서 질문주신 Mock 반환값을 먼저 주는 방법에 대해 설명드리겠습니다.

프론트엔드와의 협업 시, 백엔드 개발자가 서비스를 구현하기 전에 프론트엔드가 개발을 진행할 수 있도록 임시로 Mock 데이터를 반환할 수 있습니다. 이는 주로 초기 개발 단계에서 빠른 기능 개발을 위해 사용되며 하드코딩된 예제 데이터를 사용하게 됩니다.

예시:

컨트롤러

@RestController
@RequestMapping("/api")
public class SampleController {

    @GetMapping("/example")
    public ResponseEntity<Map<String, String>> getExample() {
        // 하드코딩된 데이터 반환 (example endpoint)
        Map<String, String> mockResponse = new HashMap<>();
        mockResponse.put("status", "success");
        mockResponse.put("message", "This is a mock response");
        return ResponseEntity.ok(mockResponse);
    }

}

서비스

서비스 레이어는 주로 비즈니스 로직이 들어가지만 초기 단계에서는 필요 없다면 생략 가능합니다. 직접적으로 컨트롤러에서 Mock 데이터를 반환하도록 구성하기도 합니다. 필요할 경우 간단하게 인터페이스만 정의해 놓을 수 있습니다.

레포지토리

레포지토리 또한 데이터베이스 연동이 필요한 경우가 아니라면 초기 Mock 데이터라면 미리 정의해 놓지 않아도 됩니다.

이와 같은 방식으로 프론트엔드 개발자에게 예상되는 API 형태와 반환값을 제공하여 개발을 진행할 수 있게 도와줍니다. 실제 서비스 로직이 완성되면 Mock 값을 실제 비즈니스 로직으로 대체하면 됩니다.

더 자세한 예제가 필요하시다면, Spring Boot의 테스트에서 사용하는 다양한 Mocking 라이브러리들, 예를 들어 Mockito 등을 활용하여 좀 더 유연한 Mock 객체를 생성하는 방법도 학습해 보시기 바랍니다. Spring Boot Reference Documentation에서 테스트와 관련된 정보를 확인하실 수 있습니다.

bamho님의 프로필 이미지
bamho

작성한 질문수

질문하기