Pleasure resort of Gleam™

Dev & Mng +165
우리가 자신의 꿈을 마음 속에만 담아둔다면, 그 꿈은 ‘언젠가는’이라는 꼬리표를 떼지 못한 채 막연한 것으로만 남을 것이다. 그러나 그것을 종이 위에 적었을 때, 우리는 자신에게 이렇게 말할 수 있다. “좋아, 너는 이제 약속을 했어. 네가 그 약속을 잘 이행하는지 두고 볼거야.”
자신의 꿈을 그냥 흘려 보낼 수도 있지만, 그것을 실현해 보고 싶은 도전의 욕구를 무시하는 것이 더 어렵다. 누군가로부터 어떤 일을 놓고 도전을 받았다고 생각해보라. 그것은 아마도 당신을 자극하여, 심장을 자극하고 두뇌 활동을 촉진시킬 것이다.

도전은 에너지를 생산하여 우리의 행동을 촉발시킨다. 도전 앞에 선 사람은 현재의 한계를 극복하는 방법을 생각하게 된다. 미지의 세계로 향할 때 아드레날린의 작용은 더욱 활발해 진다. 우리는 더 ‘굶주림’을 느끼고 더 집중하게 된다. 모험은 더욱 긴박해진다.

특정한 목표에 도전한다는 것은 우리 자신을 그 목표가 있는 곳으로 이끌고 간다는 의미이다. 매번 성공할 수는 없다. 실제로 두려움과 실패를 겪을 때도 있다. 그러나 실패 그 자체가 도전을 더욱 값지게 만든다. 우리에게는 항상 다시 시작할 기회와 더 좋은 길을 선택할 기회가 주어지기 때문이다.

모든 도전은 새로운 것에 대한 학습 경험이다. 이미 알고 있는 것에서는 배울 것이 없다. 우리는 목표를 위해 투쟁하고 그 목표에 힘들게 도달하는 과정에서, 그리고 한번도 가본 적이 없는 길을 여행하는 과정에서 뭔가를 배우게 된다.

아이들은 이것을 본능적으로 안다. 아이들은 매일 도전에 직면한다. 아이들은 아무것도 모르고 시작하기 때문에 모든 것이 그들에게는 도전이 되는 것이다. 그리고 아이들에게는 지칠 줄 모르는 호기심이 있다. 그들은 새로운 것을 전혀 두려워하지 않으며 아주 작은 것이라도 어떤 기술을 다 익혔을 때에는 기쁨을 경험한다. 아이들이 맨 처음 걸음마를 했을 때, 공을 잡았을 때, 새로운 단어를 말했을 때 어떻게 웃는지 들어보라. 그 빛나는 웃음보다 달콤한 소리는 아마도 없을 것이다.

우리는 작은 성취에도 즐거워하는 방법을 다시 배워야 한다. 자부심을 느끼기 위해 목표에 도달할 때까지 기다릴 필요는 없다. 오늘 자기 개발 서적 두 장을 읽었다면 그것으로 자신의 등을 두드려라. 전화 상담을 통해서 한 명의 고객에게 만족을 주었다는 사실을 자랑스럽게 생각하라. 도서관에 가서 새로운 직업 정보를 조사했다는 사실 자체를 즐겁게 생각하라.

당신이 이룬 업적에 자부심을 가져라. 그리고 계속 전진하라. 오늘 두 장을 읽었다면 내일은 석장을 읽을 것이다. 한 명의 고객에게 만족을 주었다면 다음에는 두 명의 고객에게 만족을 줄 수 있을 것이다. 취업 정보를 조사했다면, 이력서를 보내거나 전화를 걸거나, e-메일을 띄워보라. 당신이 성취한 작은 일로부터 자부심과 에너지를 보충하여, 다음 단계에는 더욱 힘차게 전진하라.

사소한 도전과 실행이 나중의 커다란 차이를 만들어 냅니다. 작은 일로부터 자신을 격려하고 그것을 진심으로 즐기게 되면 무엇을 성취해 나가는 과정은 결코 부담스런 것이 아닌 즐거운 과정이 됩니다. 당신은 지금으로부터 6개월 뒤 혹은 1년 뒤에 자신도 모르게 변해버린 스스로의 모습에 깜짝 놀라게 될 지도 모릅니다. 그러한 변화는 바로 지금 이 순간의 도전으로부터 시작됩니다.


From: HUNET

Comment +2

뉴스그룹에 올라온 내용이다.

특정 테이블에

이런 데이터가 있다고 가정할때..

최근 등록된 글중 area값이 a, b, c인 항목을 각각 하나씩 가져 오려고 한다. 단 area의 값은 순차적으로 나와야 한다.

해답은 아래와 같은 쿼리를 사용하면 된다.

Group By를 이용해 area컬럼의 최대 값을 구하는 인라인 뷰를 만들고, 그것을 원래테이블(실제 데이터 테이블)과 조인하여 결과를 구하면 된다.

실행 결과는 다음과 같다.


전체코드:
DECLARE @t TABLE (
			idx 	int 		identity,
			area 	varchar(1),
			con 	varchar(5),
			dday	varchar(5)
		)
INSERT INTO @t VALUES('a','d_typ','05.26')
INSERT INTO @t VALUES('a','c_typ','05.27')
INSERT INTO @t VALUES('c','d_typ','05.28')
INSERT INTO @t VALUES('b','d_typ','05.28')
INSERT INTO @t VALUES('a','h_typ','05.29')
INSERT INTO @t VALUES('b','t_typ','05.29')

SELECT * FROM @t
SELECT area,max(dday) dday from @t GROUP BY area
SELECT	a.idx, a.area, a.con, a.dday
FROM
	@t a,
	(
		SELECT		area, max(dday) dday
		FROM		@t
		GROUP BY	area
	) b
WHERE	a.area = b.area AND a.dday = b.dday
ORDER BY a.area ASC

구글에서 보기

Comment +0

다음과 같은 helloWorld.cs 소스 파일을 생각해 보자. 가장 전통적인 프로그램인 hello, world 프로그램이다.
using System;

namespace helloWorld {
	public class hello {
		public string Print() {
			return ("hello, world");
		}
	}
}

이 프로그램을 이제 다음과 같이 컴파일한다.
csc /t:library helloWorld.cs

컴파일을 마쳤다면 helloWorld.dll 파일이 생성되어 있을 것이다.

만일 hello, world 스트링을 얻는 것이 우리 비즈니스의 목적이라면 비즈니스 로직 DLL은 이렇게 작성되는 것으로 끝난다. 프리젠테이션은 그 목적별로 다르게 이 helloWorld.dll을 이용하는 것으로 나타난다. 지역 어셈블리에 한한다면, 콘솔 프리젠테이션은 다음과 같이 작성된다.
using System;
using helloWorld;

public class classMain{
	public static void Main(){
		hello myHello=new hello();
		Console.WriteLine(myHello.Print());
	}
}

.NET 체계에서는 이런 중간과정의 비즈니스 DLL을 콘솔과 WEB 모두 동일한 방법으로 이용할 수 있다는 것이다. 웹 환경에서 이용하려면 이 dll을 웹 서비스의 /bin 디렉토리에 삽입한 뒤 다음과 같은 코드로 이용할 수 있다.
<%@ Page Language="C#"%>
<%@Import namespace="System"%>
<%@Import namespace="helloWorld"%>

<Script Language="C#" Runat="Server">
hello a;
void Page_Load(){
	a=new hello();
}
</script>

