VB.NET2013.12.18 11:10

Transaction Support(트랜잭션 지원)

트랜잭션 지원이란 분산 트랜잭션에서 호출자(Caller) 와 피 호출자(Callee) 사이의 데이터 무결성을 위해 트랜잭션 (참여) 범위지정 방식이다. MSDTC 서비스는 OLE 트랜잭션 이라 불리는 COM 기반의 트랜잭션 스펙이 기본이지만 XA 트랜잭션, TIP(Transaction Internet Protocol) 를 지원한다.

l  Disabled(사용안함)*
일반적으로 COM 으로 만들어진 컴포넌트를 COM+ 로 등록할 때 설정하는 옵션이며 트랜잭션을 사용하지 않는다는 의미(로컬 트랜잭션으로 동작)

l  Not Supported(지원하지 않음)
트랜잭션에 참여하지 않는다는 의미, 호출자가 트랜잭션이 있더라도 참여하지 않고 단순 실행(로그, 상태정보 처리기에 사용)(로컬 트랜잭션으로 동작)

l  Supported(지원함)
호출자(Caller)가 트랜잭션이 있다면 그 트랜잭션에 참여하지만 호출자가 트랜잭션이 없다면 단순 실행

l  Required(필수)
호출자(Caller)가 트랜잭션이 없어도 피호출자(Callee) 가 트랜잭션을 생성하여 트랜잭션 처리

l  Required New(새 트랜잭션 필요)*
호출자(Caller)가 트랜잭션이 있든 없든 새로운 트랜잭션을 생성하여 처리

 

* ) 의 경우 사용 시 주의

 

Transaction Isolation Levels(트랜잭션 격리 수준)

트랜잭션 격리 수준에서 주의해야 할 점은 다음과 같다. 피 호출자(Callee)는 호출자(Caller)의 격리수준과 동일하거나 낮아야 합니다. 피 호출자의 격리 수준이 높을 경우 오류가 발생합니다. 오라클인 경우 Read Committed, Serializable 만 지원함에 유의.

l  Serialized(연속됨)
COM+
를 등록하면 Default 로 설정이 되는 값. 하나의 트랜잭션이 데이터를 읽을 때 다른 모든 트랜잭션은 이전 트랜잭션이 끝날 때 까지 읽기, 쓰기 모두 할 수 없고 대기 해야 하는 상태. 또한 인덱스의 범위에 대해 잠금을 수행하기 때문에 잘못된 쿼리인 경우 전체 테이블 스캔이 발생하므로 유의

l  Repeatable read(반복할 수 있는 읽기)
하나의 트랜잭션이 읽는 동안 다른 트랜잭션이 변경(update) 을 할 수 없도록 잠그는 상태, 단 추가(insert) 는 가능

l  Read committed(커밋된 읽기)
다른 트랜잭션이 수정하는 동안 읽지 못하는 상태

l  Read uncommitted(커밋되지 않은 읽기)
다른 트랜잭션이 수정하는 동안에도 읽을 수 있는 상태

l  Any(모두)
호출자(Caller) 가 어떤 트랜잭션 격리 수준이든 충돌을 피하기 위해 적용되는 상태, 호출자의 격리수준과 동일하거나 낮게 설정되는 상태(항상 피 호출자인 경우는 이 옵션이 적절함)

 

[참고]

Transactions and Isolation Levels in COM+

COM+ and MTS Always Use SERIALIZABLE Transaction Isolation Level

Configuring Transactions

Configuring Transaction Isolation Levels

About COM+ Transaction Isolation Level

COM+ 트랜잭션과 오라클 OraMTS 실체

Understanding XA Transactions

 

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
기타2012.03.07 23:27

Microsoft Windows 8 CP 가 나와서 홀라당 설치 했습니다.

했더니 소리도 안나고, 그래픽카드도 기본설정으로 잡히네요.. 자료를 찾아보니 없어서 직접 해결 방법을 올려둡니다.

