89
1 용용 HTTP [hypertext transfer protocol] 용용용용용 , 용 용용용 용용용용 용용용 용용용용 용용용 용용용 용용용용 용용 용용용용 용용 용용용 용용용 . 용용용용 [protocol] 용용용용용 용용용 용용용용 용용 용용용용용 용용 용용용 용용 . 용용용용용용 [world wide web] 용용용용용용 용용용 용용 용용 용 용용용 용용용 용용 용용 용용용용 용용용용 . 용용용 [internet] 용용용용용 (ARPANET) 용용 용용용 용용 용용 용용용 용용용 용용용 . 용용용용 [intranet] 용용용 용용용 용용용용용 용용용용 용용용용용 용용용 용용용용 용용용용용 . URL [uniform resource locator] 용 용용용 용용 용용용용 용용용용 용용용용 용용 용용용 용용용 용용용용 용용용 용용용 . URL 용 용용용용 용용용용 용용용용 용 용용용용 용용 용용용용 용용용 용용용용 용용 용용용 용용용용 용 용용용용 용용 , 용용용 용용 ( 용용용 용용 ), 용용용 용용용 용용용용 . 용용용용 용용 (syntax) 용 용용용용 :// 용용용 용용 용용용 용용 / 용용용용 용용 / 용용 용용용용 용용용용 . FTP [file transfer protocol] 용용용용 용용 용 용용용용용 용용 용용용용 용용용 용용용 용 용용용 용용 용용용 , 용용 용용용용용 용용 용용용 용용용 .

HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

Embed Size (px)

DESCRIPTION

용어. HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다 . 프로토콜 [protocol] 컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속 . 월드와이드웹 [world wide web] 인터넷망에서 정보를 쉽게 찾을 수 있도록 고안된 방법 또는 세계적인 인터넷망 . 인터넷 [internet] 아르파네트 (ARPANET) 에서 시작된 세계 최대 규모의 컴퓨터 통신망 . - PowerPoint PPT Presentation

Citation preview

Page 1: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

1

용어

HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다 .

프로토콜 [protocol] 컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속 .

월드와이드웹 [world wide web] 인터넷망에서 정보를 쉽게 찾을 수 있도록 고안된 방법 또는 세계적인 인터넷망 .

인터넷 [internet] 아르파네트 (ARPANET) 에서 시작된 세계 최대 규모의 컴퓨터 통신망 .

인트라넷 [intranet] 인터넷 기술과 통신규약을 이용하여 조직내부의 업무를 통합하는 정보시스템 .

URL [uniform resource locator] 웹 문서의 각종 서비스를 제공하는 서버들에 있는 파일의 위치를 표시하는 표준을 말한다 . URL 은 웹상에서 서비스를 제공하는 각 서버들에 있는 파일들의 위치를 명시하기 위한 것으로 접속해야 될 서비스의 종류 , 서버의 위치 ( 도메인 네임 ), 파일의 위치를 포함한다 . 일반적인 체계 (syntax) 는 프로토콜 :// 정보를 가진 컴퓨터 이름 /디렉터리 이름 / 파일 네임으로 구성된다 .

FTP [file transfer protocol] 인터넷을 통해 한 컴퓨터에서 다른 컴퓨터로 파일을 전송할 수 있도록 하는 방법과 , 그런 프로그램을 모두 일컫는 말이다 .

Page 2: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

2

용어

텔넷 [telecommunication network] 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜 .

URI (Uniform Resource Identifier)인터넷에 있는 자원을 나타내는 유일한 주소이다 . URI 의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어다닌다 . URI 는 다음과 같은 요소로 구성된다 .프로토콜 (HTTP 혹은 FTP) + : + // + 호스트이름 + 주소예 : http://ko.wikipedia.orgURI 의 하위개념으로 URL, URN 이 있다 .

HTML [ Hyper Text Markup Language ]하이퍼텍스트의 구조를 서술하는 일종의 컴퓨터 언어 . 직접 프로그램을 제작하는 데 사용되는 C 나 PASCAL 과 달리 웹에서 사용되는 각각의 하이퍼텍스트문서로 사용되는 각각의 하이퍼텍스트 문서를 작성하는 데 사용된다 . 넷스케이프 등과 같은 웹 브라우저는 이 HTML 파일을 받아다 하이퍼텍스트 파일을 구성해 놓은 것으로 우리가 인터넷에서 볼 수 있는 수많은 홈페이지들은 기본적으로 HTML 이라는 언어를 사용하여 구현된 것이다 . HTTPS [ hypertext transfer protocol over Secure Sockets Layer, HTTP over SSL ]월드 와이드 웹 통신 프로토콜인 HTTP 의 보안이 강화된 버전이다 . HTTPS 는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발했으며 , 전자 상거래에서 널리 쓰인다 .HTTPS 는 소켓 통신에서 일반 텍스트를 이용하는 대신에 , SSL 이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다 . 따라서 데이터의 적절한 보호를 보장한다 . HTTPS 의 기본 TCP/IP 포트는 443 이다 .보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어 , 지원하는 암호화 알고리즘에 달려있다 .HTTPS 를 사용하는 웹페이지의 URL 은 'http://' 대신 'https://' 로 시작한다 .

Page 3: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

3

용어

SSL [secure sockets layer] 인터넷 상거래시 필요한 개인 정보를 보호하기 위한 , 개인 정보 유지 프로토콜이다 .인터넷 프로토콜 (Internet protocol) 이 보안면에서 기밀성을 유지하지 못한다는 문제를 극복하기 위해 개발되었다 . 현재 전세계에서 사용되는 인터넷 상거래시 요구되는 개인 정보와 크레디트카드 정보의 보안 유지에 가장 많이 사용되고 있는 프로토콜이다 . 최종 사용자와 가맹점간의 지불 정보 보안에 관한 프로토콜이라고 할 수 있다 .

XML [extensible markup language] 인터넷 웹페이지를 만드는 HTML 을 획기적으로 개선하여 만든 언어이다 . 홈페이지 구축기능 , 검색기능 등이 향상되었고 , 웹 페이지의 추가와 작성이 편리해졌다 .확장성 생성 언어 (擴張性生成言語 ) 로 번역되며 , 1996 년 W3C(World Wide Web Consortium) 에서 제안하였다 . HTML 보다 홈페이지 구축 기능 , 검색 기능 등이 향상되었고 클라이언트 시스템의 복잡한 데이터 처리를 쉽게 한다 . 또한 인터넷 사용자가 웹에 추가할 내용을 작성 , 관리하기에 쉽게 되어 있다 . 이밖에 HTML 은 웹 페이지에서 데이터베이스처럼 구조화된 데이터를 지원할 수 없지만 XML 은 사용자가 구조화된 데이터베이스를 뜻대로 조작할 수 있다 . 구조적으로 XML 문서들은 SGML(standard generalized markup language) 문서 형식을 따르고 있다 . XML 은 SGML 의 부분집합이라고도 할 수 있기 때문에 응용판 또는 축약된 형식의 SGML 이라고 볼 수 있다 . 1997년부터 마이크로소프트사 (社 ) 와 넷스케이프 커뮤니케이션스사 (社 ) 가 XML 을 지원하는 브라우저 개발을 하고 있다 .

SGML [Standard Generalized Markup Language] 전자문서가 어떠한 시스템 환경에서도 정보의 손실 없이 전송 , 저장 , 자동처리가 가능하도록 국제표준화기구 (ISO) 에서 정한 문서처리 표준이다 .웹문서를 만드는 언어로 가장 보편적인 HTML 과 차세대 인터넷표준언어로 채택된 XML 은 모두 SGML 에 근거하여 만들어진 것이다 .

Page 4: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

4

용어

애플릿 [applet] Java 언어로 구성된 간단한 기능의 소규모 프로그램을 의미하거나 웹 페이지에 포함되어 작은 기능을 수행하는 프로그램을 말한다 . 용량과 속도에 구애 받지 않고 서버에 대한 별도의 요청 없이 단순한 작업을 수행한다 .애플릿은 Java 언어로 구성된 작은 응용 프로그램을 의미한다 . Java 언어는 인터넷 기반의 언어이므로 용량과 속도의 한계로 프로그램을 크게 만들 필요가 없으므로 소규모 애니메이션 , 그림 그리기 , 날씨 변화 표시하기 , 주가정보 표시 등의 간단한 기능을 처리하는 작은 프로그램을 만들어 사용하는 데 이를 의미한다 .월드 와이드 웹이 나오기 이전에도 윈도와 함께 기본으로 제공되던 작은 프로그램들 , 예를 들어 메모장이나 그림 그리기 등을 '애플릿 ' 이라고 부른 적이 있었다 .

디버그 [debug] 프로그램의 개발 마지막 단계에서 , 프로그램의 오류를 발견하고 그 원인을 밝히는 작업 또는 그 프로그램을 말한다 . 오류 수정 작업은 디버깅 (debugging), 오류 수정 소프트웨어는 디버거 (debugger) 라고 한다 .

객체지향프로그래밍 [object-oriented programming] 모든 데이터를 오브젝트 (object; 물체 ) 로 취급하여 프로그래밍 하는 방법으로 , 처리 요구를 받은 객체가 자기 자신의 안에 있는 내용을 가지고 처리하는 방식이다 .

XSL 변환 [ XSLT, XSL Transformation, - 變換 ]확장성 생성 언어 (XML) 문서 형식을 다른 형식의 문서로 변환하는 방법을 기술한 표준 방법 . 확장 스타일시트 언어 (XSL) 의 확장으로서 XML 문서가 다른 데이터 형식으로 재구성되는 방법을 보여준다 . XSLT 부호화를 스타일시트라 부르기도 하고 , XSL 스타일시트와 같이 사용하거나 독립적으로 사용된다 . →확장성 스타일시트 언어 . ;

CSS [cascading style sheets] 웹 문서의 전반적인 스타일을 미리 저장해 둔 스타일시트이다 . 문서 전체의 일관성을 유지할 수 있고 , 세세한 스타일 지정의 필요를 줄어들게 하였다 .

Page 5: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

5

FORM

<form name="" action="" method="post" target="_self"><input name="" type="text" tabindex="1" align="left" disabled maxlength="10" size="10"><br/><input name="" type="text" readonly tabindex="2" onKeyUp="" onFocus=""><br/><input name="" type="password" onFocus="" onKeyDown=""><br/><input name="" type="radio" value="A" checked>A <input name="" type="radio" value="B">B <input name="" type="radio" value="C">C<br/><select name="select" onChange=""> <option value="O">O</option> <option value="X" selected>X</option></select><select name="" size="5" multiple onChange=""> <option value="O">O</option> <option value="X">X</option> <option value="" selected></option></select><br/><input name="" type="image" usemap="" border="" align="middle" onBlur="" onClick=""><br/><input name="" type="hidden" value=""><br/><input name="" type="file" onChange=""><br/><input name="" id="" type="checkbox" value="A" onClick="" checked>A <input name="" id="" type="checkbox" value="B" onCli

ck="">B <input name="" id="" type="checkbox" value="C" onClick="">C<br/><input name="" type="button" onClick=""><br/><input name="" type="submit"><br/><input name="" type="reset"><br/><textarea name="" cols="" rows="" onFocus=""></textarea></form>

Page 6: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

6

과제 - 회원가입

* 필수입력체크1.입력에 포커스에 있을 때 바탕 색을 노랑색으로 변경 .포커스 떠나면 횐색2. 이름 입력 시 한글모드 , 공백제거3. 아이디 영문 +숫자 (한글입력 안됨 ) 8자리 이상 ~10자리4. 주민번호 6자리 입력하면 포커스 옆으로 이동5. 주민번호 7 번째 입력 시 남 / 여 자동 체크6. 저장 버튼 클릭시 이메일 @ 존재 확인하고 없으면 경고창 띄우고 포커스 줌7. 전화번호 서비스번호 변경되면 포커스 옆으로 이동 , 국번 4 자리 입력하면 포커스이동8. 저장 버튼 클릭 시 필수입력 체크9. 비밀번호 8자리 ~10자리

* 이름

주민번호

이메일

전화 - -

-

* 아이디

* 비밀번호

성별 여남

저장 초기화

Page 7: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

7

용어

CVS (Concurrent Versions System, 동시 버전 시스템 )동시 버전 관리 시스템 (Concurrent Versioning System) 으로도 알려져 있으며 , 버전 관리 시스템을 구현한다 . 보통 소프트웨어 프로젝트를 진행할 때 , 파일로 이뤄진 모든 작업과 모든 변화를 추적하고 , 여러 개발자 ( 지역적으로 떨어진 ) 가 협력하여 작업할 수 있게 한다 . CVS 는 GNU 일반 공중 사용 허가서 하에서 배포된다 . CVS 는 오픈 소스 프로젝트에서 널리 사용되었다 . 현재는 CVS 가 한계를 맞아 , CVS 를 대체하는 서브버전이 개발되었다 .CVS 로 관리되는 하나의 프로젝트 (관련된 파일의 집합 ) 를 모듈이라 부른다 . CVS 서버는 보관소에 모듈을 저장한다 . 모듈의 복사본을 얻는 것은 체크 아웃 (checking-out) 이라 한다 . 체크 아웃된 파일은 작업 중인 복사본으로 관리된다 . 이 복사본을 바꾸려면 커밋 (commit) 하여 보관소에 넣어야 한다 . 업데이트 (update) 는 작업 중인 복사본이 있는 보관소에서 최근에 변경된 사항을 얻는다 .

SVN서브버전 (Subversion) 은 자유 소프트웨어 버전 관리 시스템이다 . 명령행 인터페이스에서 사용하는 명령어를 따서 “ SVN”이라고 줄여서 부르기도 한다 . 제한이 있던 CVS 를 대체하기 위해 2000 년부터 콜랩넷에서 개발되었다 .

CVS 와 비교했을 때 , 서브 버전은 다음과 같은 장점을 가진다 .원자적으로 쓰기를 지원하므로 , 다른 사용자의 쓰기와 엉키지 않는다 .이름을 바꾸거나 , 복사하거나 , 파일을 지워도 리비전 기록을 유지한다 .이진 파일의 경우 한번 저장한 후 변경될 경우 차이점만 저장하기 때문에 저장소를 효율적으로 사용할 수 있다 .디렉터리도 버전 관리를 할 수 있다 . 디렉터리 전체를 빠르게 옮기거나 복사할 수 있으며 , 리비전 기록도 그대로 유지한다 .소스 저장고의 크기에 상관 없이 일정한 시간 안에 가지 치기 (branching) 나 테그 넣기 (tagging) 를 할 수 있다 .소스 저장고로의 접근이 최적화되어 있으므로 , 소스 저장고에서 필요 없는 네트워크 트래픽을 줄일 수 있다 .

Page 8: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

8

용어