<html>
	<head>
		<title>Hello, World Application</title>
	</head>
	<body>
		<%=a.Print()%>
	</body>
</html>

이 소스를 볼 때, "아니 ASP.NET은 기존 ASP와 별다른 점이 없는 건가?" 하는 의문을 가질 수 있다. 실제로 프리젠테이션은 코드 비하인드를 사용하든, 컨트롤을 사용하든 그건 중요한 점이 아니다. 많은 ASP.NET 개발자들이 간과하는 점이 .NET 체계에서의 혁신은 비즈니스 로직의 일관성이며, 컴포넌트 지향성이라는 중요한 사실은 잊어버리고, 프리젠테이션의 형태에만 신경쓰고 있는 것이 사실이다. 프리젠테이션은 필요한 어떤 방법을 사용해도 좋다. 하지만, 설계의 일관성과 설계의 적절성을 잊어버린 프리젠테이션을 갖고 ASP.NET 프로그램을 작성하려면 차라리 이전 ASP로 복귀하는 편이 나을 수도 있다.

즉, .NET 체계의 개발 방법은, COM 체계가 가졌던 프로그램 구현상의 어려움을 해소하는 것에 있다. 비즈니스 로직이 동일한 COM Application으로 구성되고 웹과 포그라운드 애플리케이션이 그 로직을 호출해 쓰는 방법에 있어서 COM은 너무나 많은 부가 코드와 개발자의 노력을 잡아먹었다. 그러나 .NET은 이것을 한방에 해소한다는 것이 가장 중요한 포인트이다.

Comment +0

지역 어셈블리: /bin 디렉토리의 활용
웹 사이트의 /bin 디렉토리는 .NET 지역 어셈블리 DLL을 담고 있다. 비즈니스 로직을 전역 어셈블리화 할 경우와 지역 어셈블리화 할 경우가 있는데, 보통 다음과 같은 경우 지역 어셈블리를 사용한다.
  • 해당 어셈블리가 다른 형태(포그라운드 혹은 서비스)의 참조가 이루어지지 않을 경우
  • 해당 어셈블리가 전역 어셈블리로 동작할 경우 이름 겹침 문제가 발생할 가능성이 높은 경우
  • 비즈니스 로직이 자주 변경되는 경우, 잦은 DLL 파일의 재컴파일이 있을 경우

지역 어셈블리는 전역 어셈블리와는 달리 변경할 경우, 그 변경의 영향이 어디까지 미치는지 정확히 파악이 가능하다. 따라서, 잦은 비즈니스 변경이 있는 환경에서 사용되며 웹 기반 환경의 경우 특별한 이유가 없다면 지역 어셈블리를 사용하는 것이 적절하다.

지역 어셈블리 컴파일 및 저장
웹 개발 환경에서 가급적 Visual Studio.NET은 피하는 것이 좋다. 비즈니스 로직만을 설계하는 계층에서는 논리적 측면이 꼬이지 않도록 처리해야 하며, 웹 개발과 관계된 측면은 디자인적인 문제와 한 페이지의 수명이 무척이나 짧은 HTTP 자체의 성향 때문에 VS.NET을 사용하지 않는 편이 좋다. 요약하면 ASP.NET으로 개발하기 위해서는 자신이 여지껏 친숙했던 에디터 하나만 있으면 된다.

전역 어셈블리의 사용
전역 어셈블리, 혹은 공개 어셈블리는 gacutil 을 가지고 몇 가지 규칙에 의해 지역 어셈블리를 시스템에 등록한 상태로 사용하는 것을 의미한다. 이러한 형태의 어셈블리는 비즈니스 로직이 웹 출력과 C/S 출력 두 가지로 이루어질 경우 DLL이 위치된 디렉토리 명시가 힘들기 때문에 사용한다. 그러나 .NET DLL 자체의 속성은 변하지 않는다.

From: 윈도우즈사용자그룹

'Dev & Mng' 카테고리의 다른 글

3-Tier Dll 기반의 Hello, World Application  (0) 2005.06.02
비즈니스 로직의 DLL 화  (0) 2005.06.02
.NET 기반의 3-Tier Application  (0) 2005.06.02
눈속임의 극치 포스트백  (0) 2005.06.02

Comment +0

3-Tier Application 혹은 N-Tier Application이 항상 빠른 것은 아니다. 오히려 대부분의 응용프로그램은 3-Tier 체계로 가면 느려질 수 있다. 여기서 3-Tier라는 것은 미들웨어를 넣는다는 개념이 아니라, 정확히 업무 영역이 데이터저장과 관련 애플리케이션/비즈니스 애플리케이션/프리젠테이션으로 나누어지는 것을 의미한다. N-Tier 응용프로그램을 이런 형식으로 구성하게 되면, 프로그램의 유지 보수가 훨씬 쉬워지게 된다.

근본적으로 윈도우 계열의 개발에서 애플리케이션이 명백하게 비즈니스 로직으로 나누어져 개발한 예는 국내에서 그렇게 찾아보기 쉽지 않다. 대부분은 COM 관련 코딩이 워낙 닭짓이라, 웹과 관계된 부분은 아예 별도의 애플리케이션으로 구성하고, C/S로 관리되는 부분은 아예 파워빌더나 비주얼 베이식으로 별도의 애플리케이션으로 운영하였다. 따라서, 이러한 방식은 모양만 3-Tier일 뿐이며, 실제는 2-Tier로 운영되는 셈이다.

따라서, 윈도우 계열에서는 여지껏 모양만 3-Tier인 애플리케이션이 대세로 자리잡았던 셈이다. 하지만, .NET 부터는 응용프로그램이 3-Tier 형식을 갖추는 데 별다른 장애가 없다. 정말 유닉스스러운(?) 개발 과정을 갖고 있기 때문에, 웹 응용프로그램을 개발함에 있어서, 마치 기존 유닉스 프로젝트를 수행하는 것처럼 해 나가면 되기 때문이다.

개발 환경이 이런 식으로 달라지면서 개발 방법은 다음 두 가지로 나누어진다.
  • 전체 애플리케이션을 하나의 어셈블리로 개발하는 방법 : 애플리케이션을 하나의 어셈블리로 만들고, 네임스페이스를 부여한다.
  • 애플리케이션을 기능적으로 조각내어, 기능을 따라 가는 방법 : 각 애플리케이션은 몇 개의 서브애플리케이션의 수평적 조합으로 이루어지는 형태로 작성된다. 각 조각은 별도의 어셈블리가 된다.
.NET에서는 이러한 개발 방법론 외에 몇 가지 방법론을 더 제시하지만, 근본적으로 닷넷프로젝트는 EJB 프로젝트의 구성과 무척이나 닮아 있다. 단, EJB가 전체에서 부분을 생각한다면 .NET은 부분에서 전체로 이어지는 방식을 사용하게 되는 것이 차이점이다.

