'분류 전체보기'에 해당되는 글 95건

  1. 2016.08.16 오라클 함수 정리
  2. 2016.08.15 cascade 예제
  3. 2016.07.07 이클립스에서 Dynamic Web Project를 만들었는데 web.xml이 없을 경우
  4. 2015.04.10 1장. 컴퓨터 시스템 개요
  5. 2013.01.18 GROUP BY 4
  6. 2013.01.11 JOIN
  7. 2013.01.09 MVC패턴과 모델 1,2 2
  8. 2013.01.08 cygwin tomcat,ant설정
  9. 2013.01.07 cygwin설치
  10. 2012.11.23 쉘 실습 과제.
posted by changhozz 2016. 8. 16. 12:59

오라클 함수

<단일행 함수>
1.문자함수
a)대문자 변환 : UPPER(문장열)
b)소문자 변환 : LOWER(문자열)
c)이니셜 변환 : INITCAP(문자열) => 오라클에서만 존재
d)문자 분해 : SUBSTR(문자열, 시작점, 글자갯수(1~))
e)빈 글자 수, 특정 문자로 채우기 : RPAD(문자열,글자수,'문자')
       LPAD(문자열,글자수,'문자')
=>글자 수 만큼 문자열이 채우지 못한 부분을 '문자'가 대신해서 채워준다.
f)문자 길이 : LENGTH(문자) => 문자 갯수
         LENGTHB(문자) => 문자 바이트
g)특정 문자 제거 : LTRIM(문자,'문자')  => 문자 중 '문자'를 제거
     RTRIM(문자,'문자')  => 문자 중 '문자'를 제거
        TRIM('문자'FROM 문자) => 좌우, 문자 중 '문자'를 제거
h)특정 문자의 위치 : INSTR(문자 or 칼럼,'문자',문자의 위치)
  시작지점 1: 앞에서 부터
          -1: 뒤에서 부터
  비교형식 0: 기본값
    1: 대소문자 구분
    2: 데이터베이스에 포함된 구조
i) 문자열 결합 :  △||연산자(결합 연산자)를 이용하여 문자열 결합
 ex) lastName||' '||firstName  === ' '(공백)포함 결합

2.숫자 함수
a)올림 함수 : CEIL(10.3) => 결과 : 11
b)반올림 함수 : ROUND(15.579,2)  => 소수점 이하 2+1번째를 반올림 나타낸다. 결과 : 15.58
c)버림 함수 : TRUNC(숫자,대상(n+1))
d)나머지 함수 : MOD(10,2) => 결과 10%2 => 0

3.날짜 함수
a)시스템 시간 : SYSDATE
b)둘 사이의 총 개월 수 : MONTHS_BETWEEN(SYSDATE,'2016/01/01') ==> 오라클에만 있음
c)해당 달의 마지막 날 : LAST_DAY(날짜)
ex) SELECT LAST_DATE('16/03/01') FROM dual;
d)해당 날짜 다음에 나오는 '요일'의 일자: NEXT_DAY(날짜,'요일') => 해당 날짜의 다음날부터 계산
e)더한 날짜를 계산 : ADD_MONTHS(date, integer)  ==> 더할 정수 값
f)원하는 것 빼오기 : EXTRACT(날짜)
 ex) SELECT EXTRACT(YEAR FROM hiredate) from emp 하게 되면
hiredate의 1988-08-18 형태에서 YEAR만 뽑아온다.
그래서 결과는 1988이 조회된다.

4.기타 함수
a) NVL() => null 값을 다른 값으로 채워준다 
 ex) NVL(comm,0)
b) DECODE(해당 칼럼, 조건값, 충족시 실행값)
 ex) DECODE(deptno,'10','영업부', '20','기획부','30','개발부')
c)CASE
 SELECT ename,job CASE MOD(EXTRACT(YEAR FROM hiredate),2)
 WHEN 0 THEN '짝수년도'
 ELSE '홀수년도'
 END AS YEAR
 FROM emp;

5.변환 함수
a)날짜, 시간, 돈을 문자로 변환 : T0_CHAR(datetime)
          : To_CHAR(number)
b)문자를 숫자로 변환 : TO_NUMBER
c)날짜 형식으로 변환 : TO_DATE

ex) 돈
 SELECT ename,sal,TO_CHAR(sal,'$99,999') FROM emp;
 SELECT ename,sal,TO_CHAR(sal,'L99,999') FROM emp;  => L(Local)은 지역 화폐단위를 뜻함

ex) 날짜 패턴 변경
 SELECT ename,hiredate,TO_CHAR(hiredate,'YYYY-MM-DD HH24:MI:SS') FROM emp;
 SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp;

※ 날짜 표현 방식
YYYY:년
MM:월(01~12)
DD:일(1~31)
HH24:시간(0~23)
HH12:시간(0~12)
MI:분(0~59)
SS:초(0~59)

 

 

 

 

출처 : blog.naver.com/lakeni/220641712753

 

 

 

 

 

 

 

 

'데이터베이스' 카테고리의 다른 글

cascade 예제  (0) 2016.08.15
posted by changhozz 2016. 8. 15. 16:51


