기타
프로시저 및 트리거 사용을 권장하지 않는 경우
greeniti
2024. 12. 24. 22:14
최근 데이터베이스 및 애플리케이션 설계에서 Oracle과 같은 RDBMS에서 프로시저 및 트리거 사용을 권장하지 않는 경우가 종종 있습니다. 이는 특정 환경과 설계 철학의 변화로 인한 것이며, 그 배경에는 여러 가지 이유와 대안이 있습니다.
프로시저 사용 권장 하지 않는 이유
- 비즈니스 로직의 분리 필요
- 현대적인 애플리케이션 설계에서는 비즈니스 로직을 데이터베이스(프로시저)보다는 애플리케이션 계층(서버 코드)에서 처리하도록 권장합니다.
- 이는 코드 가독성, 테스트, 디버깅 및 유지보수성을 향상시키는 데 도움을 줍니다.
- 멀티 플랫폼 지원의 어려움
- 프로시저는 특정 데이터베이스 시스템(Oracle, MySQL 등)에 종속됩니다.
- 애플리케이션이 여러 데이터베이스를 지원해야 할 경우, 데이터베이스 종속적인 코드는 이식성이 떨어집니다.
- 확장성 문제
- 클라우드 기반 환경이나 마이크로서비스 구조에서는 데이터베이스가 주로 데이터 저장에 집중하고, 비즈니스 로직은 별도의 서비스에서 처리하는 것이 일반적입니다.
- 프로시저는 데이터베이스 부하를 증가시킬 수 있어 확장성을 저하시킬 가능성이 있습니다.
- 디버깅 및 테스트의 어려움
- 프로시저 내의 로직은 일반적인 애플리케이션 코드보다 디버깅과 테스트가 어렵습니다.
- 특히, 버전 관리나 테스트 자동화 도구와의 통합이 제한적입니다.
- 데이터베이스 락 및 동시성 이슈
- 프로시저에서 복잡한 트랜잭션을 처리하는 경우, 잠금 문제나 성능 병목이 발생할 수 있습니다.
- CI/CD와의 통합 제한
- 현대적인 DevOps 환경에서는 코드 배포가 자동화되어야 하지만, 데이터베이스 프로시저는 일반 애플리케이션 코드처럼 쉽게 통합하기 어렵습니다.
프로시저 대신 권장되는 대안
- 애플리케이션 계층에서 처리
- 비즈니스 로직은 Python, Java, Node.js, .NET 등 애플리케이션 레이어에서 처리하도록 설계.
- 데이터베이스는 단순히 데이터 저장, 검색 및 트랜잭션 관리를 담당.
- ORM (Object-Relational Mapping) 사용
- Hibernate, Django ORM, SQLAlchemy와 같은 ORM 도구를 사용하여 데이터베이스 작업을 추상화.
- 이식성과 유지보수성을 향상시킴.
- 마이크로서비스 아키텍처
- 데이터베이스와 비즈니스 로직을 분리하여 각각 독립적으로 확장 가능하게 설계.
- Stored Procedure 최소화
- 프로시저를 사용해야 하는 경우, 데이터 무결성 보장이나 성능 최적화 등 특정 목적으로 제한적으로 사용.
- 데이터 처리 전용 엔진
- 대량의 데이터 처리를 위해 ETL 도구(Talend, Informatica 등)나 데이터 분석 플랫폼(Spark, BigQuery 등)을 사용.
프로시저 사용이 여전히 유효한 경우
권장하지 않는 경향이 있지만, 특정한 경우에는 프로시저를 사용하는 것이 여전히 유용합니다.
- 데이터베이스와 밀접한 작업
- 데이터베이스 레벨에서의 복잡한 계산이나 집계 작업.
- 예: 대규모 OLAP 시스템에서의 데이터 처리.
- 보안
- 데이터베이스 내부에서만 실행되어야 하는 민감한 로직(예: 암호화, 데이터 접근 제한).
- 네트워크 부하 감소
- 애플리케이션과 데이터베이스 간의 통신을 최소화하기 위해 다량의 데이터를 데이터베이스 내부에서 처리.
결론
프로시저 사용을 권장하지 않는 것은 트렌드와 설계 철학의 변화에서 비롯된 것이지만, 특정 상황에서는 여전히 유용할 수 있습니다. 따라서, 사용 여부는 시스템의 요구사항, 설계 목표, 성능, 유지보수성 등을 종합적으로 고려하여 결정해야 합니다.