Code Behind와 같은 괴상한 개념의 출현
사실상 ASP.NET은 프리젠테이션의 일부일 뿐이다. 하지만, 현존하는 많은 ASP.NET과 관계된 기사들은 대부분 프리젠테이션으로 ASP.NET이 아닌, 그 자체로만 ASP.NET을 보고 있다. 즉 3-Tier의 전면에 서서 "도대체 DB 로직이나 애플리케이션 로직이 어떻게 돌아가는지 모르겠는데, 어쨌든 이 메소드를 호출하면 이런 값이 나올 것이야!" 라는 개념만 알고 있다면 프리젠테이션의 역할은 끝난다고 볼 수 있다. 이 경우 코드를 숨기는 코드 비하인드는, 프로그램의 가독성을 심각하게 떨어뜨릴 수도 있다. 이러한 것이 C에서의 include 개념과 같다고 생각하면 안 된다. include는 공통의 개념을 반복하는 반복성 닭질을 줄이자는 것에 의미가 있지만 코드 비하인드는 단순히 코드를 숨기는 것 이외의 장점은 존재하지 않는다. (물론, 디자인과 코드가 분할되면 디버깅 등의 작업이 용이하다는 MS측의 말이 있긴 하지만, 디자인과 코드의 분할은 Mission Impossible에 가깝다.)

분할 방법
3-Tier 응용프로그램은 일단 기능적으로 분할하는 방법이 가장 편리하게 쓰인다. 이러한 개념은 .NET보다는 EJB 진영에서 많이 고민하고, 발전시켰으며, .NET은 EJB보다는 훨씬 더 분산적인 방법을 사용하는 것이 좋다. .NET 프레임워크가 하나의 EJB 컨테이너로 간주되고, EJB 컴포넌트를 .NET 어셈블리로 생각하면 문제는 쉽게 풀린다. 물론, 이렇게 1:1 로 대응시키기엔 개념상의 다소 무리가 따르기는 하지만, .NET 자체는 J2EE의 영향을 무척 많이 받은 것은 사실로 보인다.

어셈블리 DLL
그렇다면 .NET N-Tier Application의 구체적인 구현 방식은 데이터베이스와 관계된 많은 작업을 수행하는 어셈블리 DLL과, 어셈블리 DLL에서 메소드를 호출하는 프리젠테이션 영역으로 나누어진다고 볼 수 있다. 어셈블리는 전역 어셈블리와 지역 어셈블리로 나뉘며, C/S와 Web이 동시에 작동하는 환경이라면 전역 어셈블리쪽으로 DLL을 등록한다. 하지만, 3-Tier이면서 서비스와 운영 및 관리가 별도로 분리되고, 전부 웹 기반 하에서 작동한다면 웹 기반의 지역 어셈블리 쪽이 훨씬 이득을 볼 수 있다. 물론, 이 모든 것은 선택의 문제이다.

From: 윈도우즈사용자그룹

Comment +0

포스트백은 WEB 개발을 마치 비주얼 베이식과 같은 이벤트 드리븐으로 만들어 보자는 개념이다.

그러나, 포스트백은 전혀 새로운 개념이 아니다. 마우스로 어떤 지점을 클릭했을 경우 이벤트는 브라우저까지밖에 가지 않는다. HTTP 자체의 표준이 변화하지 않았기 때문이다. 그러면, 포스트백이 일어나는 상황은 과연 어떤 것일까?

무식하게, 모든 이벤트 발생시에 웹서버를 호출하는 것이다(!!!) 정말 이렇게 동작할지 의문이 드는 사람이 있다면 지금 당장 스니퍼로 네트워크 분석을 해 보라. 정말 무식하기 이를 데 없는 방식을 채택한다. 더구나, 같은 페이지의 상태를 유지하기 위해, 관련 모든 정보를 Base64로 깔끔히(?) 인코딩해 준다. 이런 짓을 반복해도 웹서버는 별로 부하가 걸리지 않는다면 Intel에 감사해야 할 것이다. 오, 정말 좋은 CPU를 만들어주셨군요......!

그럼에도 불구하고 두 페이지의 연속성은 보장되지 않는다. 즉 이벤트 발생 전에 받았던 내용은 이벤트 발생 이후에 일단 서버로 포스팅되기 때문에 이벤트와 무관한 데이터는 전부 어떤 형태로든 다른 방법으로 저장하고 있어야 한다. 마이크로소프트는 이러한 문제를 해결하기 위해 ViewSate라는 것을 제공한다. 하지만, 이 ViewState는 근본적으로 세션이기 때문에 ViewState를 많이 쓰는 페이지는 필연적으로 서버사이드 메모리의 엄청난 소모를 야기하게 된다.

그럼에도 불구하고 이전의 개발 방법에 비해 현격히 달라진 장점은 없다. 서버를 엄청나게 괴롭히는 것만이 늘어났을 뿐이다. 이것은 Microsoft가 가진 VS.NET 기반의 개발을 추구하려는 망상에 불과할 뿐이다.

따라서, 근본적으로, ASP.NET에서는 HTTP의 표준 형태를 위배하는 기법들을 사용할 필요는 없다. 이러한 프로그램들은 VS.NET을 단지 프론트페이지의 확장으로 보는 시각에서나 활용할 만 하다.

그렇다면 웹 컨트롤로, 포스트백도 모두 사용하지 않는다면, 어떻게 웹 개발을 수행할 수 있는 것인가? 이렇게 반문하는 ASP.NET 프로그래머들을 종종 보아 왔다. 하지만, 많은 ASP.NET 프로그래머들이 간과한 측면이 하나 있다 그것은 기존의 ASP, JSP, PHP를 개발하는 방법과 현재 등장한 ASP.NET을 개발하는 프리젠테이션 방법론 사이에는 아무런 차이가 없다는 사실이다.

즉, 신규 삽입된 많은 개념을 전혀 사용하지 않고도 웹 서비스의 개발 및 운영에는 아무런 문제가 없다. <asp:lable>이라는 태그를 달지 않고도 <%=thisValue%> 와 같은 구문은 여전히 유효하며, 훨씬 더 현재 프로그램의 가독성을 높이는 데 쓰이는 것이다.


From: 윈도우즈사용자그룹

Comment +0

Microsoft가 한 가장 최근의 닭짓이라고 한다면 ASPNET의 웹컨트롤이라고 할 수 있다. 사용자그룹 내에서조차 1995년 NCSA의 웹서버를 운영하면서부터 지금껏 나온 많은 방법론 중에 가장 불필요한 방법론이 바로 웹컨트롤의 도입이라는 논란이 많다. 도대체 왜 만들었을까? 하긴 전작의 비주얼 인터데브나, 프론트페이지 서버 익스텐션 등의 닭짓의 연장선이라는 판단으로 보면 그렇게 깊은 우려감이 드는 것은 아니지만, 이번 건은 그래도 조금 심각한 닭짓이다. ASP.NET이라는 개발 방법을 새로 만들어 내고, 운영언어까지 바꾼 상황에서 이런 쓸데없는 기능까지 첨부한다면 마치 이렇게 웹 개발을 해야 표준인 것처럼 오해하기 쉬워지며, 정작 기존에 잘 갖추어진 방법론으로 개발한 개발자들은 점차 줄어들어 버리기 때문이다-심지어는 MS가 고급개발자를 시장에서 없애버리기 위한 장기적인 음모라고 할 수도 있다.

