C# / SQLite / Dapper / NLOG / WPF 로 프로젝트를 진행 예정에 있습니다.
닷넷 (닷넷 프레임워크) 버전 선정 기준
1.1] 개발시 어떤 버전을 타겟으로 잡으시는지 기준을 알고 싶고, 버전도 어느 버전으로 세팅하는게 적당한지 조언을 구하고자 합니다.
1.2] window 10 / 11 설치시 기본으로 설치되는 닷넷 프레임워크 버전이 정해져있는지도 문의 드립니다.
1.3] 주변에 닷넷 개발하시는 분들이 없어서, .net Framework 4.8 로 진행할까 하는데, 이 부분에 대한 의견도 조언을 듣고 싶습니다.
낮은 버전의 닷넷 버전으로 개발된 App 은 상위 버전의 닷넷 버전에서 정상적으로 실행이 되는지에 대한 문의입니다.
ex) .net framework 4.8 로 개발이 된 App 은 설치된 PC 에 .net framework 4.8 이 존재하지 않고, .net의 7,8 버전이 설치된 PC에서도 정상 동작 하는가…? .(net 은 .net framework 를 포함하여 버전업이 되는걸로 인터넷 서칭을 통해 이해했습니다.)
SQLite DB 에 SQL 쿼리를 실행 시, ORM 으로 Dapper 적용하여, 바인딩된 쿼리를
NLog 로 로그를 출력하고자 하는데, 그 방법을 찾지 못하였습니다.
불가능한건지, 방법이 있는지도 문의 드립니다.
지금으로서는 SQL 쿼리가 저장되어있는 string 을 불러와서 바인딩처리되는 변수를 replace 하여 log.info 를 해야하나 정도로 밖에 생각을 못하고 있습니다.
네 추상화된 환경에 개발을 의탁해 DBMS나 쿼리를 의식하지않고 프로젝트를 꾸려나간다는건 꿈에가까운얘기고, 그저 의탁을 잘하기위해서 알아둬야할 개념도 더럽게많으니 그냥 ADO.NET의 번거로운부분만 싹 해치워주는 Dapper가 훨씬 편할수는 있는데요,
제가짚으려는부분은 Dapper라는게 지금, 많은거바라지도 않고 그냥 임의로 미리 구현해둔함수가지고 코드 줄수나 줄여주는정도의 편의를 제공받기위해 불필요한 대가를 치뤄야하는 라이브러리라는것입니다.
라이브러리 연식이 오래되다보니 아마 도입할 당시엔 최신 고급기술이었을법한 리플렉션, 다이나믹을 적극 활용하여 기능들이 구현되있는데요,
지금에와서보면 요것들이 코드를 난독화하고, 실행해보기전에 동작을 예측할 수 없으며, 일단 돌리면서도 뭐가 어떻게 돌아가는건지 모르게만드는 코드 품질과 프로그램 신뢰성을 저하시키는 주범들입니다.
지금껏 그정도는 감안해서 다들 써왓다지만, 현 닷넷의 방향성이 기존 동적코드들을 전부 소스제너레이터로 대체하여 컴파일시점의 검증과 런타임디버깅, 빌드Trimming 등이 지원 될 수 있도록 바꿔나가고있는데, Dapper는 이러한 혜택을 아무것도 못받습니다. 다이나믹코드가 기능구현에 필수불가결한 피쳐를 가지고있는것도 아닙니다. 아직 마땅한 대안이 없기는 하나, 이 구형의 라이브러리를 앞으로 계속 의존하기엔 무리가 있으며, 근본부터 다시만들어져야하는 라이브러리라 생각합니다.
소규모 프로젝트, DB 복잡도 낮음, DBA 없음, SQL튜닝 필요 없음 → EF 강추.
대규모 프로젝트, DB 복잡도 높음, DBA 협업, SQL 튜닝이나 검토/리뷰 필요, DB 테이블이나 스키마를 직접 어플리케이션 코드에서 관리하기 어려움 → dapper 강추
일단 DBA 와 협업하는 상황에서 EF 를 사용하면… DBA 를 괴롭히게 되더군요… =ㅅ=;;(미안…)
그리고 제가 방법을 잘 몰라서 그런 거겠지만
EF 로는 실행계획 자체를 디자인 타임에 확인할 수가 없어서 많이 번거로웠슴다.
(뭐 실행계획 뿐만 아니라 실제 테스트하여 의도한 record set 을 확인하는 것도 번거롭죠.)
EF 로 raw sql 사용하는 방법이 있긴하지만… 그럴 바에 dapper 가 더 낫다는 생각이 들더라구요.
테이블 스키마를 형상관리 해야하는 부분도 부담이긴 했어요.
(POCO 생성이든, 스케폴딩이든 모델 정보가 배포 나갈 때 빠뜨리면 문제가 생기는 상황이 꽤 있었어요)
상황마다 환경마다 다르겠지만
C# 코드로 어플리케이션 단에서 DB 를 조작할 수 있다는 강점 때문에 EF 를 선호하긴 했지만
이게 또 묘하게 비즈니스 로직이 DB 와 어플리케이션의 구분 없이 사용되는 거 같은 느낌이 들어서
뭔가 좀 애매해지는 상황도 많았슴다.