Article Category

분류 전체보기 (303)
영어 (9)
관심 (11)
프로젝트 (1)
내 폴더 (183)
책읽기 (4)
음악 듣기 (11)
스크랩 (88)
일상 (52)
사진 (14)
작업물 (14)
Ver 1.0 (94)

 

'내 폴더/스크랩'에 해당되는 글 88건

  1. 2011.02.24 rewrite mod 자세한 설명
  2. 2009.04.20 열정 전선을 가라!
  3. 2009.03.19 웹 폰트 안 보기 1
  4. 2009.02.12 정보보안 전문가가 될려면? 1
  5. 2008.08.06 내년부터 대학생 5000명 美 연수취업
  6. 2008.07.13 MVC 이해하기 2
  7. 2008.06.18 멀티 IE
  8. 2008.06.15 바탕화면
  9. 2008.05.11 컨디셔널 커맨트 사용하기 - CSS IE, FF 구분 & JS
  10. 2008.04.13 우화는 동물과 인간의 이야기를 말하는 것이 아닌가

rewrite mod 자세한 설명


1. rewrite 모듈을 사용하기 위한 Apache 컴파일옵션

Rewrite 모듈을 쓰기위한 Apache 컴파일 옵션은 --enable-rewrite 입니다.
Configure 실행시에  --enable-rewrite 만 추가하시면 Apache에서 rewrite 모듈을 사용할 있게 됩니다.

[root@superuser root]# ./cofigure prefix=/usr/local/apache2 --enable-rewrite
[root@superuser root]# make
[root@superuser root]# make install




2. Rewrite 를 적용할 수 있는 범위

Rewrite 설정은 Server Config, Virtual Host, Directory, .htaccess 에 설정할 수 있습니다.

즉 Apache 서버 전체에 Global 설정과 특정 가상호스트에만 적용하도록 할수 있고 특정 디렉토리에만 적용시킬수도 있습니다.





3. .htaccess란?

.htaccess (hypertext access)는 Apache 웹 서버의 디렉토리 레벨을 설정하는 기본 파일입니다.
.htaccess는 한 특정 디렉토리에 위치하며, 모든 하위 디렉토리를 포함한 해당 디렉토리에 영향을 미칩니다.
이 파일이 위치한 특정 폴더에 사용자가 정의한 Request 기능을 적용합니다.
파일 이름은 .(dot)으로 시작하기 때문에 유닉스 계열의 운영체제에서는 숨김 파일로 저장됩니다.




4. Rewrite 모듈 지시자
RewriteEngine

    설정문법 : RewriteEngine On|Off

    Rewriteing 엔진을 사용할지 여부를 설정합니다.
    기본설정은 당연히 Off로 되어 있으며 RewriteEngine On 으로 설정하지 않는 이상 Rewritng 엔진을 활성화 시키지 않습니다.

    현재 Apache에서 실행중인 모든 RewriteRule을 비활성화 시킬 때 RewriteRule 라인을 주석처리 하기보다 RewriteEngin Off 로 설정하는 것이 더 간편하고 올바른방법입니다.

RewreteLog

    설정문법 : RewriteLog FILE-PATH

    RewriteLog 지시자는 Rewrite 엔진의 로그를 그록할 파일을 지정합니다.
    RewriteLog 파일을 항상 남기기 보다 잘못된 Rewrite 규칙들을 디버킹할 때 사용하기를 권장합니다.
    아파치와 마찬가지로 RewriteLog 파일도 방문자수가 많은사이트에서는 감당못할 정도의 로그파일을 남기기 때문에 시스템 여유공간이 많이 없는 시스템에서는 해당 파티션의 하드사용률 100%로 인한 재앙(?)을 불러올수도 있습니다.

    RewriteLog 지시자는 반드시 RewriteLogLevel 지시자와 함께 사용하여야 됩니다.

RewriteLogLevel

    설정문법 : RewriteLogLevel Level

    RewriteLogLevel 지시자는 RewriteLog 지시자로 설정한 로그파일에 기록할 로그들에 대해 얼마나 자세한 내용을 로그로 남길것인가에 대해 설정하는 지시자입니다.

    기록할 로그 Level 은 0 ~ 9까지 사용할 수 있으며 0은 로그를 기록하지 않겠다는 의미입니다. Level 숫자가 높을수록 자세한 로그를 기록합니다

RewriteCond

    설정문법 : RewriteCond TestStirng CondPattern

    RewriteCond 지시자는 RewriteRule 과 함께 사용되는 규칙으로 RewriteCond 다음에 오는 RewriteRule은 RewrieteCond 에서 설정한 패턴과 일치해야지만 RewriteRule들을 실행한다.

RewriteRule

    설정문법 : RewriteRule Pattern Substitution

    Rewrite 모듈의 실질적인 Rewrite 규칙들을 적용하는 지시자입니다.

    Pattern(Input URL) 을 Subtitution(Return URL)로 변경하기 위한 모든 규칙들은 이 지시자를 사용해서 설정해야 됩니다.

    Pattern(Input URL) 에는 Perl 정규표현식을 사용할수 있기 때문에 Input URL 의 규칙을 유연하게 적용할 수 있습니다.




5. RewriteRule 에서 사용되는 정규 표현식의 기초
. : 다수의 한문자

? : 0개 이상의 한문자

* : 0개 이상의 문자 또는 문자열

+ : 1개 이상의 문자 또는 문자열

(chars) : (, ) 안의 문자또는 문자열을 그룹으로 묶습니다. 이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수 있습니니다.

^ : 문자열의 첫문(열)을 지정합니다.

$ : 문자열의 끝 문자(열)을 지정합니다.

\(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등)

{n} : 정확히 n번 반복

{n,} : n번 이상 반복

{n,m} : n 이상 m 이하 반복

[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T


 
 
6. 정규표현식 단축표현들

[:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현

[:alnum:] : 알파벳과 숫자. [a-zA-Z0-9] 와 같은 표현

[:digit:] : 숫자 [0-9] 와 같은 표현

[:upper:] : 대문자. [A-Z] 와 같은 표현




7. 사용가능한 서버변수

[HTTP Headers]

    HTTP_USER_AGENT
    HTTP_REFERER
    HTTP_COOKIE
    HTTP_FORWARDED
    HTTP_HOST
    HTTP_PROXY_CONNECTION
    HTTP_ACCEPT


[connection & request]

    REMOTE_ADDR
    REMOTE_HOST
    REMOTE_PORT
    REMOTE_USER
    REMOTE_IDENT
    REQUEST_METHOD
    SCRIPT_FILENAME
    PATH_INFO
    QUERY_STRING
    AUTH_TYPE


[server internals]

    DOCUMENT_ROOT
    SERVER_ADMIN
    SERVER_NAME
    SERVER_ADDR
    SERVER_PORT
    SERVER_PROTOCOL
    SERVER_SOFTWARE


[date and time]

    TIME_YEAR
    TIME_MON
    TIME_DAY
    TIME_HOUR
    TIME_MIN
    TIME_SEC
    TIME_WDAY
    TIME


[specials]

    API_VERSION
    THE_REQUEST
    REQUEST_URI
    REQUEST_FILENAME
    IS_SUBREQ
    HTTPS




8. RewriteCond에서 쓰이는 명령어

-d : 디렉토리를 의미합니다. TestString이 디렉토리를 가리키거나 포함하고 있을 때 처리됩니다.

-f : 파일을 의미합니다. TestString이 파일을 가리키더나 포함하고 있을 때 처리됩니다.

-l : 심볼릭링크를 의미합니다. TestString이 심볼릭링크를 가리키거나 포함하고 있을 때 처리됩니다.

마지막으로 느낌표(!) 는 부정을 뜻합니다.

예)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://test.domain.co.kr/$1




9. RewriteRule 플래그
forbidden|F :
    요청하는 페이지를 403 에러로 redirect 시킵니다.
    RedirectRule 이 적용되고 있는 페이지를 일시적으로 사용중단을 시키거나 사용자로 하여금 페이지 접근을 할수 없게 할 때 사용합니다.

    예) RewriteRule ^/test /home/blog/html/test.php [F]

    사용자가 /test 로 접근할 경우 403 에러를 보냅니다.

gone|G :
    요청하는 페이지를 410 에러로 redirect 시킵니다.
    410 에러는 페이지가 사라젔거나 존재하지 않는다는 메시지입니다.
    이것도 forbidden 과 마찬가지로 RedirectRule 이 적용되던 페이지를 일시적으로 중단시킬 때 유용하게 사용할 수 있습니다.

last|L :
    이 플래그가 적용되면 뒤에 어떤 룰이 있더라도 이룰 아래의 규칙들은 적용되지 않고 RewriteRule 을 빠져나가게 됩니다.
    C, Perl, PHP 프로그램에서 루프를 빠져나가는 break 와 같은 의미를 가집니다.

chain|C :
    이 플래그의 결과를 다음 RewriteRule 의 input 값으로 사용합니다.

    예)
    RewriteRule ^(.+) %{HTTP_HOST}$1 [C]

    RewriteRule ^([^.]+)\.domain\.com(.*) /home/$1/public_html$2

    이 룰은 사용자 홈의 도메인을 2차 도메인으로 자동설정해 줄 때 많이 쓰는 룰입니다.
    RewriteRule의 input은 도메인을 제외한 URI 를 인식하기 때문에 도메인까지 인식을 시켜서 다음 RewriteRule 로 체크를 하기 위해 사용한 것입니다.

    즉 http://user_id.domain.com/hello.html 이란 요청이 들어오면  /home/user_id/public_html/hello.html 로 redirect 시켜줍니다.
    위와 같이 2차 도메인을 이용해 계정 사용자의 홈을 지정하기 위해서는 DNS 세팅이 선행되어야 됩니다.

