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

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

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

===============================================================

모델-뷰-컨트롤러
(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

목차

  [숨기기

[편집]역사

MVC는 제록스 팰러앨토 연구소에서 스몰토크 관련 일을 하던 Trygve Reenskaug에 의해 1979년에 처음으로 설명되었다.[1] 관련 구현은 영향력있는 논문인 《스몰토크-80에서의 애플리케이션 프로그래밍: 모델-뷰-컨트롤러를 사용하는 방법》[2]에서 깊이 있게 설명되었다.

MVC는 여러 파생 패턴을 가지고 있다; 그 중 (마이크로소프트가 사용했기 때문에) 가장 널리 알려진 것은 1990년대 초기부터 등장하기 시작한 모델 뷰 프리젠터 패턴이다. 이 패턴은 MVC의 진화된 모습을 목표로 설계되었다. 그러나 모델-뷰-컨트롤러는 여전히 매우 널리 사용되고 있다.

2002년 11월 W3C는 미래의 웹 애플리케이션에 사용될 X폼즈(XForms) 아키텍처에 MVC 구조가 포함되도록 투표하여 가결하였다.[3] 이 규격은XHTML 2.0 규격에 바로 통합될 것이다. 현재 20개가 넘는 업체가 애플리케이션 스텍에 MVC가 통합된 X폼즈 프레임워크를 지원하고 있다.

[편집]같이 보기

[편집]주석

  1.  Trygve M. H. Reenskaug/MVC—제록스 팍 1978-79
  2.  Applications Programming in Smalltalk-80: How to use Model–View–Controller
  3.  Forms 1.0 Basic Profile

========================================================================

글참조 - http://blog.naver.com/pilljh/100113661491


MVC(Model , View , Controller)

 

[ Model 1 ]

 

User ↔ ~.jsp(V) ↔ JavaBean(M) ↔ DB

 

JVM이 있기 때문에 심플하다. -> 소규모프로젝트에는 적합.

strong coupling : 독립성이 없기 때문에, 변화가 심하거나 대형사이트에서는 사용이 어렵다.

model1에서는 공통적 처리가 불가능 하다.

각 jsp 파일을 직접 접근으로 뛰어넘을수가 있다.

  

 

[ Model 2 ]

 

User → (User ← ~.jsp(V) ← Servlet) → Servlet ← (Controller) → JavaBean(M) ↔ DB

 

공통적처리가 가능하다. (각파일마다 공통된 내용을 심을 필요가 없다.)

loose coupling (느슨한 결합) : 각 요소가 비교적 독립적이라는 장점이 있다.

중앙집중적 방식 : Controller 중심의 집중으로 모든 부분이 Controller를 통해서 움직이도록 되어있다.

 
 

 

[ Model 2 에서 Framework의 출현 ]

 

model 2 에서 servlet의 직접 개발이 힘들고, 효율성이 떨어지므로,

만들어진 Framework를 이용하여 이 과정을 해결함.

반복적인 작업을 줄이고, 소스코드의 양을 줄임.

대표적 Framework : 스트럿츠, 아이바티스 등.

 

[ Frameworks ]

 

M (Model : DB처리) : iBATIS, Hibernate...

V (View : Presentation) : Tiles, Sitemesh, Velocity, Fremaker ...

C (Controller : Process) : Struts 1, Struts 2, Spring ...

 

[ Hard Coding & Soft Coding ]

 

Hard coding : sql코드가 ~.java에 심어져 있다. (관리와 변경하기 번거롭다.)

Soft coding : sql코드가 ~.xml에 심어져 있다. (관리와 변경이 용이하다.)

 

[ Framework의 장점 ]

 

Framework는 ~.jar : ~.class의 모음 (필요한 것들만 가져다 쓰면, 노력을 대폭 줄여주게 된다.)

 ( Example : 자바JDK의 중요파일인 rt.jar은 runtime에 필요한 class들을 모두 가지고 있다. java.lang, java.util...)

표준화의 역할을 하게 된다. (반대로 그 프레임워크에서 지원해주는 내용을 벗어날수 없다는 것은 단점이다.)


=========================================================================================

저도 MVC패턴에 그렇게 익숙하거나 이해도가 높은 편이 아니라 이참에 정리 해볼까 합니다. 
AppGD의 어플을 개발하다 부딧히는 부분이 많아서...

- MVC 패턴이란?

MVC(Model View Control) 패턴이란 웹 개발의 한 패턴으로 꽤나 오래 전부터 사용되고 있는 방식입니다. (난 대학에서 대체 뭘 배운거야?!)

Model - 어플리케이션의 데이터를 저장, 관리 등을 담당하는 class들의 집합입니다.

View - 사용자가 직접적으로 받아서 보는 페이지입니다. (html, PHP, ASP, JSP 등이 될수 있습니다.)

Controller - View로 부터 온 요청을 Model에 요청하거나 Model로 부터 나온 데이터를 View로 보내는 역할을 합니다. view와 Model의 중간 역할을 합니다.

- 장 점 
1.관계 없는 부분의 로직을 제외하고 로직의 수정이가능하다.
2.각 각의 역할분담이 확실하다.
3.관리 유지 보수가 쉽다.
4.병렬식 개발이 가능하다.(이말은 Timeline  돌아 가듯이 하나를 개발해야만 다른것을 개발하지 않아도 된다는것입니다.)
5.좋은 물건을 만들어 낸다.



- 단 점
1.병렬 방식의 개발을 하기 위해서는 여러 프로그래머들이 필요하다.
  (커맨드 센터를 개발할때에 여러 SCV가 붙을경우 개발이 훨씬 빨라 지겟지요?)
2.다양한 기술의 지식이 필요하다.
  (기본적으로 서버사이드 언어 지식이외에 javascript의 데이터 처리 방법 등의 지식이 필요 합니다.) 



정도 된다는군요 ... 뭐 단점중 2번은 좀 재미 있지 않나요?;;

아래의 그림은 모 홈페이지 들에서 수집한 MVC관련 사진입니다.

1번은 PHP의 경우
2번은 JAVA일경우를 해서 끌어 온것인대...
사실 크게 차이는 없습니다.



1.사용자가 Controller에 요청을 보냅니다.
2.Controller는 Model에 그 요청을 처리해 줄것을 요청합니다.
3.Model은 요청을 처리하고 다시 Controller에 요청을 반환합니다.
4.반환된 요청은 View페이지로 전송되어 요청된 데이터를 사용자가 보기 좋게 변경합니다.

5-1.사용자가 보기 좋게된 데이터를 Controller로 다시 전송하여 사용자는 Controller 의 내용을 보게 됩니다.
5-2.사용자는 View로 출력된 내용을 보게 됩니다.

5-1과 5-2의 내용이 살짝 다른대요... 제가 보기에는 ... 5-1이 좀더 깔끔해 보이는군요 .. View는 Model과 확실히 분리 되야 된다고 생각합니다..

뭐 그때 그때 다르게 생각되겠지만서도;;

대략적인 개념은 이 정도로 정리 하겠습니다. 

출처 - http://www.deoker.com/359 


===================================================================================

[JAVA] 【Model 1】과【Model 2】(MVC)의 차이점


기존의 어플리케이션 개발에서는 모듈화를 해야 개발이 용이하고 유지보수도 쉽다. 

하지만 웹 어플리케이션 개발로 넘어오며로직이나 화면처리등을 하나의 파일(jsp)에서 처리하는게 쉽고 익숙하므로 모든 기능을 jsp에 모아두었다. 그러나 이러한 방식은 상당히 소스를어지럽고 한마디로 지저분하여 유지보수도 어렵고 코드의 재사용에도 문제가 된다. 그래서 나온 것이【Model 2】(MVC)이다


물론 소규모프로젝트에서는【Model 1】이 개발기간면에서 【Model 2】MVC보다 생산성이 높으므로【Model 2】를 사용하는것이 비효율적일 수도 있다. 


그렇다면


【Model 1】【Model 2】(MVC)의 차이점은?


【Model 1】의 경우에 JSP파일 하나에 모든 내용이 다 들어간다는 것 

【Model 2】MVC는 각각의 특성에 맞게 기능 배분을 했다는 것 


먼저 MVC란? → MVC (Model, View, Controller)


Model - Controller에서 요구한 데이타를 구성해서 결과값을 넘겨주는 역할

View - jsp파일 화면에 관련된 사항만 처리
Controller - jsp에서 넘어오는 파라미터 처리후 해당 로직이나 데이터베이스에 연결후 결과값을 받아서 jsp에 넘겨주는 역할


MVC의 호출 순서

【Model 1】  Model 에서 jsp파일(View)을 직접 호출하지만. 

【Model 2】MVC는 Controller가 개입하여 

  먼저 Controller 호출 → Model 에서 데이터 구성 → jsp파일(View) 호출 


  즉,【 Controller → Model → View 】


Controller는 한마디로 중개자 역할을 한다.

모든 호출은 Controller를 거칩니다. 

Controller【Model 2】에서 Servlet으로 만든다. 

jsp로도 컨트롤이 가능하지만 Servlet이 좀 더 Controller 하는 역할에 적합하다.


출처 - 
http://datacollect.egloos.com/4183019 

=================================================================================


 

'Framework & Platform > Common' 카테고리의 다른 글

모델1과 모델2의 차이점  (0) 2012.03.21
log4j.properties  (0) 2012.03.19
디자인 패턴  (0) 2012.03.18
Refactoring  (0) 2012.03.18
Struts 2 따라잡기  (0) 2010.12.26
Posted by linuxism
,

Oracle - COMMIT

DB/Oracle 2010. 11. 27. 17:14
글 참조 - http://cafe.naver.com/whatvoip/681

데이터베이스에서 트랜잭션(Transaction)이란 논리적인 일의 단위를 말합니다. 개념적으로 설명하기에는 추상적이고 모호한 면이 많아 실례를 들어 설명하는 편이 훨씬 이해하기에 빠를 것입니다.

아래 그림을 보세요. 

 

 

 

사용자가 INSERT 문을 사용해 데이터를 삽입하고, UPDATE 문으로 데이터를 갱신하고, DELETE 문으로 데이터를 삭제하였다고 합시다. 만약 이 모든 과정이 오류없이 수행되었다면 지금까지 실행한 모든 작업을 '실제로' 수행하라는 명령을 내릴 수 있는데 이 때의 명령이 바로 'COMMIT' 명령입니다.
 
'COMMIT' 명령을 주기 전까지의 모든 작업은 'ROLLBACK' 명령으로 원상태로 되돌릴 수 있는 것입니다.

만약 INSERT 작업을 한 다음 'SAVEPOINT A'라는 명령을 실행하였다면 나중에 'ROLLBACK A'라는 명령을 통해 INSERT 작업을 한 그 위치로 되돌아 올 수 있는 것이죠. 그 전에 'COMMIT' 명령을 실행하지 않았다면 말입니다.

이와 같이 COMMIT 명령으로 하나의 작업이 성공적으로 끝났을 때 우리는 트랜잭션이 성공적으로 수행되었다고 말합니다.

트랜잭션 제어를 위한 명령어(Transaction Coltrol Language)에는 다음과 같은 것들이 있습니다.

COMMIT 
SAVEPOINT 
ROLLBACK

하나 하나 살펴볼까요?

COMMIT은 저장되지 않은 모든 데이터를 데이터베이스에 저장하고 현재의 트랜잭션을 종료하라는 명령입니다.

SAVEPOINT [이름]는 현재까지의 트랜잭션을 특정 이름으로 지정하라는 명령입니다.

ROLLBACK [TO  SAVEPOINT 이름]저장되지 않은 모든 데이터 변경 사항을 취소하고 현재의 트랜잭션을 끝내라는 명령입니다. 만약 이전에 SAVEPOINT로 지정한 이름이 있으면 그 위치까지 되돌아 갑니다. 
이와 같이 COMMIT 또는 ROLLBACK 명령으로 직접 트랜잭션을 완성하거나 취소할 수도 있지만, 
다음과 같은 경우에는 자동으로 트랜잭션이 종료됩니다.

DDL(CREATE, ALTER, DROP) 명령어를 실행할 때 
DCL(GRANT, REVOKE) 명령어를 실행할 때 
Deadlock같은 특정 Error를 만날 때 
SQL*Plus를 종료할 때

위와 같은 경우에는 COMMIT나 ROLLBACK 문이 없어도 트랜잭션이 종료됩니다.

그럼, 정리하는 의미로 다음과 같이 작업을 할 경우 어떠한 결과가 나타날지 한번 생각해 보세요.

SQL*Plus시작

SELECT * FROM EMP;

UPDATE EMP SET JOB_CODE = 'AA'  WHERE EMP_NUM = '10001';
 
SAVEPOINT update_point;

DELETE FROM EMP;

ROLLBACK TO update_point;

DELETE FROM EMP  WHERE JOB_CODE = 'SS';

COMMIT; 
INSERT INTO CUSTOMER  VALUES ('103',  손병목 , NULL, NULL, SYSDATE); 

 

 

MSSQL

 

1.  SQL 문장  앞에 SET IMPLICIT_TRANSACTIONS ON 을 설정하면 됩니다
ON 은 암시적 트랜젝션 모드로 설정되고 OFF 는 자동 commit 모드로 설정됩니다.
 
SET IMPLICIT_TRANSACTIONS ON
 
2. 문장앞에    BEGIN TRAN  문을 설정합니다.
 
= > sql 문장 실행후 결과에 따라  commit tran / rollback tran 을 실행합니다.

 

 

 

------------------------------------------------------------------------------------
본 내용을 2004년 7월 9일 수업 내용을 토대로 개인적으로 정리한 것입니다. 작성자 : 홍혁기(litwave)
------------------------------------------------------------------------------------

http://cafe.naver.com/litave/14


<<== 목차 ==>>


  1. TCL


  2. Transaction
    1) Commit
    2) Rollback
    3) AutoCommit
    4) Save Point
    5) Rollback to
    6) Rollback의 내부적 수행방법
    9) 읽기 일관성
   10) DML Lock
   11) DaedLock