CREATE TABLE DEPARTMENT(
 DEPTNO NUMBER NOT NULL,
 DEPTNAME CHAR(10),
 FLOOR NUMBER,
 PRIMARY KEY(DEPTNO)

);

INSERT INTO DEPARTMENT VALUES(1,'영업', 8);
INSERT INTO DEPARTMENT VALUES(2,'기획', 10);
INSERT INTO DEPARTMENT VALUES(3,'개발', 9);
INSERT INTO DEPARTMENT VALUES(4,'총무', 7);

 

CREATE TABLE EMPLOYEE(
 EMPNO NUMBER NOT NULL,
 EMPNAME CHAR(10) UNIQUE,
 TITLE CHAR(10) DEFAULT '사원',
 MANAGER NUMBER,
 SALARY NUMBER CHECK(SALARY < 6000000),
 DNO NUMBER DEFAULT 1 CHECK (DNO IN(1,2,3,4)),
 PRIMARY KEY(EMPNO),
 FOREIGN KEY(MANAGER) REFERENCES EMPLOYEE(EMPNO),
 FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DEPTNO) ON DELETE CASCADE
);

INSERT INTO EMPOLYEE VALUES(4377, '이성래','사장',NULL,5000000,2);
INSERT INTO EMPOLYEE VALUES(3426, '박영권','과장',4377,3000000,1);
INSERT INTO EMPOLYEE VALUES(3011, '이수민','부장',4377,4000000,3);
INSERT INTO EMPOLYEE VALUES(3427, '최종철','사원',3011,1500000,3);
INSERT INTO EMPOLYEE VALUES(1003, '조민희','과장',4377,3000000,2);
INSERT INTO EMPOLYEE VALUES(2106, '김창섭','대리',1003,2500000,2);
INSERT INTO EMPOLYEE VALUES(1365, '김상원','사원',3426,1500000,1);
);

 


*풀이*

TITLE CHAR(10) DEFAULT '사원'
-속성은 CHAR 10자리이며, 아무런 값이 입력되지 않았을 경우 기본 값으로 '사원'입력


SALARY NUMBER CHECK (SALARY < 6000000)
-SALARY라는 이름의 애트리뷰트 속성은 NUMBER이며
입력 값을 체크하여 6000000 이상의 값을 걸러낸다.

DNO NUMBER DEFAULT 1 CHECK (DNO IN(1,2,3,4))
-DNOㄹ는 이름의 애트리뷰트는 속성은 NUMER이며,
값이 입력되지 않으면 기본값 1을 입력하고,
입력되는 값은 1,2,3,4가 들어갔는지 확인하고
1,2,3,4 외의 값은 입력할 수 없음.

 

FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DEPTNO) ON DELETE CASCADE
-이 릴레이션의 DNO 에트리뷰트는 DEPARTMENT 릴레이션의 DEPTNO를
외래키로 사용하며, 삭제 시에 사용하여 삭제한다.

**삭제 옵션**
데이터베이스의 무결성제약조건 때문에 있는 옵션으로 4가지가 있는데,
이 옵션은 외래키로 참조하고 있는 경우에 사용된다.


1)제한(RESTRICTED)
참조 된 투플을 삭제하려고 시도할 때, 삭제 자체가 불가능 하게 만드는 옵션

2)연쇄(CASCADE)
참조 된 투플을 삭제 할 때, 삭제되는 투플을 참조하고 있는 다른 릴레이션에 있는
투플들도 함께 삭제된다. 위의 테이블의 경우에는 DEPARMENT 릴레이션의
1,영업,8 튜플을 삭제하게 되면, EMPLOYEE 릴레이션의 박영권, 김상원의
튜플들도 함께 삭제된다.

3)널값(NULLIFY)
참조ㄷ 된 투플을 삭제 할 때, 삭제되는 투플을 참조하고 있는 다른 릴레이션에 있는
투플에 참조 값을 NULL로 만든다.
이 옵션은 참조를 사용하는 애트리뷰트가 기본 키로 지정되어있을 경우에는
사용할 수 없는 옵션인데, 여튼, NULL값으로 대치된다는 것만 알아두자

4)디폴트 값
참조 된 투플을 삭제 할 때, 삭제되는 투플을 참조하고 있는 다른 릴레이션에 있는
투플에 참조 값을 미리 설정 된 디폴트 값으로 대치한다.

 

 

 

 

 


 

'데이터베이스' 카테고리의 다른 글

오라클 함수 정리  (0) 2016.08.16
posted by changhozz 2016. 7. 7. 11:50

1.현재 생성한 Dynamic Web Project에 마우스 오른쪽을 클릭한다.

 

2.Java EE Tools -> Generate Deployment Description Stub 클릭

 

3. web.xml 생성~~

posted by changhozz 2015. 4. 10. 16:40

-인터럽트란?

작동 중인 컴퓨터에 예기치 않은 문제가 발생한 경우 CPU(중앙처리장치:central processing unit) 자체가 하드웨어적으로 상태를 체크하여 변화에 대응하는 것을 말한다. 인터럽트가 발생하면 그 순간 운영체계 내의 제어프로그램에 있는 인터럽트 처리 루틴(routine)이 작동하여 응급사태를 해결하고 인터럽트가 생기기 이전의 상태로 복귀시킨다. 인터럽트 처리 루틴이 작동하지 않는다면, 인터럽트가 완료 될 때 까지 사용자 프로그램은 멈춰있어야 한다.

 