N : 새로운 Rule이 시작된다는 의미입니다.

R : Redirection. 무조건 넘깁니다. 뒤 주소로 넘긴다는 의미입니다.

NC : 대소문자를 구별하지 않습니다.

OR : 프로그래밍의 or와 비슷합니다.

QSA : Cond의 내용을 지난 결과에 덧붙입니다.

NE : Out 될 값에 특수문자가 HexCode로 되어 포함되어 있는 경우

열정 전선을 가라!


제 아무리 번쩍 섬광으로 한 세상을 으시대도
이름 모를 들꽃의 하소연보다 못함은
어찌된 영문인가?

강렬한 마지막 축제 나레이션을 데뷔로
참신을 알리려 절절이 원하지만
미완성 포기들이 울고만 있다.

겨우 속의 아쉬움은 현상 유지에 급급하고
골치 아픈 시간들을 오랏줄로 묶어라!

이제, 각오하고 나아가자!
습관으로 찌들은 지난 것은 버려라!

무절제 자유를 처단하고
단호한 책임을 선언하라!

방향 없는 신념으로 시간낭비 하지 말고
까다로운 조건이라 귀찮다 하지마라!

불꽃같은 눈동자가 불철주야 움직일 때
비지땀을 쌓고 쌓아 수준열매 거두리라!

따위들에게 기죽지 말고
무관심으로 방관하지 마라!

지금도 아낌없는 구슬땀은 그대를 부른다
우물쭈물 터무니가 그대 앞에 얼씬대고
뜬금없는 헛소리가 허공을 친다해도

우리 모두 나아가자!
그대의 열정과 앞으로 나아가자!

어이없는 혼란을 반격하고
우리 그, 열정의 전선으로 나아가자!


- 소 천 -

웹 폰트 안 보기


요즘 웹 폰트를 쓰는 대형 사이트들이 많아 졌다.
독특함을 추구한다는 건 좋지만, 어떤 곳은 도대체 뭐라고 써있는지 알아보기 힘들정도로 이상한 폰트를 쓰는 블로그나 카페등이 많다.
특히 구글 다음으로 국내 검색을 할때 쓰는 네이버의 경우 안그래도 오른쪽 클릭이 안되는 곳을 볼 때면 참 어리석으면서도 불편하게 해 놨다 싶은 상태에서 글씨까지 알아보기 힘드니 왜 이렇게 까지 독특해야 할 필요가 있을까 싶다.

그런 의미에서 익스플로러에서 폰트를 고정 해 놓는 방법을 소개한다.
익스플로러의 도구 -> 인터넷 옵션에 들어가면 사용자 서식 메뉴가 있다 그 중 글꼴 스타일 무시 를 선택해 주시면 되겠다.

정보보안 전문가가 될려면?


정보보안 전문가가 될려면?

정보보안 전문가는 개인의 정보를 보호하거나 기업의 정보를 보호할 수 있는 직업입니다.
대한민국의 인터넷 보급율은 뛰어나지만 그에 맞춰 개인의 정보 혹은 기업의 정보를 해킹(크래킹)으로 부터 보호해야 하는 직업입니다.

※ 정보보호 전문가의 직무

- 정보보호 정책, 표준, 기본방침, 절차, 모니터링 방법등을 분석하여 정보보호 환경수준 평가
- 네트워크에 있어서 위험하고 취약한 요소를 파악하여 대비
- 인트라넷, 엑스트라넷, 업무관련 솔루션 및 제휴업체를 연결하는 정보보호 아키텍쳐 구현
- 최상의 수준으로 조직의 정보보호 수준을 유지하기 위해 정기적으로 정보보호 수준평가
- 인터넷망을 통환 외부로부터의 불법적인 침입을 차단하기 위해 방화벽 구축
- 외부로부터의 불법적인 침입을 탐지하기 위한 시스템 개발
- 컴퓨터 시스템에 대한 접근 권한 부여
- 컴퓨터 바이러스 백신 프로그램 개발, 보급
- 컴퓨터 바이러스에 감염된 데이터 복구
- 정보보호 관련 소프트웨어 제품 기획
- 정보보호 업무 전반에 대하여 최고 경영자 및 업무관리자에게 보고 및 교육
- 정보보호 제도 입안 과정에 참여하여 기술 규격 및 표준화 제정 협력

※ 정보보안 전문가에 대한 학습 지침

취득해야 하는 능력은 언어부분의 C , C, C# 이외에도 java asp .net ajax 등등 공부할
것이 많습니다.
이렇게 배워야 하는데에 이의를 제기하는 분들도 있습니다.
본인은 정보보안가라서 해킹만 막으면 된다고 하시는 분들이 있는데...
이 해킹이라는 분야가 3가지로 나눌수 있습니다.

시스템 해킹, 네트워크해킹, 웹해킹

시스템으로 침투할 시에 컴퓨터 프로그래밍 분야의 취약점을 발견해서 들어오게 되는데 이 취약점을 발견하고 보안&수정 하려면 프로그래밍이 어떻게 짜여져 있어야 하는지 알아야 합니다.
정보보안분야의 오래된 경력자분들은 언어부분을 많이 다루고 또한 그에 대비한 프로그램의 안정성을 수정 하기도 합니다. 이게 시스템 해킹의 보안법이라고 보면됩니다.

시스템의 보안성을 유지하려면 시스템을 구성하고 있는 서버의 O/S(오퍼레이팅시스템)사용법
또한 정확히 알고 있어야 합니다. 시스템 구성원리에 대해서는 정확히 짚고 넘어가야 하는 부분입니다.
서버O/S의 종류로는 LINUX/ UNIX(SOLARIS)/ MS 2003 SERVER 이렇게 큰 대분류로 나눠지는데 리눅스나 UNIX 분야는 많은 종류의 O/S가 존재하지만 함축하여 LINUX/ UNIX 서버라 부릅니다.

시스템분야 [SYSTEM(OS)] 이쪽 분야 역시 시스템 해킹 보안분야인데, 이 분야는 서버관리를 어떻게 할 것인지 보안은 어떻게 할 것인지, 프로그래밍 언어적 부분은 취약점을 발견해서 수정하는 분야이고 시스템은 어떤 구성으로 시스템을 운영 할 것인가! 어떤 부분에 대해서 보안의 중점을 둘 것인가에 대해서 준비를 하는 과정이죠. O/S를 수정한다기 보다는 관리를 잘해서 침입이 들어오더라도 관리부분에서 보안을 어떻게 적용 시키는가에 따라 틀려집니다.

네트워크분야는 이제 서버를 관리 할 수 있으니까 유저가 원하는 정보의 데이터를 어떤한 방식으로 빠르고 정확하게 전달 할 수 있는지 그런 분야에 대해서 배우게 됩니다. 이때 사용하게 되는게 라우터라는 장비와 스위칭 허브라는 장비를 사용하게 됩니다. 기초적인 네트워크 지식과 네트워크 명령어 위주로 배우죠. 장비의 설치/설정법과 장비를 다루는 방법, 또한 서버의 네트워크 연결/설정법에 대한 지식을 익히고 네트워크 보안설정법, 네트웍 경로로 침입하여 들어왔을때 어떤 경로로 들어오게 되는지 어떤 설정과 장비활용으로 막아낼 것인지 그부분을 익혀 나갈 것입니다.

해킹(hacking) 부분에 대한 공부는 시스템해킹/네트워크해킹/웹해킹에 대한 해킹기술을 배우게 되는데 이부분은 본인이 어떤 분야로 진출 할 것인가에 따라 달라집니다.
전부 배워도 무방하지만 사회가 요구하는 분야가 특성화된 분야의 인재를 원하기 때문에 한 분야를 선택하여 배우는 것이 효과적입니다.

시스템해킹 부분은 시스템보안 설정법, 시스템관리와 같은 분야에 대해 좀더 심도 있게 배우는 과정이며, 네트워크는 네트워크 연결/보안 및 설치환경에 대한 이해를 익혀나가게 됩니다.

웹해킹 부분은 웹(web) 즉 웹사이트에 과도한 트래픽을 걸거나 관리자 페이지 접속제한 또는
DBA에 대한 보안성을 어떠한 방법으로 유지 할 것인가를 계획합니다.
이 웹해킹 부분은 웹사이트를 구성할 때 웹어플리케이션을 이용해서 웹사이트를 구축하는 과정에서 웹어플리케이션에 계획된 보안정보를 적용하여 침투에 대비하여 사이트내의 정보를 지켜내야 합니다.