웹서버 [ Web Server ]웹 페이지 (HTML 파일 ) 를 제공해 주는 서버를 말하는 것으로 HTTP 를 사용하여 웹 페이지를 제공할 수 있는 웹 서버 프로그램이 설치되어 있고 하나의 도메인 이름을 갖고 있다 . 예를 들어 , 사용자가 웹 브라우저에서 URL 로 'http://epic.kdi.re.kr' 를 입력하면 , 도메인 이름이 'epic.kdi.re.kr' 인 서버에게 웹 페이지를 요청하고 서버는 'index.html' 파일을 찾아서 브라우저에게 보낸다 . 따라서 , 가장 일반적인 웹 서버로는 UNIX기반의 아파치 , WINDOW NT 의 IIS, 넷스케이프의 엔터프라이즈 서버가 있다 .

웹 애플리케이션 서버웹 애플리케이션 서버 (Web Application Server, 약자 WAS) 는 인터넷 상에서 HTTP 를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어 ( 소프트웨어 엔진 ) 이다 .웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며 , 주로 데이터베이스 서버와 같이 수행이 된다 . 한국에서는 일반적으로 "WAS" 또는 "WAS S/W"로 통칭하고 있으며 공공기관에서는 "웹 응용서버 "로 사용되고 , 영어권에서는 "Application Server"로 불린다 .웹 애플리케이션 서버는 대부분이 자바 기반으로 주로 Java EE 표준을 수용하고 있으나 , 자바 기반이지만 Java EE 표준을 따르지 않는 제품과 .NET 이나 Citrix 기반인 비 Java 계열도 존재한다 .

웹 애플리케이션 서버의 기본 기능은 3 가지이다 .프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다 .여러 개의 트랜잭션을 관리한다 .업무를 처리하는 비즈니스 로직을 수행한다 .

Java EE 표준준수 웹 애플리케이션 서버제우스 ( 한국 , 티맥스소프트 , 상용 ) 웹로직 (미국 , 오라클 , 상용 ) 웹스피어 (미국 , IBM, 상용 ) 레진 (미국 , Caucho, 상용 )글래스피시 (미국 , 오라클 , 오픈소스 ) 제이보스 (미국 , 레드햇 , 오픈소스 ) 인터스테이지 ( 일본 , 후지쯔 , 상용 )

Java 기반이나 Java EE 비준수 웹 애플리케이션 서버아파치 톰캣 (Apache Tomcat) : 오픈소스재단 아파치 소프트웨어 재단의 오픈소스 소프트웨어레진 (Resin) : Caucho 사의 제품 , 제이런 (JRun) : macromedia 사의 제품

Page 9: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

9

개발환경

1. JDK 6 설치2. Tomcat 6 설치3. 환경변수 추가4. eclipse 설치5. c:/workspace 생성6. eclipse

help>Install New Software...Subversive SVN Connectorshttp://community.polarion.com/projects/subversive/download/eclipse/2.0/galileo-site/

7. tomcat plugin 설치 (eclipse>plugin>tomcatPluginV321.zip)8. 톰캣 lib 복사9. 네이버 SVN checkout 다이나믹 프로젝트로 생성 한후에

Window>profer...>team>cvs>ingno...> .class, .project, .classpath, .settings, classes10. 수정

tomcat 6.0/conf/ Catalina/ localhost/ROOT.xml

CATALINA_HOME : C:\Tomcat 6.0classpath : .;C:\Tomcat 6.0\lib\servlet-api.jarPath : %CATALINA_HOME%\bin; 추가

<?xml version="1.0" encoding="UTF-8"?><Context path="/" docBase="c:\workspace2\education\WebContent\" debug="0" privileged="true" reloadable="true"></Context>

Page 10: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

10

자바스크립트

윈도우 오픈 (팝업 )window.open("파일명 ","target","width=크기 ,height=크기 ,left=위치 ,top=위치 , directories=yn,copyHistory=yn,location=yn,resizable=yn,scrollbars=yn,status=yn,toolbar=yn"); width=크기 -> 새윈도우의 폭 , height=크기 -> 새윈도우의 높이left=위치 -> 윈도우의 위치를 왼쪽 끝을 기준 , top=위치 -> 윈도우의 위치를 위쪽 끝을 기준directories=yn -> 디렉토리 버튼을 보여준다 . (연결 )익스플로러 연결도구모음 , 익스플로러 전용 yew||nocopyHistory=yn -> 윈도우의 히스토리를 복사location=yn -> 주소 입력창 , resizable=yn -> 사용자가 윈도우의 크기를 조정 유무 , scrollbars=yn -> 스크롤바 사용 유무status=yn -> 상태 표시줄 , toolbar=yn -> 툴바window.close; -> 창닫기

이벤트 핸들러 (Event Handlers) HTML 코드에 내장되는 자바스크립트 명령어다 . 사용자와 웹 페이지 사이의 상호 작용을 위해 HTML 코드와 함께 사용된다 .onBlur : 사용자가 select, text, textarea 폼 요소에 있다가 그 요소에서 벗어나게 될 때 발생하는 이벤트 핸들러이다 . 즉 , 사용자가 그 아이템에 대한 포커스를 잃을 때 발생한다 .onChange : 사용자가 select, text, textarea 폼 요소에 있는 텍스트를 변경한 후 그 요소를 떠날 때 발생하게 된다 .onClick : 사용자가 링크와 같은 오브젝트를 클릭할 때 발생한다 .onFocus : 사용자가 select, text, textarea 폼 요소를 선택할 때 발생한다 . 즉 사용자가 그 폼 요소에 포커스를 맞출 때 발생한다 .onLoad : 웹 페이지가 열릴 때 발생하는 이벤트로 HTML 의 BODY 태그 안에서 사용된다 .onMouseOver : 사용자가 링크 위에 마우스를 올려 놓았을 때 발생하는 이벤트 핸들러이다 .onSelect : 사용자가 text, textarea 폼 요소에 있는 텍스트의 일부 또는 전체를 선택할 때 발생한다 .onSubmit : submit 버튼 폼 요소를 사용자가 틀릭할 때 발생한다 .onUnLoad : 사용자가 웹 페이지를 떠날 때 발생하는 이벤트로 HTML 의 BODY 태그 안에서 사용된다 .

Page 11: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

11

자바스크립트

제어 문if( 비교값 1){ 처리내용 1}elseif( 비교값 2){ 처리내용 2}else{비교값 3};논리연산자 && (AND), || (OR), ! (NOT)연산기호 ==,<,>,<=,>=,!=

반복 문for(i=0;i<5;i++){ 처리내용 }while(i<5){ 처리내용 };

날짜관련var myDate = new Date();var myDate = new Date(949278000000);var myDate = new Date("1 jan 2003");var myDate = new Date(2000,0,31,15,35,20,20); 2000 년 1월 31일 35 분 20 초 20밀리getDate() -> myDate.getDate(); 날짜를 반환getDay() -> myDate.getDay(); 요일을 정수로 반환getMonth() -> myDate.getMonth(); 월을 정수로 반환getFullYear() -> myDate.getFullYear; 년을 네 자리 수로 반환setDate() -> myDate.setDate(27); 날짜를 설정setMonth() -> myDate.Month(1); 월을 설정setFullYear() -> myDate.setFullYear(2003); 년을 설정myDate.getHours(); 시간myDate.getMinutes(); 분myDate.getSeconds(); 초myDate.getMilliseconds; 밀리

Page 12: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

12

자바스크립트

문자관련isNaN(변수 ); -> 숫자 false 문자 truelength -> 문자열의 길이myArray.length; -> 변수길이myArray.sort();var myString = new String("나는 String 개체입니다 ");var lengthOfString = myString.length;charAt( 위치값 ) -> 문자열에서 한문자 선택charCodeAt( 위치값 ) -> 문자열에 한문자 코드값myString = String.fromCharCode(65,66,67); -> 문자 코드를 문자열로 변환 (ABC)indexOf('앞부분 부터 찾을문자 ');lastIndexOf('뒷부분 부터 찾을 문자 ') -> 문자열의 위치를 반환 , 없을 경우 -1반환substr( 시작위치 , 복사할문자수 ); -> 문자열의 일부분 복사하기substring( 시작위치 ,끝위치 );myDate.toString(); -> 숫자를 문자열로 반환myString.toLowerCase(); -> 문자열의 소문자 변환myString.toUpperCase(); -> 문자열의 대문자 변환

알림 창window.alert(' 내용 '); //경고창prompt(' 내용 ',초기값 ); //입력값 받기confirm(' 내용 '); // 확인 ,취소print(); // 현 윈도우를 인쇄하고자 할 때

Page 13: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

13

자바스크립트 예제

<script type="text/javascript">function setVisible(divname){document.getElementById(divname).style.display = "";}function setHide(divname){document.getElementById(divname).style.display = "none";}</script>

<input type="button" name="btn_div" value=" 보이기 " onClick="javascript:setVisible('test_div')"/><input type="button" name="btn_div" value=" 감추기 " onClick="javascript:setHide('test_div')"/>

<div id="test_div" style="display:none">여기는 KGIT 8 층입니다 .</div>

Page 14: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

14

자바스크립트 예제

<script type="text/javascript">var idx = 1;function setAdd(divname){idx ++;document.getElementById(divname).outerHTML = "<div id='div"+idx+"'>"+ "<input type='text' name=\"person_name\"/>"+ " <input type='button' name='minus' value='-' onClick=\"javascript:setDel('div"+idx+"')\"/></div>"+"<div id=\"test_div\"></div>";}

function setDel(tname){document.getElementById(tname).outerHTML = "";}</script>

<input type="button" name="btn_div" value=" 추가 " onClick="javascript:setAdd('test_div')"/>

<div id="div1"><input type="text" name="person_name"/><input type="button" name="minus" value="-" onClick="javascript:setDel('div1')"/></div><div id="test_div"></div>

Page 15: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

15

자바스크립트 예제

<script type="text/javascript">function checkAll(bool) {var chks = document.getElementsByName("chk");for(var i=0;i<chks.length;i++) {if(chks[i].type == "checkbox") chks[i].checked = bool;}}</script>

<input type="checkbox" name="chkAll" onclick="javascript:checkAll(this.checked);">전체 <br/><br/><input type="checkbox" name="chk" value="A">A&nbsp;&nbsp;<input type="checkbox" name="chk" value="B">B&nbsp;&nbsp;<input type="checkbox" name="chk" value="C">C&nbsp;&nbsp;

Page 16: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

16

용어

AJAXWEB2.0 의 기반 기술 중 하나이다 . AJAX 는 자체가 하나의 특정한 기술을 말하는 것이 아니며 , 함께 사용하는 기술의 묶음을 지칭하는 용어로 대화식 웹 애플리케이션의 제작을 위해 사용된다 . AJAX 애플리케이션은 실행을 위한 플랫폼으로 사용되는 기술들을 지원하는 웹 브라우저를 이용하는데 , 이를 지원하는 브라우저로는 모질라 파이어폭스 , 인터넷 익스플로러 , 오페라 , 사파리 등이 있다 .현재 대화형 웹 페이지를 위한 도구로서 Ajax 를 이용하는 애플리케이션들이 급격히 늘어나고 있으며 , 이는 부분적으로 이용할 수 있는 애플리케이션 툴 킷 ( 예 : Ruby on Rails, DWR) 이 늘어나 프로그래머들이 구현하기가 쉬워진 때문이다 .

장점페이지 이동 없이 고속으로 화면을 전환할 수 있다 .서버 처리를 기다리지 않고 , 비 동기 요청이 가능하다 .수신하는 데이터 량을 줄일 수 있고 , 클라이언트에게 처리를 위임할 수도 있다 .

단점Ajax 를 쓸 수 없는 브라우저에 대한 문제가 있다 .Http 클라이언트의 기능이 한정되어 있다 .페이지 이동 없는 통신으로 인한 보안상의 문제지원하는 Charset 한정되어 있다 .스크립트로 작성되므로 Debugging 이 용이하지 않다 .요청을 남발하면 역으로 서버 부하가 늘 수 있음 .

Page 17: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

17

XML/XSL/DTD

200234-250537.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE press SYSTEM "200234-250537.dtd"><!-- XSL 문서 적용 <?xml-stylesheet type="text/xsl" href="200234-250537.xsl"?>--><press> <category id="정치면 "> <news> <headline>기사제목 </headline> <subject>' 예산 삭감 논란 ' 에 종지부 </subject> <date>2008 년 10월 24 일 (금 )</date> <content>기사내용 .....</content> <picture> <img src="banq.jpg"/> </picture> <write> <position>서울 =연합뉴스 </position> <name>이승관 </name> <email>[email protected]</email> </write> </news> </category> // category 반복</press>