간단한 인터럽트 처리 순서.

1. 장치 제어기나 다른 시스템 하드웨어가 인터럽트를 발생시킴

2. 인터럽트가 발생 되었다고 처리기에 시그널을 보냄.

3. 처리기는 우선 시그널을 무시하고 현재 명령어의 실행을 완료.

4. 하던일을 마친 후 인터럽트에게 확인 신호를 보냄

5. 처리기가 PSW(Program Status Word)와  PC를 제어 스택에 저장함.

6. 처리기는 인터럽트에 해당하는 새로운 PC값을 적재함.

이때 소프트웨어에서는 원래 수행중이던 프로세스의 나머지 상태 정보를 저장.

7. 인터럽트 처리

8. 프로세스의 상태 정보를 복구

9. 이전 PSW와 PC를 복구.

 

인터럽트 처리 방법

1.순차적 인터럽트 처리

-하나의 인터럽트가 처리중에는 다른 인터럽트를 불능화 (우선순위 고려하지 않음.)

2.중첩 인터럽트 처리방법

- 인터럽트 간의 우선순위를 정하고 높은 우선순위 인터럽트가 낮은 우선순위 인터럽트를 인터럽트할 수 있도록 허용

 

 

 

 

 

 

1장 용어.

*레지스터 - CPU에 들어 있는 소규모 데이터 기억장치(누산기도 여기에 포함.)

 

*누산기 - CPU에서 더하기,빼기,곱하기,나누기 등의 연산을 한 결과 등을 일시적으로 저장하는

              레지스터.
*PSW - 명령의 실행순서를 제어하여 실행되고 있는 프로그램에 관계하는 시스템의 상태를 유지하는데 사용되는 레지스터를 말한다

*PC - Program Counter로 다음 번에 수행될 명령어의 주소를 가지고 있는 레지스터.
범용 레지스터 - 중앙 처리 장치(CPU) 내에 있는 레지스터들 중에는 특정 기능을 맡고 있는 레지스터들과 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등의 여러 가지 목적으로 사용될 수 있는 범용 레지스터가 있다.


*다중 프로그래밍
- 처리기는 실행 가능한 하나 이상의 프로그램을 보유하고 프로그램들이 수행 순서를 바꿔가면서

처리되는 개념을 말함
- 프로그램이 실행되는 순서는 프로그램의 상대적인 우선 순위와 입출력 대기 여부에 따라 달라짐
- 인터럽트 처리 루틴이 실행을 마치면, 인터럽트가 발생한 당시에 수행 중이던 프로그램으로 제어가

돌아가지 않을 수 있음  그 대신 보다 높은 우선순위를 가지고 대기 중인 다른 프로그램으로 제어가 전달


*캐시 메모리 -
주기억 장치에 읽어들인 명령이나 프로그램들로 채워지는 버퍼 형태의 고속 기억 장치.
주기억 장치와 중앙 처리 장치(central processing unit)와의 사이에 설치되어 있는 고속 버퍼메모리다.
캐시 메모리(cache memory) 또는 로컬 메모리(local memory)라고도 한다.
기억 용량(memory capacity)은 적지만 주기억 장치에 비해 고속이며 액세스할 수 있는 장점이 있다.
따라서 중앙 처리 장치가 명령이 필요하게 되면, 맨 먼저 액세스하는 것은 주기억 장치가 아니라

캐시 메모리인 셈이다.  자주 액세스하는 데이터나 프로그램 명령을 반복해서 검색하지 않고도

즉각 사용할 수 있도록 저장해두는 영역이다.

 

*참조지역성 - 프로세스들은 기억장치내의 정보를 균일하게 엑세스 하는것이 아니라 시공간적으로

참조를 많이 했었던 것을 또 참조 하는 경향이 있다.
공간(spatial) 지역성 : 특성 클러스터의 기억 장소들에 대해 참조가 집중적으로 이루어지는 경향
시간(temporal) 지역성 : 최근 사용되었던 기억 장소들이 집중적으로 액세스되는 경향

posted by changhozz 2013. 1. 18. 11:48

이번엔 SQL기법중 GROUP BY기법과 내부함수에 대하여 알아보자.

1.GROUP BY
GROUP BY란 특정 칼럼을 기준으로 같은 값을 가지는 행들을 그룹별로 모아 자료를 가져오는 것이다.
쉽게말해서, 중복된 여러개의 값들 중 대표선수 한명만 뽑겠다는 뜻으로 보면 될 것이다.

예시를 보면서 설명하도록 해보겠다.

위와 같이 사람들이 좋아하는 축구선수 목록 테이블인 tb_soccer_player가 있다고 할때,
방금 설명한 내용대로 축구선수의 name을 GROUP BY 해보도록 하겠다.


Query :  SELECT * FROM tb_soccer_player GROUP BY name;

result :