마지막으로 포렌식이라는 분야가 있습니다.
이 포렌식이라는 분야는 침해대응(크랙킹에 대한 방어)이라는 분야입니다.
국정원이나 사이버수사대에서 사용하는 분야인데 원레는 포렌식은 과학수사 기법입니다.
CSI수사대에서 보시면 아주 작은 증거를 분석하여 범죄자가 어떤 방식으로 범죄를 저질렀고 그 증거가 어떤한 용도로 사용되어 어떠한 작용을 하였는지에 대한 과학수사기법입니다.
이 포렌식은 컴퓨터로 넘어와서는 사이버포렌식이라고 합니다.
해커가 어떤한 경로에 대해서 침투하였고 어떤 증거를 남겨놨고 어떤 자료를 열람/임의수정/유출하였고 어떻게 빠져 나갔는지 그것에 대해 분석을 하고, 사이버범죄는 일반 범죄와는 달리 물질적 증거를 남기지 않기 때문에 새로운 수사기법이 필요한 것입니다. 이게 사이버 포렌식입니다.
이 분야에 대한 공부를 하게 되면 정보보안전문가라 해도 무방합니다. 컴퓨터 관리에 있어서는
최고의 기술이기도 하죠. 대한민국은 인터넷 보급율에 비해 보안성은 많이 미비한 수준입니다.
그래서 정보보안전문가가 이슈화 되기도 하고 많은 인재들이 지원하기도 하는 분야이기도 하지만 너무 방대한 공부량과 전문적으로 정보를 얻을 수 있는 곳이 적어서 많은 분들이 생각했다가
포기하기도 합니다.

하지만 익혀야 할 기술들을 본인들이 정확히 인지 하고 그에 대해서 점차적으로 준비를 한다면
그렇게 너무 막막한 분야는 아닙니다. 지금까지 서술한 부분에 대해서 정확히 공부과정을 계획 하고 실천해 나가며 너무 두루뭉실 하게 준비하지만 않는다면 진로선택과 과정부분은 그렇게 어려운 부분이 아닐 것입니다. 하지만 전제조건은 역시 정보보안을 향한 꿈을 꾸며 전진하는 분만 가능한 분야입니다.

공부를 진행 하면서 취득할 수 있는 자격증으로는

시스템분야
LINUX : LPIC ,RHCE
UNIX : CSA , SCNA , SCNA
window2003 : MCP,MCSE

네트워크분야
CISCO : CCNA,CCNP,CCSP,CCIE

정보보안분야
(ISC)2 : CISSP
ISACA : CISA

<각 분야별 보안전문가 직무 및 교육정보>

※ 네트워크 보안 Network & Firewall Security

네트워크 보안전문가는 Dos와 DDoS, 스푸핑, 스니핑, NetBios 크래킹 등의 실제 네트워킹 해킹 방법과 이를 막는 보안 대책인 방화벽, 침입 탐지시스템, 허니팟을 구현한다.

PIX 방화벽, Cisco Secure IDS, IDS의 트래픽 필터링, Secure Policy Manager등 시스코 보안기술을 이용한 완벽한 네트워크 보안을 담당한다.

<과목개요>
네트워크보안이란 개방적인 네트워크 특성과 프로토콜(TCP/IP Protocol) 및 정보 시스템의 보안 취약성 등으로 인하여 바이러스 및 해킹과 같은 네트워크 인프라에 대한 침해와 네트워크 노드의 비정상적인 동작으로 인한 마비현상을 방지하고 응용 서비스의 연속성을 제공하는 수단이다.
이러한 시스템에는 침입 차단 시스템(Firewall), 침입탐지시스템(Intrusion Detection system:IDS), 가상 사설망 시스템 등이 있다.

네트워크는 전세계를 하나로 묶어 사람의 신경망과 같이 살아 움직이고 있다.
네트워크의 강력한 이점인 자원의 공유는 업무의 효율성을 높여 1980년 후반부터 빠른 속도로 성장했다.
발전초기, 기업 정보화를 위해 사내 망은 허브로 연결했고, 지점간 연결은 브리지 장비를 사용했다.

얼마후 인터넷, pc방, 닷컴 기업의 성장 등은 고속 인터넷의 붐을 일으켰고, ADSL 사용의 확대,
전자상거래의 활성화로 다시 초고속 인터넷 시대를 열었다.
초고속 인터넷 시대에 맞게 고성능의 라우터, 스위치 등 최신 네트워크 장비를 요구하고 있으며, 신기술 및 신개념에 대한 교육을 필요로 하고 있다.

네트워크 구축 및 보안에 관심이 있는 예비 엔지니어나 정보통신 관련업무 수행자, 보안관리자,
시스코 자격 취득자 등 IT업계 종사자 등 앞으로 다가올 무선 인터넷과 홈 네트워크에 필요한 핵심 기초를 소개, 최적의 네트워크를 구성하는 기술을 습득할 수 있다.

<네트워크 보안전문가의 직무>
- TCP/IP 구현
- 네트워크 응용과 보안 구현
- Firewall(침입차단 시스템) 설치
- IDS(침입탐지 시스템) 설치 및 유지 관리
- VPN(가상사설망) 설치 및 유지 관리
- NAT(네트워크 주소변환) 구현
- 정보보안 시스템 구축 사례 분석 후 해킹 및 침입 방지

<교육내용>
해킹의 정의에서 시작해 네트워크 기본 이론, 해킹 전 정보 획득방법, 실제 네트워킹 방법과
이를 막는 보안 대책을 설명한다. 해킹의 정의와 역사, 그리고 네트워크 기본 이론을 학습한다.
본격적인 해킹 및 정보 획들을 하는 다양한 방법을 설명하고, Dos와 DDoS, 스푸핑, 스니핑,
NetBios 크래킹 등 다양한 공격 기법을 알아본다.
또한 해킹에 대비하는 방화벽, 침입 탐지 시스템, 허니팟 등에 대해 알아본다.

※ 윈도우 시스템 보안 Windows System Security

<과목개요>
시스템 보안은 모든 관리자의 주된 화두라고 할 수 있겠지만 공개된 정보는 쓸모없는 경우가 많고 보안 서적은 이론에 치우쳐 있어서 점점 다양해지는 공격 속에서 시스템 관리자에게 실제로
도움이 될 만한 정보를 배운다. 여러 시스템 관리자와 공유하여 외부의 침입에 대응하여 시스템을 안전하게 지켜낼 수 있는 방법을 습득한다. 실제 해킹 방법과 함께 그 대응책을 실무적 관점에서 자세하게 습득할수 있도록한다.

<교육내용>
- 공격자의 입장에서 표적 시스템의 기본 정보를 수집, 네트워크 경로를 탐색하는 방법
- 윈도우 시스템의 패스워드 구조, 패스워드 추출 및 크랙 방법과 관련 도구의 사용 방법
- 웹 서버는 서비스 운영 환경 및 특성으로 인해 공격대상으로 쉽게 노출될수 있는 취약점
- 데이터베이스 해킹은 MS-SQL 서버에서 자주 발생하는 SQL Injection, SQL 저장 프로시저

악용 등의 공격 방법과 이러한 취약점의 제거 방법
- 보안 침해 사고가 발생하였다면, 공격자가 언제, 어떻게 침입했는지 파악하는 것이 중요하며,
침해행위에 대한 증거 확보와 법적 대응

※ 리눅스/솔라리스 시스템 보안 Linux/Solaris System Security

<과목개요>
리눅스 보안일반, 아파치 웹서버 보안, 메일 서버보안 DNS 서버보안 proFTD서버보안, 기타 서버보안 등 리눅스 보안에 관련된 내용을 종합적으로 습득할 수 있다.
또한 솔라리스는 안정성과 보안 측면에 중점을 두고 설계된 운영체제로 시스템의 보안적인 측면뿐만 아니라 동작면에서도 안전한 환경을 갖출 수 있는 능력을 습득한다.

<교육내용>
- 리눅스 시스템 보안
- 리눅스 상의 스팸메일을 차단하는 방법으로써 Spamassassin
- 리눅스 DNS 보안, 방화벽, VPN구성
- 솔라리스 9 시스템의 기본설정 구성에 대해 알아본다.
- 삼자(Third-Party) 보안 도구에 관해 배운다.
- 인증된 사용자 관리 방법에 대해 알아본다.
- 파일을 안전하게 사용하는 방법에 대해 알아본다.
- 안전한 네트워크 서비스 제공에 대해 알아본다.
- 네트워크 클라이언트에 안전하 DNS와 DHCP 서비스 제공에 대해 알아본다.
- 웹과 E-메일 서버 구성에 대해 알아본다.
- 솔라리스를 라우터 기능으로 사용하고 방화벽 서비스를 제공하도록 구성한다.

※ 포렌식 & 웹해킹 Forensics & WebHacking Programming

<교육개요>
해킹을 방지하기 위한 실제 공격, 공격 유형, 사용 툴 등 소프트웨어 공격을 위한 기술, 소프트웨어를 공격할 수 있는 방법은 무엇이며, 공격자는 어떻게 소프트웨어를 원하는대로 부수고, 방화벽이나 침입 감지 시스템 및 안티 바이러스 소프트웨어로 공격자를 막아내지 못하는 이유는 무엇일지, 소프트웨어를 공격하고 깨부술 때는 도대체 어떤 툴을 아용하는 것인가 등 소트프웨어 보안을 위해 필요한 해커의 정보를 자세하게 설명한다.
또한 소프트웨어를 공격할수 있는 방법은 무엇일까? 공격자는 어떻게 소프트웨어를 원하는 대로 부수는 것일까?
방화벽도 있고, 침입 감시 시스템도 있고, 안티 바이러스 소프트웨어도 있는데, 왜 공격자를 막지 못하는 것일까?
소프트웨어를 부술때는 도애체 어떤 툴을 사용하는 것일까?를 습득한다.

