현재 상황: 단일 DB 설정
spring.datasource.url=jdbc:sqlite:product.db
spring.datasource.driver-class-name=org.sqlite.JDBC
이 설정은 product.db
하나의 SQLite 파일만 사용한다는 뜻.
별도 설정 클랜스 불필요! ✅
Spring Boot가 자동으로 연결
// 이런 코드를 Spring Boot가 자동으로 생성해줌!
@Bean
public DataSource dataSource() {
// application.properties 설정을 읽어서 자동 생성
}
@Bean
public EntityManagerFactory entityManagerFactory() {
// JPA 설정도 자동으로
}
현재 방식 vs 다중 DB 방식 비교
현재 방식 (단일 DB) - 간단함 🎯
# 설정 파일
spring.datasource.url=jdbc:sqlite:product.db
spring.datasource.driver-class-name=org.sqlite.JDBC
// Entity - 그냥 만들면 됨
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
// Repository - 그냥 만들면 됨
public interface MemberRepository extends JpaRepository<Member, Long> {
}
// 설정 클래스 필요 없음!
다중 DB 방식 - 복잡함 🔧
# 설정 파일
spring.datasource.product.url=jdbc:sqlite:product.db
spring.datasource.user.url=jdbc:sqlite:user.db
// 복잡한 설정 클래스들 필요
@Configuration
public class ProductDataSourceConfig {
@Bean
public DataSource productDataSource() { ... }
// 많은 설정 코드...
}
@Configuration
public class UserDataSourceConfig {
// 또 다른 설정 코드들...
}
단일 DB에서 여러 테이블 사용
단일 방식으로도 여러 테이블 사용 가능
// 모두 같은 product.db 파일 안에 저장됨
@Entity
@Table(name = "members")
public class Member { ... }
@Entity
@Table(name = "products")
public class Product { ... }
@Entity
@Table(name = "orders")
public class Order { ... }
결과:
product.db
├── members 테이블
├── products 테이블
└── orders 테이블
언제 다중 DB를 사용할까?
단일 DB 사용 (현재 방식) - 추천 🟢
- 일반적인 애플리케이션
- 데이터 간 관계가 있을 때
- 트랜잭션이 중요할 때
다중 DB 사용 - 특수한 경우 🟡
- 데이터 성격이 완전히 다를 때
- 보안상 분리가 필요할 때
- 성능상 분리가 필요할 때
현재 설정으로 할 수 있는 것
@Service
public class BusinessService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private ProductRepository productRepository;
@Autowired
private OrderRepository orderRepository;
@Transactional // 하나의 트랜잭션으로 처리 가능!
public void createOrder(Long memberId, Long productId) {
Member member = memberRepository.findById(memberId).orElse(null);
Product product = productRepository.findById(productId).orElse(null);
Order order = new Order();
order.setMember(member); // 외래키 설정 가능!
order.setProduct(product); // 외래키 설정 가능!
orderRepository.save(order);
// 모든 변경사항이 하나의 트랜잭션으로 처리됨
}
}
결론
- DB 파일 1개 =
product.db
- 설정 클래스 불필요 = Spring Boot 자동 처리
- 여러 테이블 사용 가능 = 모두 같은 파일 안에
- 외래키 관계 설정 가능 = 같은 DB 내에서
- 트랜잭션 처리 간단 = 하나의 DB라서
'Spring' 카테고리의 다른 글
백엔드에서 API 응답의 HTTP 상태코드를 설정하는 방법과 원칙 (0) | 2025.06.26 |
---|---|
🚨 Spring Boot 컴포넌트 스캔 범위 문제 트러블 슈팅 (2) | 2025.06.26 |
Spring Boot 설정 시스템 application.properties, application-dev.yml (0) | 2025.06.24 |
스프링에서 받을 데이터는 '명시적'이어야 한다. (0) | 2025.06.13 |
스프링 빈의 종류 : 스코프 (1) | 2025.06.10 |