강의

멘토링

로드맵

Inflearn brand logo image

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

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

강의 소개

안녕하세요 API 테스트 하는 부분에서 질문 있습니다.

해결된 질문

작성

·

31

-1

안녕하세요 !


선생님 코드를 보면 댓글 서비스에서 댓글을 생성할때 request로 들어온 articleId 나 writerId에 대해서 실제로 데이터 베이스에 있는지 검증하는 부분이 없는데,
이렇게 구현을 하면 확실히 테스트 코드를 짤때 실제 데이터 베이스에 저장된 게시글을 넣어주지 않아서 편한것 같습니다.

혹시 실제 현업에서 코드를 짤때도 request 로 넘어온 데이터를 따로 검증을 하지 않아도 되는 건가요?

 

@Transactional
    public CommentResponse create(CommentCreateRequest request) {
        Comment parent = findParent(request);
        Comment comment = commentRepository.save(
                Comment.create(
                        snowflake.nextId(),
                        request.getContent(),
                        parent == null ? null : parent.getCommentId(),
                        request.getArticleId(),
                        request.getWriterId()
                )
        );
        return CommentResponse.from(comment);
    }

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

안녕하세요!

 

강의 소개에서도 가볍게 언급 드렸던 내용인데요, 강의에서는 대규모 시스템이란 주제를 벗어나는 내용은 최대한 간소화하기 위해 세세한 검증을 진행하지 않았던 것입니다!

요청 데이터가 신뢰할 수 있는 상황에 이르기까지, 사용자 요청값 검증은 반드시 필요합니다.

없는 게시글 또는 없는 사용자에 대해서 댓글이 작성될 수 있다면, 잘못된 데이터가 삽입될 수도 있고 공격자 어뷰징에 활용될 수도 있습니다.

 

하지만 테스트 작성에 대한 이야기는 별도입니다.

검증 코드를 넣었다고 해서, 항상 실제 DB에 저장된 데이터가 있어야하는 것은 아닙니다.

DB에 데이터가 있다고 가정하고, 실제로는 게시글의 mock 객체를 반환하여 테스트를 작성할 수 있습니다.

현 구조에서 실제 검증까지 구현한다면, 게시글 서비스로 데이터를 요청하여 검증할 수 있을텐데요,

이를 위한 클라이언트 객체에 특정 파라미터가 전달되었을 때 특정 게시글 mock 객체를 반환시키도록 할 수 있습니다.

이러한 테스트는 Mockito 프레임워크를 활용하면 편하게 작성할 수 있습니다.

게시글이 응답되는 경우 -> 검증 통과

게시글이 응답되지 않는 경우 -> 검증 실패

이렇게 각 케이스별로 분기하며 테스트를 작성할 수 있는 것이고요!

실제 연동이 정상적으로 이루어지는가에 대한 부분은, 게시글 서비스 클라이언트 객체에서 테스트를 해주면 충분합니다.

게시글 서비스 클라이언트 객체는, 게시글 마이크로서비스와의 통신을 담당하고,

CommentService는 댓글 작성을 위한 요청 값 검증을 담당한다면(게시글 서비스 클라이언트 객체 활용),

각 객체들의 책임 경계를 설정하고, 독립적으로 테스트를 구성할 수 있습니다!

 

0

안녕하세요, 인프런 AI 인턴입니다.
김태우님 질문에 답변 드리겠습니다.

실제 현업에서는 일반적으로 요청(request)으로 넘어온 데이터가 유효한지 꼭 검증하는 것이 중요합니다. 특히나 요청의 articleId나 writerId와 같이 데이터베이스에 해당 데이터가 존재하는지를 검증하는 과정은 필수적입니다. 이러한 검증을 통해 API의 신뢰성이나 보안성을 높일 수 있으며, 잘못된 데이터가 저장되는 것을 방지할 수 있습니다.

테스트 코드에서는 테스트의 편의성과 데이터의 유효성을 보장하기 위해 모의(Mock) 데이터를 사용하거나 데이터베이스를 초기화해서 미리 정의된 데이터를 사용하기도 합니다. 그렇지만, 실제 코드를 작성할 때는 항상 데이터가 올바르게 처리되고 있는지를 확인하는 것이 필요합니다.

따라서, 현실적인 시나리오에서는 articleId나 writerId에 대해 데이터베이스에 존재하는지를 검증하는 코드가 추가되는 것이 바람직합니다. 예를 들어, 데이터베이스에서 해당 ID를 조회하여 존재 여부를 확인하고, 존재하지 않을 경우 에러를 던지는 방식으로 검증할 수 있습니다.

추가적으로, 아래의 Spring Boot 테스트 관련 자료가 도움이 될 수 있습니다. Spring Boot 테스트 가이드

추가적인 의문점이 있다면 언제든지 질문해 주세요! 좋은 하루 보내세요.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기