저도공부를하긴한답니다?

db io, orm, gitea

쟉트 2025. 3. 4. 13:59
728x90
DB I/O 방식으로 Stored Procedure, Entity Framework (ORM), 그리고 **SmartSQL (Mapper)**을 고려 중이구나.

아래에서 5가지 주요 측면(성능, 유지보수성, 개발 속도, 보안, 트랜잭션 관리) 을 기준으로 각각의 장단점을 비교해볼게.


🔥 DB I/O 방식 비교 (MSSQL 기준)

비교 항목Stored ProcedureEntity Framework (EF, ORM)SmartSQL (Mapper, Dapper 등)
1. 성능 (Performance) ✅ 미리 컴파일된 SQL이어서 실행 속도가 빠름 
✅ 네트워크 트래픽 감소 (서버에서 직접 실행) 
❌ 복잡한 로직이 많으면 유지보수 어려움
✅ ORM 캐싱 및 Lazy Loading 가능 
❌ ORM이 SQL을 생성하므로 최적화 어려울 수 있음 
❌ 복잡한 쿼리는 성능 저하 발생
✅ SQL 최적화 가능 (직접 작성) 
✅ 경량 프레임워크로 성능 우수 
❌ SQL 직접 작성 필요 (자동 최적화 없음)
2. 유지보수성 (Maintainability) ❌ DB 종속적, 로직이 SQL에 묻히면 가독성 저하 
❌ 버전 관리 어려움 (코드가 아닌 DB에 있음)
✅ 코드 중심 개발로 유지보수 쉬움 
✅ 모델 변경이 자동 반영됨 
❌ DB 설계 변경 시 영향이 클 수 있음
✅ SQL과 코드가 분리되어 가독성 좋음 
✅ 적절한 추상화 가능 
❌ SQL 직접 수정 필요
3. 개발 속도 (Development Speed) ❌ Stored Procedure 작성과 관리가 필요 
❌ 코드-DB 간 타입 매핑 필요 
✅ 기존 SP가 있다면 재사용 가능
✅ 코드만으로 DB 접근 가능 
✅ 자동 마이그레이션 지원 
❌ SQL 튜닝이 필요할 수도 있음
✅ 간결한 SQL 문법 (Mapper 사용) 
✅ 자동화 기능 없이 직접 최적화 가능 
❌ SQL을 직접 작성해야 함
4. 보안 (Security) ✅ 권한 관리 및 SP 내부에서 실행 가능 
✅ SQL Injection 방어 가능 (파라미터 바인딩 활용) 
❌ 동적 SQL을 사용하면 보안 취약 가능
❌ ORM의 기본 쿼리가 노출될 수 있음 
✅ 기본적으로 SQL Injection 방어 가능
✅ SQL Injection 방어 가능 (파라미터 바인딩 활용) 
❌ 직접 작성 시 보안 실수 가능
5. 트랜잭션 관리 (Transaction Handling) ✅ MSSQL 내장 트랜잭션 지원 
❌ 복잡한 트랜잭션 로직을 코드에서 처리하기 어려움
✅ ORM에서 자동 트랜잭션 지원 
❌ 복잡한 트랜잭션일 경우 성능 저하 가능
✅ ADO.NET의 TransactionScope 활용 가능 
✅ 복잡한 트랜잭션 로직을 코드에서 쉽게 관리

🎯 결론 및 추천

  1. Stored Procedure
    • 기존에 SP가 많다면 유지하는 게 좋음.
    • 성능이 중요한 경우 유리하지만, 유지보수성과 개발 속도는 떨어짐.
    • 비즈니스 로직이 DB에 묶이면 애플리케이션 코드와 분리되어 관리가 어렵다.
  2. Entity Framework (EF, ORM)
    • 새로운 프로젝트라면 ORM이 가장 생산성이 좋음.
    • 유지보수성과 개발 속도가 뛰어나지만, 복잡한 SQL 최적화가 어렵다.
    • 성능이 중요한 곳에는 Raw SQL을 활용해야 한다.
  3. SmartSQL (Mapper, Dapper 등)
    • 성능과 유지보수성의 균형을 맞추려면 Mapper 방식이 유리.
    • SQL을 직접 작성할 수 있어 최적화 가능하지만, ORM보다 코드량이 많아질 수 있다.
    • 쿼리를 직접 관리하면서도 ORM의 유지보수성을 원하는 경우 좋은 선택지.

 프로젝트에 가장 적합한 선택지는?

  • 기존 SP를 유지하면서 성능을 유지해야 한다  Stored Procedure + Dapper 조합
  • 유지보수성과 개발 속도를 중시한다  Entity Framework 사용
  • 성능과 유지보수성을 둘 다 고려한다  SmartSQL (Dapper 등) 사용