기존에 Windows 7 을 맥북에 사용하시면서 전력소모가 적고 좋으셨죠? 그 경험을 그대로 차기버전인 Windows 8 로 옮기기 위해서는 드라이버가 잘 지원을 해 줘야 할텐데, 그냥 설치 하셨다가 깜짝 놀라셨죠?

복잡하지는 않습니다.

우선 설치 하시면 시작 버튼이 없습니다. 하지만 이전 경험이 그대로 살아 있기 때문에 몇가지 작업만 해 주시면 됩니다.

Mac OSX 10.7 Lion에 제공되는 부트캠프 지원 DVD나 USB 또는 외장하드를 연결 합니다.

1. Command + R 을 누르고 cmd 입력하시면 명령프롬프트가 나옵니다. 그러면 작업표시줄에 아이콘이 생기죠.
2. 활성화된 아이콘을 우클릭 하면 Command Prompt 에서 다시 우클릭 하시면 Run as Administrator 을 클릭.
3. 부트캠프 지원 파일을 설치 하면 되는데, 연결된 부트캠프 지원 위치가 E 드라이브라면  E:\WindowsSupport\Drivers\Apple 로 이동을 하고 64비트인 경우 Bootcamp64.msi, 32비트인 경우 Bootcamp.msi 입력 하면 드라이버가 모두 잡힙니다.

간단하지요?

이해가 안되시거나 어려운분들은 댓글 남겨주시면 답변드릴께요.
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
기타2012.02.27 16:25

Cassandra를 Live 서비스에 올리려고 하니 OS가 가동중일때 항상 실행이 되어야 합니다.

윈도우 서비스로 등록을 하고, 자동시작으로 설정하면 운영하기 편합니다.

예를 들어 설치된 폴더가 D:\apache-cassandra-1.0.7 이라면 다음처럼 설정 하시면 됩니다.

1. D:\apache-cassandra-1.0.7\bin\daemon 으로 폴더를 만듭니다.

2. http://www.apache.org/dist/commons/daemon/binaries/windows/ 에서 최신 바이너리 를 다운 받습니다. prunsrv 라는 데몬입니다.

3. 압축을 풀면 prunsrv.exe 가 보입니다. 이 파일을 D:\apache-cassandra-1.0.7\bin\daemon\prunsrv.exe 가 되도록 복사 하세요.(만약에 64비트 운영체제이면 amd64폴더에 있는 prunsrv 파일을 사용하셔야 합니다.)

4. command 창을 실행하고, D:\apache-cassandra-1.0.7\bin\cassandra.bat install 이라고 명령합니다. 이러면 윈도우 서비스에 등록이 됩니다.

5. 서비스에 등록이 되었는지 확인 하려면 [시작]-[실행] services.msc 로 서비스 목록을 조회하면 cassandra 라는 서비스가 보입니다.

6. cassandra 를 더블클릭하고 [시작] 을 시켜주세요. 그리고 시작 옵션을 [자동]으로 변경하면 윈도우가 재부팅되어도 곧바로 실행됩니다.

* 이미 memtable 이 여러파일로 생성이 된 경우 서비스 실행중에 접속이 되지 않을수 있습니다. 이건 커맨드창에서 카산드라를 바로 실행해도 마찬가지 입니다. 서비스 시작후 몇초에서 몇십초 이상 기다린후 재접속 해 보세요.

그렇지 않으면 D:\apache-cassandra-1.0.7\bin\daemon\cassandra-stdout.yyyy-mm-dd.txt 파일을 baretail 과 같은 로그 뷰어로 볼수도 있습니다. 로그에서 Listening for thrift clients... 가 떨어져야 접속이 되는것 아시죠? :)
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
VB.NET2012.02.24 18:20
갑자기 닷넷프레임워크가 무었인지 되짚어보기로 했습니다.

