아래에서 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 활용 가능 ✅ 복잡한 트랜잭션 로직을 코드에서 쉽게 관리 |
🎯 결론 및 추천
- Stored Procedure
- 기존에 SP가 많다면 유지하는 게 좋음.
- 성능이 중요한 경우 유리하지만, 유지보수성과 개발 속도는 떨어짐.
- 비즈니스 로직이 DB에 묶이면 애플리케이션 코드와 분리되어 관리가 어렵다.
- Entity Framework (EF, ORM)
- 새로운 프로젝트라면 ORM이 가장 생산성이 좋음.
- 유지보수성과 개발 속도가 뛰어나지만, 복잡한 SQL 최적화가 어렵다.
- 성능이 중요한 곳에는 Raw SQL을 활용해야 한다.
- 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와 관계없이 독립적인 로깅 가능 ❌ 파일 손상 시 복구 어려움 |
🎯 결론 및 추천
- DB 로깅 방식 (기존 방식 유지)
- ✅ 데이터 검색과 분석이 중요한 경우 (SQL 활용 가능)
- ✅ 트랜잭션과 연동이 필요할 경우 (로그 보존이 중요함)
- ❌ 단점: 성능 부담과 DB 장애 시 로깅 불가
- 파일 로깅 방식 도입
- ✅ 성능이 중요한 경우 (DB 부하 없이 독립적)
- ✅ 장애 발생 시 로그 유실을 방지하고 싶을 경우
- ❌ 단점: 로그 검색이 어렵고, 백업이 필요
Gitea는 경량화된 Git 서비스로, 자체적으로 CI/CD 기능을 포함하지 않습니다. 그러나 Gitea Actions와 Gitea Runner를 활용하여 CI/CD 파이프라인을 구축할 수 있습니다.
Gitea Actions는 GitHub Actions와 유사한 워크플로우 자동화 도구로, 코드 빌드, 테스트, 배포 등의 작업을 자동화할 수 있습니다. 이를 실행하기 위해서는 Gitea Runner가 필요하며, 이는 Gitea Actions를 실행하는 데 사용되는 도구입니다.
Gitea를 활용한 CI/CD 파이프라인 구축 예시:
- Gitea Actions 설정: Gitea 저장소에서 Actions 기능을 활성화하고, .gitea/workflows 디렉토리에 워크플로우 파일을 작성합니다.
- Gitea Runner 설치: Gitea Runner를 다운로드하여 설치하고, Gitea 서버와 연결합니다.
- medium.com
- 워크플로우 작성: 빌드, 테스트, 배포 등의 작업을 정의한 YAML 파일을 작성하여 .gitea/workflows 디렉토리에 추가합니다.
이러한 구성을 통해 Gitea에서 DLL 파일의 빌드와 패키징을 포함한 CI/CD 파이프라인을 구축할 수 있습니다. 다만, Gitea 자체에는 CI/CD 기능이 내장되어 있지 않으므로, Gitea Actions와 Gitea Runner를 활용하여 이러한 기능을 구현해야 합니다.
추가 자료:
- Gitea Actions 통한 CI/CD 구성하기
- Gitea Runner 통한 Gitea Actions 구성하기
- Gitea CI: Actions, Runner, and Workflow Automation
이러한 자료를 참고하여 Gitea에서 CI/CD 파이프라인을 구축하는 방법을 자세히 알아보실 수 있습니다.
'저도공부를하긴한답니다?' 카테고리의 다른 글
| 병행 방법 (0) | 2025.03.05 |
|---|---|
| 변경 추적 (0) | 2025.03.05 |
| [TIL] 체크리스트 혹은 질문리스트 (0) | 2025.02.24 |
| [TIL] 슬슬 너무 질질 끌어서 짜증나는데 EC2 생성으로 바로 넘어갔는데 프리티어라서 아니 (0) | 2025.02.12 |
| [TIL] 슬슬 너무 질질 끌어서 짜증나는데 EC2 생성으로 바로 넘어간다. (0) | 2025.02.12 |