강의

멘토링

로드맵

Inflearn brand logo image

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

YongIl Park님의 프로필 이미지
YongIl Park

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

배포 시 테스트 코드가 돌아갈때 사용하게 될 RDB 셋팅에 관하여..

작성

·

28

·

수정됨

0

안녕하세요.

강의 정말 잘 들었습니다.
도움이 많이 되어서 수강평은 나중에 꼼꼼히 작성해볼 생각입니다~!
====================== 바쁘시면 이 부분만 읽으셔도 됩니다. =============

 

배포 시 jenkins server에서 실제 서버에 배포할때 테스트가 돌아갈텐데

jenkins server에 compose를 통해 작동 하게 될

mysql에 DB schema insert 작업을 해서

동일하게 구조를 맞추고 테스트가 돌아가게 하는 게 좋은 생각일 까요?


===========================================================

 

[세부 사항]

 

일단 테스트 코드가 local mysql에서 돌아가는 걸로 이해 했습니다.

 

배포 시 jenkins server에서 실제 서버에 배포할때 테스트가 돌아갈텐데

jenkins server에 compose를 통해 작동 하게 될

mysql에 DB schema insert 작업을 해서

동일하게 구조를 맞추고 테스트가 돌아가게 하는 게 좋은 생각일 까요?

현재 아직 jenkins 배포를 하고 있지는 않고 소스코드 개발중이라

머리속으로만 생각하는 상태입니다.

 

토비님 의견은 어떠신가요.....?

 

 

답변 2

1

토비님의 프로필 이미지
토비
지식공유자

중요한 질문을 해주셨네요. 강의 시리즈에서 언젠가 다룰 내용입니다.

이번 강의에선 우선은 스프링이 지원하는 메모리DB를 이용해서 빠르게 테스트를 수행하는 방법을 선택했습니다. 테스트 수행 속도도 빠르고, JPA의 다이얼렉트 지원으로 각 DB에 맞는 SQL이 생성되기 때문에 나중에 MySQL에서 동작할 코드이더라도 우선은 h2와 같은 가벼운 DB에서도 거의 차이가 없이 기능을 수행하게 할 수 있어서 제법 충분한 검증이 가능합니다.

하지만 운영 시스템으로 배포하기 전에는 실제 사용할 DB를 이용하는 최종 테스트를 수행하는 것이 바람직합니다. 또, 성능을 위해서 특정 DB의 네이티브 쿼리와 같은 테스트용 메모리 DB로는 수행이 불가능한 기능을 테스트하기 위해서도 운영에서 쓰기로 한 MySQL 테스트 DB를 준비해서 테스트를 하는 것이 바람직합니다.

배포 전에 진행할 테스트에 사용할 DB는 CI/CD 파이프라인에서 도커를 이용해서 환경을 준비하고 사용할 수 있고, 테스트가 병렬적으로 수행되지 않는 것이 보장된다면 미리 설치해둔 테스트용 DB에 대해서 테스트를 할 수 있습니다.

Jenkins에서 배포를 준비하면서 테스트를 수행하는 경우라면 도커를 이용해서 셋팅된 MySQL에 대해서 테스트를 하시는 것이 좋을 듯합니다.

빌드와 배포 파이프라인이 여러 단계가 있고 복잡하다면 각각 다른 전략을 선택할 수 있겠지만, 반드시 지켜야 할 것은 테스트 수행 성능을 위해서 메모리DB를 사용하기로 결정했더라도, 중요한 배포 이전에, 혹은 팀의 결정에 따라 PR 생성이나 배포 준비 단계에서라도 실제 DB로 테스트를 수행하는 것입니다.

경우에 따라서 로컬에서도 MySQL을 로컬 설치한 DB나 Testcontainer를 이용해서 띄우고 매번 테스트하는 방법을 선택할 수도 있습니다. DB 준비 과정이 복잡하지 않다면 테스트 수행 성능은 큰 차이는 없습니다.

YongIl Park님의 프로필 이미지
YongIl Park
질문자

답변 감사드립니다.

0

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

제공해주신 질문에 기초해 답변을 드리겠습니다. Jenkins를 사용해 배포 시 테스트 환경을 설정하는 것에 대해 고민 중이신 것 같습니다.

  • Jenkins와 Docker Compose: Jenkins에서 CI/CD 파이프라인을 설정한다면 Docker Compose를 활용하여 필요한 MySQL 데이터베이스 환경을 자동적으로 구성하는 것은 좋은 접근 방식입니다. 이렇게 구성하면 로컬 환경과 Jenkins 상의 테스트 환경이 동일하게 유지되어 일관성을 갖출 수 있습니다.

  • DB Schema Setup: Jenkins 파이프라인 시작 시점에 MySQL의 스키마나 데이터베이스 초기 데이터를 삽입하는 단계를 스크립트화하여 추가해 둘 수 있습니다. 이렇게 하면 매번 테스트 전에 동일한 환경이 보장되어 테스트의 신뢰성을 높일 수 있습니다.

  • 테스트와 프로덕션의 일관성: 중요한 점은 테스트 데이터와 프로덕션 데이터를 분리하여 관리하고, 테스트 환경에서 사용하는 데이터는 실제 서비스 환경에서의 데이터를 안전하게 대체할 수 있도록 가상화하거나 적절하게 관리해야 합니다.

관련 질문의 참고 URL

이와 유사한 설정에 대한 더 많은 정보를 보기 원하신다면, 아래 유사한 질문들을 확인해 보시기 바랍니다:

위의 질문에서는 compose.yml 파일을 통해 MySQL 환경을 구성하는 방법과 데이터베이스 초기화를 다룹니다. 이러한 설정은 Jenkins와 같은 CI 도구에서 테스트 환경을 자동화하는 데 유용할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

YongIl Park님의 프로필 이미지
YongIl Park

작성한 질문수

질문하기