<교육내용>
- 해킹 범죄에 대한 완벽한 기법분석 및 대응책 소개
- 포렌식의 역사와 다양한 기법 소개
- 컴퓨터 범죄 수사 및 교육에 대한 방향 제시
- 컴퓨터 보안
- 소프트웨어 회사, 시스템 개발자, 개발 조직에서 취한 소프트웨어 품질 관리 방식과 보안
- 소프트웨어와 응용 프로그램의 취약점

※ 윈도우즈 보안 전문가 Windows Security Expert

윈도우즈 보안전문가는 윈도우 시스템을 대상으로 인터넷 보안, 윈도우 보안 기능, 이와 관련된
여러 도구와 유틸리티 등을 다룰 수 있어야 한다.
또한 윈도우 서버를 안전하게 구축하기 위한 보안 설정과 구성에 관한 기술이 필요하다.
특히 서버와 네트워크를 통합적 개념에서 이해하는 신뢰성 높은 운영 기술이 필요하다.

<교육 개요>
네트워크의 TCP/IP에서부터 보안 위협, 대책방안, 보안전략과 관리, 윈도우 2003 보안소개 윈도우 2003 네트워크 프로토콜과 서비스, 윈도우 2003 보안 위협과 해결책, 액티브 디렉토리, 그룹정책, 사용자와 그룹 보안관리, 로그온과 인증, 파일 시스템과 네트워크 공유 보안, 감사, 방화벽과 프록시 서버, 마이크로소프트 프록시 서버, 원격 접근과 VPN, 클라이언트/워크스테이션 보안, 기업의 보안, 장애 허용 한계와 자료 보호, 윈도우 2003 강화등에 관한 교육이다.

<윈도우즈 보안전문가의 직무>
- 방화벽에서 경고 소프트웨어, 네트워크와 데이터로부터 침입 방지
- 바이러스, 웜, 기타 웹 해쿵 제거
- 공유 리소스로의 액세스를 제어하기 위하여 인증 및 인증서, 그룹정책사용
- 의심스러운 행동과 공격 시도를 탐지하기 위한 시스템 모니터
- 스파이와 스팸을 전자 메일로부터 제거
- VPN, 원격 액세서, 무선 네트워크 서비스 안전유지
- 데이버를 암호화하고 포트를 차단하고 레지스트리를 잠금으로써 궁극적으로 보안 통제

※ 리눅스/유닉스 보안 Linux/Unix Security Expert

리눅스/유닉스 보안 전문가는 리눅스 기반 시스템과 네트워크 보안 설정 및 기술, 크랙기법,
크래커로부터 리눅스 시스템의 보안 문제를 담당한다.
또한, 솔라리스상의 디스크 및 파일관리, 시스템관리, 백업과 복구, 네트워크 관리와 보안(웹서버, 메일서버, FTP서버, Samba 구축)에 관한 업무를 담당한다.

<교육개요>
리눅스는 가격적인 면과 안정성 면에서 많은 장점과 가능성을 가지고 있음에서 불구하고 리눅스로 서버를 구축하는 사례는 예상만큼 많지 않습니다. 그 이유는 보안성이나 콘솔 환경에서의 사용불편이 걸림돌로 작용하기 때문입니다. 또한 리눅스로 서버를 구축해서 운영하려면 많은 시간과 노력을 기울여야 합니다.

초보자로부터 실제 리죽스 서버관리자까지 활용할 수 있도록 리눅스, 솔라리스, 네트웤, 보안 기불 및 GUI환경의 리눅스 관리, 설정, 보안, 네트워크 서버 프로그램(Apach, DNS, FTP, Mial, Samba등)의 설치 및 운영방법을 공부합니다.

또한 TCP/IP 네트워크 관리, IPTABLES 패킷 필터, 리눅스 시스템 모니터링, 쿼터, ICS BIND/DNS, 메일서버보안, 데이터베이스 서버보안, 게이트웨이 서버보안, Wu-FTP, 아파치, Samba 서버보안, 백업과 복구 기술을 습득한다.

<리눅스/솔라리스 보안전문가의 직무>
- 내부 보안 정책 강화
- 효과적인 방화벽 설치
- 스팸 차단
- 고의적인 침입에 대한 대처 방안
- 침입에 대처하는 손쉬운 복구
- 해킹을 예방하고 탐지하거나 복구할 수 있는 보안 시스템 유지
- 해킹을 차단하기 위한 리눅스/유닉스 관련 프로그램 툴
- 실시간 모니터 시스템, 네트워크 탐지, 스피트 백업, 복수 등의 시스템관리

※ 소프트웨어 보안 Software Security

소프트웨어 보안은 웹 언어과 프로토콜, 웹 서버들과 데이터베이스 서버들, 지불 시스템과 쇼핑카트, URL과 관련된 치명적인 취약점에 관한 보안을 의미한다.

특히, 요즘 사회적으로 큰 이슈인 크로스사이트스크립트(XSS)과 SQL Injecton 공격의 실체뿐만 아니라 사회적 공격인 피싱에 대한 웹 보안도 중요하다.

<교육개요>
웹 해킹을 위해 PHP 기초와 웹해킹 프로그램을 직접 만들고, 웹소스의 분석을 통해 모두 내것으로 만들어 다른 툴이 필요없는 인터넷 익스플로어만을 이용한 웹해킹과 메모리를 분석하여 정보를 찾아내는 해킹 및 다양한 툴의 사용방법에 관한 내용이다.

웹을 통한 해킹이 갈수록 보편화되고 있지만 우리의 보안의식은 아직도 낮은 상황이다. 웹해킹에 대한 실제 프로세스와 이론을 보다 철저히 분석, 공격자의 입장과 관리자의 상황을 동시에 경험할수 있도록 하여 웹 어플리케이션을 안전하게 보호할수 있는 최신 웹보안 시법을 자연스레 터특한다.

<머니투데이 기사중에서...>

"한국은 인터넷 초고속망이 세계 어느나라보다 잘 되어 있습니다. 반면 전반적인 보안 수준은 상당히 낮은편디죠. 한국이 세계 헤커들의 경유지로 악용되고 있는것도 이런 이유일 겁니다." 국내 보안업체인 정보보호 기술과 실제해킹교육 세미나를 진행하기 위해 내한한 세계적인 해킹 감시기관인 존-H창립자 로베르토 프리토리.
그는 여러 정보기관의 보안컨설턴트로 일하며, 다수의 사이버 테러 사건을 해결해온 보안 베테랑이다.
특히, 미국 데프콘등 세계적인 보안 컨퍼런스에서 강의를 진행해 왔으며, 특히, 보안 경쟁력 분석 및 비대칭환경의 침입관리 전문가로 정평이 나있다. 그는 한국의 보안 수준을 평가해 달라는 질문에 이렇게 답했다.
점수로 10점 만점의 5-6점이 우리나라에 준 점수다.

※ 연봉부분

일반 IT계열로는 최고 수준입니다.

하지만 5~10년 정도 경력을 쌓으신 분에 대해서 연봉이 3000~7000 정도입니다.
신입으로는 1800~2000 1~3년 경력자는 2400~2800 정도 입니다.

※ 정보보안과정을 교육기관에서 배울려면?

일단 프로그래밍,시스템,네트워크 분야가 아니라 보안 분야라고 하셨으니까 해킹과정은 대학교과정에는 불법이라 없고 대학원에는 있습니다. 추천 대학원으로는 성균관대와 고려대가 있습니다.

내년부터 대학생 5000명 美 연수취업

내년부터 대학생 5000명 美 연수취업

이르면 내년부터 매년 최대 5000명의 대학생들이 미국에서 18개월간 체류하며 영어도 배우고 인턴으로 취업도 할 수 있을 것으로 보인다.

외교통상부 관계자는 5일 "내일 한미 정상회담에서 한국대학생 미국 연수취업프로그램(WEST)에 대해 합의할 예정"이라며 " "이 프로그램은 미국이 전 세계에서 한국에 처음으로 실시하는 것으로, 내년 실시가 목표"라고 밝혔다.

WEST프로그램은 미국에서 인턴으로 취업해 돈을 벌며 영어를 배우고 여행하는 프로그램으로 Work & English Study & Travel의 약자다. 미국은 그동안 단기취업과 관광을 묶은 4개월짜리 프로그램을 운영해왔다.

그러나 양국 정상이 WEST프로그램에 합의할 경우 한국 대학생들은 총 18개월간 미국에 장기체류 할 수 있게 되면 인턴 취업(12개월)도 가능하다.

외교부에 따르면 총 선발인원은 우리 정부 추천인원을 포함해 주한 미국대사관에서 결정하며 최종 선발 인원에 대해서는 미 국무부의 승인을 받은 미국 추천기관이 연수 및 취업기관 연결 등 필요한 행정업무를 지원하게 된다.

정부는 또 중산층 이하 대학생에게는 자비로 부담해야 하는 어학연수 비용을 대출해주고 프로그램 안내 및 추천 등 지원업무를 담당할 지원센터 설립도 검토중인 것으로 알려졌다.

