inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Business Layer 테스트 (3)

안녕하세요 재고 테이블에 대해서 질문 있습니다.!

해결된 질문

722

qheogus55

작성한 질문수 42

2

안녕하세요 멘토님 강의 잘듣고 있습니다!

제가 테이블을 언제 만들어야 하고 합쳐야 되는지에 대해서 잘 모르겠습니다.

혹시 검색 키워드와 상품테이블에서 재고를 관리하지 않고 따로 테이블을 만든 이유가 있을까요 ?

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 2

1

박우빈

안녕하세요, qheogus55 님!

설계에 관한 것은 공식이 있는 것은 아니고 실무 경험을 쌓으면서 만들어가고, 또 경험이 쌓이면서 관점이 바뀌기도 하는 것이라 어떻게 하는 것이 정답이다라고 말하기는 어려운데요.
상품 테이블과 재고 테이블을 분리한 이유는 다음과 같습니다.

  • 상품 테이블이 가져야 하는 정보와 재고 정보는 각기 다른 관심사를 가집니다.

    • 상품 테이블은 상품 그 자체에 대한 수많은 정보(이름, 가격, 부가정보 등)를 가질 수 있습니다.

    • 재고라는 개념은 '어떤 것'이 '몇 개' 남아있는지(유효한지)를 관리하는 정보입니다. 즉, 어떤 것인지는 관심이 없습니다.

  • 만약 상품 테이블에서 재고 정보를 관리한다면, 상품 정보를 수정할 때에도 해당 테이블에, 재고 정보를 관리할 때에도 해당 테이블에 CRUD 작업을 수행해야 합니다.

    • 구현이 불가능한 것은 아니지만, 요구사항이나 운영 상황이 복잡해질수록 이에 따른 많은 불편함들이 생길 수 있습니다.

  • 상품이라는 도메인의 생애주기와 재고라는 도메인의 생애주기는 서로 다른 사이클을 가집니다.

    • 상품은 관리자가 처음 등록하고, 더이상 판매하지 않을 때까지 유지되며, 삭제되기 전까지는 자주 수정될 일이 없습니다.

    • 재고는 상품이 판매되기 시작하는 순간부터 존재하며, 상품 정보와 다르게 사용자 요청에 따라 실시간으로 변경됩니다.

즉, 도메인의 생애주기라는 관점에서 상품과 재고는 그 데이터에 접근하는 시점, 주체, 방식이 서로 다르기 때문에, 관리의 용이성을 위해 별개의 테이블에 관리하도록 설계했다고 이해해주시면 좋을 것 같습니다.

도움이 되셨기를 바랍니다.
감사합니다. 🙂

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
qheogus55님, 테이블을 분리하여 설계하는 것은 여러 이유가 있을 수 있습니다.

  1. 정규화: 데이터 중복을 최소화하여 데이터의 일관성과 무결성을 유지하기 위해.
  2. 확장성: 시스템이 커질 때, 재고 관리와 같이 독립적으로 확장하고자 할 경우 테이블을 분리.
  3. 유지보수: 관련된 데이터가 많아질수록 한 테이블에 모든 정보를 담으면 복잡해져, 유지보수가 힘들 수 있습니다.
  4. 성능 최적화: 작업의 성격에 따라 테이블이 분리되어 있으면 쿼리 최적화와 부하 분산에 효과적.

검색 키워드로는 ‘데이터베이스 정규화’, ‘데이터베이스 설계’, ‘테이블 분리 기준’을 사용할 수 있습니다.

실제 강의 내용에 대한 구체적인 질문이라면, 수강 전 문의 게시판을 통해 지식공유자님께 직접 질문해보시는 것이 좋을 것 같습니다.
해당 기능이 활성화된 강의인지 확인해보시고, 원하는 답변을 얻으실 수 있기를 바랍니다.

참고로 이렇게 설계한 이유에 대해서는 강의 내에서 제공하는 자료를 확인하시면 도움이 될 수 있습니다. 강의 동영상을 클릭하신 후에는 상단 바 혹은 강의 목차 내에 있는 구름 아이콘을 통해 강의자료를 찾으실 수 있습니다.

강의자료 확인 방법 이미지
자세한 정보는 인프런 FAQ에서 확인하실 수 있습니다: 인프런 FAQ

private 상수 테스트 관련 질문

0

83

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

126

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

161

2

테스트 문서화 질문입니다

0

105

2

단위테스트 질문이 있습니다

0

96

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

103

2

ERD 가장자리에 있는 도메인 테스트 질문

0

89

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

135

2

OrderCreateRequest DTO에 대해서 궁금한점

0

102

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

156

2

계층 관련 질문이 있습니다.

0

139

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

124

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

134

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

228

2

Service+Repository 통합테스트 관련 질문입니다.

0

150

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

185

2

test 용 .yml

0

90

2

throws Exception

0

80

2

카페키오스크 클래스 문의 ,,

0

89

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

174

2

테스트 코드에서 필요한 생성자

0

138

1

tearDown 순서

0

116

2

@Builder 생성자 private

0

136

2

@DisplayName gradle / intellJ

0

93

2