.Net Framework 가 발표된 초기 문서인 Microsoft .Net Framework 제품개요 입니다. (http://www.microsoft.com/Korea/MSDN/netframework/technologyinfo/overview/ )

뭔가 복잡하고 어렵게 설명이 되어 있습니다. 그중에 제일 이상한 부분은 이처럼 JAVA와 비교해서 엄청 나은 성능이다 라는 부분입니다. 
Sun에서 제공하는 Java Pet Store의 .NET 기반 구현인 .NET Pet Shop에서 성능은 J2EE 버전보다 28배나 높고 지원되는 동시 사용자 수는 6배나 많으며 CPU 사용률은 1/6밖에 되지 않습니다. 
물론 당시에는 그럴수 있었겠죠. 예전에 자바 문제가 많았죠.. 하지만 이러한 문장은 처음 닷넷프레임워크를 접하는 사람들에게 혼동을 줄수 있을것 같네요. 

현재는 닷넷이나 자바나 둘다 랭귀지의 성숙도가 높아져서 속도차이는 비슷하지 않을까요? 물론 언어마다 특정 기능부분에서 우위가 있긴 합니다만, 전체적으로 몇배가 더 빠르다고 할수는 없을것 같습니다.  

그럼 정의와 정리를 해보겠습니다.
 

위키에는 다음처럼 정의하고 있습니다.
닷넷 프레임워크(.NET Framework)는 마이크로소프트에서 개발한 윈도 프로그램 개발 및 실행 환경이다. 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하였고, 공통 언어 런타임(Common Language Runtime)(CLR)이라는 이름의 가상 머신 위에서 작동한다.
아... 그래도 어렵습니다.

도대체 닷넷 프레임워크가 뭘까요? 쉽게 말하면 프로그램이 돌아가도록 지원해주는 뼈대 역할을 해 주는것 이라고 보면 됩니다. 소프트웨어 프레임워크는 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조입니다. 뼈대, 골조, 프레임워크 라고 하는데, 이러한 범위가 폭넓은 용어를 특정 무엇으로 지칭하는 버즈워드(buzzword) = 유행어 라고도 할수 있습니다.




닷넷프레임워크는 빌드, 배포, 웹서비스, 웹어플리케이션 등이 동작하게 하는 공통 환경입니다. 그리고 BCL(Base Class Library)를 포함하고 있는데, 이 클래스 라이브러리는 파일을 제어 하거나 데이터베이스에 접근하거나 네트워크를 제어 할수 있는 기능이 포함되어 있습니다.


위 그림은 1.1 버전의 BCL 입니다. 웹, 윈폼, 데이터, XML 등 다양한 라이브러리들이 존재 합니다. 이러한 기능들이 닷넷 프레임워크에 새롭게 나타난게 아니라 기존 Win32 API 들을 닷넷에 맞게 재구성 했다고 보시면 됩니다. 닷넷 이전에도 DB 관련 프로그램을 VB나 C++ 로 만들었죠. C++의 MFC도 어떻게 보면 BCL이라고도 할수 있겠네요.

대부분의 기능들이 이미 클래스로 만들어져 있어서 개발자는 해당 클래스 라이브러리를 사용하면 되는것입니다. 간편하죠? 하지만 좀 다른 UI나 기능을 구현하려면 직접 구현을 해야 하는데 보통 3rd Party 제품을 많이 사용하죠. 실제로 개발자가 자료구조와 알고리즘을 직접 만들어서 개발하는 경우는 드뭅니다. JAVA도 마찬가지 입니다. 대부분 클래스를 가져다 쓰지요, 하지만 닷넷 프레임워크보다 추상클래스가 많아서 직접 구현해야 하는 경우가 많습니다.

그럼 여기서 잠깐 이 문제를 짚어보겠습니다. 왜 한국 IT는 자바가 판을 칠까?
지극히 개인적인 생각입니다만, 지금은 아니지만 예전(10년전)에는 닷넷에 기본적으로 제공되는 클래스 라이브러리가 자바에 없지만 개발자가 직접 구현하기에 어려움이 없었고, 있다고 하더라도 오픈 마인드가 강한 자바 개발자들 끼리 서로 클래스를 공유하면서 자바의 부족한 부분을 채웠고 MS 제품은 비싸다는 인식이 강해서 납품 받는 기업입장에서는 입찰방식이라 납품하는 업체는 단가가 낮은 자바로 밀어 넣지 않았을까? 하는 생각입니다. 자바개발자분들 고생 많이 하셨습니다. (__)
이런 생태속에서 자연스럽게 자바쪽은 오픈소스 프로젝트가 성장하고, 닷넷쪽은 자체 기술력만으로 버텨왔던것 같습니다.


정리 하자면 .Net Framework 구조는 다음과 같습니다.

공통 언어 기반(Common Language Infrastructure)
CLI를 둔 목적은 compile-time과 run-time에 언어에 종속적이지 않은 플랫폼을 제공하기 위해서입니다. 예외처리, 가비지 콜렉션, 보안 등을 위한 소프트웨어 컴퍼넌트를 포함하고, CLI 가 구현된것이 CLR 입니다.


공통 언어 런타임(Common Language Runtime)
소스코드를 컴파일 하면 어셈블리가 되는데, 이 어셈블리가 CLR 위에서 동작합니다. 즉, CLR에 의해 관리되어 지는것이죠. CLR은 다음과 같은 구성요소가 있습니다.

 - 공통 타입 시스템(Common Type System)
 - 공통 언어  스펙(Common Language Specification)
 - JIT 컴파일러(Just-In-Time Compiler)
 - 가상 실행 시스템(Virtual Execution System)   


... 내용이 길어 조금씩 수정하고 있습니다.(현재 2012-03-07 두번 업데이트 하였습니다.)

혹시 위 글에 오류가 있으면 알려주시면 수정하도록 하겠습니다.



 
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
분류없음2011.12.02 04:04

웹 사이트 개발을 하면서 상태관리에 대해 많은 고민을 합니다.

다양한 페이지 이동이 생기고, 특정 정보들을 가지고 다니고 싶은데, 웹에서 처리하기가 참 애매 합니다.

좋은 방법이 있을까요? 어떤 방법이 최선인지 고민입니다.

쿠키, 세션만으로 2%가 부족한데...
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
Design Pattern2011.11.06 15:15
패턴이라는 말이 GoF 디자인 패턴 덕에 어려운말이 되어 버린것 같습니다.

여러분들을 샤워 하고 주무시나요? 아침에 일어나서 샤워 하시나요?
이런 반복적이고 자신에게 맞는 반복적인 행위를 어렵게 말 하면 디자인 패턴이라고들 하더군요...

팩토리, 싱글톤, 옵저버 등의 패턴이 실제로는 우리가 일상생활에서 반복적으로 하고 있는 어떠한 행위들에 대한것이죠.
맞다 틀리다는 없습니다. 하지만 적어도, 편하다 라고는 될수 있죠.

그럼 어떠한 시스템을 개발을 할때 제가 경험해본 편한 패턴에 대해 소개 하겠습니다.

프로젝트의 덩치가 커지면서 각각의 서브시스템들은 복잡도가 높아지기 마련입니다. 이러한 복잡도 높은 서브시스템을 관리하기란 쉽지가 않죠. 그러다가 고안해 낸 방식이 CBD입니다. 재사용성을 높이고, 유지보수를 좋게 하기 위한 방법이죠.

각각의 서브 시스템을 컴퍼넌트로 쪼개어서 사용하는 방식입니다.

물론 이때 부터 어떻게 보면 묵시적인 퍼샤드 방식인 셈이죠.(아닌가요? ^^; 저는 그렇게 생각 하고 있습니다.)

퍼샤드 패턴을 사용하지 않은 경우의 의존성에 대한 간단한 그림을 보도록 하겠습니다.

어떠한 기능을 하는 클래스를 사용하기 위해 직접 호출을 합니다. 예를 들어 닷넷 에서는 네임스페이스라 일컽는 녀석을 추가해 주고, 해당 클래스들을 곧바로 인스턴스화 하여 사용하곤 합니다.

그러한 Client Class 와 각각 서브시스템에 있는 하위 클래스들(위 그림에서 빨간 상자)이 수정이 필요할때 수정을 하기가 간단하지는 않을것 입니다. 이것을 서브시스템 단위(컨퍼넌트)로 관리해 주는 무언가(Façade Object)가 있으면 좋다고 생각이 됩니다. 그러면 그림은 다음처럼 바뀌어 지게 됩니다.


이런... 비스타에 있는 캡춰 툴을 사용했더니 테두리가 빨간색으로 처리되네요.. ㅡㅡ;

위처럼 퍼샤드 객체를 서브시스템(패키지)의 인터페이스 라고 생각해 봅시다.

어떤가요? 이러면 Dependency 가 낮아지겠죠? 이렇게 해서 뭐가 낮아질까 라고 생각 할수도 있겠지만, 통상 객체간의 결합도를 낮추기 위해서는 인터페이스를 이용한다고 하죠. 그와 같은 이치입니다.


제가 생각하는 퍼샤드 객체는 안내데스크 입니다. 예를 들어 실생활에서 어떠한 건물에 입주해 있는 회사가 아래 그림과 같다고 한다면, 고객은 MS를 가기위해 2층으로 올라가게 됩니다.



그러다 MS 사업 확장을 하면서 4, 5 층으로 사무실 이전을 할 경우 그것을 모르는 고객이 2층으로 갔다면 낭패 입니다.
이러한 혼동을 막고자 안내데스크를 두게 되면 고객 입장에서는 더할나위 없이 좋을것입니다.
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
Think about it.2011.10.19 20:33
시간 복잡도와 공간 복잡도 라는 개념이 있습니다.

프로그램의 알고리즘이 얼마나 시공간적인 최적화가 되었는지 확인 할수 있는 방법입니다. 복잡도가 0에 가까울수록 좋은 알고리즘이지요.

예전에 컴퓨터 사양지 좋지 못할때는 최적의 알고리즘으로 만들어야 했습니다. 물론 지금이라고 대충 만들면 된다는건 아니지만 지금은 어떻게 개발하던 작은 프로그램의 연산 속도는 비슷합니다. codeguru에서 이전에 While문이 빠른지 For문이 빠른지에 대한 아티클이 생각나네요 ^^

현재는 단순한 알고리즘이 문제가 아니라 수많은 자료형, 라이브러리, 프레임웍 사이에서 최적의 조합을 찾는것이 문제입니다.

예를 들면 빠른 응답속도의 웹페이지를 만들때 캐싱을 하냐 안하냐가 엄청난 퍼포먼스 차이를 보여줍니다. 하지만 실시간으로 변하는 데이터를 캐싱 하게 되면 단순히 플랫폼에서 제공되는 캐시로는 처리하기가 어렵습니다. 더군다나 대형 웹 사이트인 경우는 WebFarm 기반이라 캐싱된 데이터의 싱크문제도 있습니다. 이런경우는 캐쉬서버를 별도로 두어서 운영하는데 실시간 데이터의 무결성을 보장하려면 데이터가 변하는 액션이 있을때 마다 캐시데이터도 갱신 해주어야 합니다.

그렇다면 빠른 퍼포먼스를 위해 캐싱을 하기위해 캐쉬서버와 통신하는 코스트를 따진다면 결코 시공간 복잡성이 높아지고 소프트웨어 품질도 나빠집니다.

이런 경우라면 차라리 쿼리튜닝과 적절한 인덱스 설계로 응답속도를 줄일수 있을것 같습니다.

지금까지 수많은 코드를 짜면서 100% 만족하는 코드를 짤수 없었습니다. 항상 이 트레이드 오프가 걸렸기 때문이죠...

iPhone 에서 작성된 글입니다.
신고
Posted by dotnetpower
ASP.NET2011.10.15 00:44
오랜만에 불 붙었습니다.

저는 VB MVP입니다. 하지만 누구 덕분에 ASP.NET은 C#이랑 해야 한다는 어떤 정석(?)이 생겨서 VB로 할수가 없습니다. ㅠㅠ

이전에 MVC에 대해 설명을 했습니다.

저는 정말 아무도 모르는 아니, 누군가는 알겠지만 공유를 안해서 죽어라 삽질하게 만드는 이기적인 개발자들에 대해 감사하고 있습니다.

제 블로그 이전글을 보면 JAVA를 해야 하는 이유에 대한 글이 있습니다.

닷넷이 아닌 자바!!

개방을 하는 시스템을 따라갈 자는 없다고 봅니다. 특히 자바쪽은 오픈소스가 굉장히 많습니다.
물론 닷넷도 오픈소스를 많이 합니다. 하지만 자바에 비하면 아직 애기 수준이죠....

자바의 스프링, 하이버네이트, 아이바티스, 앤트

정말 훌륭합니다. CI도 정말 훌륭한 프러덕이 많습니다. 하지만 닷넷은 요즘은 많아 졌는데, 예전에 정말 없었습니다.

정정 : 이 부분에 있던 내용은 삭제 하였습니다. < 모 회사에 관련된 내용이라서 ^^;>

제가 자바에 대해 해봐야 한다고 한건, 오픈소스가 정말 잘되어 있습니다. 아직도 활발하게 진행이 되고 있으며 EJB를 무너뜨린 Spring은 벌써 3.0 입니다.

닷넷은 spring이랑 ibatis랑 붙이는데 솔직히 셋팅하는데 일주일 걸렸습니다. 그때는 정말 자료가 전혀 없었습니다. 혼자 삽질 하며 겨우 셋팅을 해 보니 구글에서 아무리 찾아도 없던 내용을 제가 등록했습니다. codeproject에 여기에 근데 Part1 밖에 없습니다.

개발자의 가장 큰 단점인 영어가 안되어서... ㅠㅠ 제가 이 아티클을 쓰려고 일주일간 사전찾고 하며 쓴 간단한 part1입니다.

part2를 2년 만에 쓰게될지도 몰라요 ㅋㅋ

나름 MS 패턴앤 프랙티스 문서 많이 보고, 엔터프라이즈 J2EE 라는 책을 보며 최적의 패턴을 찾아서 쓴 내용입니다.

현재 실무에 제가 설계한 내용이 이 방법이고, 작년에 세미나 진행했던 내용도 이 내용입니다. 어흠.....


사실 MVC2 까지는 자바와 비교하기에는 너무 부족해 보였습니다.

뭐가 부족하나요? 라고 하시면 사실 저도 자바를 전문으로 한게 아니라 잘 모르지만, 일단 해 보시면 압니다. 라고 말씀드릴수가 있습니다. 왜냐면 MVP는 MS대변인이 아니기 때문에 분명히 말씀드립니다.

MVC2까지는 이건 뭐지? 라는 생각이였습니다.

하지만 3에서 ViewEngine 인 Razor가 나오면서 상황은 달라졌습니다.
JAVA의 Custom Tag나, JSTL를 접해보신분들은 Razor를 보시면 뭐... 비슷하게 따라했네... 라고 하실수도 있을것 같아요.

그만큰 자바쪽은 이전부터 발달이 되어 있었는데, 닷넷은 MVC3가 되면서 비슷한 느낌이 되었습니다 라고 말씀드릴수가 있습니다.


현재 랭귀지들은 굉장히 발전 되어있습니다.

자바가 1.5를 5.0으로 바꾸면서 타이거 라고 했죠 아마?

3~4년 전에 나온 자바5.0이 제가 보기엔 닷넷 4.0 과 비슷해 보입니다. 아직 닷넷 4.5는 베타입니다.

MS 관계자분들은 얘 뭐하는 놈이야? 라고 할수 있는데, 여긴 제 개인 블로그 입니다.
물론 주관적이긴 하지만 제가 느낀 언어는 그대로 전달할수 있습니다.

자바든 닷넷이든...
좋아하는 언어를 선택하시면 됩니다.

저는 사실 언어를 못합니다. 특히 국어.... 굉장히 어려운것 같습니다.
하지만 JAVA, C#, VB 는 동시통역(?) 할수 있습니다.

그만큼 비슷하다는 이야기 이지요~ ^^;


그러면 제가 왜 MVC3가 좋은지에 대해 설명할 차례인것 같네요.

우선 웹폼 기반 개발하시는 분들이 봤을땐, MVC는 페이지 개념이 없습니다. 예전에 MS에서 자주 PT자료로 내 놓았던것 중 하나가 털남 남자는 디자이너고, 이쁜 여자는 개발자...

상호 협력을 잘할수 있다라는건데.. 국내 뿐만 아니라 해외에서도 개발자와 디자이너 사이에 문제가 좀 있나 봅니다. ㅋㅋ

MVC로 하면 View는 디자이너 또는 퍼블리셔가 주는 html 그대로 사용할수 있습니다.

xxxToolkit 다 버리십시오. 이런거 쓰지 말고, 퍼블리셔가 주는 화면 그대로 사용하면 됩니다.

특히 jQuery와 통합되었기 때문에 jQuery 문법 조금만 알면 스크립트는 금방 합니다.

문제는 한국에선 화면에 출력되는걸 중요시 힙니다. 이건 까칠한!!! 퍼블리셔 몫입니다.
개발자는 요청에 맞는 응답을 잘 처리해 주면됩니다.

그럼 Razor는 왜? 타이틀에 붙어 다니는가?
Razor는 제가 생각하기에 정말 최상의 ViewEngine입니다.

흔히 말하는 골뱅이(@) 하나로 끝납니다. ㅋㅋ

그 예제는 다음에 보여드리겠습니다. :)
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
ASP.NET2011.10.15 00:08