결과를 보게되면, 원래 테이블은 8개의 행이였는데 5개의 행으로 줄어든 것을 볼 수 있다.
이유는 C.Ronaldo, Kaka, Messi는 값이 2개씩 존재했기 때문에, 그룹화 하여 단 한개의 데이터로 취급한 것 이다.

그렇다면 축구선수의 num으로 GROUP BY를 해봤을 경우를 예상해보자.

Query :  SELECT * FROM tb_soccer_player GROUP BY num;

result : 

예상대로 num중 7,9,10만 출력되는 것을 볼 수 있다.
8개의 행들 중 num 칼럼은 모두 7,9,10들 뿐이었기 때문이다.
그런데 여기서 7번에는 ji-sung도 있고, 10번에는 Zidane도있는데 왜 C.Ronaldo와 Messi가 선택되었을까? 
우리가 따로 정렬에 대한 정보를 입력하지 않았다면 GROUP BY는 내부적으로 시컨스를 기준으로 정렬(sorting)이 이루어진다.  따라서 id값이 작은 순서대로(먼저 들어온 데이터 순) 정렬이 되었기 때문에,
뒤늦게 들어온 ji-sing과 Zidane은 밀려버린 것 이다.


2.HAVING

지금까지는 조건이 없는 GROUP BY문들이었다.
평소 어떤 쿼리를 작성할때 조건을 달고싶었다면 WHERE절을 이용하였는데, GROUP BY에서의 조건은
WHERE로 처리하지 않고 HAVING절을 사용한다. 

그럼 HAVING절을 이용하여 GROUP BY 해보도록 하겠다.
먼저 조건을 주기위해 tb_soccer_player테이블에 선수 몸값 칼럼을 추가해보겠다.



여기서,
축구선수들 중 몸 값이 400이상인 선수들의 목록을 그룹화 하여 보고싶다면,


Query : SELECT * FROM tb_soccer_player GROUP BY name HAVING price > 400; 

result : 


이러한 결과가 나오게 되는 것 이다.


이번엔 조금더 실질적으로 사용되는 예들을 들어보겠다. 
 
집계함수를 사용하는 것인데, 우선 집계함수에는 어떠한 것들이 있는지 알아보도록 하겠다.

3. 집계함수

집계란 이미 계산 된 것들을 모아서 계산하는 것을 말한다. 즉, 이미 계산된 결과를 어떤 기준으로
그룹화 하는 함수를 집계함수라고한다.

그렇다면 어떤 집계함수들이 있는지 확인해보자.


집계함수 

의미 

count (필드명)

null값이 아닌 레코드의 개수 

sum(필드명) 

필드명의 값들의 합계 

avg(필드명) 

필드명의 값들의 평균 

max(필드명)  필드명의 값들 중 최대값 
 min(필드명)

필드명의 값들 중 최소값 

count(*)   테이블에 속하는 레코드의 개수


합수를 사용한 예를들기위해 새로운 테이블 tb_employee를 만들었다.
현재 tb_employee 칼럼으로는 dept(부서), position(직책), headcnt(인원수), salary(급여)가 존재한다.


ex.1) 각 부서당 몇개의 직책이 있는지 알고싶다.

Query : SELECT dept,count(position) position_cnt FROM tb_employee GROUP BY dept;

result : 


ex.2) 각 부서당 전체사원의 수를 알고싶다.

Query : SELECT dept, sum(headcnt) from tb_employee GROUP BY dept;

result :  


ex.3) 직책별로 평균 급여를 알고싶다.

Query : SELECT position, CEILING(avg(salary)) salary_avg from tb_employee GROUP BY position;

result : 


(여기서 CEILING()은 내장함수로 소수점을 버려준다. )


앞으로 공부를 하면서 더 나은 예제가 있다면 또 다시 정리해보자.



'MySQL' 카테고리의 다른 글

JOIN  (0) 2013.01.11
posted by changhozz 2013. 1. 11. 03:21

SQL의 기법중 JOIN기법에 대하여 알아보도록하자.


참고, SQL이란?

Structed Query Language의 약자로써 해석하자면 '구조화된 질의어'란 뜻이다.

즉, 데이터베이스에서 데이터를 조회, 입력, 수정, 삭제, 저장하는데 사용되는 질의 언어이다.

구조화된 언어라는 말은 일정한 틀이나 패턴이 있다는 뜻이다.

일정한 틀과 패턴에 맞게 조건들을 나열하면 SQL은 원하는 결과를 가져다 준다.

패턴에 맞게 조건들을 선언한다는 의미에서 SQL을 선언적(declarative)언어라고도 한다.



*JOIN*

-JOIN이란 기법은 여러 테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져온뒤

가상의 테이블을 만들어 결과를 보여주는 기법이다.

-JOIN에는 오라클에서 사용하는 JOIN문과 모든 제품들에서서 공통적으로 사용 가능한 

표준(ANSI) JOIN 방법이 있다.


우리는 MySQL을 사용하므로 표준JOIN방법을 이용하면되겠다!.

그럼 우선 어떤  종류의 JOIN연산자가 있는지 알아보도록하자.




