세션8. 시스템 데이터

1. 설계 접근법과 TDD

시스템 각 구성요소를 설계하는 접근법은 다양하다. 그 중 데이터베이스에서 시작하는 설계와 인터페이스에서 시작하는 설계를 설명하고 TDD 절차와 비교해보자.

데이터베이스에서 시작하는 설계 주요 흐름

데이터베이스에서 시작하는 설계 특징

  • 데이터베이스 제약 조건을 통해 데이터의 일관성과 무결성이 유지하기가 쉽다.

  • 데이터베이스 스키마는 모델과 코드에 비해 변경 비용이 크기 때문에, 시스템 설계 유연성이 낮아진다.

  • 데이터베이스 스키마는 비지니스 지식 표현력이 낮다.

  • 작업 부하 분산이 어렵다. (아직 왜 그런지는 모르겠다)

  • 응용프로그램의 역할을 클라이언트와 데이터베이스 연산의 연결수단으로 바라본다.

  • 인터페이스 설계가 데이터베이스 스키마에 논리적으로 의존한다.

  • 기능 및 비기능 요구사항 난이도가 낮고 변경이 적을수록 유용하다.

  • 데이터베이스 중심 아키텍처가 대표적

인터페이스에서 시작하는 설계 주요 흐름

인터페이스에서 시작하는 설계 특징

  • 클라이언트에 제공되는 가치가 설계 결정 주도권을 같는다.

  • 비지니스 지식이 시스템에 풍부한 어휘로 표현된다.

  • 인터페이스 설계는 데이터베이스 스키마에 의존하지 않는다.

  • 구현 기술을 다양하게 검토할 수 있다.

TDD 를 사용하는 설계 주요 흐름

2. 시스템 상태

이전 코드까지는 시스템에 상태가 필요하지 않았기 때문에, DB 를 사용하지 않았다.

하지만 이제부터 아래 요구사항을 충족하기 위해서는 상태 관리를 해야하기 때문에, DB 가 필요하다.

구현 예제와 테스트 코드

위 테스트 코드를 실행시켜보면 테스트는 실패한다. 이유는 다음과 같다.

  • 기존 테스트 코드는 고정값을 사용하는데, 고정값을 사용하면 컨트롤러에서 400을 리턴하기 때문에, 마지막 테스트 코드는 성공할찌라도 이전 테스트코드는 실패한다.

이를 위해서 임의 테스트 데이터를 만드는 객체가 필요하다.

3. 임의 테스트 데이터

테스트 모음의 각 테스트가 독립적이고 안정적으로 실행되도록 EmailGenerator, usernameGenerator 를 만들어 테스트마다 임의의 데이터를 생성해 사용하자.

추가적으로 아래 요구사항을 충족하는 코드와 테스트를 추가하자.

구현 예제와 테스트 코드

Last updated