-- 제약조건 확인
SELECT *
FROM ALL_CONSTRAINTS
WHERE TABLE_NAME = 'PCBOPM03'


-----------------------------
-- PCBOPM02 수정 쿼리
-----------------------------

-- 제약조건 삭제
ALTER TABLE PCBOPM02 DROP CONSTRAINT SYS_C0021685 CASCADE;

-- 컬럼 추가
ALTER TABLE PCBOPM02
ADD
(
PO_VER VARCHAR2(3)
);

COMMENT ON COLUMN PCOS_NEW.PCBOPM02.PO_VER IS '개정차수';

--PK 삭제
ALTER TABLE PCBOPM02 DROP CONSTRAINT SYS_C0021685;

-- INDEX 생성
CREATE UNIQUE INDEX PK_PCBOPM02 ON PCBOPM02 (PO_NUM, PO_VER);

-- PK 생성
ALTER TABLE PCBOPM02 ADD (
CONSTRAINT PK_PCBOPM02 PRIMARY KEY (PO_NUM, PO_VER)
);

-----------------------------
-- PCBOPM03 수정 쿼리
-----------------------------
ALTER TABLE PCBOPM03
ADD
(
PO_VER VARCHAR2(3)
);

COMMENT ON COLUMN PCOS_NEW.PCBOPM03.PO_VER IS '개정차수';

CREATE UNIQUE INDEX PK_PCBOPM03 ON PCBOPM03 (PO_NUM, MLB_CODE, PPI_CODE, PO_VER);

ALTER TABLE PCBOPM03 ADD(
CONSTRAINT PK_PCBOPM03 PRIMARY KEY (PO_NUM, MLB_CODE, PPI_CODE, PO_VER)
);

ALTER TABLE PCOS_NEW.PCBOPM03 ADD (
FOREIGN KEY (PO_NUM, PO_VER)
REFERENCES PCOS_NEW.PCBOPM02 (PO_NUM, PO_VER)
ON DELETE CASCADE);









--PK추가 하기

ALTER TABLE 테이블이름 ADD CONSTRAINT 인덱스_이름 PRIMARY KEY(field1, field2);

(인덱스_이름 이 제약조건 이름인데, PK 는 오라클이 자동으로 인덱스 생성을 해 주며 이 제약조건 이름으로 인덱스를 생성한다)

-- PK 제거하기

ALTER TABLE 테이블이름 DROP primary key cascade;

--일반적인 제약 조건 삭제..

ALTER TABLE 테이블이름 DROP 제약조건_이름;

(CASCADE 옵션은 제약조건이 걸린 다른 모든 참조 조건들 모두 에게 영향을 준다. 즉, 여기서는 drop 했으므로 참조 조건(다른 테이블의 FK 등에 대한)을 모두 다 삭제 시켜 버린다.)


데이터 딕셔너리 에서 PK 설정 이 잘 되었는지 컬럼 타입 확인..


SQL> l
1 SELECT a.constraint_type as c, a.constraint_name constnm, b.column_name
2 FROM user_constraints a, user_cons_columns b
3 WHERE a.table_name = '테이블 이름' AND a.constraint_name = b.constraint_name ;


뒤에 조건절 AND a.constraint_type = 'P'

를 붙이면 PK 만 확인....,


P 는 PK

R 은 Reference.... FK

U 는 Unique

C 는 Check ( null 등을 포함한 여러 제약 조건이 걸렸다 고 이해 함 될 듯...)


사실 위 쿼리는 급조 된거고... user_constraints a, user_cons_columns b 이 두 테이블로 활용 하면 될듯...



[참고]

1. 일반 필드 수정은...

http://blog.naver.com/neat98/120022441120

2. 데이터 딕셔너리...

http://blog.naver.com/neat98/120022848499

3. 외래키는..

CREATE TABLE 테이블이름

(

col1 number(4),

col2 varchar2(100),

...

CONSTRAINT FK_외래키명 FOREIGN KEY( col1 ) REFERENCES 부모_테이블명(부모_테이블_필드)

);


오라클 SQL Loader

(엑셀 파일의 내용을 db에 입력하기)

엑셀 파일에 있는 내용을 그대로 DB에 있는 테이블에 insert 시키는 방법이다.

SQL Loader란 오라클이 제공하는 외부 데이터를 DB에 로드하는 프로그램이다.

순서는 다음과 같다.

1. 엑셀 파일에 데이터를 입력시키고 저장시킨다.

(각 열마다 쉼표로 구분되어 있는 CSV로 저장해도 되지만 다른 확장자도 상관이 없다)

