본문 바로가기

ETC Programmings

[C#] LINQ (Language Integrated Query) : 새로운 시도

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
 LINQ 라는 것에 대해서 개괄적인 내용만 봤을때는 어땠든 Data 를 핸들링하는 기술임에는 틀림없다고 여겼다. 실제로 .NET 3.5 에서 부터 추가된 꽤 최신의 기술이다. 새로운 통합을 통해서 새로운 표준이 되려고 하는 시도가 보이는 다소 야심찬 기술이 바로 이 LINQ 라고 볼수 있다. 어떠한 데이터의 집합들을 LINQ 라는 한가지의 언어를 통해서 .NET Framework 를 사용하는 모든 언어에서 사용하도록 하는 시도이다. SQL 과 더불어 또 다른 표준이 되려는 시도가 보인다.


<LINQ Architecture>
이런 좋은 시도에도 불구 하고 내가 공부하기 위해 보고 있는 교재에서는 LINQ를 배우기 이전에 이 기술의 허와 실을 낱낱히 공개한다. 결국은 Language에서 항상 화두가 되는 문제인 Coupling(결합도), Cohension(응집도) 에 대한 이슈이다.

먼저 LINQ는 SQL 과는 다르게 아래와 같은 특징이 있다.
- 객체지향의 개념을 도입한 쿼리문이다.
- 컴파일러가 LINQ 문을 해석하기 때문에 실행하기 전부터 오류를 검사할 수 있다.
- .NET Framework의 언어들과 합쳐 강력한 기능을 제공한다.

하지만 아래와 같은 문제를 야기 시킨다.
- 서버(DB) 와 클라이언트로 역할이 분담되어있던 것들을 클라이언트가 많은걸 부담하게 되었다. (유지비용 증가)
- 배우기 어려운 문법 (쉽다고 하지만 별로 쉬운 형태가 아니다)

책에 있는 내용 이외에 일반적으로 생각해 보면.. 그간 배웠던 Framework 들 (Proframe, Spring framework) 들을 살펴보면 Query와 실제 클라이언트의 로직과의 분리를 하는 것들이 대부분이었다. 실제 소스코드에 쿼리를 붙이는 형태로 이루어지는 것들은 없었다. 그런데 LINQ는 실제 쿼리가 컴파일이 되어 클라이언트 소스에 함께 들어가는것이니 역발상이라는 느낌이 좀 강하다.

Loosely Coupled 라는 객체지향 프로그래밍의 소프트웨어 디자인 철학에 위배되는 듯한 느낌을 감출 수 없다. 하지만 어떤 Language가 시작부터 최적의 성능과 철학을 담고 태어나겠는가.. 옛 시절 자바가 그랬듯 앞으로 LINQ의 미래도 누구도 예측하기 어려운 상황이다. 여튼 C#을 천천히 보고 있는 입장에서는 C#의 특징들을 모르고 넘어가는 일은 없어야 겠다.

그런의미에서.. XML 이래로 또다른 외계어를 배워야 겠다.