JOIN 종류   설명 
 내부조인(INNER JOIN)   조건을 사용해서 두 테이블의 레코드를 결합한다.
 외부조인(OUTER JOIN)  내부조인과 비슷한데 일치하지 않는 열까지 반환하며 그 열은 NULL로 반환한다.
  동등 조인(EQUI JOIN)   내부조인이다. 두 테이블 사이의 같은 행들을 반환한다.
 비동등 조인(NON-EQUI JOIN)  내부조인이다. 두 테이블 사이의 같지 않은 행들을 반환한다.
 자연 조인(NATURAL JOIN)  'ON' 절이 없는 내부조인. 같은 열 이름을 가진 두 테이블을 조인할때만 작동
 크로스 조인(CROSS JOIN)  한 테이블의 모든 행과 다른 테이블의 모든 행이 연결되는 모든 경우를 반환.
 콤마 조인(COMMA JOIN)  콤마가 CROSS JOIN 키워드 대신 사용된다는 점을 제외하면 크로스 조인과 같다.
 셀프 조인(SELF JOIN)  자기 자신을 조인한다.


그럼 이제 실제로 테이블을 생성하여 직접 사용해보자.
오늘의 테스트를 위한 테이블 4 개를 생성해보겠다. 






지금부터 생성한 4개의 테이블을 이용하여 알아보도록 하자.

    


1. 내부 조인(INNER JOIN)

 - 조건을 사용하여 두 테이블의 레코드를 결합한다.

- 동등 조인, 비동등 조인, 자연 조인 등이 있다.


ex) Select somecolumns From table1 Inner Join table2 ON somecondition; 


1) 동등 조인(EQUI JOIN)

- 두 테이블 사이의 같은 행들을 반환한다.


ex) 각 boy가 어떤 toy를 가지고 있는지 조사한다. (매핑 확인)

SELECT tb_boys.boy, tb_toys.toy FROM tb_boys INNER JOIN tb_toys 
ON tb_boys.toy_id =  tb_toys.toy_id;



 2) 비동등 조인(NON-EQUI JOIN)

-두 테이블 사이의 같지 않은 모든 행들을 반환한다.


ex) SELECT tb_boys.boy, tb_toys.toy FROM tb_boys INNER JOIN tb_toys ON tb_boys.toy_id <> tb_toys.toy_id ORDER BY tb_boys.boy;


참고:여기서 <> ㅡ> 이것은 같지 않음을 나타냄.




3) 자연 조인(NATURAL JOIN)


- 두 테이블에 같은 이름의 열이 있을때만 동작한다.

- ON이 필요없다.

ex) SELECT tb_boys.boy, tb_toys.toy FROM tb_boys NATURAL JOIN tb_toys;




2. 외부 조인(OUTER JOIN)


- 내부 조인과 유사하며 일치하는 것이 없을 경우 NULL로 표시한다.

- 왼쪽 테이블은 FROM 바로 다음에 나오는 테이블이고, JOIN 뒤에 나오는 테이블이 오른쪽 테이블이다.

- 왼쪽 외부 조인(LEFT OUTER JOIN)과 오른쪽 외부 조인(RIGHT OUTER JOIN)이 있다.

- 왼쪽 외부 조인을 사용할 경우 왼쪽 테이블을 오른쪽 테이블에 비교한다. 오른쪽 외부 조인도 그 반대로 동작한다. 


유용한 예) girls가 어느 toys를 가지고 있는지 알아보도록 쿼리를 작성한다.


i) 왼쪽 테이블을 오른쪽 테이블에 비교하는 방법 

SELECT g.girl, t.toy FROM tb_girls g LEFT OUTER JOIN tb_toys t ON g.toy_id = t.toy_id;




 ii) 반대로 했을때

SELECT g.girl, t.toy FROM tb_toys t LEFT OUTER JOIN tb_girls g ON g.toy_id = t.toy_id;



3. 크로스 조인(CROSS JOIN)

- 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 반환한다.


ex) SELECT t.toy, b.boy FROM tb_toys AS t CROSS JOIN tb_boys AS b;



4. 셀프 조인(SELF JOIN)

- 자기 자신을 조인한다.

- 자기 자신을 하나씩 비교하기 위해 사용한다.

- 하나의 테이블로 같은 정보를 가진 테이블이 두 개 있는 것처럼 쿼리를 보낼 수 있다.


예) 각 사람의 이름(name)과 그 사람을 담당하는 보스(boss)의 이름을 가져온다. 

SELECT c1.name, c2.name AS boss FROM tb_company_info c1 INNER JOIN tb_company_info c2 ON c1.boss_id = c2.id;








'MySQL' 카테고리의 다른 글

GROUP BY  (4) 2013.01.18
posted by changhozz 2013. 1. 9. 02:59

MVC 패턴.
- MVC이란 Model, View, Controller의 약자로 정말 많이 들어봤지만, 자세히는 모르던 개념.
정리하고가자.

우선 JSP 기반 웹 어플리케이션의 구조에는 MVC1패턴과 MVC2패턴 구조가 있다.
JSP에서 모든 로직과 출력을 처리하느냐, 
아니면 JSP에서는 출력만 처리하느냐에 따라서 모델 1구조와 모델 2 구조로 구분된다.
우선 모델 1 구조에 대해서 알아보자.