저장된 파일은 하드디스크에 저장한다. (ex. c:\test.csv)

2. SQL Loader를 실행할 수 있는 Control 파일을 만든다.

메모장을 열어 다음과 같이 입력한다.

LOAD DATA
INFILE 'c:\퍄일명.csv'
APPEND
INTO TABLE 테이블명
FIELDS TERMINATED BY ','
(열1, 열2)

파일 확장자는 *.CTL 로 저장한다. (ex. c:\test.ctl)

3. DB에 테이블을 생성한다.

엑셀에서의 데이터와 같은 같은 데이터 타입으로 열의 갯수도 정확하게 맞추어서

테이블을 만든다.

4. CMD 창을 열고 다음과 같이 입력한다.

c:\>sqlldr userid=오라클id/pw control='c:\파일명.ctl'

만일, DB가 다른 원격지에 있을 경우는 '@DSMS IP주소'를 입력하면 된다.

즉, DB가 로컬영역에 있다면

c:\>sqlldr userid=오라클id/pw@localhost control='c:\파일명.ctl' 이고,

DB가 원격지에 있다면(다른 컴퓨터에 있다면) localhost 대신 dsms를 써주고 ip주소를

입력해 주면 된다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


ORACLE SQL 구문

Ⅰ.SQL 기본 명령어

1. DDL(Data Definition Language) 명령어


1-1. 테이블 생성

create table 테이블명(

칼럼명1 datatype default 형식,

칼럼명2 datatype default 형식,

칼럼명3 datatype default 형식,

);

1-2. 생성된 테이블 확인

select table_name from tabs;


1-3. 생성된 테이블 구조 확인

desc 테이블명;

1-4. 테이블 구조 변경

① column 추가

alter table 테이블명 add (추가할 칼럼명 데이터타입);

② column 삭제

alter table 테이블명 drop column 삭제할 칼럼명;

③ column 사용불가 상태로 표시(삭제는 아님)

alter table 테이블명 set unused column 칼럼명;

unused column 삭제

alter table 테이블명 drop unused columns;

⑤ modify : 칼럼의 데이터타입, 크기, 디폴트값, not null 제약조건등 변경

alter table 테이블명 modify (칼럼명 데이터타입 [default식] [not nul],

칼럼명 데이터타입...);

⑥ column명 변경

alter table 테이블명 rename column 변경할 컬럼명 to 새로운 컬럼명;

⑦ 제약조건 추가

alter table 테이블명 add constrain 제약조건명 제약조건 (칼럼명);

⑧ 제약조건 삭제

alter table 테이블명 drop constraint 제약조건명;

⑨ 테이블 삭제

drop table 테이블명 cascade constraint;

(해당 테이블과 관계가 있던 제약조건도 삭제)

⑩ table truncate (로그파일에 기록하지 않고 바로 삭제, 빠르다)

truncate table 테이블명;

⑪ table rename

rename 변경될테이블명 to 새로운테이블명;



2. DML (Data Manipulation Language) 명령어- 트랜잭션에 관련


2-1. INSERT

원하는 칼럼에 데이터입력 :

insert into 테이블명 (컬럼명, 컬럼명, ...) values (데이터, 데이터, ...);


모든 칼럼에 맞춰 데이터입력해야함 :

insert into 테이블명 values (데이터, 데이터, ...);

2-1-1. SELECT

select 보고싶은 칼럼명, 보고싶은 칼럼명, ... from 해당 칼럼들이 있는 테이블명

select * from 테이블명;

2-1-2. ALIAS(별명) 부여

select 칼럼명1 별명1, 칼럼명2 별명2, 칼럼명3 별명3 from 테이블명;

2-1-3 산술연산 (+, - , *, /, ( ) ) : number 와 date 자료형에 적용

select 조회할 컬럼명 “별명” from 테이블명;

ex) select height + weight "키와 몸무게의 합“ from player_t;

2-1-4 합성 연산자( || ): 칼럼과 문자 또는 다른 칼럼과 연결

문자 표현식의 결과에 의해 새로운 칼럼 생성.

select player_name || '선수‘ from 테이블명;

결과 player_name || '선수‘

우성용선수

이영표선수

2-2. UPDATE

update 테이블명 set 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값;

ex) update player_t set weight = 100;

2-3. DELETE

delete from 삭제하기를 원하는 정보가 들어있는 테이블명; (모든 데이터 삭제)

ex) delete from player_t; 데이터 삭제



3. TCL (Transaction Control Language) 명령어

Transaction ? : 계좌이체 같은 하나의 논리적인 작업 단위를 구성하는