200234-250537.dtd <?xml version="1.0" encoding="utf-8"?><!ELEMENT press (category*)><!ELEMENT category (news*)><!ELEMENT news (headline,subject,date,content,picture,write)><!ELEMENT write (position,name,email)><!ELEMENT headline (#PCDATA)><!ELEMENT subject (#PCDATA)><!ELEMENT date (#PCDATA)><!ELEMENT content (#PCDATA)><!ELEMENT picture (img)><!ELEMENT position (#PCDATA)><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)><!ELEMENT img (#PCDATA)><!ATTLIST category id CDATA #REQUIRED><!ATTLIST img src CDATA #REQUIRED>

Page 18: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

18

XML/XSL/DTD

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><!-- start template rule --><xsl:output method="html" encoding="euc-kr"/>

<xsl:template match="/"> <html> <head> <title>200234-250537</title> <link href="200234-250537.css" rel="stylesheet" type="text/css"/> </head> <body> <table width="600" border="0" cellspacing="0" cellpadding="0"> <xsl:apply-templates select="/press/category"/> </table> </body> </html></xsl:template>

<xsl:template match="category"> <tr> <td class="category_text"><xsl:value-of select="@id"/></td> </tr> <xsl:apply-templates select="news"/></xsl:template>

Page 19: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

19

XML/XSL/DTD

<xsl:template match="news"> <tr> <td> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="200" valign="middle"> <xsl:variable name="vImg"><xsl:value-of select="picture/img/@src"/></xsl:variable> <img src="{$vImg}" width="200"/> </td> <td width="5"></td> <td valign="top"> <span class="headline_text"><xsl:value-of select="headline"/></span><br/> <span class="subject_text"><xsl:value-of select="subject"/></span><br/> <span class="content_text"><xsl:value-of select="content"/></span><br/> <span class="write_text"><xsl:value-of select="date"/></span><br/> <span class="write_text"> <xsl:value-of select="write/position"/> / <xsl:value-of select="write/name"/> (<xsl:value-of select="write/

email"/>)</span> </td> </tr> </table> </td> </tr> <tr><td height="5"></td></tr></xsl:template></xsl:stylesheet>

Page 20: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

20

TEST

하이퍼텍스트의 구조를 서술하는 일종의 컴퓨터 언어 ?

SGML 에 근거하여 정의 , 구조화된 데이터베이스를 뜻대로 조작할 수 있는 차세대 인터넷표준언어 ?

전자문서가 어떠한 시스템 환경에서도 정보의 손실 없이 전송 , 저장 , 자동처리가 가능하도록 국제표준화기구 (ISO) 에서 정한 문서처리 표준언어 ?

확장성 생성 언어 (XML) 문서 형식을 다른 형식의 문서로 변환하는 방법을 기술한 표준 방법 ?

웹 애플리케이션 서버 (Web Application Server, 약자 WAS) 종류 아는 대로 쓰시오 .

월드 와이드 웹 통신 프로토콜인 HTTP 의 보안이 강화된 버전 ?

현재 전세계에서 사용되는 인터넷 상거래시 요구되는 개인 정보와 크레디트카드 정보의 보안 유지에 가장 많이 사용되고 있는 프로토콜 ?

HTTP 를 사용하여 웹 페이지를 제공할 수 있는 웹서버 종류 아는 대로 쓰시오 .

폼 요소에 있는 텍스트를 변경한 후 그 요소를 떠날 때 발생하는 이벤트 명 ?

자바스크립트 내장함수 중 isNaN(변수 ) 의 리턴값으로 변수가 숫자일때 리턴값은 ?

자바스크립트 내장함수 중 alert() 과는 다르게 사용자에게 질문하는데 사용되며 사용자는 true 또는 false 를 리턴한다 . 해당 함수는 ?

Page 21: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

21

TEST

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE press SYSTEM "200234-250537.dtd"><presses> <category name="정치면 "> <news> <headline>기사제목 </headline> <subject>' 예산 삭감 논란 ' 에 종지부 <subject> <date>2008 년 10월 24 일 (금 )</date> <content>기사내용 .....</content> <picture src="banq.jpg"> <write> <position>서울 =연합뉴스 </position> <name>이승관 </name> <email>[email protected]</email> </write> </news> </Category></presses>

<?xml version="1.0" encoding="utf-8"?><!ELEMENT press (category*)><!ELEMENT category (news*)><!ELEMENT news (headline,subject,date,content,picture,write)><!ELEMENT write (position,name,email)><!ELEMENT headline (#PCDATA)><!ELEMENT subject (#PCDATA)><!ELEMENT date (#PCDATA)><!ELEMENT content (#PCDATA)><!ELEMENT picture (#PCDATA)><!ELEMENT position (#PCDATA)><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)><!ATTLIST category id CDATA #REQUIRED><!ATTLIST picture src CDATA #REQUIRED>

왼쪽의 dtd 를 기준으로 xml 의 잘못된 부분 5개를 고쳐주세요

Page 22: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

22

JAVASE 1.6

한글 API 1.6 SE - http://pllab.kw.ac.kr/javaSE6APIs/api/index.html

http://download.oracle.com/javase/6/docs/

Page 23: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

23

자바란 ?

자바는 특별히 인터넷의 분산환경에서 사용되도록 설계된 프로그래밍 언어이다 . 자바는 C++ 언어처럼 보이지만 , C++ 보다는 사용하기에 간단하고 프로그래밍의 완전한 객체지향성을 강화하였다 . 자바는 한 대의 컴퓨터나 , 네트웍 상의 분산 클라이언트 /서버 환경에서도 실행되는 응용프로그램을 만드는데 모두 사용될 수 있다 . 이것은 또한 웹페이지의 일부로서 쓰이는 작은 응용프로그램 모듈이나 애플릿 등을 만드는 데에도 사용될 수 있다 . 애플릿들은 사용자들이 웹페이지를 통해 상호작용을 할 수 있도록 해준다 . 자바의 주요 특성들을 요약하면 다음과 같다 .

▶사용자가 만드는 프로그램들은 네트웍 상에서 쉽게 이식이 가능하다 . 사용자가 개발한 프로그램은 자바 가상머신이 설치된 서버나 클라이언트 등 네트웍의 어디에서든지 실행될 수 있도록 , 자바 바이트코드로 컴파일된다 . 자바 가상머신은 바이트코드를 실제 컴퓨터 하드웨어에서 실행될 수 있는 코드로 해석한다 . 이것은 명령어의 길이 등 , 개별 컴퓨터 플랫폼간의 차이가 인식되고 , 프로그램이 실행되어지고 있는 바로 그 위치에서 국부적으로 조정될 수 있다는 것을 의미한다 . 특정한 플랫폼에 맞는 프로그램 버전은 더 이상 필요하지 않다 . ▶ 자바코드는 " 튼튼하다 ". 즉 , 이것은 C++ 나 기타 다른 언어로 작성된 프로그램들과는 달리 , 자바 객체들은 외부 데이터로부터 내부 또는 알려진 다른 객체들로 향하는 참조를 포함하지 않을 수 있다는 것을 의미한다 . 이것은 명령어가 다른 응용프로그램이나 운영체계 그 자체 내에 있는 데이터 저장소의 주소를 포함하지 않음을 보장함으로써 , 그 프로그램이나 운영체계의 실행이 중단되거나 고장을 일으키지 않게 한다 . 자바 가상머신은 각 객체에 대해 무결성을 보장하기 위해 여러 번의 검사를 실시한다 . ▶자바는 객체지향적이다 . 이는 다른 특성들 가운데 , 비슷한 객체들은 같은 클래스의 일부가 되고 공통 코드를 상속하는 등의 장점을 취할 수 있다는 것을 의미한다 . 객체들은 전통적이고 절차적인 " 동사 "와 관계 있기보다 , 사용자에게 "명사 "와 관계 있는 것으로 생각하게 한다 . 메쏘드는 객체의 능력이나 행동 중의 하나로 생각할 수 있다 . ▶ 서버가 아닌 클라이언트에서 실행되는 것 외에도 , 자바 애플릿은 빠르게 실행되기 위해 설계된 다른 특성들을 가진다 . ▶ C++ 에 비해 자바는 배우기 쉽다 ( 그러나 , 물론 하룻밤새 배울 수 있는 것은 아니다 ).

자바는 1995 년에 썬마이크로시스템즈에 의해 소개되었으며 , 그 즉시 웹의 대화형 가능성에 대해 새로운 의미를 창출하였다 . 주요 웹브라우저들은 모두 자바 가상머신을 포함한다 . IBM, 마이크로소프트 등 거의 모든 주요 운영체계 개발자들이 자신들의 제품에 자바 컴파일러를 추가하였다 . 자바 가상머신은 한번에 하나의 바이트코드 명령어를 해석하는 대신 , 바이트코드를 동적으로 컴파일하여 실행코드로 만드는 JIT 컴파일러를 선택적으로 포함할 수 있다 . 많은 경우에서 , 동적 JIT 컴파일이 가상머신 해석보다 더 빠르다 .

Page 24: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

24

자바의 특징

플랫폼 독립성자바의 가장 큰 특징은 플랫폼 독립성을 갖고 있다는 점이다 .자바로 프로그램을 작성하면 한번 만들어진 자바 프로그램은 운영체제나 CPU 타입에 상관없이 프로그램이 동작될 수 있다 .(Write Once, Run Anywhere.)이것은 자바가상머신 (JVM: Java Virtual Machine) 이 자바로 작성된 프로그램에게 동일한 실행환경을 제공하기 때문이다 . 객체지향 언어객체지향 프로그래밍 기법은 기존의 구조적 프로그래밍 방식을 획기적으로 개선한 뛰어난 프로그래밍 기법이다 .이 기법은 재사용성이나 프로그램의 생산성 측면에서 놀라운 기능을 제공한다 . 멀티 쓰레드 지원쓰레드란 프로그램 안에서 독립적으로 실행되는 작은 실행단위라고 할 수 있다 .이 쓰레드는 하나의 프로그램 안에서 같이 실행되기 때문에 메모리 공유가 가능하면서 프로그램이 효율적으로 실행될 수 있도록 해준다 . 자동 메모리 관리자바가상머신이 자동적으로 사용되지 않는 메모리 영역을 찾아서 해제해준다 .

Page 25: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

25

자바 Edition

자바 플랫폼 스탠더드 에디션 (Java Platform, Standard Edition, 약자 Java SE)자바 플랫폼에서 가장 널리 쓰이는 자바 API 의 집합체이다 . 예전에는 J2SE 로 불리었으나 버전 6.0이후에 Java SE 로 변경되었다 . 이전에는 썬 마이크로시스템즈에서 관리하였으나 , J2SE 1.4 이후는 JCP 주도하에 개발되고 있다 . 따라서 , JSR 59에는 J2SE 1.4 를 , JSR 176에는 J2SE 5.0( 프로젝트명 타이거 ) 를 , Java SE 6 ( 프로젝트명 무스탕 ) 은 JSR 170 하에 개발되었다 .

자바 플랫폼 , 마이크로 에디션 (Java Platform, Micro Edition) Java 2 Platform, Micro Edition 라고도 불리며 , Java ME 혹은 J2ME 등으로도 널리 알려져 있다 . 제한된 자원을 가진 휴대 전화 , PDA, 세트톱박스 등에서 Java 프로그래밍 언어를 지원하기 위해 만들어진 플랫폼 중 하나를 가리킨다 .Java ME 는 썬 마이크로시스템즈에서 고안하였다 . 초기에는 Java Community Process 에서 JSR 68로 개발되었으나 , 각각 다른 특성을 가진 Java ME 플랫폼들이 별도의 JSR 로 개발되었다 . 썬 마이크로시스템즈에서 이 규격에 대한 참조 구현을 제공하고 있다 . 하지만 이는 Java ME 플랫폼을 무료로 제공하기 위한 목적이 아니라 , 다른 개발사에서 개발하는 데 도움을 주기 위함이다 .

J2EE [ Java 2 Enterprise Edition ]분산 객체 , 효율적 자원 관리 , 컴포넌트 기반 개발 등을 자바 환경에서 할 수 있도록 하는 표준 규약 . 은행 전산망처럼 큰 규모의 전산 환경을 엔터프라이즈급 환경이라고 하는데 , 이러한 환경은 수많은 고객 정보를 공유해야 하고 어느 곳에서나 동일한 서비스를 차질 없이 제공해야 한다 . 이러한 개방적인 웹 환경을 지원하는 J2EE 의 구성 요소는 분산 객체와 컴포넌트 기반 개발을 지원하는 기업 자바빈 (EJB), EJB 컨테이너 또는 웹 애플리케이션 서버가 효율적 자원 관리를 위해 사용하는 JTA(Java Transaction API) 와 JDBC, 웹 환경을 담당하는 서브릿과 JSP(Java ServerPages), 기타 자바 네이밍 디렉터리 인터페이스 (JNDI), 자바메일 , 자바 메시지 서비스 (JMS) 등의 기능이 있다 .

자바 FX 모바일 [ JavaFX Mobile ]선 마이크로시스템스사가 개발한 모바일 기기용 소프트웨어 표준 . 운영 시스템 (OS) 으로 리눅스 , 미들웨어는 자바를 사용한다 . 리눅스와 자바 모두 공개 소프트웨어이기 때문에 휴대폰 업체 입장에서는 비용을 줄이고 , 자사 제품에 안정적으로 사용할 수 있다 . 모바일용 자바 ME 가 단순한 소프트웨어 동작 플랫폼이었다면 , 자바 FX 모바일은 각종 애플리케이션 프레임워크 , 다양한 휴대폰 소프트웨어 , 리눅스 기반 운영 체계 커널까지 전체를 제공하는 모바일 운용 기반이다 .

Page 26: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

26

용어

엔터프라이즈 자바빈즈 (Enterprise JavaBeans; EJB) 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다 . 즉 , EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다 . EJB 사양은 Java EE 의 자바 API 중 하나로 , 주로 웹 시스템에서 JSP 는 화면 로직을 처리하고 , EJB는 업무 로직을 처리하는 역할을 한다 .

Java 다운로드 사용자 컴퓨터용 Java 소프트웨어 또는 Java Runtime Environment, Java Runtime, Runtime Environment, Runtime, JRE, Java Virtual Machine, Virtual Machine, Java VM, JVM, VM 또는 Java 다운로드라고도 합니다 .

자바 서블릿 (Java Servlet) 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며 , 흔히 "서블릿 "이라 불린다 .자바 서블릿은 Java EE 사양의 일부분으로 , 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다 .비슷한 기술로는 펄 등을 이용한 CGI, PHP 를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다 . CGI 는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해 , 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 쓰레드로써 응답하므로 보다 가볍다 . 또한 , 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다 .

자바 서버 페이지 (JavaServer Pages, JSP)HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다 . Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다 .자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다 . 하지만 , 서블릿과는 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다 . 이와 비슷한 구조인 것인 PHP, ASP, ASP.NET 등도 있다 .아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다 .클라이언트에서 서비스가 요청되면 , JSP 의 실행을 요구하고 , JSP 는 웹 애플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환된다 . 그 후에 서블릿 원시코드는 바로 컴파일된 후 실행되어 결과를 HTML 형태로 클라이언트에 돌려준다 .

Page 27: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

27

자바 문법

1.변수 1) 변수란 리터럴을 담는 그릇으로 리터럴 값에 따라 변수의 값이 변한다 . ex) int i = 0; // 선언 타입 (int) 변수명 (i) 대입연산자 (=) 리터럴 (0) 2) 변수의 선언과 초기화 ex) int i = 0; // 변수 타입 선언과 동시에 초기화 int i; // 변수 타입 선언 i = 0; // 초기화 int i,j,k = 0; // 여러개의 변수를 같은 리터럴 값으로 동시에 초기화 int i = 0, j = 1, k = 2; // 여러개의 변수 각각에 다른 리터럴 값을 동시에 초기화2. 리터럴이란 변수에 대입되는 상수 값3. 기본 Data Type 1) 논리형 : booolean(true, false) 2) 문자형 : char(16bit 유니코드 ) 3) 숫자형 : byte(8bit), short(16bit), int(32bit), long(64bit), float(32bit), double(64bit) ※ 참조형 (reference type) String : 문자열 4. 연산자 1) 대입연산자 : = 2) 산술연산자 : *, /, +, -, % - "+" 연산자 숫자와 문자열의 연산이 가능하다 . ex) 10 + 10 = 20, 10 + "10" = 1010 3) 산술대입연산자 : *=, /=, %=, +=, -= 4) 단항연산자 : ++, --, +( 부호 ), +( 부호 ) ※ 전위식 (++i) 은 모든 연산자중 가장 우선순위가 높다 . 후위식 (i++) 은 모든 연산자중 가장 우선순위가 낮다 .

5) 조건연산자 (삼항연산자 ) : ( 조건식 ) ? true 일때 값 : false 일때 값 6) 비교연산자 : >, >=, <, <=, == ,!= 7) 논리연산자 : !(not), &&(and), ||(or) *short circuit(단축평가 ) 8) 비트연산자 : ^, &, |, ~ 9) 쉬프트연산자 : <<, >>, >>>