1). 모델 1 구조.

- JSP로 구현한 기존 웹 어플리케이션은 모델 1 구조로 웹 브라우저의 요청을 JSP 페이지가 받아서 처리하는 구조이다.


- JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관련 코드가 뒤섞여 있는 구조이다. 즉, 내가 만들었던 허접한 쇼핑몰 hoshop또한 모델 1 구조였던것이다.
즉, HoShop과 같이 웹 브라우저의 요청이 곧바로 JSP에 전달된다.
웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을
처리하고 그 결과를 클라이언트에 출력해준다.
JSP 페이지에서 웹 브라우저가 요청한 것들을 처리한다는 것은 JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여줄 출력 관련 코드가 섞인다는 것을 의미한다.
프로그래밍 수업시간에 다뤘던것처럼 하나의 JSP 페이지에서 서비스 클래스를 통해서 원하는 작업을
수행하고 그 결과를 출력하는 경우가 많았는데, 이것이 모델 1 구조의 전형적인 예이다.

- 이러한 구조는 JSP 페이지 안에서 모든 정보를 표현(View)하고 저장(Model)하고 처리(Control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어진다.

모델 1 구조 정리

- 정의 : 모든 클라이언트 요청과 응답을 JSP가 담당하는 구조이다.
- 장점 : 단순한 페이지 작성으로 쉽게 구현 가능하다. 중소형 프로젝트에 적합하다.
- 단점 : 웹 애플리케이션이 복잡해지면 유지보수 문제가 발생된다.


그럼 다음으로 모델 2 구조를 살펴보자.

2). 모델 2 구조.

모델 2 구조는 모델 1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 된다.
서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP 페이지로 포워딩한다.
포워딩을 통해서 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다.
즉, 서블릿이 비즈니스 로직 부분을 처리하게 되는 것 이다.
모델 2 구조의 특징은 웹 브라우저의 모든 요청이 단일 진입점,
즉 하나의 서블릿에서 처리된다는 점이다.
하나의 서블릿이 웹 브라우저의 모든 요청을 받기 때문에,
서블릿은 웹 브라우저의 요청을 구분할 수 있는 방법을 필요로 하며,
서블릿은 웹 브라우저의 요청을 처리한 후 웹 브라우저에 보여줄 JSP를 선택하게 된다.
모델 2 구조의 이러한 특징 때문에 MVC(Model - View - Controller)패턴에 기반을 두어
웹 어플리케이션을 구현할 때는 모델 2 구조를 주로 사용한다. 
현재 우리 GROUPWARE 또한 모델 2 구조를 사용하고 있다.

 

- 모델 1은 컨트롤러가 모델이나 뷰를 포함한 MV 형태를 띄고 있고, 모델 2는 완전한 MVC 형태를 적용하고 있다고 볼 수 있다.

모델 2 구조 정리

-  정의 : 클라이언트의 요청처리와 응답처리, 비즈니스 로직 처리하는 부분을 모듈화시킨 구조이다.
-  장점 : 처리작업의 분리로 인해 유지보수와 확장이 용이하다.
-  단점 : 구조 설계를 위한 시간이 많이 소요되므로 개발 기간이 증가한다.


모델 2 를 설명하면서 MVC패턴이란 무엇인지까지 설명이 되버린것같다.
그래도 다시한번 MVC패턴이란 무엇인가를 알아보자.

 3). MVC 패턴

모델(Model) : 페이지의 이동간에 파라미터나 값들을 넘겨줄때 
이러한 값들을 담은 인스턴스를 의미한다.

뷰(View) : 비즈니스 영역에 대한 프레젠테이션 뷰(즉, 사용자가 보게 될 결과 화면)를 담당한다.

컨트롤러(Controller) : 사용자의 입력 및 흐름 제어를 담당한다.

사용자는 원하는 기능을 처리하기 위한 모든 요청을 단일 컨트롤러에 보낸다.
모델은 비즈니스와 관련된 상태 정보 및 관련 기능을 제공하는데,
컨트롤러는 이 모델을 통해서 사용자의 요청을 처리한다.
모델을 사용하여 알맞은 비즈니스 로직을 수행한 후 컨트롤러는 사용자에게 보여줄 뷰를 선택하며,
선택된 뷰는 사용자에게 알맞은 결과 화면을 보여준다. 
뷰가 사용자에게 결과 화면을 보여줄 때에는 결과 정보가 필요한데,
컨트롤러가 이 정보를 뷰에 전달해 준다.


MVC 패턴의 핵심은 다음과 같다.
-비즈니스 로직을 처리하는 모델과 결과 화면을 보여주는 뷰가 분리되어 있다.
-어플리케이션의 흐름 제어나 사용자의 처리 요청은 컨트롤러에 집중된다.

즉, 모델은 오직 비즈니스와 관련된 부분을 처리하면 될 뿐 사용자에게 보여줄 화면이나 흐름 제어에 
대해서는 처리할 필요가 없다.
반대로 뷰는 사용자에게 알맞은 화면을 보여주는 역할만 수행하면 될 뿐, 비즈니스 로직이나 흐름 제어 등을 신경 쓸 필요가 없다.
이렇게 모델과 뷰가 분리되어 있기 때문에 모델의 내부 로직이 변경된다 하더라도 뷰는 영향을 받지 않으며, 뷰와 모델이 결합되어 있지 않기 때문에 뷰를 어렵지 않게 변경할 수 있다.