ASP.NET MVC3로 프로젝트를 진행하고 있습니다.
MVC2에서 부족한 부분들을 3에서 많이 채워 주었습니다.

대표적인 예로 View Engine인 Razor 지원이 됩니다.

제가 실용적인 강좌가 많이 없다고 많은 분들께 이야기 하고 다녔습니다. 저 또한 실용적인 강좌를 만들지 못하고 있지만 정말 실무에서 필요한 내용이 무었인지 여러분들과 조금이나마 공유했으면 좋겠다는 생각에 지극히 개인적인(?) 아티클을 남겨 봅니다.

MVC(Model-View-Controller) 는 사실 명명이 잘못되었다고 생각합니다. CMV가 되어야 하는데, MVC죠...

이야기처럼 봐 주세요 ^^;

웹은 요청(Request)가 있어야 응답(Response)을 합니다.

요청을 받는 녀석은 Controller(C) 이죠. 요청을 받으면 요청한 내용을 보여주기 위해서 Model(M)에서 필요한 내용을 꺼냅니다. 그리고 View(V)를 통해서 보여주게 되는것이죠.

그럼 기존 WebForm기반이랑 뭐가 다른가요?

WebForm도 마찬가지입니다. 요청(Request)에 대해 응답(Response)를 하는데, 단지 Page기반의 처리방법이 MVC와 차이가 있는것입니다.