외교부 당국자는 "WEST프로그램은 기존 WT프로그램과 비교했을 때 어학연수의 기회가 있으며 기간도 길고 대상인원도 5천명 정도로 확대돼 젊은 세대들에게 좋은 기회가 될 것"이라며 "우리나라의 미 비자면제프로그램(VWP) 가입에 이어 WEST프로그램까지 실시되면 한.미 양국간 민간 교류가 크게 늘어날 것으로 기대한다"고 전했다.

MVC 이해하기

 

MVC 이해하기

Duncan Mills 지음

Oracle9i JDeveloper가 Model-View-Controller 디자인 패턴 기반 J2EE 애플리케이션의 구축을 돕는 방법

필자는 여러분들이 내년 이후에는 MVC (Model-View-Controller) 패턴이라 불리는 디자인 패턴에 대하여 훨씬 더 많이 접하게 될 것이라고 확신합니다. 이번 기고는 그런 의미에서 MVC의 정확한 정의와 언제, 어디서 그리고 어떻게 Oracle9i JDeveloper를 사용하여 MVC 애플리케이션을 구축할 수 있는 지에 대하여 설명할 수 있는 좋은 기회라고 생각합니다.


이번 기고에서는 우선 디자인 패턴부터 소개를 하고, 그 후에 MVC에 대하여 자세하게 살펴보도록 하겠습니다.

필수 용어

J2EE 애플리케이션 디자인을 다룰 때 극복해야 할 첫번째 과제는 새로운 용어들과 특정 소프트웨어 형식 관련 전문 용어들입니다. 그래서 이번 기고에서는 자주 다루게 될 J2EE 관련 중요 개념들을 먼저 살펴본 후 본 내용을 다루도록 하겠습니다

디자인 패턴

"디자인 패턴"이라는 용어가 요즘 매우 많이 사용되고 있지만 여기에서 다루고자 하는 것은 프로그래밍 문제 해결을 위한 증명된 시도 방법에 대해서 입니다. 불행하게도 그 용어는 그 동안 남용되어 오면서, 그 자신이 목적이 되곤 했습니다. 소프트웨어는 디자인 패턴에 기반을 둘 수 있고, 그러한 경우에는 소프트웨어의 개발이 더 용이해질 수도 있지만, 소프트웨어를 구입하거나 디자인하는 경우에 기능보다 디자인 패턴을 더 중요하게 여긴다면 역효과를 낼 수도 있습니다.

"이것이 과연 디자인 패턴을 통해 나를 도울 수 있습니까?"라고 질문하면서 개발 환경을 지켜보는 것은 그리 생산적인 행동은 아닙니다. 디자인 패턴이라는 것은 목적에 대한 수단이 되어야지 결코 그 자체가 목적이 되어서는 안되기 때문입니다. 개발 툴을 평가할 때 할 수 있는 의미 있는 질문은 아마도 "애플리케이션 구축을 위해 이 환경이 얼마나 많은 것을 제공할 수 있습니까?" 정도가 될 것입니다.

다음은 고려해야 할 중요한 사항들입니다:

  • 디자인 패턴은 비즈니스 문제들을 해결하기 보다는 특정 프로그래밍 과제들을 해결합니다.
  • 디자인 패턴은 실제 구현보다도 가이드라인을 제공합니다.
  • 디자인 패턴은 재사용이 가능합니다
  • 디자인 패턴은 입증된 트랙 기록을 갖고 있습니다.
현재 웹 상에는 디자인 패턴과 관련된 다양한 정보들이 존재하고 있는데 그 중에서도 Sun Java Blueprints site 사이트는 반드시 확인해 보시기 바랍니다.

MVC

MVC는 디자인 패턴 중의 하나로 프로그래밍 세계에서는 전혀 새로울 것이 없습니다. Smalltalk 등과 같은 객체형 프로그래밍의 초기 시대 부터 Java Swing 컴포넌트 집합의 기초를 제공하는 최근까지 디자인 패턴으로서의 MVC 사용과 관련된 많은 레퍼런스들이 존재하고 있습니다. 그런데 MVC가 다시 주목을 받게 된 이유는 그것의 패턴이 웹 기반 애플리케이션 구축 시 발생하는 기본 문제들 중의 대다수를 해결하는데 적합하다는 것을 깨달았기 때문입니다.


일반적인 데이타베이스-중심 애플리케이션들과 특정한 웹 기반의 씬-클라이언트 애플리케이션들을 살펴보면 애플리케이션이 여러 가지 구분되는 작업들을 수행해야 한다는 것을 발견할 수 있습니다:

  • 데이타 액세스
  • 비즈니스 로직 구현
  • 사용자 인터페이스 표시 (데이타 프리젠테이션)
  • 사용자 상호 작용
  • 애플리케이션 (페이지) 플로우
MVC 아키텍처 또는 패턴은 사용자가 사용자 인터페이스를 재작성하지 않고 다른 데이타 소스에서 애플리케이션으로 용이하게 플러그할 수 있도록 데이타 프리젠테이션 등과 같은 작업들을 데이타 액세스로부터 분리시켜야만 한다는 전제 조건을 갖고 이러한 작업들의 구분 방식을 제공하고 있습니다.

지금은 MVC를 여기까지만 살펴보고 나중에 다시 자세하게 살펴보도록 하겠습니다.

JSP Model 1과 Model 2

진행을 하기에 앞서 JSP Model 1와 Model 2 아키텍처에 대해 잠시 살펴보도록 하겠습니다. 현재 많은 씬-클라이언트 웹 애플리케이션들은 사용자 인터페이스의 디스플레이 처리 방법으로 JSP (JavaServer Page) 를 사용하고 있습니다. 특히 복잡한 애플리케이션에서 여러 페이지를 함께 연결할 때 사용자는 하나 이상의 "루트"를 갖는 페이지들 사이에서 플로우를 어떻게 제어해야 할지 결정을 해야 합니다. 이러한 문제의 경우 JSP는 두 개의 시도 방법을 갖고 있습니다: Model 1 아키텍처와 Model 2 아키텍처

Model 1 아키텍처 ( 그림 1) 는 페이지들 사이의 라우팅을 JSP 자체에게 맡깁니다. 그래서 JSP는 하드코딩된 링크를 갖고 있거나 또는 페이지 내에 내장된 이동 (navigation) 로직을 갖고 있어야 합니다. 그러나 이 전략은 하나의 문제를 해결함과 동시에 또 다른 문제를 야기시키는데, 그것은 프리젠테이션과 이동 로직이 섞여있어서 페이지를 쉽게 재사용할 수 없기 때문입니다. 심지어 JSP Model 1를 사용하는 간단한 페이지 플로우들도 쉽게 복잡해질 수 있기 때문에 각각의 페이지는 그것이 링크된 다른 페이지들을 모두 알고 있어야만 합니다.

Model 1 architecture

JSP Model 2 (그림 2) 는 이 문제에 대한 해결 방법입니다. Model 2 아키텍처의 경우에 페이지 플로우는 JSP에 의해 처리되지 않습니다. 오히려 아키텍처는 페이지와 함께 제출된 정보를 기반으로 하여 분리된 서블릿이 라우팅을 결정하도록 해주어서 페이지들은 논리적으로 링크된 다른 페이지들을 인식할 필요가 없습니다. 이 서블릿은 Controller라고 호칭되는데, 이것은 이번 기고의 원래 주제인 MVC 패턴과 밀접한 관계를 맺고 있습니다.

JSP Model 2

MVC의 상세 내용

MVC는 애플리케이션을 Model, View 그리고 Controller라고 호칭 되는 세 가지 레이어 또는 기능 영역으로 논리적 방법을 통해 분리한 것입니다.


MVC와 같은 디자인 패턴은 각기 다른 레벨로 적용될 수 있는데, MVC는 애플리케이션 구축 방법으로서 뿐만 아니라 컴포넌트 레벨에서도 유용한 전략으로 활용될 수 있습니다. 잠시 JSP와 웹으로부터 벗어나서 Java Swing 리스트 박스 (이것은 단순한 컴포넌트이지만 훨씬 더 지역화된 범위에서 세 가지의 MVC 요소들을 모두 보유하고 있습니다) 와 같은 것을 고려해 보는 것도 좋습니다.


그럼 이제부터 세 가지 레벨을 한번 살펴보도록 하겠습니다:

The Model

Model은 애플리케이션 데이타 및 비즈니스 로직의 저장소 (repository) 입니다. 그러나 Model이 데이타베이스를 표시한 것이라고 말하는 것은 너무나 극단적인 표현입니다. 일반적으로 Model 기능의 일부는 데이타베이스 기반 애플리케이션을 통해 데이타를 데이타베이스로부터 읽어 들이거나 또는 데이타를 데이타베이스에 지속시키는 것입니다. View의 데이타 액세스는 데이타를 드러내거나 또는 View를 통해 입력된 데이타를 입증 및 소모하기 위해 비즈니스 로직 레이어를 구현하는 작업도 필요로 하고 있습니다.


애플리케이션 레벨에서 Model은 표시하는 사용자 인터페이스와 표시되는 비즈니스 데이타 사이의 입증 및 추상화 레이어 처럼 동작을 합니다. 데이타베이스 서버 자체는 단순히 Model을 위한 퍼시스턴스 (persistence) 레이어 입니다.

The View

