나 자신이 보지 못했던 컴퓨터 환경에서부터 지금까지.. 아직도 널리퍼져있는 문제들이 어떤 것들이 있는지 부터 살펴보는 것이 좋을 듯하다.


#사용자들의 요구사항은 폭발적이다.
#웹은 이질적이다.
#서버메모리에 아무리 돈을 쏟아부어도 메모리 부족으로 죽는다.
#버전을 관리할 수가 없다.
#보안... 좀 몰래 들여다보지 좀 마라.
#지금까지 개발된 COM 은 어떻게 할 것인가? 상호운용되어야 한다.


지금 생각나는 것은 이정도 인것 같다. 아래 설명은 위 사항들에 대한 부연설명들이다.
읽기 귀찮으신 분은 걍 넘어가셔도 될듯 하다.(나 같은 단무지-단순무식 같은 사람들은 이런 장문은 읽기 귀찮다. 그런데 또 쓰자니... 읽는 사람 생각안하고 길게 쓰게 되드라... ㅡㅡ)


#######사용자들의 요구사항은 폭발적이다.
기술교과서에서 봄직한 집채만한 컴퓨터가 나오면서부터 항상 문제점은 발생하였을 터이고, 그 문제점은 개선되기 위해서 Hardware와 Software 의 기술은 계속해서 발전을 거듭했을 것이다. 거대한 계산기에서 퍼스널 컴퓨터로 발전을 하고
그러한 하나의 단세포생물 아메바와 같던 개인의 데스크 탑은 서로 얽이?昰?네트웍으로 연결되어 이젠 인터넷은 사람들의 생활 깊숙히 자리 잡았다. 데스크탑 뿐이겠는가? 우리 주위의 모든 기기들(휴대폰, 냉장고, 아파트마저도-기계는 아니지만...)은 모두 네트웍에 연결되어 사람들을 거미줄로 꽁꽁 묶어버리려 하고 있다... (컬럼쓰냐? ㅡㅡ;;;)

되지도 않는 말주변으로 이런 이야기를 하는 이유는 우리 생활이 점점더 발전을 하면서 발생되는 사람들의 요구사항이 기하급수적으로 늘어나는 것을 이야기 하기 위해서 이다. 사람들은 주위에 널려져 있는 네트웍을 사용하고 싶어할 것이고 모든 일을 네트웍을 통해서 쉽고 빠르게 해결하려 할 것이다. 사용자들이 사용하는 그 많은 데이터들을 일순간 처리하기위해 Hardware 또한 발전할 것이도 처리속도와 처리량은 기하급수적으로 늘어날 것이다. 또 네트웍을 사용하면서 언제 어디서든지 내가 원하는 곳에 연결할 수 있지만, 반대로 악의의 사용자에 의해 그 정보가 노출되기를 원하지는 않을 것이다. 이러한 요구사항은 기술의 발전을 낫고 개발자에겐 새로운 꽁수를 낫게한다. (고로 꽁수는 기술이다. 나만 그런가? ㅋㅋㅋ)
정보를 처리하기위해서 개발자들은 자신이 개발하는 데있어서 효율적인 언어를 선택해야 했고 다른 개발자들이 사용하는 언어를 폄하하기도 했다(아직도 그렇지... java가 최ㄱ오야... vb는 쓰레드 기능을 사용할 수 없어... VB는 쥐나 개나 다해... ㅡㅡ; 내가 쥐, 개란 말인가? )
세상의 개발자들이 꽁수로 처리할 수 있는 정보의 양은 한정되어있었고
그러한 꽁수를 줄여보고자 여러가지 기술들이 나타나게된다.

#######웹은 이질적이다.
그중에 하나가 MS 에 의해 명명된 대표적인 기술 COM 이다. (이미 알려진 기술을 멋진? 단어로 재 생산하지 않는가? 마치 자신이 탄생시킨 것처럼... 하긴 윈도우즈 진영만을 이야기 한다면 그 말도 맞지 않을까?. ^^)

이제 COM을 사용하면 개발자들은 처음부터 개발할 필요가 없어졌다. 획기적이지 않은가? 써드파티에서 만들어 놓은 컨트롤을 사다가 내 로직과 연결만 시켜놓으면 된다. 그 제품의 내부가 어떻게 구현되어있는지 알 필요도 없다.(우린 발생하는 버그에 제품을 욕하기도 한다... 어떤때는 버그에 못견딘나머지 인터넷을 뒤져 컨트롤을 만들어 버리곤 하지..ㅡㅡ;)