프리젠테이션과 코드 분리-미션 임파서블에 도전
프리젠테이션과 코드의 분리는 미션 임파서블이다. 이것은 컨트롤로 분리할 수 있는 측면은 실제로 전무하다. 더구나 컨트롤 안으로 들어간 것은 더이상 "이건 디자이너의 영역이야" 라고 디자인팀으로 던져 개발팀 밤샘을 줄이고 죄없는 닭 한마리 더 잡아 디자인실에 던져주고 도망갈 수도 없다. 이건 철저히 /엔/지/니/어/ 의 몫이라는 디자인팀의 한마디에 좌절해야 한다.
하지만, 닷넷 개발 환경이라고 할지라도, 웹 컨트롤 하나도 쓰지 않고 개발이 가능해진다. 오히려 웹 컨트롤을 덕지덕지 붙여 놓은 것은 기존 HTML 코드 기반의 가독성을 처절하게 떨어뜨린다. 도대체 저놈의 블랙박스 안에 어떤 놈들이 들어있는 건지 저놈들이 프리젠테이션이 될 때 그 모양새가 어떻게 튀어나올 것인지 예측이 불가능해진다. 오로지, VS.NET을 갖고 봤을 때 뭔가 웹스러운 놈들이 눈에 보인다는 차이가 좀 있긴 하다. 하지만, 우리 수석디자이너에게 VS.NET 갖고 보여줄 수는 없지 않은가?
실제로 프로그램의 중추신경은 비즈니스 로직이다. 그 말은 웹 컨트롤이 프로그래머 입장에서는 프로그램과 디자인이 구분되어 비즈니스 로직에 모든 일을 다 바쳤으면 얼마나 좋겠느냐만은, 실제로 웹 컨트롤을 아무리 업무에 효율적으로 활용하려고 해도 엔지니어쪽에서는 그다지 효율적인 결론을 도출하지는 못하였다.
EJB 진영에서도 이러한 시도는 사실 하지 않고 있다. 사실 윈도우 프로그램은 제작과정에서 프리젠테이션에 과다한 부하가 걸리며, 이는 비즈니스 로직의 설계시간을 갉아먹을 정도이다.

컨트롤이 그렇게 가치있는 프리젠테이션인가?
원론적으로 따져서, 컨트롤 자체를 정의하고 다시 쓰는 것은, 웹 시스템의 프리젠테이션을 윈도우처럼 이벤트 드리븐으로 변경한다는 측면이 있다. 여기에다 포스트백이라는 아주 강력한 닭짓의 조합으로 인해, 안그래도 부하에 허덕이는 불쌍한 시스템은 단지 프로그래머의 취향에 의해 한 번에 처리할 일을 몇 번이고, 게다가 Base64 인코딩과 서버사이드 메모리까지 동원하여 부하를 가중시키고 있다. 이렇게 아주 기술이 발전되었어도 간과한 측면이 하나 있다. 그것은 바로 HTTP 표준은 아무 것도 변하지 않았다는 점이다(!)
HTTP 표준이 변하지 않은 상태에서 이벤트 드리븐이라고, 이것은 거의 개 풀뜯어 먹는 소리이다. (풍산개는 풀도 뜯어먹기도 한다고 하지만.) 결국 개발자의 지적 유희(차라리 MS의 지적 유희라고 하자)를 위해, 불쌍한 우리 웹서버는 오늘도 한 번에 처리하고, 단순 메모리로 처리할 일을, 각각의 이벤트까지 만들어 최고의 닭짓을 반복하고 있다. 대용량 서비스에서, 서비스 속도를 저하시킬 만큼 컨트롤이 과연 가치있는 솔루션인가? 포스트백까지 포괄해서?

사용자 정의 컨트롤
사용자 정의 컨트롤까지 가면 이제 웹 개발 자체가 누더기가 되어 버린다. 물론, 그 자체로 체계적인 상속관계를 유지할 수 있지만, 웹 개발자의 궁극적 목적은 디자인이 아니다. 차라리, 디자이너에게 이러한 체계성을 가르쳐 주고 프리젠테이션을 만들라고 하고 싶은 마음이 들게 된다. CSS 체계는 전부 디자이너에게 밀어버렸던 엔지니어들의 뚝심이 있기 때문이다. 디자이너는 OOP의 개념 없이 CSS체계를 마스터하느라 매우 고민하고 있지만, 엔지니어들은 그것을 그냥 즐거움으로 보아 넘겨 왔지 않은가? 하지만 사용자 정의 컨트롤로 간다면 탁구게임처럼 다시 이것은 엔지니어의 손으로 돌아오게 된다. 오호 통재여.

WEB 이 MS의 논리로 운영될 것인가?
WEB 시스템이 과연 MS의 이러한 논리로 운영될 것인가? 물론 MS입장은 컨트롤을 쓰던 안쓰던 포스트백을 활용하든 말든 그것은 개발자의 취향의 문제라고 넘기고 만다. 하지만 엔지니어적인 입장에서는 그 두 가지는 아예 없어졌으면 좋다. 아니면 아예 HTTP 자체의 표준을 바꾸거나 HTML 표준을 바꾸어서 표준적으로 올바로 지원하도록 하는 것이 가장 올바르다는 판단이다. 이 순간에도 이 업계에 오는 수많은 코더들이 HTML 코드조차 제대로 이해하지 못하고 컨트롤들만 잔뜩 배워 나온다면, 그것은 악몽 그 자체이다. 이것은 MS의 닭질이라고밖에 표현할 수밖에 없다. 혹은 음모라고 생각할 수밖에 없을 정도이다. 차라리 이런 식의 개발이라면 Java가 훨씬 깔끔하고 CGI가 더 편리하다. (도대체 필자가 하는 말이 유닉스 동호회나 자바동호회에 가야 할 것인지 윈도우 동호회에 가야 할 것인지 필자도 판단 불능이지만)

WEB 컨트롤은 악몽이다
대용량 시스템 위주의 개발 경험으로 봐서는 WEB 컨트롤은 악몽 그 자체이다. 개인 홈페이지나, 중소기업 홈페이지에는 이렇게 개발하는 것도 좋다. 그러나 이것이 표준적인 대용량 개발 체계에 들어간다면, 생산성이 결코 좋지 않다. 더구나 내용이 계속 변경되고 허구한날 디자인 뒤엎는 포탈을 빙자한 광고사이트에서는 말이다.


From: 윈도우즈사용자그룹

좀 많이 지난 포스트긴 하지만 요즘 다시 ASP.NET으로 개발을 시작했고, 같이 근무하는 프로그래머가 워낙 닭짓을 하기에 답답한 마음에 올려본다..;;

Comment +0

<script language=javascript>
function disableCheck(obj) {
    if (obj[obj.selectedIndex].className=='disabled') {
        alert("선택하신 품목은 현재 절판입니다.");
        for (var i=0; obj[i].className=="disabled"; i++); obj.selectedIndex = i; return;
    }
}
</script>
<style type="text/css">
    ion.disabled { color: lightgrey; }
</style>

신발치수:
<select onChange="disableCheck(this)">
    <option value='1'>260</option>
    <option value='2' class=disabled>270</option>
    <option value='3' class=disabled>280</option>
    <option value='4'>290</option>
</select>
From: 뉴스그룹 falconer
Example: 보기

Comment +0