현재 우리 팀원이 자주 질문하는것이 새로운 요청일 경우 Controller를 어떻게 다르게 만들어야 하는지가 궁금한가 봅니다.

Controller는 단지 요청(Request)을 받아들이고 Model을 통해서 어떻게 View에게 보여줄것인가 하는 녀석이니까 작은 Doamin 으로 나눈다면 특정한 Business Logic에 대해서는 하나만 존재 하면 됩니다.

그러면 기존에 웹폼 기반에 수많은 페이지들은 어떻할것인가?

도메인 모델로 구분짓고 적절히 나누면 되는것입니다.
예를 들어 Twitter와 같은 시스템을 설계를 한다고 할때에는 TimeLine을 위한 Controller 하나, 팔로워, 팔로잉을 하는 사람들을 위한 Controller 하나, 그리고 쪽지와 같은 특수한 기능을 하는 기능적인 Controller하나, 마지막으로 설정에 관련된 Controller 하나, 이렇게 4개만 있으면 됩니다.

그럼 이렇게 의문을 가지시는 분들이 있을것 같습니다.
"그럼. 팔로워, 팔로잉 페이지를 따로 만들어야 하는데, 그걸 컨트롤러 하나로 만들면 어떻할껀데? 기존 웹폼은 전부 따로 만들어서 유저컨트롤로 쪼개어서 SP만 따로 호출하면 되는거 아니냐?"