-------------------------------------------------------------------------------------
 
1. TCL(Transaction Control Language)


 하나의 Transaction은 사용자가 Oracle에 로그인한 시점부터 로그아웃 할때 까지이다.(특별한 제어가 없는경우)


2. 트랜젝션 이란 : 연관된 DML 등의 묶음(작업단위)이다.
    
    A 은행                                          B은행
    ┌────────┐                      ┌────────┐
    │                      │--계좌이체-->  │                        │
    │                      │                      │                        │
    │                      │                      │                        │
    │                      │                      │                        │
    └────────┘                      └────────┘
    
        A은행에서 B은행으로 계좌이체를 한다고 가정해 보자.
        B은행에 정전등의 시스템적인 문제가 발생하여, A은행에서는 돈을 빼는 작업이 정상적으로 수행되었으나  B은행에서는 돈을 넣는 작업을 수행하지 못할 수도 있다.
        이것의 문제를 해결하기 위해서는 A은행에서 B은행으로 돈을 이체하는 작업 전체가 하나의 묶음으로 묶여 전체가 수행되던지 전체가 수행되지 말아야 한다.
    
  1) Commit 
     - 수행이 정상적으로 되었다고 여기까지 실행하라고 명령하는 것
    
  2) Rollback
     - 수행이 정상적으로 이루어지지 않아 기존 상태로 되돌리는 것.
  
  3) DML 사용중 DDL, DCL 명령이 들어오면 자동으로 Auto Commit이 수행됨.


  4) Save Point
    - Oracle에서 사용됨(Oracle 따라한 DB만 제공함)
    - SQL 문이지만 ANSI 표준은 아님
    - 책 갈피와 동일한 기능을 수행한다.
    - Save Point 이름 의 형식으로 사용한다.


  5) Rollback to SavePoint지점
    - 이렇게 하면 해당 위치로 RollBack 할 수 있다.
    - 뒤로는 이동해도 앞으로는 못간다.
  
  6)Rollback의 내부적 수행
    Emp Table에 Update를 한다고 해서 해당 부분이 바로 바뀌는 것은아니다.
    또다른 저장영역에 원래 값을 복사하고, update명령을 수행한다.
    이런 저장영역을 Rollback Segment(RollBack 시만 사용)라 한다.
    롤백을 하면 Rollback Segment에 있는 값을 뒤에서부터 적용해 간다.
  
    => 그러므로 한번 Save Point로 롤백하면 그 이후에 저장되었던 값들은 모두 지워진다.
  
  7) 하나의 Transaction은 Login -> TCL 까지 수행된다.  TCL -> logout
  
  8)                    Auto Commit               Auto Rollback
    발생상황         DDL, DCL 사용시        비정상 종료시(UPS가 비정상 종료를 막아준다.)
                         정상종료(exit)         
    
  - DB는 무결성(결점이 없어야 한다.)이 중요하다.
  
  9) 읽기 일관성


   - 모든 작업의 단위를 시간으로 기록한다.
   - 모든 문장은 내가 Commit 했던 상태만을 보게 된다.

 

   - 두개의 창을 나누어서 수행해봄


   - A 창에서 수행


        SQL> Select *
          2  from emp
          3  where empno=7788;
        
             EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
        ---------- ---------- --------- ---------- -------- ---------- ----------
            DEPTNO
        ----------
              7788 SCOTT      ANALYST         7566 87/04/19       3000
                20
        
        
        SQL> update emp
          2  set Sal=100
          3  where empno = 7788;
        
        1 행이 갱신되었습니다.
    
    - B 창에서 수행
      SQL> select *
        2  from emp
        3  where empno = 7788;
      
           EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
      ---------- ---------- --------- ---------- -------- ---------- ----------
          DEPTNO
      ----------
            7788 SCOTT      ANALYST         7566 87/04/19       3000 널이네
              20
    
    - A창에서 수행


        SQL> Select *
          2  from emp
          3  where empno=7788;
        
             EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
        ---------- ---------- --------- ---------- -------- ---------- ----------
            DEPTNO
        ----------
              7788 SCOTT      ANALYST         7566 87/04/19        100
                20
    
    - A와 B는 다른 화면을 보게됨


    - A가 Sal 정보를 수정중에 B가 다시 수정을 하려하면 락이 걸려서 A가 Commit 할때까지 기다리게 된다.
    
    - B창에서 수행
      SQL> update emp Set Sal=200
        2  where empno = 7788;
        
    - A창에서 Rollback 수행
      SQL> update emp Set Sal=200
        2  where empno = 7788;
    
    - B창은 이때서야 수행하게 됨(Lock 당시에 입력한 것들 모두 입력됨)
      SQL> update emp Set Sal=200
        2  where empno = 7788;
      
      1 행이 갱신되었습니다.
      
  10) DML Lock : 두 Application 간에 상호 데이타를 파괴하는 것을 막아주는 것
    - DML 하기전에 Lock을 거는 것
    - 무한히 대기하게 됨
    - 자동으로 Lock을 걸고 해제해줌(최저레벨로..) : 같은 Row 만 모두 Lock이 걸림
  
  11) Dead Lock : Lock중 특수한 Lock(무한 대기에 빠지는 경우)
    - A, B 두창 모두 Rollback 해준다.
    
    - A창에서 Scott의 금액을 Update 해줌
      SQL> update emp
        2  Set sal=100
        3  where ename='SCOTT';
      
      1 행이 갱신되었습니다.
      
    - B창에서 SMITH의 값을 Update 해줌
    
      SQL> update emp
        2  Set sal = 200
        3  Where ename='SMITH';
      
      1 행이 갱신되었습니다.
      
    - A창에서 SMITH의 값을 Update 해줌
      - lock이 걸려서 대기상태에 빠짐
      
      SQL> update emp
        2  Set Sal = 300
        3  where ename = 'SMITH';
    
    - B창에서 SCOTT의 값을 Update 해줌
      - DaedLock 에 걸림
      
      SQL> update emp
        2  Set Sal=400
        3  where ename = 'SCOTT';
    
    - A창에서 에러메세지 출력 후 자동으로 바로 이전 상태로 돌려 놓음
      update emp
             *
      1행에 오류:
      ORA-00060: 자원 대기중 교착상태가 검출되었습니다  
      
  12) 명령문 Level Rollback : A가 제일 마지막에 수행한 하나의 명령만 Rollback 해줌
   -  DML을 수행하면 암시적으로 Savepoint를 지정하고 있다가 바로 이전 명령으로 돌려준다.

'DB > Oracle' 카테고리의 다른 글

오라클, 범용 엔지니어드시스템 '스팍 슈퍼클러스터 T4-4' 출시  (0) 2011.11.17
오라클 엔지니어드 시스템  (0) 2011.11.17
ORACLE Data Guard Architecture  (0) 2011.11.02
SQL 쿼리문 2  (0) 2011.08.16
SQL 쿼리문 1  (0) 2011.08.16
Posted by linuxism
,

'IDE & Build > Eclipse' 카테고리의 다른 글

이클립스 Access restriction 해결 방법  (0) 2012.02.25
이클립스 JSP 한글깨짐  (0) 2012.01.26
이클립스에서 WebContent/META-INF/context.xml  (0) 2012.01.24
이클립스 설치  (0) 2012.01.19
Eclipse 단축키  (0) 2011.01.03
Posted by linuxism
,