Version이란??
http://terms.co.kr/easycom36.htm
컴퓨터 소프트웨어 역시, 시간이 흐르면서 더 좋은 아이디어가 떠올라 새롭고 강력한 기능이 추가될 수 도 있고, 이전에 출시되었던 버전에서 발견된 오류 - 이런 것을 컴퓨터 용어로는 '버그'라고 하는데요 - 어쨌든 잘못을 고쳐야할 일도 발생할 수 있겠죠. 그렇다고 매번 낼 때마다 이름 자체를 바꾸게 되면, 사용자들이 혼동이 올 테니까 그럴 수는 없구요. 그래서, 소프트웨어에서 버전이라는 개념을 사용하는 겁니다.
버전을 붙이는데 일정한 규정이 있는 것은 물론 아닙니다만, 대개 가장 처음 나온 것을 1.0이라고 하고, 그 이후에는 이 번호들을 조금씩 높은 번호로 매겨가는 것이 보통인데, 일반적으로 새로운 버전에 엄청나게 많은 변화가 있었다면, 소수점 윗자리를 올리고 사소한 변화는 소수점 아랫자리 번호를 올리는 방식을 취하고 있습니다.
DOS라는 운영체계를 예로 든다면, 버전 1.0 에서 출발해서 1.1, 1.2, 1.3 이런 식으로 매번 0.1씩 버전이 올라갈 수도 있겠지만, 그렇다고 해서 모든 숫자에 해당하는 버전이 있는 게 아니고, 버전 1.3에서 갑자기 2.0으로 뛸 수도 있다는 것을 알아두시기 바랍니다. 또, 버전을 꼭 이렇게 소수 첫째자리의 숫자로만 매겨야한다는 법도 없습니다.
일례로 몇 년전까지 PC용 데이터베이스로 크게 이름을 날렸던 dBase라는 프로그램의 경우는 따로 버전을 매기는 대신에 상품명을 dBase I, dBase Ⅱ, dBase Ⅲ 등으로 바꾸어 버전을 구분했는데, 여기서 I, Ⅱ, Ⅲ 등의 숫자도 아라비아 숫자가 아닌 로마숫자를 사용했었죠.
여러분들이 잘 아시는 운영체계인 MS-Windows의 경우에도 버전 3.1까지는 MS-DOS 처럼 소수를 썼지만, 윈도우95가 나오면서 부터는 그 규칙에서 벗어나서 제품이 출시된 연도를 붙이기 시작했습니다. 곧 윈도우95의 후속판인 윈도우98이 출시될 예정이라고 하는데, 이것 역시 98년도에 처음 출시된다는 의미와 이전의 윈도우95에 비해 높은 숫자를 쓰므로써, 윈도우95보다 상위버전임을 동시에 나타내고 있습니다.


버전의 구성??
버전은 <메이져버젼>.<마이너버젼>.<빌드넘버>.<하위빌드넘버>로 구성된다.

ex)제 IE(Internet Explorer)의 버전은 6.0.3790.1830 입니다.

위에서 메이져버젼과 마이너버젼의 6.0은 IE 6.x라는 말이다.
일반적으로 버전 x라고하면 메이져버젼과 마이너버젼을 말한다.

빌드넘버는 프로그램이 출시되고 다음 버전이 출시될때까지 사소한 업그레이드가 계속되는데 이를 구분해 주는 번호라 보면 되겠다.
대부분의 소프트웨어 업체에서 프로그램의 버그를 수정하거나 미비한 기능 추가, 변경이 이루어진 경우 버전업을 대신하는 구별 방법이며, 일반인에게 노출되기 보다는 개발자들 간에만 통용되는 경우가 많다.
빌드 넘버의 숫자는 컴파일한 횟수를 의미한다. 즉, 1830은 1,830번째 컴파일한 버전이라는 뜻이다. 이 때 특정 부분을 약간만 손질하고 다시 컴파일한다 해도 빌드 넘버는 바뀌게 된다. 당연히 1주일 간격으로 빌드 넘버가 교체될 수도 있고, 하루에도 몇 번씩 바뀔수도 있다.

Comment +0

<%
'-------------------------------------------
Function GET_HTTP (sURL)
    Dim     lsResult
    Const    adFldLong    = &H00000080
    Const    adVarChar    = 200
    'XMLHTTP를 이용하여 전송
    With Server.CreateObject("Msxml2.ServerXMLHTTP")
        .Open "POST", sURL, False
        .Send
        lsResult = .responseBody
    End With
    
    '받은 결과값을 한글 인코딩 처리
    With Server.CreateObject("ADODB.Recordset")
        .Fields.Append "txt", adVarChar, LenB(lsResult), adFldLong
        .Open
        .AddNew
        .Fields("txt").AppendChunk lsResult
        GET_HTTP = .Fields("txt").Value
        .Close
    End With
    
    Set lsResult = Nothing
End Function
'-------------------------------------------


Response.Write(GET_HTTP ("http://gleam.pe.kr/"))
%>

From: 뉴스그룹 정영탁

Comment +0

Article:
http://www.csharplib.co.kr/Library/Library_Article.aspx?code=002&Idx=93&IdxCode=002001

SampleCode:
C#: / DataCalendar_CS.zip (85.7 KB)
VB: / DataCalendar_VB.zip (83.7 KB)

Example: 보기

Comment +7

  • 보기 예제 작동 않함...

  • 2008.12.18 14:01

    비밀댓글입니다

  • kaidan3 2009.05.24 17:34 신고

    안녕하세요!
    요즘 C#공부를 하면서, 일정관리 프로그램을 한번 만들어볼까 하고 있는 대학생입니다.
    검색하다가 우연히 들렀는데요,
    저 위의 소스보기 링크가 작동하지 않는 것 같아요.
    혹시 갖고 계시면, kaidan3@naver.com 으로 보내주실 수 있으실까요?? :D

  • 2009.07.16 18:29 신고

    저도 소스가 다운이 않되네요 c#버전 보내주실수 있을까요?
    ensemble.moi@gmail.com입니다 :0

  • cobi8 2009.11.05 16:23 신고

    안녕하세요.. 일정관리 프로그램이 필요해서 검색하다가 들리게됬습니다.
    너무 필요해서 올려주신 소스를 다운받으려고 하는데 다운이 안되네요..
    염치불구하고 C#버전 소스 부탁드리겠습니다..
    cobi8@naver.com 입니다.

  • 푸르미 2015.06.26 17:10 신고

    일정관리 공부하다 들르게 되었네요.
    c#소스좀 받아볼수 있을까요? 링크가 다깨져있네요...shins97@hanmail.net 입니다....

[CODE] private void CreatePdfDoc(string arg) { CmDeviceMgt_NTx Device = new CmDeviceMgt_NTx(); ReportDocument crDoc = new ReportDocument(); ExportOptions crOpt = new ExportOptions(); DiskFileDestinationOptions crDiskOpt = new DiskFileDestinationOptions(); DataSet ds = Device.PrintSelectedBox(arg); crDoc.Load(Server.MapPath(@"./conf_server_add_box_printlist_rpt.rpt")); crDoc.SetDataSource(ds); CrViewer1.ReportSource = crDoc; CrViewer1.SeparatePages = false; CrViewer1.DisplayGroupTree = false; CrViewer1.DisplayToolbar = false; string fname = @"C:\TEMP\evts.pdf"; crDiskOpt.DiskFileName = fname ; crOpt = crDoc.ExportOptions ; crOpt.DestinationOptions = crDiskOpt ; crOpt.ExportDestinationType = ExportDestinationType.DiskFile ; crOpt.ExportFormatType = ExportFormatType.PortableDocFormat ; crDoc.Export(); Response.ContentType = "application/pdf" ; Response.WriteFile(fname) ; Response.Flush(); Response.Close(); Response.End(); }[/CODE]

리포트를 만들때는 XML 스키마를 기준으로 만들고,
데이터는 위 소스처럼 동적으로 바인딩 한다.

Comment +0

[CODE]string d1="20050101"; string d2=""; Regex re=new Regex("(\\d{4})(\\d{2})(\\d{2})"); if (re.IsMatch(d1)==true) { d2=re.Replace(d1, "$1-$2-$3"); } else { 에러처리,,, }[/CODE]