그런분들은 그냥 웹폼으로 열심히 만드십시오. 라고 하겠습니다.

MVC의 장점은 M-V-C를 명확하게 나눌수 있는점입니다.

요즘에 퍼블리셔와 같이 일하지 않습니까? 퍼블리셔가 주는 페이지들은 View 입니다. Controller가 아닙니다.

??????

예... Controller는 요청(Request)을 받기 위한것이지 응답(Response)을 하기 위한것이 아닙니다.
그 페이지들을 View에 만드는겁니다.

그런데!!!
실용적인 강좌에 대해서 제가 서두에 언급을 했습니다. 실용적이란 이런걸 말씀드리는것입니다.

Controller는 도메인 모델에 대해 크게 나누어진것 이고, WebForm에서 MVC로 넘어오시려는 분들이 생각하시는 페이지는 View입니다.


"그래서 어쩌라고?" 하시는 분들...

자...

요청을 받았습니다. 응답을 위해 기존에 흔히 말하는 DAL을 통해서 페이지에 뿌려준다?

MVC에서는 그게 아닙니다.

MVC에서는 Controller로 받은 응답을 요청하기 위해서 View에 필요한 데이터를 Model에 요청해서 뽑아내고
ViewBag, ViewData 에 넣어서 단지 View로 넘겨주기만 하면 됩니다.