세부적인 연산들의 집합(All or Nothing의 개념)

3-1. Commit 명령어

: insert문, update문, delete문을 사용 후에 이런 변경작업이 완료되었음을

데이터베이스에 알려 주기 위해 사용.

ex) update player_t set height = 100;

10개의 행이 수정

commit;

커밋이 완료

3-1-1. Commit 이나 Rollback 이전의 데이터 상태

•데이터 이전상태 복구 가능(buffer에만 영향)

•현재 사용자는 select 문으로 결과 확인 가능

•다른 사용자는 현재 사용자가 수행한 명령의 결과 확인 불가

•변경된 행은 잠금이 설정(다른 사용자가 변경 불가)

3-1-2. Commit 후의 데이터 상태

•데이터 변경사항 데이터베이스에 반영

•이전 데이터는 복구 불가

•모든 사용자는 결과확인 가능

•관련된 행에 대한 잠금 풀리고 다른 사용자들이 행조작 가능


3-2. Rollback 명령어

: 데이터 변경사항이 취소되어 데이터의 이전 상태로 복귀되며, 관련된 행에 대한

잠금(Locking)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 됩니다.

ex) delete from player_t;

10개의 행이 삭제되었습니다.

rollback;

롤백이 완료되었습니다.


3-2-1. Rollback 후의 데이터 상태

•데이터 변경사항 취소됨.

•이전 데이터는 다시 재저장 됨.

•모든 사용자는 결과확인 가능


3-3. Savepoint 명령어

: savepoint를 정의하면 rollback 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이

아니라 현 시점에서 savepoint 까지 트랜잭션의 일부만 롤백할 수 있습니다.


ex) savepoint sp1;

저장점이 생성되었습니다.

update player_t set weight = 100;

10개의 행이 수정되었습니다.

rollback to sp1;

롤백이 완료되었습니다.


4. 조건절(Where) 사용하기



4-1. where 절에서 사용 가능한 연산자

4-1-1. 비교 연산자


4-1-2. SQL 비교 연산자

연산자

연산자의 의미

between a and b

a와 b의 값 사이(a, b값 포함)

in(list)

list에 있는 값 중에서 어느 한 개라도 일치 하면 됨(or 의 의미)

like '비교문자열‘

비교문자열과 형태가 일치( % or _ )

is null

null값

ex) select player_name, position, back_no, height

from player_t

where team_id in ('K02', 'K07);


ex) select player_name, position, back_no, height

from player_t

where player_name like '고%‘;

ex) select player_name, position, back_no, height

from player_t

where height between 170 and 180;


ex) select player_name, position, back_no, height

from player_t

where height is null;


4-1-3. 논리 연산자

연산자

연산자의 의미

and

앞, 뒤 조건 동시 만족해야함

or

앞, 뒤 조건 중 하나만 만족해도 됨

not

뒤에 오는 조건의 반대의 결과가 나타남


ex) select player_name, position, back_no, height

from player_t

where tema_id = 'K02'

and height >= 170;


ex) select player_name, position, back_no, height

from player_t

where (tema_id = 'K02' or team_id = 'K07')

and position = 'MF'

and height >= 170;

and height <= 180;


4-1-4. 조건의 부정

종류

연산자

연산자의 의미

부정 논리연산자

!=

같지않다.(unix, pc)

<>

같지않다.(모든운영체제)

not 칼럼명 =

~와 같지 않다.

not 칼럼명 >

~보다 크지 않다.

부정 SQL연산자

not between a and b

a와 b의 값 사이에 있지 않다.

not in (list)

list 값과 일치하지 않는다.

is not null

null 값을 갖지 않는다.


ex) select player_name, position, back_no, height

from player_t

where team_id = 'K02'

and not position = 'MF'

and not height between 175 and 185;

연산 우선순위 : 괄호() > not 연산자 > 비교연산자, SQL연산자 > and > or

▷ null 값이란 ?

• null 값은 존재하지 않는 것이라는 미확정 값을 표현할 때 사용.

• 어떤 값과 비교할 수도 없다.

• null 값과의 비교연산은 False를 리턴.

• null 값과의 수치연산은 null 값을 리턴.


5. GROUP BY절 사용하기

: group by절은 sql문에서 from절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 그룹에 대한

항목별로 통계 정보를 얻기 위해 사용됨.

스타일시트를 이용하여 테이블 만들기 /웹접근성/CSS/DIV코딩/웹표준코딩/테이블/table/웹디자인/소스/

스타일시트를 이용해서 테이블 만들기

이거 잘 만들어놓으면 활용도가 높아요! 왜냐면,, 컨트럴 씨 컨트럴 브이 ㅋㅋㅋㅋ

