강의

멘토링

로드맵

Inflearn brand logo image

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

사유님의 프로필 이미지
사유

작성한 질문수

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

게시글 CRUD API 구현

Snowflake처럼 동적으로 생성되는 ID, Mock 테스트가 올바른 접근법일까요?

해결된 질문

작성

·

66

·

수정됨

0

14:42 에서 Snowflake 알고리즘으로 articleId를 생성한 후 DB에 저장된 121530268440289280L값을 사용해서 테스트 코드를 작성하시는 것을 보고,

실제로 Snowflake를 도입해서 Id를 생성하고 같은 방식으로 테스트 코드를 작성한다면 DB에 종속적이라서 반복적으로 테스트 코드를 실행할 때 테스트 코드의 유지보수에서 문제가 발생할 수 있을 거라는 생각이 들었습니다.

이런 문제를 막기 위해서 테스트 시에는 Mock 객체를 사용해 미리 정해진 Snowflake가 고정 ID 값을 반환하도록 하는 방식으로 테스트 코드를 작성하는게 맞는건지 궁금해서 질문글을 남기게 되었습니다.

답변 2

0

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

사유님, 안녕하세요!

 

말씀하신 부분처럼 격리되지도 않고 멱등하지도 않은 환경에서 진행되는 테스트는,

단순히 애플리케이션 실행 결과를 수강생 분들과 눈으로 확인하기 위한 것입니다.

화면 개발은 따로 하지 않으므로, 애플리케이션이 실행되는 과정을 코드로 수행할 뿐입니다.

엄밀히 말하면, 테스트 코드라기보단 그냥 코드로 애플리케이션을 실행하는 것입니다.

이러한 테스트는 일반적으로 작성하는 격리되고 멱등한 자동화 테스트와는 분리해서 생각해주시면 좋을 것 같습니다.

물론, 자동화 테스트를 위한 격리되고 멱등한 환경의 테스트 코드도 작성하지만, 그렇지 않은 테스트는 단순히 애플리케이션을 실행해보는 과정이라고 봐주시면 됩니다!

그저 실행을 위한 스크립트를 테스트 디렉토리에 자바 코드로 작성했을 뿐입니다.

0

안녕하세요, 인프런 AI 인턴입니다. 사유님.

질문 주신 내용을 보면 Snowflake ID와 관련된 테스트 코드의 유지보수 측면에서 고민하고 계신 것 같습니다. Snowflake 알로리즘은 고유 ID를 생성하지만, 이는 테스트 시에 일정한 ID를 보장하지 않기 때문에 테스트의 일관성을 유지하기 어렵게 합니다.

Snowflake ID 테스트 접근법

  1. Mock 객체 사용: Snowflake와 같은 ID 생성기를 Mocking하여 일정한 ID를 반환하도록 하는 것은 일반적이고 유효한 접근 방식입니다. 이는 테스트를 매번 동일하게 수행할 수 있도록 보장하며, 테스트 환경과 실제 환경을 독립적으로 유지할 수 있게 해줍니다.

  2. 고정 ID 사용: 테스트 시에 데이터베이스에 의존하지 않고, 고정된 ID를 직접 사용할 수도 있습니다. 이 방법은 간단히 테스트의 예측 가능성을 유지해줍니다.

  3. 별도의 테스트 구성 사용: 테스트 환경에서만 특별한 구성이나 설정을 통해 ID 생성기를 대체하는 방식도 있습니다. 이를 통해 테스트 코드의 복잡성을 줄일 수 있습니다.

  4. Dependency Injection 사용: Spring의 DI(Dependency Injection)를 활용하여 Snowflake ID 생성기를 테스트 시에 다른 구현체로 교체함으로써, 다양한 상황에 적응 가능한 테스트 코드를 작성할 수 있습니다.

실제 서비스 상황에 맞추어 Mock을 사용하는 것이 적절하며, 이는 Snowflake 알고리즘뿐만 아니라 다른 외부 의존성이 있는 코드에도 동일하게 적용됩니다.

관련한 유사 질문과 추가적인 설명을 제공하는 게시물을 아래 링크에서 확인해보세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

사유님의 프로필 이미지
사유

작성한 질문수

질문하기