본문 바로가기

공부/Spring

[서적 핵심 정리 - 토비의 스프링 3] Ch5. 서비스 추상화

Enum

  • 자바 5 이상에서 제공
  • 숫자 형식으로 정의된 상수를 정의하는 것보다 Enum으로 필요한 값을 정의하는 것이 예외 상황을 피하기 좋음


트랜잭션 (Transaction)

  • 데이터베이스에서 최소 작업 단위 (더 이상 나눌수 없음)
  • 데이터베이스 트랜잭션의 ACID 특성
    • 원자성(Atomicity)
      • 트랜잭션은 더 이상 나눌수 없는 작업 단위
      • 트랜잭션은 모두 실행되거나, 모두 실패해야 함 
    • 일관성 (Consistency)
      • 트랜잭션은 데이터 무결성 조건을 만족해야 함
      • 트랜잭션이 성공하면, 데이터베이스는 언제나 일관성 있는 상태로 유지되어야 함
    • 고립성 (Isolation)
      • 트랜잭션은 다른 트랜잭션과 독립적으로 수행되어야 함 (서로 영향을 주어서는 안됨)
    • 지속성 (Durability)
      • 성공적으로 수행된 트랜잭션에 대해 그 결과가 물리적으로 반영되어야 함
  • 대부분의 데이터베이스는 트랜잭션을 지원하며, 실패한 트랜잭션을 Rollback 하거나 성공한 트랜잭션을 Commit하는 명령을 지원


JTA (Java Transaction API)

  • 다수의 DB 또는 트랜잭션을 지원하는 서비스에 대한 통합 트랜잭션 관리 API
  • XA 프로토콜을 통해 다른 서비스를 제어하고 관리


단일 책임의 원칙 (SRP, Single Responsibility Principle)

  • 하나의 클래스는 하나의 책임을 가져야 함
  • 즉, 하나의 클래스를 변경하기 위한 이유는 하나여야 함


테스트 대역 (Test Double)

  • 테스트를 간편히 수행하기 위해 실제 오브젝트의 기능에만 맞춰 만들어진, 테스트에서 사용할 목적으로 만든 객체를 의미
  • 테스트 스텁 (Test Stub)
    • 테스트 동안에 코드가 정상적으로 수행될 수 있도록 돕는 클래스
    • e.g. DummyMailSender
  • 목 오브젝트 (Mock Object)
    • 테스트동안 테스트 대상 오브젝트와 상호작용하는 오브젝트를 테스트하기위한 테스트 대역