또한, 컨트롤러는 사용자의 요청에 대해서 알맞은 모델을 사용하고 사용자에게 보여줄 뷰를 선택하기만 하면 된다. 
만약 컨트롤러나 모델에 상관없이 새로운 뷰를 추가해 주면 된다. 즉
, MVC 패턴을 사용함으로써 유지 보수 작업이 간단해지고 어플리케이션을 쉽게 확장할 수 있게 되는 것이다.

정리를하자면, 모델 2 구조에서 서블릿은 MVC 패턴의 컨트롤러 역할을 한다.

서블릿은 웹 브라우저의 요청과 웹 어플리케이션의 전체적인 흐름을 제어하게 된다.
또한 모델 2 구조에서 JSP는 뷰의 역할을 담당한다. 비즈니스 로직과 관련된 코드가 없는 점을
제외하면 일반 JSP와 거의 동일한 형태를 취한다는 것이다.




'JSP > JSP 정리' 카테고리의 다른 글

DB정리!!!  (0) 2012.09.26
JSP 수업.  (0) 2012.09.25
웹 어플리케이션  (0) 2012.08.16
Chpater 1. 웹 프로그래밍 기초.  (0) 2012.08.16
웹 서버란  (0) 2012.08.16
posted by changhozz 2013. 1. 8. 02:58


cygwin 설치가 끝났다면, tomcat과 ant를 설정해보도록한다.
우선 빠른 설치를 위하여 먼저 다운을 받도록하자.

 tomcat : http://tomcat.apache.org/download-60.cgi
Core에 있는 tar.gz를 다운 받는다.
(리눅스 기반인 cygwin은 윈도우용 압축파일인 zip 대신 gz을 사용한다.)
이때 Core와 Deployer의 차이를 알고갈 필요가있다.
Core란 실행파일만 가지고 있는 배포파일이고 Deployer는 소스파일까지 가지고 있는 배포파일이다.
그렇다면  실행파일만 있으면될것을 소스파일까지 받을 이유가 뭐가있을까?
답은 이용자가 자신의 사용 방법과 기호에 맞추어 소스파일을 설정하거나 기능을 변경하기 쉽도록 해주는 customize 때문이다.
 

ant :  http://ant.apache.org/bindownload.cgi

다운이 완료되었다면 cygwin을 통하여 다운 받은 해당경로로  이동한다.
이동하였다면 이처럼 방금 다운받은 ant와 tomcat이 존재할 것 이다.

이제 이곳에 압축해제 명령어를 사용하여 두개의 gz을 풀어줘야하는데
풀어주기전에 명령어부터 확인해보도록 하자.

 

1. 압축하기

아래 명령어를 실행하여 압축 파일을 만들 수 있다. source_files에는 압축할 파일이나 디렉터리 목록을 적는다.

$ tar cvzf filename.tar.gz source_files

실제 예는 아래와 같다

$ tar cvzf image.tar.gz image.jpg
$ tar cvzf images.tar.gz image1.jpg image2.jpg
$ tar cvzf imagedir.tar.gz images

2. 압축풀기


아래 명령어를 실행하여 압축 파일을 풀 수 있다.

$ tar xvzf filename.tar.gz

실제 예는 아래와 같다.

$ tar xvzf image.tar.gz
$ tar xvzf images.tar.gz
$ tar xvzf imagedir.tar.gz

3. 옵션

tar 명령에 뒤에 따라오는 옵션에 대한 설명은 아래와 같다.

  • c(Create): 파일 생성
  • x(eXtract): 파일 해제
  • v(Verbose): 작업 진행상황을 화면에 출력
  • z(gZip): gzip으로 압축 또는 해제
  • f  (File)  : 파일명을 다음과 같이 지정한다는 의미
    (다음에 반드시 파일명이 따라와야 함)

    예를들어 위의 명령중, tar xvzf image.tar.gz를 보자면,
    image란 파일명으로 압축파일 gzip을 해제하겠다는 뜻이다.
     
    여기서 잠깐. 
    tar 는 압축 명령어가 아닌 여러개의 파일을 하나로 묶는 명령어이다. 즉, 여러개의 파일을 하나로 묶어주는 일종의 유틸리티 라고 할 수 있다. 따라서 위의 예제나 실제로 받은 tomcat, ant 또한 개별의 파일들이 tar라는 명령어에 의하여 묶인상태로 gzip으로 압축이 된 것 이다. 

ant부터 압축을 풀어준 상태이다.

다음은 tomcat 압축해제상태이다.

이제 압축을 모두 해제했으므로, 환경변수를 세팅해보자.
필자는 .configure에 환경변수 설정을 할 것이다.

.configure에 들어왔다면 자신이 설치한 JDK,tomcat,ant 위치로 환경 변수를 설정해주어야 한다.

 