View는 Model 데이타를 렌더링하는 것과 관련이 있습니다. 이제부터는 View를 렌더링하는데 사용되는 다른 기술들에 대하여 살펴볼 예정인데, 보통은 JSP 페이지를 사용하고 있습니다. 여기에서 주목해야 할 것은 View 코드는 사용자 역할에 따라 조건부 데이타 표시와 같은 작업들의 수행 로직을 포함할 수는 있지만 View 코드 자체가 애플리케이션이나 이동 로직을 하드코딩하지는 않는다는 것입니다. 최종 사용자가 View로부터 렌더링 되는 HTML 페이지 내의 동작을 수행할 때에는 이벤트가 Controller에게 제출이 되고 그 다음에 무엇을 할 것인지는 전적으로 Controller에게 달려 있습니다.

The Controller

Controller는 이름이 나타내는 것과 같이 전체 패턴의 연결 고리 입니다. View에서 수행된 모든 사용자 동작은 브라우저의 요청 컨텐트에 기반을 두고 프로그래밍 또는 메타데이타에 결합되어 다음에 무엇을 할지를 결정하는 Controller를 통해 제출됩니다.


Controller들은 여러 가지 다른 방식으로 운영될 수 있습니다. 어떤 것들은 요청들을 정확한 코드로 라우팅하기 위해 URL 인수들을 사용할 것이고 다른 것들은 요청이 제출되어 지는 페이지를 참작할 것입니다. 또한 그 외의 것들은 페이지 제출 시에 무엇을 할지를 알아내기 위해 숨겨진 필드들을 사용할 수도 있습니다. 그런데 MVC 디자인 패턴 자체는 Controller가 어떻게 동작하는지 그리고 단순히 그것의 기능이 무엇인지에 대해 규정을 하고 있지는 않습니다.


Controller는 여러 가지 구분되는 프로세스들 또는 서블릿들로 만들어져서 전체 Controller 기능의 다른 측면들을 처리할 수 있습니다. 예를 들면, 사용자는 하나의 서블릿이 제어하는 페이지 플로우 컨트롤과 또 다른 서블릿이 제어하는 사용자 인터페이스 이벤트 컨트롤 등과 함께 정확한 하위 Controller에게 디스패치하는 마스터 Controller를 가질 수 있습니다. 이 개념 자체는 다른 디자인 패턴의 주제이기도 합니다: Front-Controller 패턴

웹 애플리케이션에서의 작동 방식

MVC 패턴은 요약이 가능하여 그림3 에서와 같이 다이어그램을 사용하는 전통적인 씬-클라이언트 웹 애플리케이션에 적용 시킬 수 있습니다.

MVC pattern

이와 같은 웹 애플리케이션에 있어서 명심해야 할 것은 모든 것들은 페이지를 제출하는 사용자에 대한 응답을 통해 발생한다는 것입니다. "다음 10 개의 레코드를 표시하십시오" 등과 같은 간단한 UI 작업은 Controller에 대한 클라이언트 브라우저의 요청에 의해 구현되어 더 많은 데이타가 필요하다는 것을 Model에게 가르쳐 준 후 원래 페이지를 다시 표시할 것입니다. 그런 후에 View가 Model로부터 데이타를 요청할 때에는 다음 10 개의 행들이 표시 가능하게 될 것입니다.

지금까지는 모든 것이 매우 간단하게 보였고, 언급된 세 개의 부분 모두 명확하게 설명되었습니다:

  1. View를 이루는 개별 페이지들은 다른 페이지들에 대한 관계를 알지 못합니다. 그것들은 단지 "이벤트"를 발생시키고 Controller는 정확한 일이 발생하였다는 것을 보증해 줍니다.
  2. View와 Controller는 기본이 되는 데이타 구조 또는 비즈니스 규칙에 대해서 알지도 못 하고 구현도 하지 않습니다. 그것들은 단순히 Model의 공용 API들을 사용 (consume) 할 뿐입니다

  3. Model은 View나 Controller Model에 대해서 아무 것도 알지 못 합니다.
MVC 패턴의 본질은 장소에 구애 받음이 없이 애플리케이션의 View와 Model 부분의 재사용을 간편하게 만드는 것이고, 애플리케이션 자체는 본래 데이타 소스와 UI를 의미있는 방식으로 결합하는 Controller 부분에 의해 표현이 됩니다.

마찬가지로, 이러한 논리적 분리는 사용자가 나머지 애플리케이션을 다시 작성하지 않고 선택하는 기술을 특정 레이어를 위해 변경할 수 있게 해줍니다. 예를 들면, View의 구현을 위해 JSP를 사용하여 애플리케이션을 프로토타입할 수 있지만, XML 메타데이타-방식 서블릿을 통해 이후에 View를 바꾸어 놓는 것도 가능합니다. 이 작업은 Model을 변경함이 없이 Controller을 최소한만 변경하여 이행할 수 있습니다. (Controller에 있어서 이러한 경향은 나중에 다시 한번 자세히 살펴보겠지만 Jakarta Struts와 같은 메타데이타-방식 Controller 프레임워크를 사용하기 위함입니다. 그러므로 View를 교환할 때는 Controller 로직 자체가 아니라 그 메타데이타만 변경하면 됩니다.)

한번 MVC-기반 애플리케이션의 구현을 시작하게 되면 모든 것들이 보다 복잡해 지고, 프로그래머들은 레이어들 사이에서 논리적인 분리를 계속 유지하기 위해서는 교육을 받아야 합니다. 예를 들어 링크를 하드코딩해서 네비게이션 로직을 JSP로 코딩하는 것이 좋게 보일 수는 있지만, 만약 이것이 구현되면 페이지는 더 이상 사용할 수 없게 될 것입니다.

레이어들 사이의 라인들이 뚜렷하지 않다는 것도 반드시 인식하고 있어야 합니다. 예를 들면 데이타가 페이지로부터 제출될 때 Struts와 같은 Controller 프레임워크는 JavaBean을 데이타로 채우고 계속 진행하기 위해 빈을 Controller로 전달할 수도 있습니다. 그러면 지금의 그 빈은 View의 일부입니까 아니면 Controller의 일부입니까? 솔직히 말씀드리면 어느 버킷 (bucket) 을 선택해서 그것을 위치시키는가 하는 문제는 그리 중요한 것이 아닙니다. 중요 컴포넌트들 사이에서는 항상 인터페이스 레이어들이 존재할 것입니다. 여기에서 중요하게 여겨야 할 것은 올바른 장소에 정확한 종류의 로직을 유지해야 하는 것입니다.

실제 상황에서의 MVC

앞에서는 MVC의 이론을 살펴보았고, 지금부터는 J2EE가 포함하고 있는 기술들과 MVC 기반 애플리케이션 구축 과정을 도울 수 있는 Oracle9i JDeveloper에 대하여 살펴보도록 하겠습니다.
MVC의 각 부분에 대하여 역할 완수를 위해 사용자가 채택할 수 있는 선택 가능한 구현 방법들이 있는데, 당연히 앞으로 언급할 옵션들은 소모적인 것이 아니라 가능성의 일부를 설명해 주는 것들입니다. 뿐만 아니라 일부 솔루션들은 하나 이상의 MVC 부분도 포함할 것입니다.

실제 상황에서의 Model

Model의 역할은 애플리케이션 기능과 관련된 애플리케이션 데이타와 비즈니스 로직을 처리하는 것이라고 알려져 있는데, Model은 단지 여러 레이어로 이루어져서 다음과 같은 작업을 처리하는 것이라고 생각하면 됩니다:

  • 비즈니스 객체 지속
  • 데이타 액세스
  • 비즈니스 서비스 제공
Enterprise JavaBeans (EJB), JDBC, Web Services, 그리고 Oracle9iAS TopLink 등과 같은 기술들은 모두 Oracle9i JDeveloper Business Components for Java (BC4J)와 같은 완벽한 Model 프레임워크를 통해 가장 생산적인 솔루션을 제공하면서 이러한 작업들의 전부 또는 일부를 이행할 수 있는데, 이 프레임워크는 Model 레이어들의 생산을 위해 선언적인 메타데이타-방식의 시도 방법을 제공하면서 프로그래머들이 로우-레벨 보다는 그들의 코드를 통해 비즈니스 요구 사항들의 해결에 집중할 수 있도록 해줍니다. 그리고 BC4J는 지속성을 위해 EJB를 사용하는 것과 같이 다양한 Model 레이어 작업들을 위해 각각 다른 구현 방법을 사용할 수 있는 유연성을 프로그래머에게 제공하고 있습니다. BC4J와 같은 프레임워크를 사용하게 되면 Model의 사용자들은 (View 개발자들) 데이타 액세스 및 비즈니스 로직 구현에 대한 세부 사항들을 정확하게 알 수가 없고 그들은 단지 추상적 레이어만을 제공 받게 됩니다.

이번 기고에서는 Model 레이어 구현의 다양한 시도 방법에 대한 상대적 장점에 대해서 많은 부분을 할애하지는 않을 것입니다. 그런데 여기에서 알아야 할 것은 JDeveloper는 Model 내에서 사용자들이 비즈니스 프로세스 프로그래밍 로직에 집중할 수 있게 해주면서 이러한 Model 레이어들을 사용하는 기본 작업을 보다 쉽게 만들 수 있는 툴들을 제공한다는 것입니다.

예를 들어 사용자는 JDeveloper를 통해 데이타베이스를 찾고 Model의 기본으로 사용할 데이타베이스 테이블들을 선택한 다음 그 테이블들을 직접 UML 클래스 다이어그램으로 끌어놓을 수 있습니다.

