엔티티 프레임워크 – 03 설치

이전에는 막 여러 방법들이 나와있긴 한데….

이젠 그냥 NuGet으로 설치하면 끝이다. 이쪽이 프레임워크의 버전 관리 및 종속성 설치도 같이 할 수 있으면서 동시에 솔루션의 버전 관리 등에서도 쉽게 쓰이니 이쪽으로 가자.

Install-Package EntityFramework

라고 입력하거나 GUI 인터페이스에서 찾아서 설치하면 된다.

20180721_160457.png

엔티티 프레임워크 – 02 LINQ랑은 뭔 차이?

둘 다 마이크로소프트에서 만든 기술이고, 둘 다 C#, 아니 닷넷 환경에서 잘 돌아간다. 근데 이걸 왜 다 따로 적었냐고 물을 수 있다만….

근데, 결론부터 말하면 LINQ는 플랫폼이고, 엔티티 프레임워크는 그 위에서 동작하는 프레임워크다. 기술 수준이 높다 낮다가 아니라, 편의를 위해 만든 플랫폼과 그걸 이용해서 더 편하게 만들어준 프레임워크인 것이다.

근데 이렇게 말할 수 있어도 그냥 코드만 본 사람들이 이 둘은 그냥 다른 거라고 해서 여러모로 물어봐서 좀 적어봤다. 사실 ORM 같이 이용할 수 있는 엔티티 프레임워크와 LINQ to Entity 이 둘에 대해서 물어보는 사람들이 좀 많아서…

LINQ가 코드로는 사실 금방 배우고 쓸만하지만 데이터베이스 이외에도 xml 등과 같이 형식 있는 파일로도 만들어서 쓸 수 있도록 해주는 녀석도 가지고 있기 땜에 범위가 작은 게 아니다.

엔티티 프레임워크 – 01 시작

C#에서 데이터 처리를 위한 여러 가지 기술들이 있다. 그걸 전체적으로 카테고리로 나눠본다면 다음과 같이 나눌 수 있다.

  • ADO.NET – SQL
  • ADO.NET – DataSet
  • Entity Framework (ORM)
  • LINQ to SQL
  • JSON
  • XML
  • File IO

그리고 저것들 안에서도 여러모로 세부적으로 하나하나 살펴볼 수 있다. 근데 여기서 내가 엔티티 프레임워크(Entity Framework)를 직접 글로 쓰려고 맘먹고 진행하는 데에는 이유가 좀 있다.

엔티티 프레임워크는 사실 ORM(Object-relation mapping)이다. 이 기술을 위해 여러 기술들이 아래에서 움직이고 있다. 하지만 요즘 이런 거 모르겠다 하고는 그냥 지원되는 거니깐 쓰는 친구들이 너무 많다. 특히 요즘 언어 배우는 친구들은 십중팔구 ORM 거의 꼭 쓴다고 본다. ORM을 쓰면 확실하게 편한 것이 바로 객체지향에 맞는 코드를 작성할 수 있다는 것이랑 DBMS에 종속되지 않는 코드를 작성할 수 있다는 것인데, 장점도 있고, 단점도 있다. 장점이야 뭐 여러곳에서 이야기 하겠지만 단점으로는 완벽한 ORM으로만 설계를 하려면 설계를 무지하게 잘 할 수 있어야 한다. 게다가 프로젝트 좀만 더 세세해지고 복잡해지면 이 난이도가 지수 함수를 그리듯 확 올라간다. 근데 이게 좀 제대로 안된 코드를 보고 요즘 빡이 쳐서 내가 다시 공부해서 정리하고 수정중인 플젝이 있다.

요즘 코드 퍼스트로 코드를 배우고 오는 친구들 땜에 기존에 특히 좀 나이 있으셔서 어느 정도 직급을 가진 분들하고 여러모로 안맞는 경우가 있니 어쩌니 하더니 내가 그런 광경이 있었던 곳에 와서 여러모로 중계를 하려다 보니…

사담이 좀 끼었지만 이런 일 땜에 좀 더 공부하고 정리해서 남들한테 쉽게 알려줄 수 있는 목적도 좀 기대하고 쓰게 되었다.

난 글 어렵게 쓰고 설명하는 거 별로 안좋아해서 되는 한 쉽게 쓰고 쉽게 풀어서 설명할 예정이다. 진짜로…

 

완벽한 수준의 코드…? 요구사항에 대한 고려도 없는 완벽한 수준…?

난 요즘 디자인 패턴에 대한 고민이 좀 여러모로 생기고 있다.

새로 온 회사에서 여러모로 겪은 일들이 있는데 그중 하나가 바로 디자인 패턴에 대한 고민이었다.

좋은 방향으로 작성된 디자인 패턴의 코드는 누가 봐도 쉽게 이해할 수 있는, 쉽게 고칠 수 있는 그런 수준으로 작성하는 것이다라고 배웠고, 난 그걸 주로 리펙터링 과정에 이용한다. 일단 경영진과 돈의 움직임이 압박을 들어오게 되면 좋던 싫던 간에 동작하는 녀석이 먼저 나와줘야 하니깐….

근데 시간적인 압박이 있는 상황에서 패턴에 대한 깊은 생각을 하고 그걸 여러모로 수정하기 어렵게 구현되어 있는 것에 기반하여 동작하도록 만들고 하는 걸 그냥 묵인하고 봐야 되나 싶었다.

일단 이 사람 나름대로 편한 도구를 이용하여 작업을 한 것이다. 그것에 대해서 부정하고 싶진 않다. 코드가 그렇다고 해서 못짠 코드도 아니고…

근데 이 첨부터 완벽한 패턴화를 유지하려고 하다보니 수정작업에 대한 대응이 어려운 코드가 군데군데 발견되었다.

디자인 패턴을 비롯한 여러 개발자들의 소양이라 불리는 것들, 즉 도구가 요구사항과는 달리 쓸데없이 많이 그리고 정교하게 쓰인 것이다.

이게 요구대로 완성화된 프로그램이라면 다행인데… 내가 오고나서 들은 히스토리를 보니, 이건 예광탄이다. 앞으로도 수정해야 할 일들과 해야 할 일들이 한참 남아있었다. 그런데 굳이 이렇게 했다는 건 여러모로 트러블이 있었단 소리이다.

그러면 지금 당장 어떤 것이 필요하고 어떤 것이 요구되는지를 먼저 뒤져보고 내 나름대로 갈아 엎을 일만 남았다만….

좀 험난해 보인다. ;ㅅ;

글쓰는 작업이 여러모로 지체되었지만, 지금 그럴 단계가 아닌 거 같다.