From: 뉴스그룹 한님


시나리오
ASP.NET으로 개발을 하는데 텍스트 박스에 20050517이런식으로 데이터를 입력 받는다.

이것을 DateTime형식으로 바꾸어서 비교를 하여야 한다.

Convert.ToDateTime(Request.Form["ControlName"].ToString())위에처럼 하면
String was not recognized as a valid DateTime.이라는 에러가 난다

Comment +0

이건 꽁수라고 해도 되겠네요^^

테스트는 많이 해보지 않아서 안전한지는 잘 모겠네요...

<script language="javascript">
	function unManagedSubmit(frm , action) {
		//ex) <INPUT onclick="javascript:unManagedSubmit( this.form , 'WebForm2.aspx' );" type=button>
		if (frm.__VIEWSTATE != undefined) {
			frm.removeChild(frm.__VIEWSTATE);
		}
		if(frm.__EVENTTARGET != undefined) {
			frm.removeChild(frm.__EVENTTARGET);
			frm.removeChild(frm.__EVENTARGUMENT);
		}
		frm.action=action;
		frm.submit();
	}
</script">


폼에 있는 ViewState를 제거하고 submit 시키는데요 아래 있는건 가끔 이벤트때문에 사용하는 hidden필드도 제거 하게 했습니다. 간단하게 테스트는 해보았는데 잘 되는거 같더군요 여러가지 테스트를 해봐야 하는데 시간이 없어서리...

From: Devpia.com

전에 Devpia.com에 질문 올렸을때 답변 달린 내용이다 한동안 안쓰다가 이번 에 다시쓸일이 생겨 여기에 올린다.

Comment +0

NumberToWord

Dev & Mng2005.05.18 10:27
[CODE]public static string N2W(double DouStr) { int inStr = (int)Math.Ceiling(DouStr); int iArrInStrCount = inStr.ToString("#,##0").Split(',').Length; string strTemp; string strReturnStr = string.Empty; string [] strModule = {"", "Thousand ", "Million ", "Billion ", "Trillion "}; string [] strOneIntStr = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; string [] ArrInStr = inStr.ToString("#,##0").Split(','); for(int i = 0 ; i < iArrInStrCount ; i++ ){ int intStr = int.Parse(ArrInStr[i]); strTemp = ""; if(intStr > 99){ strTemp = strOneIntStr[(int)Math.Ceiling(intStr / 100)] + "Hundred "; } int intStr2 = intStr % 100; if(intStr2 > 9 && intStr2 < 20){ switch(intStr2){ case 10: strTemp += "Ten"; break; case 11: strTemp += "Eleven"; break; case 12: strTemp += "Twelve"; break; case 13: strTemp += "Thirteen"; break; case 14: strTemp += "Fourteen"; break; case 15: strTemp += "Fifteen"; break; case 16: strTemp += "Sixteen"; break; case 17: strTemp += "Seventeen"; break; case 18: strTemp += "Eighteen"; break; case 19: strTemp += "Nineteen"; break; } }else{ switch((int)Math.Ceiling(intStr2 / 10)){ case 2: strTemp += "Twenty "; break; case 3: strTemp += "Thirty "; break; case 4: strTemp += "Forty "; break; case 5: strTemp += "Fifty "; break; case 6: strTemp += "Sixty "; break; case 7: strTemp += "Seventy "; break; case 8: strTemp += "Eighty "; break; case 9: strTemp += "Ninety "; break; } switch(intStr2 % 10){ case 1: strTemp += "One"; break; case 2: strTemp += "Two"; break; case 3: strTemp += "Three"; break; case 4: strTemp += "Four"; break; case 5: strTemp += "Five"; break; case 6: strTemp += "Six"; break; case 7: strTemp += "Seven"; break; case 8: strTemp += "Eight"; break; case 9: strTemp += "Nine"; break; } } strReturnStr += strTemp + strModule[ArrInStr.Length - 1 - i]; } strReturnStr += string.Format(" and {0:00}/100",(int)Math.Ceiling((DouStr * 100) % 100)); return strReturnStr; }[/CODE]
From: Devpia.com

'Dev & Mng' 카테고리의 다른 글

ASP.NET ViewState값 제거하고 Submit하기  (0) 2005.05.19
NumberToWord  (0) 2005.05.18
프로그래머 십계명  (0) 2005.04.29
JS와 DIV를 이용한 탭브라우징  (0) 2005.04.26

Comment +0

'Dev & Mng' 카테고리의 다른 글

NumberToWord  (0) 2005.05.18
프로그래머 십계명  (0) 2005.04.29
JS와 DIV를 이용한 탭브라우징  (0) 2005.04.26
Div태그를 이용한 Content Scroll Table  (0) 2005.04.26

Comment +0

내용보기

Js로 각 레이어의 display속성을 제어 한다.

Comment +0

내용보기

가로 스크롤은 윈도의 스크롤을 사용하고, 세로 스크롤은 DIV에 Style overflow-y속성을 사용한다.

Comment +0

Windows 2003에는 Application Pool이란 녀석이 있다.
그래서 machine.config, web.config, IIS, 코드상에서 Session.Timeout을 늘려줘도 Application Pool의 설정 때문에
기본 값인 20분이 지나면 세션이 끊어지는 경우가 있다.



위 이미지처럼 Application Pool이 20분으로 설정되어있기 때문이다.
세션이 끊어지지 않게 하려면

일케 바꿔주면 된다.

보너스:
에.. 가끔 Application이 죽는 경우가 있는데..

이렇게 해주면 된다.

1

  • JJong 2011.02.07 10:58 신고

    Windows 2003 Server에서 Application Pool 을 어떻게 실행시키는 건가요?? (원격접속시 세션이 자꾸 끊어져서 해결하려고 하거든요..) 검색해보니까 IIS 로 한다는데..
    제 Server 에는 IIS도 찾을 수가 없네요..ㅠ_ㅠ 서버 관리 넘 어려워요~~~

한자명을 사용함에 있어, 인명용 확장한자일 경우, 예컨대, 朴?俊 (박현준) 과 같이 가운데 글자(빛날 현) 가 확장 한자일 경우, 그냥 입력후 폼을 서브밋하면, 처리페이지에서 에러가 발생하거나 원하는 대로 입력되지 않거나, 또는 입력은 되는데 보여지는 페이지가 charset=euc-kr로 지정되어야만 하는 페이지에서는 ???등으로 엉뚱하게 표시된다.

특히 입력값을 처리하는 곳에서, 덱스트파일업로드가 쓰였을 경우, 덱스트파일업로드 2.0 미만버전에서는 확장한자 등을 인식하지 못하는 것으로 알고 있다.

만약, 아래와 같이, runat="server" 스크립트로, decodeURI,encodeURI와 같이 함수를 사용하여, 유니코드로 변환 저장을 할수는 있지만...

[CODE]<script language="javascript" runat="server"> function uni2str(str){ return decodeURI(str); } function str2uni(str){ return encodeURI(str); } </script>[/CODE]

유니코드로 제대로 입력된다 하더라도, 페이지의 문자셋트가 [CODE]<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">[/CODE]와 같이 지정된 페이지에서는 확장한 한글만 따로 유니코드로 보여줄 수 없으므로, 웹사이트 전체 및 DB에 대한 유니코드 기반의 제작으로 바꾸어 주어야 하는데, 한자이름 단 한개만을 표시하기 위해서, 그런 엄청난 재개발을 한다는 것은 사실상 어렵다고 볼수 있다.