ex) int a = 4; // a값은 4int b = a++ + 3; // b = 7, a = 5int c = a + b; // a = 5, b = 7, c = 12int d = ++a - b--; //a = 6, d = -1, b = 6int sum = ++a + b++; // a = 7, sum = 13, b = 7

Page 28: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

28

자바 문법

5. 제어 문 1) if 문 ( 조건 문 ) - if 문 - if...else 문 - if...else if...else 문 2) switch 문 (선택 문 ) ex) switch( 수식 ) { // 기본 데이터 타입으로 결과 값이 나와야 한다 . case 0: // case 문에 올 수 있는 값은 정수나 상수뿐이다 . 실행 문 1; break; case 1: 실행 문 2; break; default: 실행 문 3; break; }

3) for 문 ( 반복 문 ) ex) for(int i=0(초기값 ); i<10( 조건 식 ); i++( 증감 값 )) { 실행 문 ; } 4) while 문 ( 반복 문 ) ex) while( 조건 식 ) { // true값일 동안에는 계속 실행 false값 일때 중지 .. 실행 문 ; } 5) do...while 문 ( 반복 문 ) ex) do { 실행 문 ; } while( 조건 식 ) // true값일 동안에는 계속 실행 false값 일때 중지 ..

Page 29: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

29

자바 문법

6. 클래스 (Class) 1) 정의 - 객체 (Object) 의 속성 ( 상태 ) 과 동작 ( 기능 ) 을 캡슐화해 놓은 것이다 . 2) 구조 - 클래스명 , 맴버변수 (객체의 상태저장 ), 메서드 (객체의 동작정의 ), 생성자 (맴버변수를 특정값으로 초기화 ) ex) class 클래스명 { 맴버변수 선언문 ; ... 생성자 () { // 생성자의 이름은 클래스명과 동일하며 리턴타입이 없다 . 맴버변수를 특정값으로 초기화 ; } 리턴타입 메서드 (int i, int j....(매개변수 , 매개변수 ....)) { // 리턴값이 없을 경우 리턴타입은 void 로 한다 . // 매개변수가 있을 경우에만 사용한다 . 실행문 ; ... return i; ( 리턴문 ) // 리턴타입이 void 일 경우 리턴문을 사용하지 않는다 . } }

Page 30: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

30

자바 문법

7. 접근자 1) public - 어디서든 접근해서 사용할 수 잇는 접근자 ex) public String msg = "public"; 2) private - 같은 클래스 내에서만 사용할 수 있는 접근자 ex) private String msg = "private"; 3) default - 같은 패키지 내의 클래스 접근가능 - 같은 패키지 안에 있는 그 클래스를 상속받은 클래스 접근가능 ex) String msg = "default"; // 타입앞의 접근자가 생략되어 있으면 그건 default 이다 . 4) protected - 자기 자신의 클래스 접근가능 - 같은 패키지 내의 클래스 접근가능 - 다른 패키지이더라도 그 클래스를 상속받은 클래스 접근가능 8. package - 여러 개의 클래스를 묶어놓은 것 ...패키지 명은 고유해야 한다 . ex) package 패키지 명 ; // 소스코드의 맨 처음에 존재해야 한다 .

Page 31: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

31

자바 문법

9. import - 다른 패키지의 클래스를 사용할 수 있게 한다 . ex) import 패키지 명 .클래스 ; import 패키지 명 .*; // 패키지 명에 있는 모든 클래스를 사용할 수 있으나 // 패키지 안의 패키지까지 사용할 수는 없다 . - import 하지 않고 사용하는 방법 ex) class PackTest { public static void main(String[] args) { new pdw213.Base().printBase(); // pdw213 패키지의 Base클래스를 new연산자를 사용하여 객체를 만들어 // printlnBase() 메소드를 실행하라는 의미다 . } }

Page 32: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

32

Collection

java.util. 컬렉션 프레임 워크프로그램을 작성한다는 것은 무엇일까 ?프로그램은 데이터를 일정한 규칙에 맞춰 가공하는 일련의 과정으로 볼 수 있다 . 물론 어떻게 가공하는 지도 중요하겠지만 데이터를 관리하기 위한 방법 역시 프로그램에서 중요한 요소이다 . 자바에서는 이런 데이터를 개발자가 쉽게 이용할 수 있도록 다양한 클래스 형태로 제공하는데 이들을 컬렉션 클래스 혹은 just 컬렉션이라 라고 부른다 . 프레임 워크란 ? -> 만들고자 하는 구조물의 기본골격 쓰이는 상황에 따라 다양한 의미를 가지는 용어로 어플리케이션 ( 자바 ) 프레임워크에서는 물리적인 실체이면서 반제품 성격의 구체적이고 체계화된 API 를 제공하는 개념 . 즉 , 자바 프레임 워크 = 라이브러리 (클래스 ) + 디자인 패턴 ( 가이드라인 )

자바 (Collection) framework컬렉션 프레임워크는 컬렉션 클래스을 쉽게 이해하고 사용하도록 다형성을 이용해서 컬렉션 객체의 메소드를 형태적으로 동일하게 유지함으로써 사용법을 일관되게 만든 디자인 패턴 ( 가이드라인 ) 이다 . ※ Map 인터페이스는 Collection 인터페이스를 직접 확장한 것은 아니지만 Map 도 컬렉션 프레임워크에 포함되는 것으로 간주한다 . 따라서 Map 도 그냥 컬렉션이라고 부른다 .1. 컬렉션 클래스 Data 의 관리를 위해서 예전에는 배열 혹은 구조체 (C 언어 ) 을 사용하였지만 자바에서는 발전된 형태인 배열을 사용하는데 이것이 바로 컬렉션 클래스 (Interface Collection 와 Map 으로 구현된 클래스를 가리킨다 .) 이다 .컬렉션은 배열의 크기를 동적으로 늘릴 수 없다는 단점을 보완해서 , 동적으로 필요할 때 메모리를 확장할 수 있게 만들었다 . 이러한 저장공간에 여러가지 자료구조적인 기능이 가미된 저장공간으로서 객체의 삽입 , 삭제 , 수정 , 검색의 기능을 가지고 있다 .

Page 33: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

33

Interface Collection

Collection 인터페이스로부터 구현된 클래스들은 다음 그림과 같다 . 이 인터페이스의 기본적인 기능을 바탕으로 조금씩 확장되어 다양한 기능이 첨가된 클래스들을 제공된다 . 보통은 집합적인 데이터를 관리하기 위해서 사용된다 .Set , List , Map , SortedSet , SortedMap , HashSet , TreeSet , ArrayList , LinkedList , Vector , Collections , Arrays , AbstractCollection Collection 인터페이스를 구현한 클래스에서는 각각의 기능의 기능에 맞게 오버라이딩되어 있기 때문에 이들 메소들의 사용법을 잘 익혀두면 컬렉션 클래스를 보다 쉽게 사용할 수 있다 .Collection 인터페이스의 주요 메서드boolean add(E e) 요소를 추가void clear() 컬렉션의 모든 요소를 제거boolean isEmpty () 컬렉션에 요소가 없는 경우에 true 를 돌려줍니다 . boolean remove(Object o) 삭제int size() 이 컬렉션중의 요소의 수를 돌려줍니다 .

Page 34: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

34

Interface Map

Map 인터페이스로 구현된 클래스는 다음 그림과 같다 . Collection 과 달리 Map 은 검색적인 개념을 담고 있는 인터페이스이다 . 검색을 위해서 각각의 데이터에 키를 함께 보유하게 된다 . Map 인터페이스는 검색적인 저장공간을 지원하기 위해서 사용하는 경우가 많다 .Collection 이나 Map 은 객체의 저장공간을 위한 기능적인 측면을 담당한다는 것은 동일하다 . 하지만 Collection 은 단순히 집합적인 개념의 저장소의 기능을 가지고 있으며 , Map 은 키를 이용한 검색적인 저장소의 기능을 가지고 있다는 것이 다르다 . 특별한 기능은 없다 . 데이터를 삽입하고 필요할 때 끄집어 낼 수 있으며 그것으로 끝이다 . 키 없이 단순히 데이터만을 넣어 두고자 할 때는 Collection 계열을 사용하면 된다 . 키를 사용해서 데이터를 빠르게 검색하기 위해서는 Map 계열을 사용하면 된다 .HashMap , TreeMap , Hashtable , SortedMap , Collection , Set Map 인터페이스의 메서드void clear()V get(Object key)V put(K key, V value)void putAll(Map<? extends K,? extends V> m)V remove(Object key)int size()

Page 35: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

35

Java Collection 객체 비교표

인터페이스 클래스 동기화 성능속성

Set HashSet No 가장빠른 Set 이다 Hashmap 보다는 느리지만 Set 인터페이스를 구현하고 있다는 특징이 있다 (HashMap) 은 set 인터페이스를 구현하지 않는다 .

Set LinkedHashSet No 1.4 버전부터 제공 , LinkedHashMap 에 근간해서 작성되었으므로 삽입순서에 따라 배열요소에 접근한다 . TreeSet 보다 빠르다 .

Set TreeSet No HashSet 보다 느리다 . 키 순서에 따른 접근이 가능하다 .

Map IdentityHashMap No 1.4 버전부터 제공한다 . 동일성 (identity) 에 근간한 특별한 목적의 HashMap(==) 동등 (.equals 메소드 ) 대신의 개념이다 . 동일성개념을 사용할수 있는 경우 HashMap 보다 더 빠른 고성능 대응을 제공한다 .

Map HashTable Yes HashMap 보다는 느리다 하지만 동기화된 HashMap 보다는 빠르다 .

Map LinkedHashMap No 1.4 버전부터 제공한다 . 엔트리 순서에 있는 링크된 리스트를 유지하는 해시맵을 구현한다 . 엔트리 순서에 따른 키 접근이 가능하다 . TreeMap 보다는 빠르지만 다른 종류의 Map클래스보다는 느리다 .

Map TreeMap No HashTable 과 HashMap 보다 느리다 . 키를 순서대로 접근할 수 있다 .

List ArrayList No 가장 빠른 리스트이다 . 그러나 배열보다 느리다 .

List Vector Yes ArrayList 보다 느리지만 동기화된 ArrayList 보다는 빠르다 .

List Stack Yes Vector 와 동일한 속도를 제공하나 LIFO 큐 기능을 제공한다 .

List LinkedList No 다른 List 클래스들보다 느리다 . 그러나 몇 가지 형태의 큐에 있어서는 다른 클래스보다 더 빠르다 .

Page 36: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

36

Exception

컴퓨터 시스템의 동작 도중 예기치 않았던 이상 상태가 발생하여 수행 중인 프로그램이 영향을 받는 것 . 예를 들면 , 연산 도중 넘침에 의해 발생한 끼어들기 등이 이에 해당한다 .ArithmeticExceptionArrayIndexOutOfBoundsException NullPointerExceptionRuntimeExceptionIllegalArgumentExceptionNumberFormatException ClassNotFoundExceptionIOExceptionSQLExceptionDOMException

Page 37: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

37

Exception 예제

String[] str = {"서울 "," 경기도 "," 경상도 ","전라도 ","강원도 ","충청도 ","제주도 "};try{

out.write(str[10]);}catch(Exception e){ }

int k = 100, i = 0;int j;try{

j = k / i;}catch(Exception e){ }

String str = null;try{

if(str.equals("")) out.write("str 은 값이 없습니다 .");}catch(Exception e){ }

String str = "sdf";int k;try{

k = Integer.parseInt(str);}catch(Exception e){ }

Page 38: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

38

용어

JNDI(Java Naming and Directory Interface)디렉터리 서비스에서 제공하는 데이터 및 객체를 발견 (discover) 하고 참고 (lookup) 하기 위한 자바 API 다 .

connection pool 데이터베이스 메모리 내에 있는 데이터베이스 연결들로 된 하나의 캐시 . 데이터베이스 연결들은 데이터에 대한 요청이 발생하면 재사용되는 것으로 , 데이터베이스의 수행 능력을 향상시키기 위해 사용된다 . 연결 풀에서 하나의 연결이 생성되어 풀에 배치되면 새로운 연결이 만들어지지 않도록 재사용하지만 만약에 모든 연결이 사용 중에 있으면 새로운 연결이 만들어져 풀에 추가된다 . 연결 풀은 사용자가 데이터베이스 연결을 위해 기다리는 시간을 축소시키기도 한다 .

JDBC자바 프로그램 안에서 SQL 을 실행하기 위해 데이터베이스를 연결해주는 응용프로그램 인터페이스를 말한다 .C:\Tomcat 6.0\lib\ojdbc14.jar* mysql-connector-java-5.1.13-bin.jar

DBCPC:\Tomcat 6.0\libcommons-pool-1.5.4.jarcommons-dbcp-1.4.jarcommons-collections-3.2.1.jar

[source]Context init = new InitialContext();DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/xe");Connection conn = ds.getConnection();

Page 39: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

39

Tomcat 6 설정

C:\Tomcat 6.0\conf\context.xml<Context>

<WatchedResource>WEB-INF/web.xml</WatchedResource><!-- 추가 --><ResourceLink name="jdbc/xe" global="jdbc/xe" type="javax.sql.DataSource"/>

</Context>

C:\Tomcat 6.0\conf\serverxml<GlobalNamingResources>

<!-- 추가 --><Resource name="jdbc/xe" auth="Container" type="javax.sql.DataSource" maxActive="10" maxIdle="5" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>

</GlobalNamingResources>

WEB-INF/web.xml<!-- Datasource --> <resource-ref><description>DB Connection</description><res-ref-name>jdbc/xe</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>

Page 40: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

40

TIP

#PCDATA 와 CDATA 의 차이점PCDATA 는 Parsed Character DATA 의 약자로서 XML 파서 ( 해석기 ) 가 해석하는 문자 데이터를 말합니다 . 해석을 한다라는 말은 문자 데이터 안에 XML 권고안에 규정되어 있는 문자로 쓰여 졌는지 조사하고 , 또한 엔티티 참조가 있다면 엔티티 참조에 해당하는 값으로 치환하는 작업을 의미합니다 .

이와 같이 PCDATA 는 XML 파서가 해석하는데 반해 CDATA 섹션내의 문자 데이터는 XML 파서가 해석하지 않고 바로 응용프로그램으로 전달됩니다 .그래서 문자 데이터로 사용할 수 없는 < 문자나 & 문자도 CDATA 섹션 내에서는 마음대로 사용할 수 있으며 공백문자의 길이도 보존 됩니다 .

Page 41: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

41

JSP / JNDI / JDBC / List / Map source sample - 1

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%><%@page import="java.sql.*"%><%@page import="javax.naming.*"%><%@page import="javax.sql.*"%><%@page import="java.util.List,java.util.ArrayList,java.util.Map,java.util.HashMap"%><%!