그러면 View에서 정말 멋진 Razor로 보여주면 되는것입니다.

뭐... 작업 하시다가 사파리에서 화면이 틀어진다? 망할놈의 IE6에서 깨진다? 그건 고귀한 퍼블리셔님들이 해야 할 몫입니다.

대략 어떤건지 감이 오시나요?

다음 강좌에 계속하겠습니다.



!!! 혹시나 제가 틀린 부분이 있으면 얼마든지 댓글남겨 주십시오. 정보 공유는 올바른 정보공유로 부터 시작이 됩니다.

감사합니다.
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
VB.NET2011.09.08 16:43

iBatis.net은 log4net 으로 로그를 내보냅니다. web.config에 로그 설정을 해 두고, 파일로 로그를 남길수 있는데, 실시간으로 로그를 확인하기가 쉽지 않습니다. Visual Studio의 콘솔창을 통해서 내보낼수도 있는데, 다양한 로그를 설정해 두면 원하는 부분만을 찾아서 보기가 어렵습니다. 이때 로그를 파일로 저장하는 방식으로 설정을 해 두고, 그 로그파일을 baretail 이라는 무료 어플로 보면 쉽습니다.

http://www.baremetalsoft.com/baretail/

web.config의 로그파일 설정 방법은 (http://funnygangstar.tistory.com/entry/iBatisNet-%EB%A1%9C%EA%B9%85) 참고

BareTail Screenshot



저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower

티스토리 툴바