오랜 삽질 끝에, 해결한 방법은 허무하게도 간단하다. 그것은 단순하지만, 기발한 착상이었던 것 같다.
해법은 아스키 코드이다.. 아래의 코드를 보라!

[CODE]<script language="javascript" > //확장한자의 입력,보여주기에서 문제가 없도록 한자명을 아스키코드로 변환해서 돌려주는 함수. //(단, 아스키코드값의 앞에 &을, 뒤에는 ;를 붙여주어서 웹브라우저가 해석할때 아스키코드문자라는 것을 인식하게 한다.) function strToAscii(str){ var conStr=""; for(i=0;i<str.length;i++){ chr = "&"+ str.charCodeAt(i) + ";" ; conStr = conStr + chr ; } //alert(conStr); return conStr; //변환된 아스키 코드 문자열 반환 } </script>[/CODE]

확장한자를 입력하는 페이지의, 입력값 유효성 검사하는 곳에, 위의 함수를 별도로 삽입하고, 해당 한자이름이 위의 변환함수를 거쳐서 서브밋되게 하였다. 그러면, DB의 컬럼을 nvarchar 형으로 굳이 바꿀필요가 없다. (다만 아스키코드로 변환되고, 또 거기에다 글자마다 앞뒤에 &, ; 기호를 각각 붙여주기 때문에 글자한개가 차지하는 자릿수가 ? 과 같이 8글자이상으로 늘어나므로, 한글이름이 최대 5글자라면 자료형은, 한글자당 10바이트로 쳐서, varchar(50) 정도로 잡아주는 것이 필요하다.) 이렇게 되면, 굳이 페이지의 문자세트나, asp에서의 system.CodePage 지정, 파일저장시 유니코드로 저장, db의 유니코드변환
등의 번거롭고 엄청난 작업의 수반없이도, 즉 charset=euc-kr 로 지정된 페이지에서도, 부분적으로 원하는 곳에만 확장한자와 같은 문자들을 용이하게 처리할 수 있게 되는 것이다.

경고:
될수 있으면 유니코드로 사용을 하신다면 UTF-8 인코딩에 NVARCHAR를 사용하시는게 좋습니다. 만약 러시어나 기타 등등 다른 외국어가 오게 되면 또 다른 문제점을 발생할 수 도 있으니 이런것을 감안하셔서 작업하시기 바랍니다 ^^:


From: 뉴스그룹

Comment +0

MVC (model-view-controller)

객체지향프로그래밍에서, MVC란 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식중 하나이다. MVC 방식은 자바, Smalltalk, C 및 C++ 등과 같은 프로그래밍 언어를 쓰는 개발 환경에서 널리 사용된다. MVC 형식은 목적 코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식이라고 많은 개발자들이 평가하고 있다.

MVC 형식은 소프트웨어 개발에 사용될 세 가지 구성요소 또는 객체를 제안한다.

모형 : 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현. 이 목적 모형은 사용자 인터페이스에 관한 어떠한 정보도 가지고 있지 않다.
뷰 : 사용자 인터페이스 내의 구성요소들을 표현하는 클래스들의 집합 (누름단추, 표시 상자 등과 같이 사용자가 화면상에서 보고 응답할 수 있는 모든 것들)
제어기 : 모형과 뷰를 연결하고 있는 클래스들을 대표하며, 모형과 뷰 내의 클래스들 간에 통신하는데 사용됨

Comment +0

1. Command Line으로 이동
2. telnet ServerAddress 80입력
3. GET /index.html HTTP/1.0\n\n입력

'Dev & Mng' 카테고리의 다른 글

MVC (model-view-controller)  (0) 2005.04.14
Telnet으로 HTTP정보 보기  (0) 2005.04.14
MS-SQL에서 대용량 메모리 사용  (0) 2005.04.08
DBDesigner 4 사용기..  (2) 2005.03.02

Comment +0

물리적으로 8GB를 사용하시고, Windows 2000 Advanced Server에 SQL Server 2000 Enterprise Edition을 사용중이시라면 아래와 같이 설정하여 7GB 까지의 메모리를 application에서 사용하실 수 있습니다.

1. 관리도구 - 로컬 보안 정책 - 메모리의 페이지 잠그기에 MSSQLSERVER 서비스 시작 계정을 추가
(기본적으로 administrator 계정은 추가가 되어있습니다.)

2. boot.ini 에 /3GB /PAE 옵션 추가 후 재부팅.

3. 쿼리 분석기에서 아래 쿼리를 실행한 후 MSSQLSERVER 서비스 재시작.

-- AWE Enabled
sp_configure 'awe enabled' , 1
reconfigure with override
GO

4. EM에서 "고정된 메모리 크기 사용" 으로 메모리 정적 할당.
=> 7168M 미만으로 설정하시면 됩니다. 다른 application 을 같이 운영중이시라면
메모리 크기를 너무 크게 설정해주지 않도록 하셔야 합니다.

5. 성능모니터 - SQL Server Memory Manager : Target Server Memory (KB) ,

SQL Server Memory Manager : Target Server Memory (KB) 를 모니터링 하여 SQL
Server 가 사용할 수 있는 전체 메모리 양과 사용중인 전체 메모리 양을 모니터링 하실 수 있습니다. (작업 관리자에서 모니터링 하는 것이 아닙니다.)