public Connection getConnection() throws Exception{Connection conn = null;String curr_dt = "";try{

Context init = new InitialContext();Context envCtx = (Context)init.lookup("java:comp/env");DataSource ds = (DataSource)envCtx.lookup("jdbc/xe");//DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/xe");conn = ds.getConnection();

}catch(Exception e){throw e;

}return conn;

}%>

* 대신 클래스 명을 다 쓰는 습관을 들인다

JNDI한 줄로 소스를 줄이는 것과 동일하다 .

Page 42: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

42

JSP / JNDI / JDBC / List / Map source sample - 2

<%Statement stmt = null;ResultSet rs = null;Connection conn = null;StringBuffer sb = new StringBuffer();List<Map<String,String>> dataList = null;Map<String,String> data = null;try{

conn = getConnection();

if(conn != null){stmt = conn.createStatement();sb.append("select a.empno,");sb.append("a.ename,");sb.append("a.job,");sb.append("a.mgr,");sb.append("to_char(a.hiredate,'yyyy-mm-dd') hiredate,");sb.append("a.sal,");sb.append("a.comm,");sb.append("a.deptno ");sb.append("from emp a");rs = stmt.executeQuery(sb.toString());

String 대신 StringBuffer 사용

Page 43: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

43

JSP / JNDI / JDBC / List / Map source sample - 3

if(rs.next()){dataList = new ArrayList<Map<String,String>>();do{

data = new HashMap<String,String>();data.put("empno",rs.getString("empno"));data.put("ename",rs.getString("ename"));data.put("job",rs.getString("job"));data.put("mgr",rs.getString("mgr"));data.put("hiredate",rs.getString("hiredate"));data.put("sal",rs.getString("sal"));data.put("comm",rs.getString("comm"));data.put("deptno",rs.getString("deptno"));dataList.add(data);

}while(rs.next());}

}}catch(Exception e){

out.write(e.toString());}finally{

if(stmt != null) stmt.close();if(conn != null) conn.close();

}

%>

Statement, Connection 반드시 닫는다 .

Page 44: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

44

JSP / JNDI / JDBC / List / Map source sample - 4

<html><head><meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"><title>Collection Sample</title><style>td {font-family: "돋움 ", "맑은 고딕 ","Malgun Ghothic","Verdana", 돋움체 ;font-size: 12px; margin:0px 0 0 0px ;line-height: 18px;}</style></head><body>

<table width="700" border="0" cellspacing="1" cellpadding="2" bgcolor="#bebebe"><tr bgcolor="#ebebeb" align="center">

<td>empno</td><td>ename</td><td>job</td><td>mgr</td><td>hiredate</td><td>sal</td><td>comm</td><td>deptno</td>

</tr><%if(dataList != null && dataList.size() > 0){

int l = dataList.size();for(int k=0;k<l;k++){

data = dataList.get(k);%>

Page 45: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

45

JSP / JNDI / JDBC / List / Map source sample – 5 end

<tr bgcolor="#FFFFFF"><td><%=data.get("empno") %></td><td><%=data.get("ename") %></td><td><%=data.get("job") %></td><td><%=data.get("mgr") %></td><td><%=data.get("hiredate") %></td><td><%=data.get("sal") %></td><td><%=data.get("comm") %></td><td><%=data.get("deptno") %></td>

</tr><%

}}

%></table>

</body></html>

Page 46: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

46

배열

선언String[] str = new String[2]; str[0] = “a”; str[1] = “b”;String[] str = {“a”,”b”};

int[] k = new int[2]; k[0] = 10; k[1] = 20;int[] k = {1,2};

String str = "월 , 화 , 수 ,목 ,금 , 토 , 일 ";String[] arr = str.split(",");arr[0] 월 ... arr[6] 일

2 차 배열int[][] k = int[2][3];

for(int h=0;h<2;h++){for(int j=0;j<3;j++){

out.write(k[h][j]);}

}

k[0][0] k[0][1] k[0][2]

k[1][0] k[1][1] k[1][2]

Page 47: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

47

과제

1. day8 폴더에 jsp 를 exam2-개발자이니셜 .jsp 생성하시고 작성하십시오 .화면에 보기와 같이 출력하세요 .2* 1 = 22 * 2 = 4..9 * 9 = 81

2. day8 폴더에 jsp 를 exam3-개발자이니셜 .jsp 생성하시고 작성하십시오 .보기 문자열을 수정하시고 출력하세요 .( 공백제거 , 쉼표 (,) 를 dot(.)변경 , 소문자로 변경 , $를 @ 로변경 , co.kr 를 com 으로 변경 )[ 보기 ]fish_73@naver .comlemon294@naver,[email protected][email protected]

3. day8 폴더에 jsp 를 exam4-개발자이니셜 .jsp 생성하시고 작성하십시오 .( 주의사항 핸드폰 길이 , 2차배열 사용 , 빈값제거String[] split(String regex) String toLowerCase() String trim()

[ 보기 ]홍길동 ,0101239898|심청 ,01887682343|장동건 ,01123218879|이명박 ,0176549821|,|조영주 ,01091670928[결과 ]홍길동 (010-123-9898)..

Page 48: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

48

과제 - 회원가입처리

회원가입테이블 정보 NAME VARCHAR2(10) NOT NULL, ID VARCHAR2(10) NOT NULL, PWD VARCHAR2(10) NOT NULL, REGNO VARCHAR2(13) NULL, SEX CHAR(1) DEFAULT 'M' NULL, EMAIL VARCHAR2(50) NULL, PHONE VARCHAR2(14) NULL, INPUT_ID VARCHAR2(10) NULL, INPUT_DT DATE DEFAULT sysdate NULL

등록 쿼리 문insert into skb_user ( name,id,pwd,regno,sex,email,phone,input_id,input_dt) values (?,?,?,?,?,?,?,?,sysdate)

sex : 남자는 M 여자는 W 입력phone : 010-123-3456 하이픈 (-) 구분하여 등록input_id : 본인 이니셜 입력ID PRIMARY KEY

조회 쿼리 문select name,id,pwd,regno, decode(sex,'M','남자 ','W',' 여자 ','') sex, email,phone,input_id, to_char(input_dt,'yyyy-mm-dd') input_dt from skb_user

Page 49: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

49

Oracle Query - Data Type(1)

오라클 데이터 타입- 관계형 데이터베이스에서 제공하는 데이터 타입은 대개 CHAR, VARCAHR2, NUMBER, DATE, LONG, RAW, LONG RAW, ROWID 타입으로 분류한다 .- 원하는 정보를 가장 효율적으로 처리하기 위해서 적절한 데이터 타입의 선정이 필요 하다 .- 적절하지 못한 데이터 타입은의 선정은 수행속도를 나쁘게 하고 불필요한 자원을 낭비를 가져온다 .

VARCHAR2 타입- 가변길이 문자형 데이터 타입 - 최대 길이 : 2000 바이트 ( 반드시 길이 지정 ) - 다른 타입에 비해 제한이 적다 - 일부만 입력시 뒷부분은 NULL - 입력한 값의 뒷부분에 있는 BLANK도 같이 입력 - 전혀 값을 주지 않으면 NULL 상태 입력 - 지정된 길이보다 길면 입력시 에러 발생 - 컬럼 길이의 편차가 심한 경우 , NULL 로 입력되는 경우가 많은 경우 VARCHAR2 사용

NUMBER 타입- 숫자형 데이타 타입 , 음수 , ZERO, 양수 저장 - 전체 자리수는 38자리를 넘을 수 없다 - 소수점이 지정되지 않았을 때 소수점이 입력되거나 , 지정된 소수점자리 이상 입력되면 반올림되어 저장 - 지정한 정수 자리수 이상 입력시 에러 발생 - 연산이 필요한 컬럼은 NUMBER 타입으로 지정한다 . - NUMBER(p,s) 로 지정시 p 는 s 의 자리수를 포함한 길이므로 감안하여 P 의 자리수를 결정 - NUMBER 타입은 항상 가변길이므로 충분하게 지정할 것

Page 50: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

50

Oracle Query - Data Type(2)

DATE 타입- 일자와 시간을 저장하는 날짜형 타입 - 일자나 시간의 연산이 빈번한 경우 사용 - 포함정보 : 세기 , 년도 , 월 , 일 , 시간 , 분 , 초 - NLS_DATE_FORMAT 을 이용하여 국가별 특수성을 해결 - 특별히 시간을 지정하지 않으면 00:00:00로 입력 됨 . 특별히 일자를 지정하지 않았다면 현재월의 1일로 지정 됨 - SYSDATE 는 현재일과 시간을 제공 LONG 타입- 2기가 바이트의 가변길이 문자 저장 - VARCHAR2와 유사한 특징을 가지나 아래와 같은 제한사항이 있다 . * 하나의 테이블에 하나의 LONG 타입만 사용 가능 * (NOT) NULL 을 제외한 다른 제약 조건은 지정할 수 없다 * 인덱스를 만들 수 없다 * PROCEDURE 나 Stored FUNCTION 에서 LONG 타입의 변수를 받을 수 없다 * Stored FUNCTION 은 LONG 타입 출력불가 * SELECT 문 내에서 WHERE, GROUP BY, ORDER BY, CONNECT BY, DISTINCT불가 * SQL Function(SUBSTR,REPLACE,..) 사용 불가 * CREATE TABLE .. AS SELECT.. 사용불가 RAW, LONG RAW, ROWID 타입- 그래픽 IMAGE 나 디지탈 SOUND를 저장 - HEXA-DECIMAL 형태로 RETURN - RAW는 VARCHAR2와 유사 - LONG RAW는 LONG과 유사하나 아래와 같은 제한사항이 있다 . * 저장과 추출만 가능하고 , DATA 를 가공할 수 없다 . * LONG RAW는 LONG과 같은 제한 사항을 같는다 .

Page 51: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

51

Oracle Query - Data Type(3)

LOB, LONG, LONG RAW 데이터 타입의 비교- 테이블의 한 ROW에 여러 LOB 컬럼이 있을 수 있는 반면 , LONG 또는 LONG RAW 컬럼은 한 ROW에 하나 밖에 사용될 수 없다 .- LOB는 사용자 정의 데이터 타입 (user-defined datatype) 의 속성 (attribute) 으로 사용 될 수 있는 반면 , LONG이나 LONG RAW

는 속성으로 사용될 수 없다 .- LONG 또는 LONG RAW는 값 전체가 테이블 내에 저장이 되는 반면 , LOB는 테이블 컬럼내에 LOB locator만 저장이된다 . BLOB과 CLOB ( 내부 LOB) 데이터는 별도의 테이블스페이스에 저장시킬 수 있으며 , BFILE (외부 LOB) 데이터는 데이터베이스 외부의 별도 파일로 존재한다 . 따라서 LOB 컬럼을 액세스할 경우에는 , locator 값만 return 되는 반면 , LONG이나 LONG RAW 컬럼을 액세스할 경우에는 , 전체 값이 return 된다 .- LOB 데이터는 4GB까지 저장이 가능하며 , BFILE 컬럼이 가리키는 파일 크기는 4GB 이내에서 OS 에서 지원하는 최대

크기까지 가능하다 . 한편 LONG이나 LONG RAW 데이터 타입에서는 2GB 까지만 지원이 가능하다 .- 데이터에 대한 랜덤 액세스 기능 또는 데이터 조작을 할 경우 LOB를 사용하는 것이 LONG 또는 LONG RAW를 사용하는 것에

비해 훨씬 많은 기능을 사용할 수 있다 .- LOB는 랜덤 액세스가 가능한 반면 , LONG 타입에 저장된 데이터는 처음부터 원하는지점까지 순차적으로 읽어 처리하여야 한다 .- LOB 데이터에 대한 replication 을 local 또는 remote 에서 수행할 수 있는 반면 , LONG / LONG RAW 컬럼 데이터는 replication

이 되지 않는다 .LONG 컬럼의 데이터는 TO_LOB() 라는 함수를 사용하여 LOB으로 변환 가능하지만 , LOB을 LONG / LONG RAW로 변환 하는

기능은 제공되지 않는다 .

LOB 데이터 타입의 제약 사항- LOB는 클러스터 테이블에서는 사용할 수 없으며 , 따라서 클러스터 키로도 사용할 수 없다 .- LOB 컬럼은 GROUP BY, ORDER BY, SELECT DISTINCT 등에 사용할 수 없으며 JOIN 에도 사용할 수 없다 .- LOB 컬럼은 ANALYZE ... COMPUTE/ESTIMATE STATISTICS 명령 사용 시에도 Analyze 되지 않는다 .- LOB는 파티션된 IOT (Index Organized Table) 에는 사용할 수 없다 . 그러나 파티션 되어 있지 않은 IOT 에는 사용할 수 있다 .- LOB는 VARRAY에는 사용할 수 없다 .NCLOB은 OBJECT TYPE 의 속성 (attribute) 으로 사용될 수 없으나 , 메소드 정의를 하는 데는 NCLOB 파라미터를 사용할 수 있다 .

Page 52: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

52

Oracle Query – 제약조건 (1)

제약조건 (Constraint) 이란 ?제약조건이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러 가지 규칙을 적용해 놓는거라 생각하면 된다 . 간단하게 테이블안에서 테이터의 성격을 정의하는 것이 바로 제약조건 이다 .- 제약조건은 데이터의 무결성 유지를 위하여 사용자가 지정할 수 있는 성질 이다 . - 모든 제약조건은 데이터 사전 (DICTIONARY) 에 저장 된다 . - 의미있는 이름을 부여했다면 CONSTRAINT 를 쉽게 참조할 수 있다 . - 표준 객체 명명법을 따르는 것이 좋다 . - 제약조건은 테이블을 생성할 당시에 지정할 수도 있고 , 테이블 생성 후 구조변경 (ALTER) 명령어를 통해서도 추가가 가능하다 . NOT NULL 제약조건은 반드시 컬럼 레벨에서만 정의가 가능하다 .

NOT NULL 조건컬럼을 필수 필드화 시킬 때 사용 한다 .-- NOT NULL 제약조건을 설정하면 ename 컬럼에는 꼭 데이터를 입력해야 한다 .-- emp_nn_ename 을 제약조건 명으로 설정 하였다 .SQL> CREATE TABLE emp( ename VARCHAR2(20) CONSTRAINT emp_nn_ename NOT NULL ); -- 제약조건은 USER_CONSTRAINTS 뷰를 통해서 확인 할 수 있다 .SQL> SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME ='EMP' ;-----------------------emp_nn_ename

Page 53: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

53

Oracle Query – 제약조건 (2)

UNIQUE 조건데이터의 유일성을 보장 (중복되는 데이터가 존재할수 없다 ) 되고 , 자동으로 인덱스가 생성 된다 .-- deptno 컬럼에 UNIQUE 제약조건 생성SQL> ALTER TABLE emp ADD CONSTRAINT emp_uk_deptno UNIQUE (deptno);-- 제약 조건의 삭제SQL> ALTER TABLE emp DROP CONSTRAINT emp_uk_deptno;

CHECK 조건컬럼의 값을 어떤 특정 범위로 제한할 수 있다 .-- comm 컬럼에 1에서 100까지의 값만을 가질수 있는 체크조건 생성SQL> ALTER TABLE emp ADD CONSTRAINT emp_ck_comm CHECK (comm >= 1 AND comm <= 100);

-- 제약 조건의 삭제SQL> ALTER TABLE emp DROP CONSTRAINT emp_ck_comm;

-- 10000,20000,30000,40000,50000의 값만을 가질수 있는 체크조건 생성SQL> ALTER TABLE emp ADD CONSTRAINT emp_ck_comm CHECK comm IN (10000,20000,30000,40000,50000);

Page 54: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

54

Oracle Query – 제약조건 (3)

DEFAULT(컬럼 기본값 ) 지정데이터를 입력 하지 않아도 지정된 값이 기본으로 입력 된다 .-- hiredate 컬럼에 값을 입력하지 않아도 오늘 날짜가 입력된다 .SQL> CREATE TABLE emp( ... (컬럼생략 ) ..., hiredate DATE DEFAULT SYSDATE );

PRIMARY KEY 지정- 기본키는 UNIQUE 와 NOT NULL 의 결합과 같다 . - 기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서 외래키들이 참조할 수 있는 키로서의 자격을

가지고 있다 . 이를 참조 무결성이라 한다 . - UNIQUE 조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성하며 , 그 이름은 기본 키 제약 조건의 이름과 같다 . - INDEX: 검색 키로서 검색 속도를 향상 시킨다 .(UNIQUE,PRIMARY KEY 생성시 자동적으로 생긴다 .) -- PRIMARY KEY 생성 예제SQL> CREATE TABLE emp( empno NUMBER CONSTRAINT emp_pk_empno PRIMARY KEY );

FOREIGN KEY(외래 키 ) 지정- 기본키를 참조하는 컬럼 또는 컬럼들의 집합이다 . - 외래키를 가지는 컬럼의 데이터 형은 외래키가 참조하는 기본키의 컬럼과 데이터형과 일치해야 한다 . 이를 어기면 참조무결성

제약에의해 테이블을 생성할수 없다 . - 외래키에 의해 참조되고 있는 기본 키는 삭제 할 수 없다 . - ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는 그 기본키가 삭제 될 때 같이 삭제 된다 . -- emp 테이블의 deptno 컬럼이 dept 테이블에 deptno 컬럼을 참조하는 외래키 생성SQL> ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno FOREIGN KEY (deptno) REFERENCES dept(deptno);

Page 55: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

55

Oracle Query – select(1)

SELECT 문 및 연산자

SELECT [distinct] { *, column [alias], . . .}FROM table_name[WHERE condition][ORDER BY {column, expression} [ASC | DESC] ];

- DISTINCT : 중복되는 행을 제거하는 옵션 . - * : 테이블의 모든 column 을 출력 . - alias : 해당 column 에 대해서 다른 이름을 부여할 때 사용 . - table_name : 질의 대상 테이블 명 - WHERE : 조건을 만족하는 행들 만 검색 - condition : column, 표현식 , 상수 및 비교 연산자 - ORDER BY : 질의 결과 정렬을 위한 옵션 (ASC:오름차순 (Default), DESC 내림차순 )

SQL 문의 작성 방법- SQL 문장은 대소문자를 구별하지 않는다 . - SQL 문장은 한 줄 또는 여러 줄에 입력될 수 있다 . - 일반적으로 키워드는 대문자로 입력한다 . 다른 모든 단어 , 즉 테이블 이름 , 열 이름은 소문자로 입력한다 .( 권장 ) - 가장 최근의 명령어 한 개가 SQL buffer 에 저장 된다 . - SQL 문 마지막 절의 끝에 ";" 를 기술하여 명령의 끝을 표시 한다 .

-- empno 와 ename 은 각각 사번과 성명이라는 컬럼 별칭 (alias) 으로 만들어 출력-- alias 를 사용할 때 as 라는 키워드를 사용해도 되고 , 생략 할 수도 있다 .SQL> SELECT empno 사번 , ename 성명 FROM emp WHERE deptno = 10

사번 성명---------- --------------- 7782 CLARK 7839 KING 7934 MILLER

Page 56: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

56

Oracle Query – select(2)

WHERE 절에 사용될 수 있는 SELECT 연산자

연산자 설 명 BETWEEN a AND b a 와 b 사이의 데이터를 출력 .(a, b 값 포함 )

IN (list) list 의 값 중 어느 하나와 일치하는 데이터를 출력

LIKE 문자 형태로 일치하는 데이터를 출력 (%, _ 사용 )

IS NULL NULL 값을 가진 데이터를 출력 합니다 .

NOT BETWEEN a AND b a 와 b 사이에 있지않은 데이터를 출력 (a, b값 포함하지 않음 )

NOT IN (list) list 의 값과 일치하지 않는 데이터를 출력

NOT LIKE 문자 형태와 일치하지 않는 데이터를 출력

IS NOT NULL NULL 값을 갖지 않는 데이터를 출력

구 분 설 명

LIKE 'A%' 'A' 로 시작하는 데이터만 검색

LIKE '%A' 'A' 로 끝나는 테이터들만 검색

LIKE '%KIM%' 'KIM' 문자가 있는 데이터 들만 검색

LIKE '%K%I%' 'K' 문자와 'I' 문자가 있는 데이터 들만 검색

LIKE '_A%' 'A' 문자가 두 번째 위치한 데이터 들만 검색

LIKE 연산자

Page 57: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

57

Oracle Query – Alias

테이블 예명 (Alias)- 테이블 Alias 로 column 을 단순 , 명확히 할 수 있다 . - 현재의 SELECT 문장에 대해서만 유효하다 . - 테이블 Alias 는 길이가 30자 까지 가능하나 짧을수록 더욱 좋다 . - 테이블 Alias 는 의미가 있어야 한다 . - FROM 절에 테이블 Alias 설정시 해당 테이블 Alias 는 SELECT 문장에서 테이블 이름 대신에 사용 한다 . -- 사원수가 3 명이 넘는 부서의 부서명과 사원수 조회SQL> SELECT a.dname, b.cnt FROM dept a, (SELECT deptno, COUNT(empno) cnt FROM emp GROUP BY deptno) b WHERE a.deptno = b.deptno AND b.cnt > 3

위 쿼리에선 총 3 개의 Alias 가 사용되었다 . 첫 번째로 dept테이블을 a 라는 예명으로 두 번째로 부서의 사원수인 COUNT(empno) 를 cnt 라는 예명으로 세 번째로 부서별 사원수를 가져오는 쿼리를 b 라는 예명을 사용했다

위 예제와 같이 예명은 컬럼에만 주는 것이 아니라 . 쿼리 문 및 테이블에도 사용할 수 있다 .

DNAME CNT----------------- ----------RESEARCH 5SALES 6

Page 58: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

58

Oracle Query – insert

INSERTINSERT 명령어는 테이블 안에 데이터를 삽입하는 역할을 한다 .

- 실제 데이터는 VALUES 괄호 () 안에 입력하고 문자열은 단일 따옴표 (' ') 로 둘러싼다 . - 각각의 테이터 구분은 ","로 한다 . - 테이블 이름 옆에 ()생략시에는 자동으로 모든 컬럼을 VALUES() 안에 입력 시킨다 .

-- 모든 데이터를 입력할 경우SQL> INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, TO_DATE('80/12/17'), 800, NULL, 20);

