inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

114

YongIl Park

작성한 질문수 7

1

안녕하세요.

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

 

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

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

mysql에 DB schema insert 작업을 해서

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


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

 

[세부 사항]

 

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

 

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

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

mysql에 DB schema insert 작업을 해서

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

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

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

 

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

 

 

java spring spring-boot jpa 리팩터링 ddd deployment

답변 2

2

토비

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

이번 강의에선 우선은 스프링이 지원하는 메모리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 준비 과정이 복잡하지 않다면 테스트 수행 성능은 큰 차이는 없습니다.

0

YongIl Park

답변 감사드립니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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 도구에서 테스트 환경을 자동화하는 데 유용할 수 있습니다.

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

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

도메인 모델에서 관계와 규칙을 구분하는 방법

0

37

2

헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?

0

115

2

어댑터에서 도메인에 직접 의존하는 경우에 대해

0

116

2

Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.

0

103

2

MemberService와 EmailSender 책임 분리에 대한 질문

0

102

2

NonNullApi를 NullMarked로 대체하라고 합니다.

0

123

2

39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.

0

71

2

Repository Adapter 설계에 대해 피드백을 부탁드립니다

0

105

2

헥사고날 part2 강의 출시 예정일 문의 드립니다.

0

244

2

PT 문의사항

0

97

1

초기 어플리케이션 구동 시 compose.yml 파싱 오류

0

147

2

애플리케이션의 JPA 리턴과 도메인 모델

0

125

2

애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의

0

133

2

페이징 처리를 해야한다면 어떻게 해야할까요?

0

187

2

애그리거트의 repository

0

116

2

Domain Expert가 정확히 어떤 역할을 하는 사람인가요?

0

228

1

회원 애플리케이션 서비스 테스트 (1)

0

102

2

정적 팩토리 메서드 관련 질문드립니다!

0

103

2

spotbug + @NonNullApi 로만 Null 방어가 될까요?

0

127

2

required 포트에 관해서

0

90

2

혹시 다음 편은 언제쯤 오픈할까요?

0

163

2

서비스 단위 테스트 코드 작성

0

94

2

domain 모듈에 entity를 정의한다고 했을때

0

95

2

여러 엔티티의 조합으로 리포트를 제공해야할 때

0

78

2