쟈 - 스타일시트로 요렇게 테이블을 만들어봅니다.

이건, 게시판 느낌이 물씬 풍기게,,ㅎㅎ 아마도 이렇게 스타일시트를 만들어놓고

프로그래머한테 넘겨주면, 게시판 리스트는 요렇게 보이겠죠..

다양하게활용해서, 표를 예쁘게 꾸며봅시다!!

그러고보니,, 18 18 18 18..수정을 안했네요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 왜그랫으까..ㅠㅠ

CSS에 넣을 소스입니다.

/*테이블*/
table.t_01 {width:98%; border-top:2px solid #eb235c; border-bottom:1px solid #dfe0e0; table-layout:fixed; margin:10px auto; border-collapse:collapse;}
table.t_01 tr th {padding:7px 0px 7px 0px; border:none; border-bottom:3px solid #dfe0e0; background: url(/img/sub/bg.gif) repeat-x top; color:#7a7a7a; font-weight:bold; text-align:center; vertical-align:middle;}
table.t_01 tr td {padding:6px 0px 6px 0px; border:none; border-bottom:1px solid #dfe0e0; border-top:none; color:#454545; text-align:center; vertical-align:middle;}
table.t_01 tr th.left_b {border-left:1px solid #dfe0e0 !important;} /*왼쪽선*/
table.t_01 tr th.right_b {border-right:1px solid #dfe0e0 !important;} /*오른쪽선*/
table.t_01 tr td.left {text-align:left !important; padding:6px 0px 6px 15px !important;} /*왼쪽정렬*/
table.t_01 tr td.bold {font-weight:bold !important; color:#7a7a7a !important;} /*글씨두껍게*/
table.t_01 tr td.red {color:#ff0000 !important;} /*빨간글씨*/

테이블이름과, th, td로 구분지어주면 스타일넣기도 편하고, 쓰기도 편해요.

각 th와td마다 다른 스타일을 적용할 수 있어요.

주석처리하면 나중에도 어떤 스타일인지 한눈에 알아보기 쉽겠죠.

테이블 작성을 해볼까요~

- 원래 웹접근성검사에 100% 맞출려면,, 넓이도 지정해줘야 하는데요.. 우선 패스합니다..

- 테이블에 스타일시트만 적용했어요^^ 웹접근성100% 홈페이지 만들땐 요렇게 하면 안돼요,,아니..저렇게 해놓고 테이블에 추가를 더 해줘야 합니다.

- 그건 추후에 계속 추가하도록 하지요!

<table class="t_01">
<tr>
<th class="left_b">No.</th>
<th width="60%">제목</th>
<th>작성일</th>
<th class="right_b">조회수</th>
</tr>
<tr>
<td class="bold">22</td>
<td class="left">심지네 심지네 심지네</td>
<td>2011-08-30</td>
<td class="red">9898</td>
</tr>
<tr>
<td class="bold">21</td>
<td class="left">심지네 테이블 만들기2</td>
<td>2011-08-29</td>
<td class="red">2151</td>
</tr>
<tr>
<td class="bold">20</td>
<td class="left">심지네 웹디자인</td>
<td>2011-08-26</td>
<td class="red">8855</td>
</tr>
<tr>
<td class="bold">19</td>
<td class="left">심지네 새창열기</td>
<td>2011-08-26</td>
<td class="red">1235</td>
</tr>
<tr>
<td class="bold">18</td>
<td class="left">심지네 행복한일탈</td>
<td>2011-08-27</td>
<td class="red">4565</td>
</tr>
<tr>
<td class="bold">17</td>
<td class="left">심지네 간단한 퀵메뉴</td>
<td>2011-08-25</td>
<td class="red">67844</td>
</tr>
<tr>
<td class="bold">16</td>
<td class="left">심지네 한화이글스 홈페이지 </td>
<td>2011-08-20</td>
<td class="red">78426</td>
</tr>
<tr>
<td class="bold">15</td>
<td class="left">심지네 테이블 만들기1</td>
<td>2011-08-15</td>
<td class="red">98555</td>
</tr>
<tr>
<td class="bold">14</td>
<td class="left">심지네 웹접근성이란?</td>
<td>2011-08-10</td>
<td class="red">45484</td>
</tr>
</table>

간단하죠? 이렇게만 해주면 끝!!

th 백그라운드 이미지는 첨부파일에 슝~


 

white-space:nowrap;

넓이를 지정하였더라도 자동으로 줄바꿈되지 않게 강제로 개행을 막아줌.

word-break:break-all;

문장을 띄어쓰기 할때 쓰인 공백기준이 아닌 문자단위로 끊어주는 속성

text-overflow:ellipsis;

텍스트가 넘칠때, 말줄임표( ... )가 나오게 하는 속성,
적용조건 white-space:nowrap;

 

table의 td는 style의 vertical-align을 지정하여, 텍스트와 이미지를 배치할 수 있지만,
div 태그안에서는 vertical-align이 적용되지 않습니다.

div에 vertical-align을 지정하려면 아래와 같이 합니다.

x:left, y:bottom 정렬

<div style="display: table; width: 500px; height: 100px; #position: relative; overflow: hidden; border: 1px solid red;">
<div style=" #position: absolute; #top: 100%; display: table-cell; vertical-align: bottom;">
<div style=" #position: relative; #top: -100%">
내용을 하단으로...
</div>
</div>
</div>

x:center, y:bottom 정렬

<div style="display: table; width: 500px; height: 100px; #position: relative; overflow: hidden; border: 1px solid red;">
<div style=" #position: absolute; #top: 100%; #left: 50%; display: table-cell; vertical-align: bottom; text-align: center;">
<div style=" #position: relative; #top: -100%; #left: -50%;">
내용을 하단 중앙으로...
</div>
</div>
</div>

x:center, y:center 정렬
<div style="display: table; width: 500px; height: 100px; #position: relative; overflow: hidden; border: 1px solid red;">
<div style=" #position: absolute; #top: 50%; #left: 50%; display: table-cell; vertical-align: middle; text-align: center;">
<div style=" #position: relative; #top: -50%; #left: -50%;">
내용을 가운데로...
</div>
</div>
</div>

display: table;은 table 태그 이외의 것을 table처럼 화면에 표시하도록 합니다.
그리고 display: table-cell;이 적용된 태그는 테이블의 셀과 동일하게 취급하기 때문에
td와 마찬가지로 vertical-align을 사용할 수 있습니다.

하지만 IE에서는 display: table;과 display: table-cell;을 모두 지원하지 않기 때문에,
CSS # 핵(#position과 #top, #left)을 이용해서 텍스트의 위치를 배치하고,

IE 이외의 브라우저에서는 vertical-align과 text-align 값으로 위치를 조정합니다.



HTML문서는 텍스트로만 작성되어 있으며 브라우저는 이 텍스트를 브라우저에서 사용할 수 있는 모델 형태로 변환하게 된다.

그리고 이 내부 모델을 기반으로 웹페이지를 출력하고 이벤트를 처리한다. DOM이라는 것이 바로 이 모델을 표준화 한 것으로써 웹페이지와의 상호작용을 구현 가능케 한다.

한 예로, HTML문서에 div 엘리먼트가 있다면 이 엘리먼트에 접근하여 엘리먼트 안에 텍스트를 넣는 등 클릭했을때의 이벤트를 넣는다는 등의 작용을 구현할 수 있다는 이야기이다.

:사실상 이 DOM이 Javascript라고는 말할 수 없지만(DOM은 고유의 프로그래밍 언어이기 때문에) Javascript는 이 DOM에 접근해 그 사용을 용이하게 하는 스크립트 언어이기 때문에 Javascript를 알기 이전에 DOM에 대한 이해가 충분해야만 한다(CSS의 서택자 역시 DOM에 접근하게 된다).

DOM 레벨 0

사용자와 웹 페이지의 다양한 요소가 서로 상호작용했다면 자바스크립트는 필요 없었을 것이다. 넷스케이프2가 자바스크립트를 통해 개발자가 웹 페이지의 특정 요소에 접근하고 해당 요소의 속성을 교체할 수 있는 API(Application Programming Interface)를 제공했으며, 마우스클릭이나 마우스오버와 같은 특정 이벤트가 발생하면 이벤트가 발생했음을 알려주어 이벤트에 응답할 수 있는 기능을 제공했다. 바로 이 API가 DOM인 것이다. 하지만 당시 넷스케이프2의 DOM기능은 매우 제한적이었다.

이후, 1996년 IE3는 독자적인 자바스크립트 버전인 JScript를 발표했고, 이 당시의 초기 DOM을 기술적 언어로 DOM 레벨 0이라고 지칭한다.

중급 DOM

1997년, 불완전한 CSS와 브라우저의 호환성을 고려하지 않고 구현된 DOM 기술에도 불구하고 IE4와 넷스케이프4는 널리 사용되었다. DOM 레벨 0와 마찬가지로 중급 DOM(Intermediate DOM) 역시 W3C의 표준안이 적용되지 않았다. 하지만, 중급 DOM은 현재 널리 사용되는 Ajax 기반 웹사이트와 웹 애플리케이션의 초석이 될 가능성을 보여주었다. 중급 DOM에부터 자바스크립트로 HTML요소가 가진 대부분의 속성에 접근할 수 있었고, HTML 요소의 CSS 속성을 프로그래밍 기법으로 수정할 수 있었기 때문이다. 다시 말해 CSS와 중급 DOM이 현대 웹 개발 기술의 시초라 할 수 있다.

DOM 레벨 1

CSS1과 HTML4의 성공 이후, W3C는 따로따로 개발하던 DOM의 표준화 작업을 시작했다. 처음에 넷스케이프는 Ecma International(:컴퓨터 시스템을 표준화하는 비영리 기구)을 자바스크립트 표준화 기구로 채택했지만(이런 이유로 자바스크립트 공식 명칭은 EcmaScript가 되었다.) 이 후 W3C가 넷스케이프, 마이크로소프트, 그 외 다른 조직 멤버와 함께 DOM 표준화를 제정하여 1998년 DOM레벨 1을 발표했다.

DOM 레벨 2

DOM 레벨 2는 지금의 DOM 이벤트 모델을 최초로 제시했다. 개발자는 이벤트 모델을 이용하여 사용자와의 상호작용을 구현하고 이벤트를 처리할 수 있다. DOM 레벨 2는 모든 브라우저에서 완벽하게 지원하는 것은 아니지만, 2000년 발표된 후 널리 보급되었다.

DOM 레벨 3

DOM 레벨 3은 DOM 레벨 2를 확장한 버전이지만, 아직까지 많은 브라우저에서 DOM 레벨 3을 완변하게 지원하지 못한다. 하지만, DOM 레벨 3의 중요한 기능은 대부분 모든 브라우저에서 지원하며 일부는 현재 DOM 스크립트의 핵심을 담당하고 있다.

어떤 기능을 어느 수준의 DOM에 포함했는지는 그리 중요하지 않다. 현재 대다수의 개발자는 다양한 자바스크립트 라이브러리로 DOM에 접근하는 방식을 사용하기 때문이다.

DOM 계층구조

HTML 문서에 담긴 텍스트를 브라우저가 DOM을 사용해서 다음 텍스트 코드를 모델화하는 방법을 알아보자

<html>

<head>

<title>Semple</titlt>

<link rel="stylesheet" href="style.css" type="text/css" media="all" />

</head>

<body>

<p class="addClass">여기는 <em>한국</em>

<a href="index.html">초기화면으로</a>

</p>

</body>

</html>

브라우저는 HTML의 모든 요소를 객체화하고 이 객체를 계층 구조로 묶어, 어떤 요소가 다른 요소 내부에 포함되어 있을 때, 이 요소는 자신을 포함한 요소의 자손 요소로써 구조화한다. 예를 들어, 앞 코드에서 p 요소는 a 요소의 부모이며 em 요소와 a 요소는 형제 관계를 맺는다. 이렇게 객체화된 요소는 여러 속성을 가질 수 있으며 HTML 요소 속성을 그대로 사용하기도 한다. 즉, 객체 속성 이름으로 속성에 접근하여 상호작용을 통해 속성을 바꿀 수도 있다는 이야기다. DOM의 상세 명세를 보면 DOM 객체의 특정 타입 속성에 대한 정의를 확인할 수 있다.

위의 HTML 문서를 DOM 계층구조로 보면 이런 그림이 나온다.



아주 간단한 예제로 a요소의 href 속성을 불러오는 방법을 알아보자.

a 요소를 가져와 link라는 변수로 저장했을 때

link.href; // (.)이 해당 요소의 속성에 접근하는 표기법이다.

또 한 예로

link.href = "http://blog.naver.com/shoolovu"; // a 요소의 href 값을 해당 url로 바꾸는 코드이다.

또한 이 값을 경고창으로 띄우는 방법 또한 (.)표기법을 사용하여 속성에 접근하면 간단하다.

window.alert(link.href); // 경고창으로 index.html 이라는 메시지가 출력될 것이다(위의 코드는 무시).


시작하기 전 Maven에 대해 간략히 설명하자면...

1 개요

Maven은 Apache (Jakarta) project들의 홈페이지들에 보면 "built by maven"이라 써있는 모든 프로젝트의 빌드 시스템이다.

Ant를 이용한 빌드에 몇몇 유용한 플러스 알파를 제공한다.

2 장점

  • 마치 데비안의 패키징 시스템과 비슷한 의존성 해결 및 필요한 패키지(jar) 자동 다운로드 지원
  • 각종 유용한 플러그인 지원(J2EE/Eclipse/project web site 등등)
  • 자동화된 unit test 지원
  • 유연성(plugin들로 구성되어 있으며 필요한 plugin을 직접 만들 수도 있다).

Maven은 간략히 위와 같으며 나열한 것 보다 훨씬 많은 장점을 가지고 있다.

3 Maven 개발환경 구축을 위한 준비

현재 필자의 개발환경은 Window(PC환경[서버가 아님]) / Java+Scala / Maven / liftWeb 이고 코딩은 IntelliJ이다.

이 글의 독자가 필자와 같은 개발환경이 아니더라도 Maven사용이 처음이라면 읽어볼 만 할 것이다.


우선 선행되어야 할 과정은 여러분도 아시다시피 "다운로드"이다.

일단 필자 입장에서 생각해보자면(PlugIn만을 다운받는 것이 아니기때문에),

1. JAVA파일을 실행시키기 위한 JDK 최신버전
2. MAVEN
3. SVN(회사 내 개발효율을 위해)
4. IntelliJ
5. Scala

가 필요하다.

JAVA는 오라클 사이트에서 받을 수 있다.




위의 링크에서 JDK Download를 클릭하면 다음과 같은 화면이 나온다.



각자의 환경에 맞추어 다운로드 받을 수 있다.

주의할 점은 상단에 Accept License Agreement라는 라디오박스를 체크해주어야 한다는 것이다.(라이선스 관련 항목에 동의)

필자는 windows7 32bit를 사용하고 있기 때문에 windows x86에 맞는 JDK를 다운받았다.


그리고 나서 MAVEN을 다운받는다.(현재는 3.0.3이 최신버전)




Apache의 Maven에 관련된 페이지를 들어가면 Get Maven - Download 링크를 확인할 수 있다.

그 외에 IDE Integration, Maven에 관한 설명, Plugin 등의 정보도 볼 수 있다.



링크를 클릭하면 Windows계열, Oracle, Linux 등의 환경에 맞는 Maven을 받을 수 있다.(업데이트가 되었다면 버전이 바뀌어있을 것이다.)

zip파일이 windows 환경에 맞는 파일이다. Mirrors에서 다운받도록 하자.


이제 SVN을 다운받아보자.

SubVersion 사이트에서 다운받을 수 있다.


http://subversion.apache.org/packages.html




관련된 OS를 클릭하면 관련 파일을 다운받을 수 있도록 링크되어있다.

필자는 win32svn파일을 다운받았다.

다운로드시 sourceforge 사이트로 이동되며 녹색의 다운로드 버튼을 누르면 5초를 기다리라고 나온다.

"왜 안돼지?"라고 창을 끄지 말길 바란다.

다운받는 방법은 그렇게 어렵지 않기 때문에 수월하게 진행 되고 있을 것이다.


이제 IntelliJ를 다운받자.



상단 탭에서 OS를 확인한 후 Free Version을 다운받는다.


위의 모든 것이 준비되었다면 Scala를 다운받도록 하자.




해당 사이트로 이동하게 되면 최신 버전의 scala를 다운 받을 수 있다. 필자는 역시 windows에 맞는 파일을 다운받았다.



!! 이제 준비는 다 마쳤다. !!

파일들의 압축을 풀고 환경변수를 설정하자.(windows7 기준)




기본적으로 압축받은 폴더를 보면

maven과 scala는 압축파일 형식이고 subversion / jdk / ideaIC(IntelliJ)는 실행파일 형식이다.

우선 실행파일 형식의 3가지 프로그램을 깔자. 3가지 응용프로그램은 기본적으로 c:\program files 내부에 깔리게 된다.


이후 압축 푼 maven, scala 파일들을 C:로 옮긴다.(필자는 c:\program files 내부로 이동시켰다.)

이제 옮겨진(설치된) 파일경로를 통해 환경변수를 설정한다.

// 환경변수 설정방법은 다음과 같다. //



컴퓨터 항목을 우클릭하면 속성이라는 항목이 나온다. 속성을 클릭하자.

제어판 -> 시스템에 대한 창이 뜬다. 좌측 메뉴를 보면 "고급 시스템 설정" 이라는 항목이 있는데 그 부분을 클릭하면
환경변수를 설정할 수 있는 탭이 뜬다.

탭의 가장 아래에 "환경 변수(N)"라는 버튼이 있는데 이 버튼을 누르면 우리가 설정해야 할 창이 뜬다.



바로 이 창이다.

시스템변수 부분에 변수를 만들어야 하는데, Path 변수에 할당해야 할 경로가 길어지기 때문이다.

변수를 통해 기본적인 경로를 설정하고 그 변수의 경로를 불러와 Path변수에 할당할 경로를 줄일 수 있다.


시스템변수 부분의 새로만들기 버튼을 클릭하면 1번과 2번창이 비어있을 것이다. 다음과 같이 변수이름, 변수값을 설정하고 확인버튼을 누르면 변수가 생성된다.(변수명은 자유)

여기서 java, maven, scala, svn의 기본경로 변수를 만든다.
상단에서 압축을 풀거나 설치한 폴더가 이 경로가 된다. 필자의 기준으로 설명하면,

jdk :
1. 변수 이름 : JAVA_HOME
2. 변수 값 : C:\Program Files\Java\jdk1.6.0_26

Maven :
1. 변수 이름 : M2_HOME
2. 변수 값 : C:\Program Files\apache-maven-3.0.3

subversion(SVN) :
1. 변수 이름 : SVN_HOME
2. 변수 값 : C:\Program Files\svn-win32-1.6.17

scala :
1. 변수 이름 : SCALA_HOME
2. 변수 값 : C:\Program Files\scala-2.9.0.1


위와 같은 경로가 될 것이다.

이제 경로에 관련된 변수를 세팅했으니 Path변수의 변수 값을 바꿔보자.



시스템변수 중 Path 변수를 더블클릭하게 되면 변수값을 수정할 수 있다.
주의할 점은 변수 값을 통째로 바꾸지는 말라는 점이다.

기본적으로 들어가있는 변수명 가장 앞에 path를 작성한다.
%M2_HOME%\bin;%JAVA_HOME%\bin;%SVN_HOME%\bin;%SCALA_HOME%\bin;기존변수값

이렇게 하면 기본 세팅은 완료된 것이고,
cmd(commend)에서 mvn --version 을 통해 버전이 출력되면 기본적인 환경이 완성된것이다.

다음 내용에서는 IntelliJ에서 관련 plugin을 다운받고 compile하는 부분에 대해 포스팅 할 예정이다.
메이븐을 초기 설정하기 위한 첫번째 자바를 설치한다.

자바 사이트에 들어가서 (http://developers.sun.com/downloads/) JDK를 다운받아서 설치한다.

설치가 마무리되면, 환경 설정을 한다.

제어판 > 시스템 및 보안 > 시스템 > 시스템 보호를 클릭한다.

고급탭을 클릭하고 환경 변수를 클릭한다.

시스템 변수에 새로 만들기를 누른다.

변수 이름 : JAVA_HOME

변수 값 : 자바가 설치된 패스 (아래 그림 참조)

다음으로 Class Path를 설정한다. (시스템 변수 > 새로만들기)

변수이름 : CLASSPATH

변수 값 : %JAVA_HOME%\bin\tolls.jar

시스템 변수 path를 선택하고 편집을 누른다.

변수 값에 ;%JAVA_HOME%\bin을 추가한다. 세미콜론( ; )에 유의 한다.

변수값 설정이 끝나면 시작에 실행(윈도우 + R키) > cmd를 입력한 후

콘솔창에 javac를 입력하고 아래와 같이 나오면 정상적으로 패스가 적용된 것이다.

자! 이제 Maven 변수를 추가해 보자.

http://maven.apache.org/download.html 에 들어가서 apache-maven-2.2.1-bin.zip을 다운받아서

루트(C:\)에 압축을 푼다. 원하는 위치에 풀어도 된다 ^^;;

설치가 마무리되면 자바 패스를 설정할 때와 마찬가지로 메이븐도 패스를 설정한다.

시스템 변수 > 새로만들기

변수 이름 : MAVEN_HOME

변수 값 : 메이븐이 설치된 경로 (필자의 경우 C:\apache-maven-2.2.1 이다.)

다음으로 Path에 등록한다. (자바 Path에 등록할 때와 마찬가지이다.)

시스템 변수 > Path 선택 > 편집

변수 이름 : Path

변수 값 : ;%MAVEN_HOME%\bin (앞에 ;(세미콜론)은 앞에 등록된 Path을 구분한다.)

설정이 다 되었으면 콘솔창을 띄운다. (시작 > 실행 > cmd)

mvn - versioin을 입력한다. 아래 그림과 같이 나오면 정상적으로 설치된 것이다.

Java Version이 나오고, 운영체제 정보가 나온다. (윈도우 7은 인식이 안되나?? 비스타로 나오네 ^^;;)


+ Recent posts