From: 뉴스그룹(http://www.google.co.kr/groups?hl=ko&lr=&newwindow=1&threadm=OvRJ%23xYTDHA.2260%40TK2MSFTNGP12.phx.gbl&rnum=5&prev=/groups%3Fq%3D%25EB%25A9%2594%25EB%25AA%25A8%25EB%25A6%25AC%26hl%3Dko%26lr%3D%26newwindow%3D1%26group%3Dmicrosoft.public.kr.sql%26selm%3DOvRJ%2523xYTDHA.2260%2540TK2MSFTNGP12.phx.gbl%26rnum%3D5 )

'Dev & Mng' 카테고리의 다른 글

Telnet으로 HTTP정보 보기  (0) 2005.04.14
MS-SQL에서 대용량 메모리 사용  (0) 2005.04.08
DBDesigner 4 사용기..  (2) 2005.03.02
ASP에서의 DB 트랜잭션 처리  (0) 2005.02.26

Comment +0

뉴스그룹에서 알게된 형의 요청으로(?) DBDesigner 4를 사용 해보게 되었고.. 여기에 그 사용기를 올린다.
간단하게 몇 가지만 테스트 해보고 올리는 것이므로 실무에서의 광범위한 데이터를 다룰 때는 예상치 못한 문제가 있을 수 있다.



DBDesigner 4는 MySQL에 최적화 되어있는 데이터 베이스모델링 툴이다.

(사실 별로 최적화 되어 있지 않은것 같다..자세한건 아래에서 다루겠다.)

DBDesigner 4는 GPL라이선스 정책을 따르며..
따라서 http://www.fabforce.net/dbdesigner4/ 에서 무료로 다운받을 수 있다.

결론 부터 말하자면 "아쉬운 부분이 있지만 충분히 유용하게 사용할수 있는 툴."이다.

↑실행화면

테스트를 위해 간단하게 테이블 2개를 만들고,
두 테이블 간의 관계를 설정해 보았다.
↑모델링화면

관계를 설정하면서 INT형으로 설정한 tidx컬럼이 INTEGER형으로 바뀌어서 다시성정해야 하는 불편함이 있었고, 처음 관계를 설정할때 tbMenu테의블의 tidx컬럼을 PK로 tbSetMenu테이블의 mcode를 FK로 설정했으나, 마법사(?)가 종료된 뒤에 확인해 보니 tbSetMenu테이블의 mcode대신 tidx가 FK로 설정되어 있어 다시 수정해야 했다.

그리고 관계가 설정된 모델을 4.0이하 버젼(테스트한 버젼은 3.52)에서 실행시키면 테이블 생성은 성공하나 data insert시에 제약조건에 의한 오류가 발생하지 않는다.(테스트에 사용된 MySQL서버는 4.1.10 win32였다.)
↑관계설정에 따른 입력오류(위)와 하위버전에서에 제약사항이 작동하지 않는 화면(아래)

실제 실무에서 사용하는 MySQL의 버젼이 대부분 3.X대인것을 생각 한다면, 이런 모델링시에 사용한 제약이 실제 서비스에 적용되지 않음은 무서운(?) 결과를 초래할수도 있다.


또한 모델링시에 테이블의 각 컬럼에 Comment를 주었으나
실제 생성된 Script에는 적용되지 않는 점도 아쉬웠다..

오라클은 테스트 해보지 않았으나, MS-SQL에서 리버스 엔지니어링을 진행했을때 대부분의 테이블 내용을 가져 오는 것을 본수 있었다.

MS-SQL에서도 Coment를 가져 오지 못했으며, INT형 컬럼을 INTEGER로 인식했다.

간단한 테스트 였음으로 미숙한 부분이 많지만 이만 줄이겠다.
그동안 MySQL을 위한 모델링 툴이 많지 않았는데..
무료이면서도 많은 기능들을 제공하는 툴을 알게 되었다.
아쉬운 부분이 없지 않아 있지만 유용하게 사용할수 있을것 같다.

'Dev & Mng' 카테고리의 다른 글

MS-SQL에서 대용량 메모리 사용  (0) 2005.04.08
DBDesigner 4 사용기..  (2) 2005.03.02
ASP에서의 DB 트랜잭션 처리  (0) 2005.02.26
IIS 에서 SMTP 서비스 아이콘 사라 졌을때  (0) 2005.02.16

Comment +2

DB관련 컴포넌트 모델은 Connection객체가 Transaction을 관장하도로 되어있다.
objCon.BeginTran 메소드 SQL-Server내부에서는 BEGIN TRAN으로 실행되고, objCon.CommitTran 메소드 SQL-Server내부에서는 COMMIT TRAN으로 실행될 것이다.

without Command:
<CODE>objCon.BeginTrans

objCon.Execute strSQL
objCon.Execute strSQL
objCon.Execute strSQL

If objCon.Errors.Count <> 0 Then
objCon.RollbackTrans
Else
objCon.CommitTrans
End If</CODE>

with Command:
<CODE>with objCmd1
.ActiveConnection = objCon
.CommandText = strSQL
.CommandType = adCmdText
End with

with objCmd2
.ActiveConnection = objCon
.CommandText = strSQL
.CommandType = adCmdText
End with

objCon.BeginTran

objCmd1.Execute
objCmd2.Execute

If objCon.Errors.Count <> 0 Then
objCon.RollbackTrans
Else
objCon.CommitTran
End if</CODE>

From: 뉴스그룹(구글보기)

'Dev & Mng' 카테고리의 다른 글

DBDesigner 4 사용기..  (2) 2005.03.02
ASP에서의 DB 트랜잭션 처리  (0) 2005.02.26
IIS 에서 SMTP 서비스 아이콘 사라 졌을때  (0) 2005.02.16
도메인의 MX 주소 알아내기  (0) 2005.02.16

Comment +0

IIS 에서 SMTP 서비스 아이콘 사라질때가 종종있다.
SMTP를 지우고 다시 설치해도 안된다..
본인도 그문제로 인하여 윈도를 몇번 재설치 한적이 있다..

그럴때 우선 IIS MMC르 닫고, 명령 프롬프트 에서
[CODE]regsvr32 c:\windows\system32\inetsrv\smtpsnap.dll[/CODE]
을 실행시킨다.

그리고 IIS관리툴을 실행시켜보라,
어떤가?? 간단하게 아이콘이 생긴것이 보일 것이다.

진작 알았더라면 삽질 좀 덜하고 좋았을 것을..;;

Comment +0



붉게 표시된 부분이 MX값을 나타낸다



보너스로 다음의 MX값 이다..
무지하게 많다..
공식적인 받는 메일서버만 10대다..;;

Comment +0

FTP등에 익명 로그인이 가능하게 설정된경우 종종 삭제가 안되는 폴더가 생성된다.
이때는 아래 프로그램을 이용 하여 지울수 있다.



사용법..



프로그램 제공: 뉴스그룹 Hyochun

Comment +2

  • 종종 그런 경우가 있더군요.
    Dos Command에 들어가서 rd 명령으로 지워질 때도 있는데, 가끔가다 보면 악질(?) 폴더들이 눈에 띄게 됩니다.

    • 그럴 때를 위한 프로그램이죠...;;;

      사실 서버 운영 하면서 ftp열어 놨는데..
      애들 들어와서 장난 쳐놓고 가면 정말 열받거든요..
      그때 저걸로 쓱싹..;;

NET Tools
Ten Must-Have Tools Every Developer Should Download Now

James Avery


This article discusses:NUnit to write unit tests
NDoc to create code documentation
NAnt to build your solutions
CodeSmith to generate code
FxCop to police your code
Snippet Compiler to compile small bits of code
Two different switcher tools, the ASP.NET Version Switcher and the Visual Studio .NET Project Converter
Regulator to build regular expressions
.NET Reflector to examine assemblies


PDF버전:

From: MSDN Magazine 2004년 7월호 기사
Via: 정성태

Comment +0

ASP의 경우 쿠키를 기록하고 읽을때 자동으로 UrlEncode와 UrlDecode를 수행합니다.

ASP.NET의 경우에는 쿠키를 그런 자동화된 처리를 하지 않지요~

그래서 한글 쿠키값의 경우에 어느 한쪽에서 기록한 정보를 다른쪽에서 읽으려 할때에 차이가 생기게 되는것입니다.

해결방법은 쿠키접근을 ASP.NET에서만 하시거나 ASP와 공유가 반드시 필요하다면

ASP.NET에서 쿠키값을 기록할때 UrlEncode 하시고, 읽을때 UrlDecode 하셔서 ASP방식에 맞춰줘야 할것 같습니다.

제가 알기로는 ASP에서 기본 Encode/Decode를 하지 않도록 설정하는 방법이 없는것으로 알고 있어서...

(혹시 그런 방법을 알고 계신분이 있으시면 한 수 가르쳐 주시길 바랍니다~ ^^;)

* 아래 주소는 한국 마이크로소프트사의 해당부분 기술자료입니다.
http://support.microsoft.com/default.aspx?scid=kb;ko;313282

도움이 되셨길...


From: Devpia.com(http://www.devpia.com/Forum/BoardView.aspx?no=39243&forumname=aspnet_qa )

Comment +2

  • 닷넷 버전에서는 인코딩과 디코딩을 자동으로 처리해주지 않는군요.
    ㅎㅎ;

    ASP 좋은 기술인데.. 많이 발전했으면 좋겠습니다.

    • 저도 모라서 지난번 프로젝트에서 고생을좀 했는데...
      이번에 우연히 알게 되어서 옮겨 적어 봅니다 ^^*