→ 프로젝트 목표가 기존 Stored Procedure를 유지하면서도 가독성을 높이고 싶다면, SmartSQL과 병행하는 방식이 가장 적절할 것 같아.

 


로깅 방식을 DB 로깅 vs 파일 로깅 두 가지로 비교해볼게.
주요 비교 항목은 성능, 데이터 보존, 검색 및 분석, 유지보수, 장애 대응 5가지야.


🔥 DB 로깅 vs 파일 로깅 비교표

비교 항목DB 로깅 방식파일 로깅 방식
1. 성능 (Performance) ❌ INSERT 쿼리마다 DB 부하 발생 
❌ 대량 데이터 입력 시 성능 저하 가능 
✅ 인덱스를 잘 활용하면 빠른 조회 가능
✅ 로컬 파일에 직접 쓰기 때문에 성능 우수 
✅ 비동기 로깅 활용 시 성능 부담 적음 
❌ 대량 로그 파일 관리가 필요
2. 데이터 보존 및 안정성 (Durability & Reliability) ✅ 트랜잭션 및 백업 관리 가능 
✅ 장애 발생 시에도 데이터 보존이 가능 
❌ DB가 다운되면 로깅도 불가능
❌ 파일 손상 시 데이터 복구 어려움 
❌ 디스크 공간 부족 시 로그 손실 위험 
✅ DB 부하와 무관하게 독립적으로 기록
3. 검색 및 분석 (Search & Analysis) ✅ SQL을 이용한 강력한 검색 기능 
✅ 여러 서버의 로그를 통합 관리 가능 
❌ 복잡한 쿼리는 성능 저하 가능
❌ 텍스트 기반 검색 어려움 
❌ 여러 서버에서 로그 통합 분석 어려움 
✅ ELK(Stack) 등 외부 툴과 연동 가능
4. 유지보수 (Maintenance) ❌ 스키마 변경이 필요할 수 있음 
❌ 테이블이 커지면 성능 튜닝 필수 
✅ 중앙 집중형 관리 가능
✅ 파일만 관리하면 돼서 간단 
✅ 별도 DB 설정 없이 사용 가능 
❌ 로그 파일이 많아지면 관리 어려움
5. 장애 대응 (Failure Handling) ❌ DB 장애 발생 시 로깅 불가 
✅ 트랜잭션 롤백 및 복구 가능
✅ DB와 관계없이 독립적인 로깅 가능 
❌ 파일 손상 시 복구 어려움

🎯 결론 및 추천

  1. DB 로깅 방식 (기존 방식 유지)
    • ✅ 데이터 검색과 분석이 중요한 경우 (SQL 활용 가능)
    • ✅ 트랜잭션과 연동이 필요할 경우 (로그 보존이 중요함)
    •  단점: 성능 부담과 DB 장애 시 로깅 불가
  2. 파일 로깅 방식 도입
    • ✅ 성능이 중요한 경우 (DB 부하 없이 독립적)
    • ✅ 장애 발생 시 로그 유실을 방지하고 싶을 경우
    •  단점: 로그 검색이 어렵고, 백업이 필요

 

 

Gitea는 경량화된 Git 서비스로, 자체적으로 CI/CD 기능을 포함하지 않습니다. 그러나 Gitea Actions Gitea Runner를 활용하여 CI/CD 파이프라인을 구축할 수 있습니다. 

Gitea Actions는 GitHub Actions와 유사한 워크플로우 자동화 도구로, 코드 빌드, 테스트, 배포 등의 작업을 자동화할 수 있습니다. 이를 실행하기 위해서는 Gitea Runner가 필요하며, 이는 Gitea Actions를 실행하는 데 사용되는 도구입니다. 

Gitea를 활용한 CI/CD 파이프라인 구축 예시:

  1. Gitea Actions 설정: Gitea 저장소에서 Actions 기능을 활성화하고, .gitea/workflows 디렉토리에 워크플로우 파일을 작성합니다.
  2. Gitea Runner 설치: Gitea Runner를 다운로드하여 설치하고, Gitea 서버와 연결합니다. 
  3. medium.com
  4. 워크플로우 작성: 빌드, 테스트, 배포 등의 작업을 정의한 YAML 파일을 작성하여 .gitea/workflows 디렉토리에 추가합니다.

이러한 구성을 통해 Gitea에서 DLL 파일의 빌드와 패키징을 포함한 CI/CD 파이프라인을 구축할 수 있습니다. 다만, Gitea 자체에는 CI/CD 기능이 내장되어 있지 않으므로, Gitea Actions와 Gitea Runner를 활용하여 이러한 기능을 구현해야 합니다. 

추가 자료:

이러한 자료를 참고하여 Gitea에서 CI/CD 파이프라인을 구축하는 방법을 자세히 알아보실 수 있습니다.