JDeveloper는 사용자가 기본 위저드와 등록 정보 편집기 등을 통해 Model 레이어를 생성할 수 있게 해줍니다. 그리고 동일한 방식으로 기본적인 EJB와 BC4J 클래스들, 메타데이타 그리고 전개 기술자 (deployment descript-xor) 등의 정의 작업을 수행할 수도 있습니다. BC4J의 경우에는 사용자가 등록 정보 편집기를 통해 검증과 재사용 가능한 비즈니스 규칙들을 그들 자신의 모델로 적용할 수 있는 능력을 얻게 됩니다.

실제 상황에서의 View

일반적으로 사용자 인터페이스를 생성할 때 어떠한 기술을 선택해야할 지 무척 당황해 할 수 있습니다. 다음은 선택 가능한 세 가지 시도 방법입니다:

  • HTML 페이지 생성 Java 코드를 작성하는 Java 서블릿
  • 기본적으로는 HTML 페이지를 생성하지만 Model로부터 데이타를 가져오는 것과 같은 기능들을 수행할 때에는 특별한 태그 또는 스크립틀릿 (script-xlet) 들을 내장하는 JSP
  • 메타데이타-방식 또는 템플릿-방식 프레임워크
Java 서블릿 방식은 Java 프로그래머들이 많이 선호하는 방식으로서 View-구축에 필요한 요구 사항들을 해결합니다. 모든 것은 프로그램 문자열 내에 내장된 HTML 요소들을 통해 코드 내에서 즉시 처리되어야만 하는데, 이와 같은 방식은 복잡하고 오류가 많이 발생합니다.

현재 View 생성에 있어서 가장 유명한 기술은 JSP 방식인데, 이것은 페이지를 위한 기본적인 사용자 인터페이스 디자인 툴인 Macromedia Dreamweaver 등과 같은 표준 HTML 편집 툴들의 사용 능력과 그 페이지의 작업 방식과 데이타 바인딩을 처리하기 위한 Java 코드의 내장 능력을 함께 결합한 것입니다. JSP가 최초로 실행이 될 때에는 서블릿으로 컴파일이 되는데, HTML 내에 Java 스니핏 (snippet) 들을 내장하는 방식은 Java 내에 HTML을 내장하는 반대 프로세스보다 훨씬 더 생산적이라고 판명되었습니다

JSP들은 그것들 내부로 직접 내장되는 Java 코드의 세그먼트들을 갖거나 또는 커스텀JSP 태그들을 사용할 수 있습니다. 태그들은 컴파일 시에 즉시 배치되는 Java 코드를 위한 위치 표시자 (placeholder) 인데 그것들의 재사용이 가능하도록 해주는 API와 함께 디자인되어 사용되고 있습니다. 그래서 프로그래머는 기본적 구현에 대한 지식을 보유하지 않고도 애플리케이션 내에서 태그 라이브러리를 재사용이 가능한 컴포넌트들의 라이브러리처럼 사용할 수 있습니다.

JSP와 JSP 태그 라이브러리들을 결합하는 것은 View 개발자들에게 막대한 능력을 제공함과 동시에 많은 문제점을 발생시킬 수도 있습니다. 그러한 태그 라이브러리들은 BC4J-기반 모델에 대한 간편한 액세스 기능을 제공하는 Oracle BC4J 태그 등과 같은 특별 라이브러리들부터 Struts 태그 라이브러리와 Java Standard Tag Library (JSTL) 등과 같은 보다 일반적인 "개방형 소스" 라이브러리들 까지 존재합니다.

프로젝트를 위해 정확한 태그 라이브러리를 선택하는 것은 어려운 일이지만 사용을 위해 선택한 다른 기술들이 그 선택 과정을 이끄는 경우도 가끔 발생할 것입니다. 예를 들어, Model 프레임워크로 BC4J를 사용하고 Controller로 Struts를 사용하기로 결정한 경우 JDeveloper는 사용자에게 이러한 조합을 위해 맞추어진 표준 태그 라이브러리들의 집합을 제공할 것입니다

View 개발의 마지막 방식은 템플릿-방식 또는 메타데이타-방식 프레임워크를 사용하는 것입니다. 이것의 관련 예는 XML을 선언적으로 사용하여 페이지 정의 방식을 제공하는 JDeveloper 내의 UIX 프레임워크입니다.

Jakarta Velocity 프로젝트는 또 다른 템플릿-기반 방식을 제공하는데 Velocity는 XML-방식 보다는 Velocity가 대신하는 템플릿 HTML 페이지 내의 특별 마크업을 사용하여 오히려 JSP 페이지처럼 동작합니다.

이와 같은 메타데이타-방식의 시도 방법은 서블릿 또는 JSP를 사용하는 것보다 많은 이점을 제공할 수 있습니다. 우선, 프레임워크는 UI가 무슨 일을 하고 그것이 어떻게 보이는지를 정의하지만 그것이 어떻게 구현되는지는 정의하지 않기 때문에 다른 장비로부터 출력을 얻어낼 때 동일한 메타데이타 정의를 사용할 수 있습니다 (예를 들면 브라우저 클라이언트로부터 HTML 출력을 얻어내거나 또는 전화로부터 WML 출력을 얻어낼 때). 두 번째는 메타데이타의 선언적 성격이 그것 자신에게 정의 뿐만 아니라 시각 편집기의 사용도 추가해 주고 있습니다. 사용자 인터페이스의 포인트-앤드-클릭 편집은 J2EE 개발자의 생산성을 증가시키기 위한 필수 사항 중 하나입니다.

실제 상황에서의 Controller

웹 기반 애플리케이션에 적용되었을 때 Controller 기술이 모든 MVC 컴포넌트들 사이에서 가장 완성된 것은 아닙니다. 이것은 Controller와 View가 혼합된 JSP Model 1 방식이 지금까지 광범위하게 사용되어 왔기 때문입니다. Controller들이 계속 사용되어 온 경우 Controller들은 자체 내에서 성장하면서 Jakarta Struts Controller 프레임워크에 기반을 두는 경향도 갖고 있습니다.

Struts Controller는 매우 유명한 JSP 애플리케이션 구축용 Controller 프레임워크로서 핵심 Controller 기능을 포함하면서 View 레이어를 위해 많은 태그들을 제공하고 있습니다. Struts는 개별 페이지들을 위해 위치 추상화 (abstraction) 를 정의하는 XML 메타데이타와 페이지들 사이의 실제 흐름을 제어하기 위한 프로그래밍 코드의 혼합된 형태를 사용하고 있습니다. 보다 자세한 정보는 Apache 웹 사이트에서 확인해 보시기 바랍니다.

JDeveloper는 Struts 구성 파일 편집기 그리고 단순 Struts 또는 Struts, BC4J, JSP UIX 등의 조합을 사용하는 애플리케이션들의 구축을 보다 간편하게 만들어 주는 위저드와 JSP 태그들의 집합을 제공하여 Controller로서의 Struts 사용을 완벽하게 지원하고 있습니다.

MVC의 미래

이번 기고의 시작 부분에서 잠시 언급했던 것처럼, MVC는 점차 발전하면서 J2EE 애플리케이션들을 위해 선택 가능한 개발 방법론이 되어가고 있습니다. 우리는 현재 매우 흥미로운 개발들이 (특히 View 및 Controller 분야에서) 진행 중인 것을 보고 있습니다.


Controller 측면에서 Struts 버전 1.1은 베타 상태에 있는데, 이 새로운 버전은 Struts 1.0 보다 훨씬 더 유연하고 또한 많은 일을 처리할 수 있습니다. 또한 페이지 플로우 정의 작업을 더욱 선언적으로 만들면서 단순 페이지 플로우 이상으로 Controller의 범위를 확대하는 Controller를 통해 보다 많은 일이 수행되고 있습니다.


페이지 플로우의 시각 모델링이 첫번째 단계인데, 많은 벤더들은 현재 이 기술의 작업을 계속 진행하고 있습니다. 그러나 개발자들이 웹 배치를 위해 보다 복잡한 시스템을 구축하기 시작하면서 단순 페이지 플로우 보다는 전체 프로세스들을 모델링하는 능력에 대한 요구가 점차 증가하고 있습니다. 이와 같은 프로세스들 중에서 페이지를 최종 사용자에게 보여주는 것은 플로우를 위해 가능한 여러 작업들 중의 하나일 뿐입니다. Oracle은 매우 가까운 미래에 이와 같은 종류의 Controller 기술을 통해 흥미로운 개발들을 제공할 예정입니다!

View 측면에서 커다란 변화는 JavaServer Faces (JSF) 입니다. 이것의 목적은 HTML을 위해 J2EE를 사용하여 그래픽 인터페이스의 새로운 표준을 개발하는 것이고, 개념은 표준 UI 요소들과 이벤트 핸들링을 통해 Swing GUI Toolkit과 같은 것을 HTML을 위해 제공하는 것입니다.

Oracle은 Java Community Process (JSR 127) 의 일부로 정의되고 있는 이 과제의 정의 프로세스에 참여하고 있고, 표준 작업이 종료되자 마자 JSF를 구현할 예정입니다. JSF에 대한 보다 자세한 사항은 http://www.jcp.org/en/jsr/detail?id=127을 확인해 보시기 바랍니다.