우리의 친구 비쥬얼베이직은 COM 의 상승세를 타고 무한히 발전하는 듯 보였다.(요놈만 잘해보좌~~)
잔머리도 많이 줄어드는 듯 했다.(사실 많이 줄었다. ㅡㅡ)

하지만 이러한 환상적인 COM 은 문제점 또한 가지고 있었다.
두가지나 된다고 한다.(완벽한줄 알았던 넘인데...)

한가지는 COM은 각각이 떨어져 있는 클라이언트/서버에서 동작한다는 것(최소한 얼마라도...)과 COM 의 내부 구현을 공유하는 것이 아니라 인터페이스를 통해 서로 통신한다는 점이다. 그렇기 때문에 COM 간의 통신을 위해서 특정 메카니즘을 구현하고 있어야 하고, COM 인터페이스는 구현하는 Language(VB, C++) 에 따라서도 다르다는 단점을 가지고 있다.
그래서 VB 로 제작된 COM을 C++에서 사용한다거나 C++로 만든 COM 혹은 JAVA 로 제작된 CORBA 를 사용하기 위해서는 별도의 Mapping? 을 통해서 그 차이점을 줄이는 작업을 별도로 해주어야만 한다.
이런 작업들로 추가적인 많은 작업을 하고 있다 (배보다 배꼽이 크다면... ㅡㅡ; 포기하고 같은 언어로 하시죠 라고 말한다. ㅡㅡ)

우리 개발자들.. 특히 우리는 이세상 많은 사용자들이 모두 윈도우즈만 사용했으면 좋겠다고 생각할 것이다. (아니 윈도우즈가 아니라 리눅스라도 좋다. 제발 하나만 써다오.)

(위를 보니 너무 많이 썼다. 아래 내용은 아시는 내용이 많을테니... 양을 줄이련다. ㅡㅡ;)

#######서버메모리에 아무리 돈을 쏟아부어도 메모리 부족으로 죽는다.
우리 서버는 많은 사용자들이 요구하는 수많은 데이터를 처리하느라 늘 바쁘다.
그런 서버에게 개발자는 친절히 메모리 할당과 해제를 친절히 능숙하게 해주어야할 기본적인 의무를 가지고 있음에도 불구하고... 잠시 음주코딩으로, 졸음 코딩으로 의무를 다하지 못하는 상황이 간혹 발생한다. 그로 인해 서버의 메모리 누수는 계속 발생하여 종래에는... "수고하셨습니다~~." 서버를 다시 켜게되며 이런 상황이 발생하지 않더라도 서버관리자는 추후에 발생할지도 모르는 서버의 살해사건방지를 위해 주기적으로 부팅시켜주는 일을 하고 있다.

#######버전을 제대로 관리할 수가 없다.
우리가 프로그램을 제작을 하게 되면 배포버젼을 제작하는 그 순간부터 발생하는 버그를 수정하게 되고 곧 새로운 버젼의 프로그램을 제작하여 Patch 하거나 새 제품을 출시하게 되는데 이때 이전 버전의 제품과 호환을 이루게 하는 것이 또 하나의 작업이 되게 된다. 때문에 버전을 관리하기 위한 표준적인 메카니즘이 필요하게 됐단다..

(거기다 COM 의 문제점인 DLL Hell 도 한몫 거들고 있다.-버전이야기 하니까 갑자기 생각나네...)

#######보안... 좀 몰래 들여다보지 좀 마라.
우리는 최근들어 인터넷을 통해서 많은 일을 하게 되었다. 업무를 보고, 인터넷뱅킹을 통해 현금을 송금하고, 물건을 구입하고 게임도 한다. 이때 보안은 필수적인 것이 될 것이다.
우리가 브라우져를 통해 설치하는 ActiveX 컨트롤은 그힘이 막강하여 한번 깔리게 되면 내 PC 를 내어주는 것이나 다름 없이 모든 권한들 가지고 내 PC를 제어?할 수 있다. 이것은 사용자에게 그리 좋은 것이 아니다. 그런 프로그램은 하는 역할에 합당한 권한이 주어져야 하기 때문이다. 특정 파일에 접근하여 쓰지는 못하되 읽을수만 있게 한다거나 하도록 설정하게 하는 방법이 필요하다.