-- 원하는 데이터만 입력할 경우SQL> INSERT INTO dept (deptno, dname) VALUES(10, 'ACCOUNTING' );

-- SELECT 문장을 이용한 INSERTSQL> INSERT INTO dept2 SELECT * FROM dept;

INSERT INTO table_name(column1,column2, ...)VALUE ( 데이터 ,' 데이터 ', ... );

INSERT INTO table_name(column1,column2, ...)SELECT column1,column2, ...FROM table_nameWHERE 조건 ;

Page 59: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

59

Oracle Query –update

UPDATE테이블 안의 데이터를 수정 한다 .

-- 사원번호가 7902 번인 사원의 부서 번호를 30으로 수정SQL> UPDATE emp SET deptno = 30 WHERE empno = 7902;

-- 부서번호 20의 사원들 급여가 10% 인상됨SQL> UPDATE emp SET sal = sal * 1.1 WHERE deptno = 20;

-- 모든 사원의 입사일을 오늘로 수정SQL> UPDATE emp SET hiredate = SYSDATE

UPDATE table_nameSET column1= 값 ( 고칠내용 ), column2=값 , ...where 조건

Page 60: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

60

Oracle Query – delete

DELETE사용하지 않는 데이터를 삭제 한다 .

-- 사원번호가 7902 번인 사원의 데이터를 삭제 . SQL> DELETE FROM emp WHERE empno = 7902 ;

-- 평균급여보다 적게 받는 사원 삭제SQL> DELETE FROM emp WHERE sal < (SELECT AVG(sal) FROM emp); -- 모든 행이 삭제SQL> DELETE FROM emp;

DELETE FROM table_name WHERE 조건 ;

Page 61: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

61

Oracle Query – Join

조인 (Join) 이란 ?- 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법 이다 . - 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key 값을 사용하여 조인 한다 . - 그러므로 두 개의 테이블을 SELECT 문장 안에서 조인 하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야 한다 .

조인 방법- Equi Join(동등 조인 , 내부조인 ) - Non-equi Join - Outer Join - Self Join

Cartesian Product( 카티션 곱 ) - 검색하고자 했던 데이터뿐 아니라 조인에 사용된 테이블들의 모든 데이터가 반환 되는 현상 - Cartesian Product 는 다음과 같은 경우에 발생 한다 . * 조인 조건을 정의하지 않았을 경우 * 조인 조건이 잘못된 경우 * 첫 번째 테이블의 모든 행들이 두 번째 테이블의 모든 행과 조인이 되는 경우 * 테이블의 개수가 N 이라면 Cartesian Product 를 피하기 위해서는 적어도 N-1개의 등가 조건을 SELECT 문안에 포함시켜서

다른 테이블 안에 있는 각 테이블의 컬럼이 적어도 한번은 참조되도록 해야 한다 .

Page 62: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

62

Oracle Query – Join(1)

Equi Join - 조건절 Equality Condition(=) 에 의하여 조인이 이루 진다 . - Equi join 의 성능을 높이기 위해서는 Index 기능을 사용하는 것이 좋다 .

Non-Equi Join - Non-equi Join 은 테이블의 어떤 column 도 Join 할 테이블의 column 에 일치하지 않을 때 사용하고 , 조인조건은 동등 ( = )

이외의 연산자를 갖는다 . - BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN

Self Join - Equi Join 과 같으나 하나의 테이블에서 조인이 일어나는 것이 다르다 . - 같은 테이블에 대해 두 개의 alias 를 사용하여 FROM 절에 두 개의 테이블을 사용하는 것 처럼 조인한다 .

-- Non-Equi Join 예제 SQL> SELECT e.ename,e.sal,s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;

-- 사원의 매니저명을 조회하는 Self Join 예제SQL> SELECT e.ename, a.ename "Manager" FROM emp e, emp a WHERE e.empno = a.mgr;

-- WHERE 절에 조인 조건을 작성한다 .SQL> SELECT e.ename, d.dname FROM emp e , dept d WHERE e.deptno = d.deptno;

Page 63: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

63

Oracle Query – Join(2)

Outer(외부 ) Join- Equi Join 문장들의 한 가지 제약점은 그것들이 조인을 생성하려 하는 두 개의 테이블의 두 개 컬럼에서 공통된 값이 없다면

테이블로부터 테이터를 반환하지 못하는 것이다 . - 정상적으로 조인 조건을 만족하지 못하는 행들을 보기위해 Outer Join 을 사용 한다 . Outer Join 연산자는 "(+)" 이다 . - 조인시킬 값이 없는 조인측에 "(+)"를 위치 시킨다 . - Outer Join 연산자는 표현식의 한 편에만 올 수 있다 .

Outer Join 예제-- 예제 1) 일반 조인의 경우SQL> SELECT DISTINCT(a.deptno), b.deptno FROM emp a, dept b WHERE a.deptno = b.deptno

-- 예제 2) Outer Join 을 했을 경우SQL> SELECT DISTINCT(a.deptno), b.deptno FROM emp a, dept b WHERE a.deptno(+) = b.deptno

DEPTNO DEPTNO------ ---------- 10 10 20 20 30 30

DEPTNO DEPTNO ------- -------- 10 10 20 20 30 30 40

Page 64: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

64

Oracle Query – Join(3)

-- 다음의 쿼리를 한번 잘 살펴보기 바란다 .SQL> SELECT DISTINCT(a.deptno), b.deptno FROM emp a, dept b WHERE a.deptno(+) = b.deptno AND a.ename LIKE '%';

-- 쿼리 결과를 잘 보면 Outer Join 이 되지 않은 것을 알 수 있다 .-- 위 쿼리를 Outer Join 시키기 위해서는 아래와 같이 고쳐야 한다 .SQL> SELECT DISTINCT(a.deptno), b.deptno FROM emp a, dept b WHERE a.deptno(+) = b.deptno AND a.ename(+) LIKE '%'

-- Outer Join 조건이 걸려있는 테이블에는 다른 조건절이 들어와도-- 똑같이 Outer Join 연산자인 (+) 를 해주어야 한다 .

DEPTNO DEPTNO---------- ---------- 10 10 20 20 30 30 40

DEPTNO DEPTNO---------- ---------- 10 10 20 20 30 30

Page 65: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

65

Oracle Query – Join(4)

표준 Outer Join Oracle9i 부터는 ANSI/ISO SQL 표준인 LEFT OUTER JOIN , RIGHT OUTER JOIN, FULL OUTER JOIN 를 지원 한다 .LEFT OUTER JOIN 과 RIGHT OUTER JOIN 의 테이블 순서를 바꾸어 가면서 테스트를 하시면 쉽게 이해를 할 수 있다 .

LEFT OUTER JOIN오른쪽 테이블 ( 아래 예제에서 emp 테이블 ) 에 조인시킬 컬럽의 값이 없는 경우 사용한다 .SQL> SELECT DISTINCT(e.deptno), d.deptno FROM dept d LEFT OUTER JOIN emp e ON d.deptno = e.deptno; RIGHT OUTER JOIN 왼쪽 테이블 ( 아래 예제에서 emp 테이블 ) 에 조인시킬 컬럽의 값이 없는 경우 사용한다 .SQL> SELECT DISTINCT(e.deptno), d.deptno FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno; FULL OUTER JOIN 양쪽 테이블에 다 Outer Join 을 거는것을 TWO-WAY OUTER JOIN 또는 FULL OUTER JOIN 이라 한다 . SQL>SELECT DISTINCT(a.deptno), b.deptno FROM emp a FULL OUTER JOIN dept b ON a.deptno = b.deptno;