JavaServer Faces는 MVC의 Model에 영향을 미치고 있습니다. 표준화된 GUI 툴킷이라는 것은 View와 Model 사이의 상호 작용이 Model 데이타를 특정 필드 또는 컨트롤로 바인딩을 해서 표준화가 될 수 있다는 것을 의미합니다. 그래서 필자는 J2EE 개발을 위한 패턴으로서 MVC를 사용하는 흥미로운 단계에 접어들었다고 믿고 있습니다. 이 기술은 이제 막 성숙한 단계에 접어들었고 또한 표준화 작업도 함께 이루어지고 있습니다.


비즈니스 프로그래머들의 작업을 간편하게 해줄 수 있는 시각적 모델러와 UI 편집기를 통해 코드-중심의 애플리케이션 구축으로부터 선언적 컴포넌트 어셈블리로 현재 이동하고 있고, 보다 많은 프레임워크들은 J2EE-관련 표준 및 디자인 패턴의 구현을 위해 통합되어서, 프로그래머들은 코드 작성보다는 비즈니스 문제 해결에 좀 더 집중할 수 있게 되었습니다.

Duncan Mills는 Oracle Application Development Tools 그룹의 제품 관리자로서 Oracle9i JDeveloper와 Oracle9i Forms의 전문가인데 1988년 이후로 DBA 또는 개발자로서 Oracle 제품을 담당해 왔습니다.

멀티 IE

바탕화면

컨디셔널 커맨트 사용하기 - CSS IE, FF 구분 & JS

Item Example Comment
IE [if IE] The only currently supported feature is the string "IE", corresponding to Internet Explorer.
value [if IE 7] An integer or floating point numeral corresponding to the version of the browser. Returns a Boolean value of true if the version number matches the browser version. For more information, see Version Vectors.
! [if !IE] The NOT operator. This is placed immediately in front of the feature, operator, or subexpression to reverse the Boolean meaning of the expression.
lt [if lt IE 5.5] The less-than operator. Returns true if the first argument is less than the second argument.
lte [if lte IE 6] The less-than or equal operator. Returns true if the first argument is less than or equal to the second argument.
gt [if gt IE 5] The greater-than operator. Returns true if the first argument is greater than the second argument.
gte [if gte IE 7]                 The greater-than or equal operator. Returns true if the first argument is greater than or equal to the second argument.
( ) [if !(IE 7)] Subexpression operators. Used in conjunction with boolean operators to create more complex expressions.
& [if (gt IE 5)&(lt IE 7)] The AND operator. Returns true if all subexpressions evaluate to true
| [if (IE 6)|(IE 7)] The OR operator. Returns true if any of the subexpressions evaluates to true.
true [if true] Always evaluates to true.
false [if false] Always evaluates to false.



사용방법 : 아래처럼 IE외 브라우저용 CSS를 사용하고 밑에 IE용 CSS를 사용..
<link rel="stylesheet" type="text/css" href="basic.css" />
<link rel="stylesheet" type="text/css" href="editor.css" />
<link rel="stylesheet" type="text/css" href="post.css" />

<!--[if IE]>
<link rel="stylesheet" type="text/css" href="basic.ie.css" />
<link rel="stylesheet" type="text/css" href="editor.ie.css" />
<link rel="stylesheet" type="text/css" href="post.ie.css" />

<![endif]-->




다른 예제들..

<!--[if IE 5]>
<p>Welcome to Internet Explorer 5.</p>
<![endif]-->



<!--[if gte IE 5]>
<SCRIPT LANGUAGE="Javascript">
alert("Congratulations! You are running Internet Explorer 5 or greater.");
</SCRIPT>
<P>Thank you for closing the message box.</P>
<![endif]-->



<![if lt IE 5]>
<p>Please upgrade to Internet Explorer version 5.</p>
<![endif]>



<!--[if !IE]>--> HTML <!--<![endif]-->



<!--[if IE 7]><!--> HTML <!--<![endif]-->



<!--[if IE 5]>
<p>Welcome to any incremental version of Internet Explorer 5!</p>
<![endif]-->



<!--[if IE 5.0]>
<p>Welcome to Internet Explorer 5.0!</p>
<![endif]-->



<!--[if IE]><p>You are using Internet Explorer.</p><![endif]-->
<![if !IE]><p>You are not using Internet Explorer.</p><![endif]>

<!--[if IE 7]><p>Welcome to Internet Explorer 7!</p><![endif]-->
<!--[if !(IE 7)]><p>You are not using version 7.</p><![endif]-->

<!--[if gte IE 7]><p>You are using IE 7 or greater.</p><![endif]-->
<!--[if (IE 5)]><p>You are using IE 5 (any version).</p><![endif]-->
<!--[if (gte IE 5.5)&(lt IE 7)]><p>You are using IE 5.5 or IE 6.</p><![endif]-->
<!--[if lt IE 5.5]><p>Please upgrade your version of Internet Explorer.</p><![endif]-->

<!--[if true]>You are using an <em>uplevel</em> browser.<![endif]-->
<![if false]>You are using a <em>downlevel</em> browser.<![endif]>

<!--[if true]><![if IE 7]><p>This nested comment is displayed in IE 7.</p><![endif]><![endif]-->


http://msdn2.microsoft.com/en-us/library/ms537512.aspx




JS에서 Conditional Comments 사용하기는 아래 링크..

ex1. var isMSIE/*@cc_on=1@*/;

ex2. var isMSIE = /*@cc_on!@*/false;


http://dean.edwards.name/weblog/2007/03/sniff/

우화는 동물과 인간의 이야기를 말하는 것이 아닌가

하늘은 어떤 사람에게 중대한 일을 맡길 때 반드시 먼저 그 사람의 마음을 괴롭게 만든다. 그 다음으로 근골을 힘들게 하여 자기 힘을 몽땅 써버리게 한다. 또 가진 것을 모두 잃게 만들고 하고자 하는 일이 이루어지지 않도록 한다. 그것은 그 사람의 마음을 분발시켜 강한 인내심을 가지게 하기 위해 일을 이루지 못하게 하는 것이다. 사람은 대체로 잘못을 저질러야 고칠 수 있고, 고통을 느낀 다음에야 분발을 하게 된다. 괴로운 표정이 얼굴에 나타나고, 고통스러운 소리가 입으로 나와야 잘못을 깨우친다.

(맹자)


"넌 공부를 한 사람이다. 사람이란 어려서 배우고 나이 들어 이를 행하는 데 힘쓰라고 했느니..."


"이 산중에는 일을 하고 싶어도 할 것이 없기 때문에 그저 제 본성대로 사람이나 잡아먹으면서 살아왔습니다. 제발 이놈의 죄를 용서해 주시기 바랍니다."


"옛사람들이 말하지 않았느냐? 전도(前途)를 생각하거든 전도를 끊는 일은 하지 말라고. 너는 이미 윤리를 어겼다면서 지금껏 악한 마음을 끊지 못하고 악행을 일삼아 왔다. 그러니 두 가지 죄를 다 벌주지 않으면 안 되겠구나."


"전도! 전도요! 보살님 말씀대로 하려면 저 같은 미물은 바람이나 마시고 사는 것 외에는 달리 살 길이 없습니다.
속담에도 '관법(官法)에 따르면 맞아 죽고 불법(佛法)에 따르면 굶어 죽는다.'고 했습니다.
난 그만 두렵니다. 행인이나 야들야들한 계집을 잡아먹고 사는 것이 훨씬 낫겠어요.
설령 이중, 삼중 아니 천만중의 죄를 짓는다 하더라도 난 겁날 게 없어요!"


"착한 염원을 가지면 하늘은 반드시 들어 주신다. 네가 만약 정과에 귀의한다면 살 길도 열릴 것이다.
더구나 이 세상에는 오곡이라는 것이 있어서 모든 중생을 굶어 죽지 않게 해 주고 있다.
그런데 너는 어째서 하필이면 사람을 잡아먹으면서 살아가려느냐?"


"전 후회하고 있습니다. 제발 자비를 베푸셔서 나아갈 길을 가르쳐 주십시오. 나는 진심으로 수행을 하고 싶습니다."


그리고 그가 노래를 부르니,


'사람이 마음만 굳게 다지면 천지가 다 알아 주느니 선악에 만약 보응이 없다면 천지도 또한 사(私)가 있을지라...'


보살은 이 말을 듣고 매우 기뻤다. "성경(聖經)에 이런 말이 있소. '착한 말이면 천리 밖에서도 이를 들어 주고 악한 말이라면 천리 밖에서도 이를 안 들어준다'고.
그대에게 그런 마음이 있다면 마음의 근본을 깨닫고 일심으로 돌아갈 수 있을 것이오."


아직도 융중에서 잠을 자고 있지만, 뒷날 반드시 그 뜻이 크게 높아질 것이니 이를 소홀히 여기지 마시오. 부디 내 말을 잊지 마시고, 자 그럼 빨리 깨어나시오.


- 천만번 부르는 소리에 천만번 응답하라, 장자처럼 하늘에 가려서 자연에 순응하는 것만 알았지, 인간의 노력으로 이루어지는 일에 대해 알지 못하는 이는 되지 말라. 약자가 강자를 이길 수 있는 것은 천시나 맹목적인 낭만론 때문이 아니라 인간의 노력과 지혜와 계모 때문이다. -



prev 1 2 3 4 ··· 9 next