(Tip. 위의 설정처럼 환경변수명을 JRE_HOME, CATALINA_HOME 등으로 설정한 이유.
톰캣하위경로에 JDK경로를 설정해주기 위한 JRE_HOME 이라는 환경변수가 선언되어있다.
따라서 환경변수명을 다르게 지정해주면 안되고, 이미 지정되어있는 JRE_HOME이라는 변수에
경로 설정을 해주어야 하는 것이다.
이처럼 tomcat/bin경로에서 catalina.sh에 들어가보면 이미 CATALINA_HOME, JRE_HOME등의 변수가
지정되어있는 것을 볼 수 있다.)


위와 같이 설정을 끝냈다면
. .configure를 입력하여 적용을 시켜준다.
(여기서 . .configure의 의미는?
우선 파일명앞의 ' . '은 숨김파일을 의미한다. 그러므로 .configure는 숨김파일이란 뜻이다.
그렇다면 또 그앞의 ' . ' 은 무엇을 의미할까?
이것은 source라는 명령어와 동일한 기능을 갖는 .(점)이다.!
soure 명령어는 script를 읽어서 실행하게 하는 명령어이다.
즉,
. .configure는 source .configure 와 같은 의미인것이다.)
그러나 매번 cygwin을 접속할때마다 쳐주기엔 참 귀찮은일이다.
따라서 cygwin 실행시 사용자의 별 다른 명령어 입력이 없더라도 자동적으로 실행되는
bash_profile 에 초기에 실행되길 원하는 명령어 . .configure를 적용시켜준다.

 

(Tip. 위처럼 bash_profile에만 . .configure와 같이 적용을 시켜줘야하는가?
 위에서 말했듯이, bash_profile은 cygwin 접속시에 사용자의 별다른 명령어없이 자동적으로 실행이되는
쉘이기 때문에 이 곳에 . .configure와 같은 설정을 해주었다. 그러나사용자의 별다른 명령어없이
자동적으로 실행되는 쉘은 bash_profile뿐만은 아니다.
먼저
 .bash_profile이 있으면 이파일을 찾고, 이파일이 없으면 .bash_login을 찾고, 이것도 없으면 .profile을 찾아 실행한다. 만약 .bash_profile이 있을땐, .bashrc파일도 있으면 이 파일도 읽어들인다.
따라서 방금 말한 쉘들에만 적용하면 되는 것 이다.
)



이제 마지막으로 내가 설정한 환경변수를 확인해보고 설치를 마치도록한다. 
(env - 환경변수의 목록을 보여준다.)

'여러가지 설치' 카테고리의 다른 글

cygwin설치  (0) 2013.01.07
posted by changhozz 2013. 1. 7. 11:48

cygwin 설치방법.

www.cygwin.com에서
Install Cygwin ㅡ> setup.exe를 클릭하여 다운로드를 받는다.

다운받은 setup.exe를 설치를 시작해보자.
다음과 같은 화면처럼 별다른 설정이 필요없는 경우 <다음>을 클릭한다.

 

 

Choose A Download Site화면이 나오게되면 선택되어있는 것 처럼
 ftp://ftp.jaist.ac.jp를 클릭하여 <다음>을 클릭한다. 
국내에서도 KAIST 등 학교나 기관에서 서버를 제공하고 있지만,
일본의 JAIST 속도가 빨라서 여기서 받는 것이다.
왜 이러한 site를 클릭하여 다운을 받는지 궁금하다면 미러링의 개념이 필요하다.
(mirroring :  특정 지역의 사용자들이 더욱 빠르게 액세스할 수 있고,
원래 사이트에 몰리던 부하를 분산시키기 위해, 한 사이트에 있는 파일의 일부 또는 전부를 복사하여
다른 웹사이트에 저장, 운영하는 것이다. )

 

다음으로 Select Package 화면에서 무엇을 설치할지는 본인 선택이지만, 
나같은 경우엔
Editor ㅡ> vim (윈도우로 치면 메모장과 같은 기능임.)
web ㅡ>wget,wput 을 선택 설치하였다.
(wget ㅡ>ftp 서버 등에 파일을 다운로드할 때 간단하게 사용할 수 있는 프로그램)
(wput ㅡ>ftp 서버 등에 파일을 업로드할 때 간단하게 사용할 수 있는 프로그램)
사용법. wget http://changhozz.tistory.com/download/뭐뭐파일.tar.gz
         


 

 

설치가 완료되었다면 이제 cygwin에 tomcat과 ant를 설정해보도록 하자.

 

'여러가지 설치' 카테고리의 다른 글

cygwin tomcat,ant설정  (0) 2013.01.08
posted by changhozz 2012. 11. 23. 16:13

 

 쉘의 위치

 환경 설정 파일 목록

 매직넘버와 주석

 변수 설정 및 해제

 전역 변수 설정 및 해제

 지역 변수 설정 및 해제

 set 명령어를 이용한 배열 선언.

 

 산술 계산

 조건문 예제

 조건문 실행 결과

 루프문 예제

루프문 실행 결과 

함수 예제

 함수 실행 결과

산술 계산 예제

'(공개)세미나 과제' 카테고리의 다른 글

Ubuntu server 실습 과제.  (0) 2012.11.23