#######지금까지 개발된 COM 은 어떻게 할 것인가? 상호운용되어야 한다.
우리는 그동안 환상적이었던(아직도 환상적이기는 한) COM을 많이도 만들었다. (내가 만든것 또한 Test 프로그램을 포함해서 너무 많이 만들지 안았나? ^^;) 이런 COM 을 일시에, 한번에, 무자비하게 다 없애 버릴수 있는가?
함께 써야 한다... 내가 만든 COM 을 사용할 수 있어야 한다.
돈주고 산 써드파티 컨트롤을 이젠 못쓰니 다른 버전으로, 또는 다른 제품으로 사달라고 하면 어떤 싸장님이 좋아하시겠는가? 기존에 산 써드파티 컨트롤을 쓸수 있는 사람을 당신 대신 구할수도 있지 않을까? ^^;












저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by woojja
TAG .NET
일정 기간내의 날짜 구하는 쿼리 입니다.

database.sarang.net 에서 발췌했습니다.


SELECT TO_CHAR(dt,'yyyymmdd') "일자"
     , TO_CHAR(dt,'day') "요일"
     , DENSE_RANK() OVER(ORDER BY TRUNC(dt,'d'))||'주차' "주차"
  FROM (SELECT TO_DATE(sdt,'yyyymmdd') + LEVEL - 1 dt
          FROM (SELECT '20081221' sdt, '20090107' edt FROM dual)
               CONNECT BY LEVEL <= TO_DATE(edt,'yyyymmdd')
                                 - TO_DATE(sdt,'yyyymmdd') + 1
        )

모두 행복한 고수되시길...


woojja ))*
\\\\\\\\\\\\\\\\\\












저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by woojja

좀더 공부를 해 봐야 하겠지만...

Oracle 에만 있던 기능을 찾던 중 2005에서 제공하기 시작한 CTE 기능을 알게 되었습니다.

= 아래 쿼리는 www.datasarang.net 사이트에서 발췌했습니다.
WITH MYCAL AS
(
 SELECT
  CAST('1900-01-01' AS DATETIME) DT
  , IDX = 1
 UNION ALL
 SELECT
  DT + 1
  , IDX + 1
 FROM MYCAL
 WHERE
  DT + 1 <= '2050-12-31'
)
SELECT
   IDX
 , [DT]
 , [DT_1]  = DATEADD(DD, -1, DT)
 , [YMD]   = CONVERT(CHAR(8), DT, 112)
 , [YY]   = DATEPART(YEAR, DT)
 , [MM]   = DATEPART(MONTH, DT)
 , [DD]   = DATEPART(DAY, DT)
 , [WKDAY_SEQ] = DATEPART(DW, DT) 
 , [QTR]   = DATEPART(QQ, DT)
 , [ANIMAL]  = CASE DATEPART(YEAR, DT) % 12 - 3
      WHEN 1 THEN '자' WHEN 2 THEN '축' WHEN 3 THEN '인'
      WHEN 4 THEN '묘' WHEN 5 THEN '진' WHEN 6 THEN '사'
      WHEN 7 THEN '오' WHEN 8 THEN '미' WHEN 9 THEN '신'
      WHEN 10 THEN '유' WHEN 11 THEN '술' WHEN 12 THEN '해' END
FROM MYCAL
OPTION (MAXRECURSION 0)

이 쿼리를 MS SQL 2005 에서 돌려보시기 바랍니다.

저는 위 기능을 이렇게 사용했습니다.

WITH MYCAL AS
(
 SELECT
  CAST('37001' AS int) DT
  , IDX = 1
 UNION ALL
 SELECT
  DT + 1
  , IDX + 1
 FROM MYCAL
 WHERE
  DT + 1 <= '87100'
)
insert into insertTest
SELECT
   IDX
, DT, cast(IDX as varchar) + '_' + cast(DT as varchar) IDVALUE
FROM MYCAL
OPTION (MAXRECURSION 0)

아핫... ㅋㅋ

5만백건... 단 2초에 들어갑니다.

좋아좋아...

행복한 하루입니다.

행복한 고수되셔요...

woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Datasarang 덕분에 여러번 인서트해야만 했던, 그래서 수만 시간 걸려야 했던 작업을 순식간에 처리할 수 있을 것 같습니다.













저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by woojja