Page 66: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

66

Oracle Query – Join(5)

CROSS JOINCartesian Product 값을 얻을때 사용 한다 . -- 아래 SQL 문장을 실행해 보자 SQL> SELECT ename FROM emp CROSS JOIN dept

INNER JOIN- 일반 조인시 ,(콤마 ) 를 생략하고 INNER JOIN 을 추가하고 , WHERE 절 대신 ON 절을 사용하면 된다 . - INNER 는 생략 가능 하다 . - 아래 두 조인의 결과 값은 같다 . -- INNER JOIN 을 사용한 문장SQL> SELECT e.empno, e.ename FROM dept d INNER JOIN emp e ON d.deptno=e.deptno; -- 일반적인 SQL 문장SQL> SELECT e.empno, e.ename FROM dept d , emp e WHERE d.deptno=e.deptno;

Page 67: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

67

Oracle Query – Join(6)

NATURAL JOIN - Equi Join 과 동일 하다고 보면 된다 . - 두 테이블의 동일한 이름을 가지는 칼럼은 모두 조인이 된다 . - 동일한 컬럼을 내부적으로 찾게 되므로 테이블 Alias 를 주면 오류가 발생 한다 . - 동일한 컬럼이 두개 이상일 경우 JOIN~USING 문장으로 조인되는 컬럼을 제어 할 수 있다 . - 아래 두 조인의 결과 값은 같다 . -- NATURAL JOIN 을 사용한 SQL 문장 .SQL> SELECT empno, ename, deptno FROM emp NATURAL JOIN dept

-- 일반적인 SQL 문장SQL> SELECT e.empno, e.ename, d.deptno FROM emp e, dept d WHERE e.deptno=d.deptno

JOIN ~ USING - NATURAL JOIN 의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데 , USING 문을 사용하면 컬럼을 선택해서 조인을 할

수가 있다 . - USING절 안에 포함되는 컬럼에 Alias 를 지정하면 오류가 발생 한다 . -- 일반적인 사용 방법SQL> SELECT e.empno, e.ename, deptno FROM emp e JOIN dept d USING(deptno)

Page 68: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

68

Oracle Query – Join(6)

ON 구문- 조인 조건을 지정 할 수 있다 . - 모든 논리 연산 및 서브쿼리를 지정할 수 있다 . -- 테스트를 위해 scott 유저에서 아래 insert 문장을 실행시킨다 .SQL> INSERT INTO bonus(ename, job, sal) VALUES('SMITH','CLERK',500); -- ON 절 사용 예제 (multi-table joins)SQL> SELECT e.empno, e.ename, e.sal FROM emp e JOIN dept d ON (e.deptno=d.deptno) JOIN bonus b ON (b.ename = e.ename) WHERE e.sal IS NOT NULL

Page 69: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

69

Oracle Query – 트랜잭션 (1)

트랜잭션 (TRANSACTION)- 트랜잭션은 데이터 처리의 한 단위 이다 .- 오라클 서버에서 발생하는 SQL 문들이 하나의 논리적인 작업 단위로써 성공하거나 실패하는 일련의 SQL 문을 트랙잭션이라

보면 된다 .- 오라클 서버는 트랜잭션을 근거로 데이터의 일관성을 보증 한다 .- 트랜잭션은 데이터를 일관되게 변경하는 DML 문장으로 구성된다 (COMMIT, ROLLBACK, SAVEPOINT)

TRANSACTION 의 시작- 실행 가능한 SQL 문장이 제일 처음 실행될 때

TRANSACTION 의 종료- COMMIT 이나 ROLLBACK - DDL 이나 DCL 문장의 실행 ( 자동 COMMIT) - 기계 장애 또는 시스템 충돌 (crash) - deadlock 발생 - 사용자가 정상 종료

자동 COMMIT 은 다음의 경우 발생 한다 .- DDL,DCL 문장이 완료 될 때 - 명시적인 COMMIT 이나 ROLLBACK없이 SQL*Plus 를 정상 종료 했을 경우

자동 ROLLBACK은 다음의 경우 발생 한다 .- SQL*Plus 를 비정상 종료 했을 경우 - 비정상적인 종료 , system failure

Page 70: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

70

Oracle Query – 트랜잭션 (2)

COMMIT 과 ROLLBACK - COMMIT : 변경사항 저장 - ROLLBACK : 변경사항 취소

COMMIT 과 ROLLBACK 의 장점- 데이터의 일관성을 제공 한다 . - 데이터를 영구적으로 변경하기 전에 데이터 변경을 확인하게 한다 . - 관련된 작업을 논리적으로 그룹화 할 수 있다 . - COMMIT, SAVEPOINT, ROLLBACK 문장으로 TRANSACTION 의 논리를 제어할 수 있다 .

COMMIT 이나 ROLLBACK 이전의 데이터 상태- 데이터 이전의 상태로 북구가 가능 하다 . - 현재 사용자는 SELECT 문장으로 DML 작업의 결과를 확인할 수 있다 . - 다른 사용자는 SELECT 문장으로 현재 사용자 사용한 DML 문장의 결과를 확인할 수 없다 . - 변경된 행은 LOCK 이 설정 되어서 다른 사용자가 변경 할 수 없다 .

COMMIT 이후의 데이터 상태- 데이터베이스에 데이터를 영구적으로 변경 - 데이터의 이전 상태는 완전히 상실 - 모든 사용자가 결과를 볼 수 있다 . - 변경된 행의 LOCK 이 해제되고 다른 사용자가 변경할 수 있다 . - 모든 SAVEPOINT 는 제거 된다 .

Page 71: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

71

Oracle Query – 숫자함수 (Number Functions)(1)

ABS(n) 절대값을 계산하는 함수이다 .SQL> SELECT ABS(-10) Absolute FROM DUAL;

--------10

CEIL(n) 주어진 값보다는 크지만 가장 근접하는 최소값을 구하는 함수이다 . SQL> SELECT CEIL(10.1) test FROM DUAL; SQL> SELECT CEIL(-10.1) test FROM DUAL ;

------- -------11 -10

FLOOR(n) 주어진 값보다 작거나 같은 최대 정수 값을 구하는 함수이다 . CEIL 함수와 비교해 보자 . SQL> SELECT FLOOR(10.1) test FROM DUAL ; SQL> SELECT FLOOR(-10.1) test FROM DUAL ;

------- -------10 -11

MOD(m, n) m 을 n 으로 나눈 나머지를 반환 한다 . n 이 0일 경우 m 을 반환 한다 . SQL> SELECT MOD(9, 4) test FROM DUAL ;

-------1

POWER(m, n) m 의 n승 값을 계산 한다 . SQL> SELECT POWER(4, 2) test FROM DUAL ;

-------16

Page 72: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

72

Oracle Query – 숫자함수 (Number Functions)(2)

ROUND(n, [m]) n값의 반올림을 하는 함수로 m 은 소숫점 아래 자릿 수를 나타 낸다 . SQL> SELECT ROUND(192.123, 1) test FROM DUAL ; SQL> SELECT ROUND(192.123, -1) test FROM DUAL ;

------- -------192.1 190

TRUNC(n, m) n값을 m 소숫점 자리로 반내림한 값을 반환 한다 . ROUND 함수와 비교해 보자 SQL> SELECT TRUNC(7.5597, 2) test FROM DUAL ; SQL> SELECT TRUNC(5254.26, -2) test FROM DUAL ;

------- -------7.55 5200

Page 73: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

73

Oracle Query – 문자열 처리 함수 (Character Functions)(1)

CONCAT(char1, char2) Concatenation 의 약자로 두 문자를 결합하는 역할을 한며 , "||" 연산자와 같은 역할을 한다 . SQL> SELECT CONCAT('Oracle', 'Club') FROM DUAL; ---------- OracleClub INITCAP(char) 주어진 문자열의 첫 번째 문자를 대문자로 변환시켜 준다 . SQL> SELECT INITCAP('kim jung sick') FROM DUAL; ------------- Kim jung sick LOWER(char), UPPER(char) LOWER 함수는문자열을 소문자로 , UPPER 함수는 문자열을 대문자로 변환 시켜 준다 . SQL> SELECT LOWER('KIM JUNG SICK') FROM DUAL; SQL> SELECT UPPER('kim jung sick') FROM DUAL; ------------- ------------- kim jung sick KIM JUNG SICK

LPAD(char1, n [,char2]) 왼쪽에 문자열을 끼어 놓는 역할을 한다 . n 은 반환되는 문자열의 전체 길이를 나타내며 , char1의 문자열이 n 보다 클 경우 char1을 n 개 문자열 만큼 반환 한다 .

SQL> SELECT LPAD('JUNG-SICK', 10, '*') FROM DUAL; ------------ *JUNG-SICK

RPAD(char1, n [,char2]) LPAD와 반대로 오른쪽에 문자열을 끼어 놓는 역할을 한다 .SQL> SELECT RPAD('JUNG-SICK', 10, '*') FROM DUAL; ------------ JUNG-SICK*

Page 74: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

74

Oracle Query – 문자열 처리 함수 (Character Functions)(2)

SUBSTR(char, m ,[n]) m 번째 자리부터 길이가 n 개인 문자열을 반환한 한다 . m 이 음수일 경우에는 뒤에서 M번째 문자부터 반대 방향으로 n 개의 문자를 반환한다 .

SQL> SELECT SUBSTR('JUNG-SICK', 3, 3) FROM DUAL; SQL> SELECT SUBSTR('JUNG-SICK', -3, 3) FROM DUAL; ----------- ----------- NG- ICK

LENGTH(char1) 문자열의 길이를 반환 한다 .SQL> SELECT LENGTH('JUNG-SICK') TEST FROM DUAL; ---------- 9

REPLACE(char1, str1, str2) 문자열의 특정 문자를 다른 문자로 변환 한다 . -- 대소문자를 구분한다SQL> SELECT REPLACE('JACK and JUE','J','BL') "Changes" FROM DUAL;--------------BLACK and BLUE

INSTR 문자열이 포함되어 있는지를 조사하여 문자열의 위치를 반환 한다 . 지정한 문자열이 발견되지 않으면 0이 반환 된다 . -- 지정한 문자 OK가 발견되지 않아서 0이 반환 .SQL> SELECT INSTR('CORPORATE FLOOR','OK') "Instring" FROM DUAL; ---------- 0

-- OR 이 있는 위치 2를 반환 . 왼쪽부터 비교를 한다는 것을 알 수 있다 .SQL> SELECT INSTR('CORPORATE FLOOR','OR') "Instring" FROM DUAL; ---------- 2

Page 75: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

75

Oracle Query – 문자열 처리 함수 (Character Functions)(3)

-- 왼쪽에서 3번째부터 시작을 해서 비교를 한다 . -- 2번째 OR 의 위치가 반환 됩니다 .SQL> SELECT INSTR('CORPORATE FLOOR','OR', 3) "Instring" FROM DUAL; ---------- 5TRIM 특정한 문자를 제거 한다 . 제거할 문자를 입력하지 않으면 기본적으로 공백이 제거 된다 .-- 0을 제거 한다 .SQL> SELECT TRIM(0 FROM 0009872348900) "TRIM Example" FROM DUAL;------------98723489 -- 어떤 문자도 입력하지 않으면 기본적으로 공백이 제거 된다 . SQL> SELECT NVL(TRIM (' '),' 공백 ') "TRIM Example" FROM DUAL;------------공백

-- LTRIMSQL> SELECT LTRIM('xyxXxyLAST WORD','xy') "LTRIM example" FROM DUAL;------------XxyLAST WORD -- RTRIMSQL> SELECT RTRIM('BROWNINGyxXxy','xy') "RTRIM example" FROM DUAL;-----------BROWNINGyxX

Page 76: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

76

Oracle Query – 날짜 처리 함수 (Date Functions)

LAST_DAY(d) 달의 마지막 날의 날짜를 반환 한다-- 오늘이 6월 5일 이니깐 , 6월달의 마지막 날 30일을 반환 한다 . SQL> SELECT SYSDATE today, LAST_DAY(SYSDATE) lastday FROM DUAL; TODAY LASTDAY------------ ---------------05-JUN-2000 30-JUN-2000 ADD_MONTHS(a, b) 함수는 a 의 날짜에 b 의 달을 더한 값을 반환 한다 .-- 오늘이 6월 5일 이니깐 , 3 개월이 더해진 9월 5일이 반환 된다 . SQL> SELECT TO_CAHR(ADD_MONTHS(SYSDATE,3),'RRRR/MM/DD' LASTDAY) "date“ FROM DUAL;------------ 2000/09/05 MONTH_BETWEEN(a1, a2) a1과 a2 사이의 달의 수를 NUMBER형 타입으로 반환 한다 .-- 달사이의 간격을 숫자형으로 반환 한다 . SQL> SELECT MONTHS_BETWEEN(TO_DATE('2000/06/05'), TO_DATE('2000/09/23')) "Date“ FROM DUAL;------------- -3.880635

ROUND(d[,F]) F 에 지정된 단위로 반올림 한다 . F 가 연도라면 연도 단위로 반올림 한다 .SQL> SELECT ROUND(TO_DATE('1998/09/11'), 'YEAR') FROM DUAL; ------------- 99-01-01

Page 77: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

77

Oracle Query – 변환 함수 (Conversion Functions)

TO_CHAR 함수는 DATE형 , NUMBER형을 VARCHAR2 형으로 변환 한다 . -- 오늘이 6월 10일 이니깐 , 6월이 출력된다 .SQL> SELECT TO_CHAR(SYSDATE) CHARTEST FROM DUAL; -------------- JUNE

-- 오늘 날짜가 문자형으로 출력된다 .SQL> SELECT TO_CHAR(SYSDATE, 'MONTH') CHARTEST FROM DUAL; -------------- 00/06/10 TO_DATE 함수는 CHAR, VARCHAR2형을 DATE 타입으로 변환한다 .-- '2000/06/16' 문자열이 날짜형으로 변환 된다 SQL> SELECT TO_DATE('2000/06/16','RRRR/MM/DD') FROM DUAL; ------------ 2000/06/16 TO_NUMBER 함수는 CHAR, VARCHAR2의 데이터 타입을 숫자형식으로 변환 한다 .-- '1210616' 문자열이 숫자형으로 변환 된다SQL> SELECT TO_NUMBER('1210616') FROM DUAL;------------ 1210616

Page 78: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

78

Oracle Query – General Functions

NVL NULL 값을 다른 값으로 바꿀 때 사용하며 , 모든 데이터 타입에 적용이 가능하다 .-- Commsion 이 없는 사원에 대해 0으로 바꾸어서 출력하는 예제 . SQL> SELECT empno, NVL(comm, 0) FROM emp WHERE deptno = 30;

...

DECODE 데이터 들을 다른 값으로 바꾸어 주며 , DECODE(VALUE, IF1, THEN1, IF2, THEN2...) 형태로 사용 할 수 있다 .VALUE 값이 IF1일 경우에 THEN1 값 으로 바꾸어 주고 VALUE 값이 IF2일 경우에는 THEN2 값 으로 바꾸어 준다 .-- 부서가 10 번이면 'ACCOUNTING' 를 20 번이면 'RESEARCH' 를 30 번이면 'SALES' 를 40 번이면 'OPERATIONS' 를 출력하는 예제이다 . SQL> SELECT deptno, DECODE(deptno, 10 , 'ACCOUNTING' , 20 , 'RESEARCH' , 30 , 'SALES' , 40 , 'OPERATIONS') FROM emp;

DEPTNO DECODE(DEP ---------- ---------- 20 RESEARCH 30 SALES 30 SALES 10 ACCOUNTING 20 RESEARCH

EMPNO NVL(COMM,0)---------- ----------- 7499 300 7521 500 7698 0 7844 0

Page 79: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

79

Oracle Query – General Functions

MERGE한 번에 조건에 따라 INSERT, UPDATE 가 가능 하다 . 해당 ROW가 있으면 UPDATE, 없으면 INSERT 문장이 실행 된다 .MERGE INTO target_table_name USING (table|view|subquery) ON (join condition)WHEN MATCHED THEN UPDATE SET col1 = val1[, col2 = val2…]WHEN NOT MATCHED THEN INSERT(...) VALUES(...) - INTO : DATA 가 UPDATE 되거나 INSERT 될 TABLE 이름을 지정 . - USING : 대상 TABLE 의 DATA 와 비교한 후 UPDATE 또는 INSERT 할 대상이 되는 DATA 의 SOURCE 테이블 또는 뷰를 지정 - ON : UPDATE 나 INSERT 를 하게 될 조건으로 , 해당 조건을 만족하는 DATA 가 있으면 WHEN MATCHED 절을 실행하게 되고 , 없으면 WHEN NOT MATCHED 이하를 실행하게 된다 . - WHEN MATCHED : ON 조건절이 TRUE 인 ROW에 수행 할 내용 - WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용

NULLIF- NULLIF(exp1, exp2) - exp1값과 exp2값이 동일하면 NULL 을 그렇지 않으면 exp1을 반환 - CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

COALESCE- COALESCE(expr1,expr2,expr3,…) - expr1이 NULL 이 아니면 expr1값을 그렇지 않으면 COALESCE(expr2,expr3,…)값을 반환 . - NVL 함수와 비슷하다 . -- 아래 문장을 실행해 보자 .SQL> SELECT COALESCE(comm,1) FROM emp;

Page 80: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

80

Oracle Query – General Functions

CASE 문장Simple CASE expression, DECODE 함수와 비슷하다SQL> SELECT deptno, CASE deptno WHEN 10 THEN 'ACCOUNTING' WHEN 20 THEN 'RESEARCH' WHEN 30 THEN 'SALES' ELSE 'OPERATIONS' END as "Dept Name" FROM emp;

Searched CASE expressionIF.. THEN .. ELSE 구문과 비슷 하다 . WHEN 절 다음에 여러 조건이 올 수 있다 .

SQL> INSERT INTO raise SELECT last_name , CASE WHEN job_id LIKE 'AD%' THEN '10%' WHEN job_id LIKE 'IT%' THEN '15%' WHEN job_id LIKE 'PU%' THEN '18%' ELSE '20%' END FROM employees;

Page 81: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

81

Oracle Query – 그룹함수 (1)

그룹 함수란 ?- 여러 행 또는 테이블 전체의 행에 대해 함수가 적용되어 하나의 결과값을 가져오는 함수를 말한다 .- GROUP BY절을 이용하여 그룹 당 하나의 결과가 주어지도록 그룹화 할 수 있다 .- HAVING절을 사용하여 그룹 함수를 가지고 조건비교를 할 수 있다 .- COUNT(*) 를 제외한 모든 그룹함수는 NULL값을 고려하지 않는다 .- MIN, MAX 그룹함수는 모든 자료형에 대해서 사용 할 수 있다 .

COUNT 함수는 검색된 행의 수를 반환 한다 .-- 검색된 행의 총 수 4 개를 반환 . 즉 4 개의 부서가 존재한다 .SQL> SELECT COUNT(deptno) FROM dept; ------------- 4

MAX 함수는 컬럼값 중에서 최대값을 반환 한다 .-- sal 컬럼값 중에서 제일 큰값을 반환 . 즉 가장 큰 급여를 반환 .SQL> SELECT MAX(sal) salary FROM emp; ------- 5000

MIN 함수는 컬럼값 중에서 최소값을 반환 한다 .-- sal 컬럼값 중에서 가장 작은 값 반환 . 즉 가장 적은 급여를 반환SQL> SELECT MIN(sal) salary FROM emp; -------- 800

Page 82: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

82

Oracle Query – 그룹함수 (2)

AVG 함수는 평균 값을 반환 한다 .-- 부서번호 30의 사원 평균 급여를 소수점 1자리 이하에서 반올림SQL> SELECT ROUND(AVG(sal),1) salary FROM emp WHERE deptno = 30;---------- 1566.7 SUM 함수는 검색된 컬럼의 합을 반환 한다 .-- 부서번호 30의 사원 급여 합계를 조회 .SQL> SELECT SUM(sal) salary FROM emp WHERE deptno = 30; --------- 9400 STDDEV 함수는 표준편차를 반환 한다 .-- 부서번호 30의 사원 급여 표준편차를 반환 . SQL> SELECT ROUND(STDDEV(sal),3) salary FROM emp WHERE deptno = 30; ---------- 668.331

Page 83: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

83

Oracle Query – GROUP BY와 HAVING(1)

GROUP BY- 특정한 컬럼의 테이터 들을 다른 데이터들과 비교해 유일한 값에 따라 무리를 짓는다 .- GROUP BY절을 사용하여 한 테이블의 행들을 원하는 그룹으로 나눈다 .- 컬럼명을 GROUP 함수와 SELECT 절에 사용하고자 하는 경우 GROUP BY뒤에 컬럼명을 추가 하면 된다 .-- 부서별로 그룹한 결과 값이며 , 부서별로 사원수를 조회한다 .SQL> SELECT b.deptno, COUNT(a.empno) FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY b.deptno;

-- 부서별로 그룹하여 부서번호 , 인원수 , 급여의 평균 , -- 급여의 합을 조회하는 예제 SQL> SELECT deptno, COUNT(*), ROUND(AVG(sal)) " 급여평균 ", ROUND(SUM(sal)) " 급여합계 " FROM emp GROUP BY deptno;

-- 업무별로 그룹하여 업무 , 인원수 , 평균 급여액 , -- 최고 급여액 , 최저 급여액 및 합계를 조회하는 예제SQL> SELECT job, COUNT(empno) "인원수 ",

AVG(sal) "평균급여액 ", MAX(sal) "최고급여액 ", MIN(sal) "최저급여액 ", SUM(sal) " 급여합계 " FROM emp GROUP BY job

DEPTNO COUNT(*)----- ---------- 10 3 20 5 30 6

DEPTNO COUNT(*) 급여평균 급여합계--------- ---------- ---------- ---------- 10 3 2998 8995 20 5 2175 10875 30 6 1567 9400

JOB 인원수 평균급여액 최고급여액 최저급여액 급여합계--------- ------- ---------- ---------- --------- --------ANALYST 2 3000 3000 3000 6000CLERK 4 1037.5 1300 800 4150MANAGER 3 2840 2975 2695 8520PRESIDENT 1 5000 5000 5000 5000SALESMAN 4 1400 1600 1250 5600

Page 84: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

84

Oracle Query – GROUP BY와 HAVING(2)

HAVING 절 WHERE 절에 GROUP 함수를 사용할 수 없다 .HAVING절은 GROUP 함수를 가지고 조건비교를 할 때 사용 한다 .WHERE → GROUP BY → HAVING → ORDER BY순으로 쿼리문이 와야 한다 .

-- 사원수가 5명이 넘는 부서의 부서명과 사원수 조회SQL> SELECT b.dname, COUNT(a.empno) FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY dname HAVING COUNT(a.empno) > 5

-- 전체 월급이 5000을 초과하는 각 업무에 대해서 업무와 월급여 합계를 조회-- 단 판매원은 제외하고 월 급여 합계로 내림차순 정렬 . SQL> SELECT job, SUM(sal) " 급여합계 " FROM emp WHERE job != 'SALES' -- 판매원은 제외 GROUP BY job -- 업무별로 Group By HAVING SUM(sal) > 5000 -- 전체 월급이 5000을 초과하는 ORDER BY SUM(sal) DESC; -- 월급여 합계로 내림차순 정렬

DNAME COUNT(A.EMPNO)-------------- --------------RESEARCH 6SALES 6

JOB 급여합계--------- ----------MANAGER 8520ANALYST 6000SALESMAN 5600

Page 85: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

85

Oracle Query – Subquery(1)

서브쿼리란 ?- 서브쿼리는 다른 하나의 SQL 문장의 절에 NESTEDED된 SELECT 문장 이다 .- SELECT, UPDATE, DELETE, INSERT 와 같은 DML 문과 CREATE TABLE 또는 VIEW에서 이용 될 수 있다 .- 알려지지 않은 조건에 근거한 값 들을 검색하는 SELECT 문장을 작성하는데 유용 하다 .

가이드라인- 서브쿼리는 괄호로 묶어야 한다 .- 단일 행 연산자 (=, >, >=, <, <=, <>, !=) 와 복수 행 연산자 (IN, NOT IN, ANY, ALL, EXISTS) 들이 서브쿼리에 사용 된다 .- 서브쿼리는 연산자의 오른쪽에 위치해야 한다 .

서브쿼리의 유형- 단일 행 (Sing-Row) 서브쿼리 : SELECT 문장으로 부터 오직 하나의 행 만을 검색하는 질의이다 .- 다중 행 (Multiple-Row) 서브쿼리 : SELECT 문장으로부터 하나 이상의 행을 검색하는 질의이다 .- 다중 열 (Multiple-Column) 서브쿼리 : SELECT 문장으로부터 하나 이상의 컬럼을 검색하는 질의이다 .- FROM 절상의 서브쿼리 (INLINE VIEW) : FROM 절상에 오는 서브쿼리로 VIEW처럼 작용 한다 .- 상관관계 서브 쿼리 : 바깥쪽 쿼리의 컬럼 중의 하나가 안쪽 서브쿼리의 조건에 이용되는 처리 방식 이다 .

Page 86: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

86

Oracle Query – Subquery(2)

다중 행 (Multiple-Row) 서브쿼리- 하나 이상의 행을 반환하는 서브쿼리를 다중 행 서브쿼리라고 한다 .복수 행 연산자 (IN, NOT IN, ANY, ALL, EXISTS) 를 사용 할 수 있다 .

IN 연산자의 사용 예제-- 부서별로 가장 급여를 많이 받는 사원의 정보를 출력하는 예제SQL> SELECT empno,ename,sal,deptno FROM emp WHERE sal IN (SELECT MAX(sal) FROM emp GROUP BY deptno);

ANY 연산자의 사용 예제ANY 연산자는 서브쿼리의 결과값중 어느 하나의 값이라도 만족이 되면 결과값을 반환 한다 .SQL> SELECT ename, sal FROM emp WHERE deptno != 20 AND sal > ANY (SELECT sal FROM emp WHERE job='SALESMAN');

EMPNO ENAME SAL DEPTNO---------- -------- --------- --------- 7698 BLAKE 2850 30 7788 SCOTT 3000 20 7902 FORD 3000 20 7839 KING 5000 10

ENAME SAL---------- ----------ALLEN 1600BLAKE 2850CLARK 2450...

Page 87: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

87

Oracle Query – Subquery(3)

ALL 연산자의 사용 예제ALL 연산자는 서브쿼리의 결과값 중 모든 결과 값이 만족 되야만 결과값을 반환 한다 .SQL> SELECT ename, sal FROM emp WHERE deptno != 20 AND sal > ALL (SELECT sal FROM emp WHERE job='SALESMAN'); EXISTS 연산자의 사용 예제EXISTS 연산자를 사용하면 서브쿼리의 데이터가 존재하는가의 여부를 먼저 따져 존재하는 값 들만을 결과로 반환해 준다 .서브쿼리에서 적어도 한 개의 행을 반환하면 논리식은 참이고 그렇지 않으면 거짓 이다 . -- 사원을 관리할 수 있는 사원의 정보 조회 예제 SQL> SELECT empno, ename, sal FROM emp e WHERE EXISTS (SELECT empno FROM emp WHERE e.empno = mgr)

ENAME SAL---------- ----------BLAKE 2850CLARK 2450KING 5000

EMPNO ENAME SAL---------- -------- -------- 7566 JONES 2975 7698 BLAKE 2850 7782 CLARK 2450…..

Page 88: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

88

Oracle Query – Subquery(4)

다중 열 (Multiple-Column) 서브쿼리다중 열 서브쿼리란 서브쿼리의 결과 값이 두 개 이상의 컬럼을 반환하는 서브쿼리 이다 .

Pairwise(쌍비교 ) Subquery서브쿼리가 한 번 실행되면서 모든 조건을 검색해서 주 쿼리로 넘겨 준다 .SQL> SELECT empno, sal, deptno FROM emp WHERE (sal, deptno) IN ( SELECT sal, deptno FROM emp WHERE deptno = 30 AND comm is NOT NULL ); EMPNO SAL DEPTNO---------- ---------- ---------- 7521 1250 30 7654 1250 30 7844 1500 30 7499 1600 30

Page 89: HTTP [hypertext transfer protocol] 인터넷에서 , 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다

89

Oracle Query – Subquery(5)

FROM 절상의 서브쿼리 (INLINE VIEW)INLINE VIEW란 FROM 절 상에 오는 서브쿼리로 VIEW처럼 작용 한다 . -- 급여가 부서번호 20의 평균 급여보다 크고 , 사원을 관리하는 사원으로서 -- 부서번호 20에 속하지 않은 사원의 정보를 조회하는 SQL 문장이다 .SQL> SELECT b.empno,b.ename,b.job,b.sal, b.deptno FROM (SELECT empno FROM emp WHERE sal >(SELECT AVG(sal) FROM emp WHERE deptno = 20)) a, emp b WHERE a.empno = b.empno AND b.mgr is NOT NULL AND b.deptno != 20 EMPNO ENAME JOB SAL DEPTNO---------- ---------- --------- ---------- ---------- 7698 BLAKE MANAGER 2850 30 7782 CLARK MANAGER 2450 10