[Servlet] 데이터 저장 영역

데이터 저장 영역


서블릿에서는 데이터를 저장하는 영역으로 페이지 객체, 요청 객체, 세션 객체, ServletContext 객체 네 가지를 사용할 수 있다.

1) 페이지 객체는 현재 페이지 내에서만 사용할 변수를 저장하는 영역.

2) 요청 객체는 요청 객체가 유지되는 영역에서 사용할 변수를 저장하는 영역.

3) 세션 객체는 웹 브라우저가 종료되기 전가지나 세션이 끊어지기 전까지 사용할 변수를 저장하는 영역.

클라이언트마다 독립적으로 데이터를 저장하고 관리할 수 있는 최고 범위의 데이터 저장 영역이다. 여기에 저장되는 데이터는 클라이언트가 웹 브라우저를 종료하기 전까지나 세션이 끊어지기 전까지는 사라지지 않는다.

4) ServletContext 객체는 서버가 종료되기 전까지 사용할 변수를 저장하는 영역.


이들 각 영역에 저장된 데이터를 사용해서 여러 페이지에 걸쳐 필요한 범위까지 변수를 선언할 수 있다.


1. 요청 객체

(1) 객체: ServletRequest 또는 HttpServletRequest 객체

(2) 추가: request.setAtrtribute("키","값");

(3) 삭제: request.removeAttribute("키","값");

(4) 획득: Object obj = request.getAttribute("키");


2. 세션객체

(1) 객체: HttpSession 객체

(2) 생성: session = request.getSession() 또는 request.getSession(boolean); 

cf.) getSession(true): 기존에 세션 객체가 없으면 새오룬 HttpSession 객체를 생성하라는 의미이다.

(3) 추가: session.setAtrtribute("키","값");

(4) 삭제: session.removeAttribute("키","값");

(5) 획득: Object obj = session.getAttribute("키");

세션 객체를 사용하려면 각 페이지마다 객체를 사용해야 한다. 세션 객체에 저장된 데이터는 클라이언트별로 데이터를 저장하고 관리한다.

때문에 요청 객체로부터 세션 객체를 생성한다. 데이터늬 추가나 삭제, 획득은 요청 객체에서와 방법이 같다.


3. Servletcontext 객체

(1) 객체: ServletContext 객체

(2) 생성: application = this.getServletContext();

(3) 추가: application.setAttribute("키","값");

(4) 삭제:application.removeAttribute("키","값");

(5) 획득: Object obj = application.getAttribute("키");

특이한 점이자 중요한 점은 현재의 서블릿에서 Servletcontext 객체를 획득한다는 것이다. 이것은 서버 자체의 저장 영역을 사용한다는 의미이다.

서블릿은 서버에서 실행이 되기 때문에 this는 서블릿 자체를 이야기하고, 서블릿과 연결되어 있는 서버는 모든 클라이언트에 공통적인 사항이다. 정리하면 서버의 데이터 저장 영역인 ServletContext 객체를 획득하면 

여기에 저장된 데이터는 클라이언트가 모두 공유할 수 있다는 의미이다.




'Programing > JSP/Servlet' 카테고리의 다른 글

[Servlet] 서블릿 필터  (0) 2014.12.10
[Servlet] 서블릿 기초  (0) 2014.12.10
[Servlet] 초기화 파라미터  (0) 2014.12.09
[Servlet] web.xml 주요 태그  (0) 2014.12.09
[Servlet] 웹 프로그램 기본파일(tomcat환경)  (0) 2014.12.09

[Servlet] 초기화 파라미터


초기화 파라미터


초기화 매개변수는 웹 페이지가 실행될 때 필요한 데이터를 전달해 준다. 그리고 초기화 매개 변수는 서블릿 프로그램이 처음 실행될 때 클라이언트가 아닌 서버로부터 넘겨받는 값이다.

웹 프로그램은 모든 실행 시작점이 웹 서버의 구동이다. 이때 web.xml 파일이 자동으로 로드된다.

여기에 초기화 매개변수를 등록해서 웹 페이지가 매개변수의 값을 읽어들인다.

이렇게 해서 서블릿을 재컴파일하지 않고서도 원하는 초기값을 웹 페이지에 전달할 수 있다.


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_01_Servlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

ServletConfig config = this.getServletConfig();

//ServletConfig 객체를 획득한다.

//실제로는 HttpServlet이 ServletConfig를 구현했기 때문에

//이렇게 객체를 획득할 필요 없이 this를 사용해도 무방하다.

String start = config.getInitParameter("start");

String end = this.getInitParameter("end");

//config 객체를 통해서도 this를 통해서도 초기화 매개변수를 획득할 수 있다.

int start_su = Integer.parseInt(start);

int end_su = Integer.parseInt(end);

//초기화 매개변수로 전달된 값은 문자열이므로 숫자로 변환한다.

int hap = 0;

for(int i = start_su; i <= end_su; ++i) 

hap += i;

//시작 수에서 끝 수까지의 총합을 구한다.

response.setContentType("text/html;charset=euc-kr");

//응답에 대한 MIME과 Encode를 설정한다.

PrintWriter out = response.getWriter();

//출력 객체를 생성한다.

out.println("<html><body><center>");

out.println(start_su + " ~ " + end_su + "사이의 합은 ");

out.println(hap + "입니다.");

out.println("</center></body></html>");

//결과를 출력한다.

out.close();

//출력 객체를 종료한다.

}

}


web.xml 파일에 서블릿을 등록하면서 다음과 같이 초기화 매개변수로 start와 end의 값을 등록한다. 등록되는 모든 데이터는 자료형이 String이다.

<servlet>

<servlet-name>My01</servlet-name>

<servlet-class>Round14_01_Servlet</servlet-class>

<init-param>

<param-name>start</param-name> // String start = config.getInitParameter("start");에서 start의 초기값은 '1'이다.

<param-value>1</param-value>

</init-param>

<init-param>

<param-name>end</param-name> // String end = this.getInitParameter("end");에서 end의 초기값은 '10'이다.

<param-value>10</param-value>

</init-param>

</servlet>

<servlet>

<servlet-name>My01</servlet-name>

<servlet-class>Round14_01_Servlet</servlet-class>

</servlet>


1. Servlet 초기화 파라미터의 종류


(1) 초기화 파라미터

처음 WAS가 기동될 때 읽어 들이는 파라미터값을 초기화 파라미터라고 합니다.

종류에는 1) 서블릿 초기화 파리미터 와 2) 컨텍스트 초기화 파라미터가 있습니다.


(2) 서블릿 초기화 파라미터(Servlet Initialize Parameter)

1) web.xml에 다음과 같이 기술하고

<servlet>

     <init-param><!-- 초기화 파라미터라고 불리는 설정 값을 지정할 때 사용한다.-->

          <param-name>AdminEmail</param-name><!-- 초기화 파라미터의 이름을 지정한다.-->

          <param-value>admin@admin.com</param-value><!-- 초기화 파라미터의 값을 지정한다.-->

     </init-param>

</servlet>


2) Servlet Code에서 

getServletConfig().getInitParameter("AdminEmail"));  와 같은 코드로 초기화 파라미터 값을 얻을 수 있습니다.

서블릿 초기화 파라미터는 컨텍스트 초기화 파라미터와 달리 서블릿에서만 읽어 들일 수 있습니다.

이 값들을 JSP에서 사용하기 위해서는 HttpServletRequest의 Attribute 속성을 이용해서 JSP로 모델 정보를 넘겨야 합니다.

example)

< TODO Servlet>

String AdminEmail = (String)getServletConfig.getInitParameter("AdminEmail");

request.setAttribute("AdminEmail",AdminEmail);

<TODO JSP>

String AdminEmail = (String)request.getAttribute("AdminEmail");


(3) 컨텍스트 초기화 파라미터(Context Initialize Parameter)

1) web.xml에 다음과 같이 기술하고

<context-param>

     <param-name>adminEmail</param-name>

     <param-value>admin@admin.com</param-value>

</context-param>

주의 : <context-param>은 <web-app> 하위에 존재하지 <servlet> 하위에 존재하지 않습니다.


2) Servlet혹은 JSP에서

getServletContext().getInitParameter("adminEmail");    

와 같은 코드로 코딩하면 값을 얻을 수 있습니다.


(4) 정리

정리하면. 서블릿 초기화 파라미터는 ServetConfig 에서 읽어들이며, ServletConfig는 서블릿 당 하나가 생성됩니다.

컨텍스트 초기화 파라미터는 ServetContext에서 읽어들이고, 웹 어플리케이션 당 하나가 생성됩니다.


즉 웹 어플리케이션 전체의 전역적인 파라미터 설정을 원한다면 컨텍스트 초기화 파라미터에 정의 하시면 되고,특정 서블릿에서 처리 하기 위한 어떤 값을, 즉 서블릿범위 정도에서 처리하기 위한 값을 정의 한다면 서블릿 초기화 파라미터를 사용하면 되겠습니다.


(5) 잘 정리된 표




'Programing > JSP/Servlet' 카테고리의 다른 글

[Servlet] 서블릿 필터  (0) 2014.12.10
[Servlet] 서블릿 기초  (0) 2014.12.10
[Servlet] 데이터 저장 영역  (0) 2014.12.10
[Servlet] web.xml 주요 태그  (0) 2014.12.09
[Servlet] 웹 프로그램 기본파일(tomcat환경)  (0) 2014.12.09

[Servlet] web.xml 주요 태그


web.xml 주요 태그


web.xml파일은 웹 컨테이너와 웹 프로그램의 파일을 서로 연결하고 관리하는 설정 파일이다.

웹 프로그램은 항상 자바를 지원하는 웹 컨테이너에서 실행된다. 때문에 해당 웹 컨테이와의 연게를 반드시 염두에 두어야 한다. 프로젝트별로 환경을 설정하고 파일들 간에 관계를 설정할 때는 web.xml 파일이 기준이 된다. 

web.xml 파일은 웹 서버가 서블릿 파일을 인식하게 해준다.

이 파일은 서블릿의 등록뿐 아니라 필터 클래스의 등록과 맵핑 등 다양한 설정을 지원한다.

주목할 점은 web.xml이 웹 서버를 구동할 때 읽혀진다는 것이다. 만일 특정 작업에 필요해서 web.xml 파일을 수정하고 웹 서버를 재구동하지 않으면 당연히 web.xml 파일은 인식되지 않는다.


<web-app>

<display-name> 프로젝트명 </display-name>


<filter>  <filter> 전체

<filter-name> 필터 닉 네임 </filter-name>  <filter-name>

<filter-class> 필터 클래스 풀 네임(패키지 명까지) </filter-name>  ⓓ 

<init-param> ⓔ <init-param> 전체

<param-name> 매개변수 명 </param-name>

<param-value> 값 </param-value>

</init-param>

</filter> 

<filter-mapping>  ⓕ <filter-mapping> 전체

<filter-name> 필터 닉 네임 </filter-name> 

<url-pattern> 필터 클래스가 실행될 위치 </url-pattern>

</filter-mapping>


<serlvet> ⓙ <serlvet> 전체

<servlet-name> 서블릿 닉 네임 </servlet-name>

<serlvet-class> 서블릿 클래스 풀네임(패키지 명까지) </servlet-class> ⓜ </servlet-class> 전체

<init-param>

<param-name> 매개변수명 </param-name>

<param-value> 값 </param-value>

</init-param>

<load-on-startup> 실행 순서 값(0값은 서버임의실행) </load-on-startup>

</servlet>

<servlet-mapping>  <servlet-mapping> 전체

<servlet-name> 서블릿 닉 네임 </servlet-name>

<url-pattern> url 패턴 </url-pattern>  

</servlet-mapping>


<welcome-file-list> <welcome-file-list> 전체

<welcome-file> 기본 파일 </welcome-file>

</welcom-file-list>

</wep-app>


ⓐ web.xml 파일이 속한 프로젝트의 이름을 적는다.


ⓑ 프로젝트에서 사용될 필터 클래스를 등록한다.


ⓒ 필터 클래스의 닉네임을 적는다. 임의로 정해도 된다.


ⓓ 해당 클래스에 대해 패키지의 이름까지 전체를 등록한다. 패키지가 아니면 클래스 이름만 등록한다.


ⓔ 해당 필터 클래스가 실행되면서 기본적으로 갖는 초기화 매개 변수를 적는다. 여러 개를 등록해도 된다. void main(String [] ar) 메서드의 ar[0], ar[1] 등과 같은 개념이라고 보면된다.

void main() 메서드에서는 ar이라는 이름으로 사용하지만 여기서는 변수의 이름과 값을 모두 등록해야 한다.


ⓕ 해당 필터 클래스가 실행되는 시점을 등록한다.


ⓗ 실행될 필터 클래스의 닉네임을 적는다. ⓒ에서 적은 이름과 대소문자까지 같아야 한다.


ⓘ 실행될 시점을 지정한다.


ⓙ 서블릿을 웹 컨테이너에 등록하고 있다. 여러 개를 등록해도 된다.


ⓚ 서블릿의 닉네임을 등록한다. 닉네임은 클래스의 이름이 너무 길 때 편의상 사용한다. 클래스 이름이 짧으면 클래스 이름과 동일하게 등록해도 무방하다.


ⓜ 필터 클래스처럼 서블릿이 실행될 때 초기값으로 전달될 매개변수를 적고 있다. 여러 개를 등록해도 무방하다.


ⓝ 웹 서버가 구동될 때 서블릿의 init() 메서드를 미리 실행할지 지정하고 있다. 각 서블릿의 생성/초기화 순서를 의미한다.

(값이 작은 것이 먼저 실행)


ex.) B 서블릿 -> A 서블릿 -> C 서블릿 순: B:1, A:2, C:3으로 지정한다.


ⓞ 앞서 등록한 서블릿을 웹 브라우저에서 호출하면서 사용하는 이름을 등록하는 코드이다. 


ⓟ 실행 시점을 지정한다. ex.) <url-pattern> /*.do </url-pattern> 로 지정하면, URL do로 끝나면 해당 서블릿이 실행된다.


ⓠ 클라이언트의 사용자가 웹 브라우저로 웹 서버에 접속할 때 기본적으로 보여주는 메인 페이지를 등록하고 있다.





'Programing > JSP/Servlet' 카테고리의 다른 글

[Servlet] 서블릿 필터  (0) 2014.12.10
[Servlet] 서블릿 기초  (0) 2014.12.10
[Servlet] 데이터 저장 영역  (0) 2014.12.10
[Servlet] 초기화 파라미터  (0) 2014.12.09
[Servlet] 웹 프로그램 기본파일(tomcat환경)  (0) 2014.12.09

[Servlet] 웹 프로그램 기본파일(tomcat환경)


웹 프로그램 기본파일(tomcat환경)


또 찾아서 있으면 추가하겠음



WEB-INF/web.xml:  프로젝트의 속성을 설정하는 파일


META-INF/context.xml: 서버 환경을 설정하는 파일


%JAVA_HOME%/jre/lib/ext: 로컬 응용 프로그램을 실행하기 위한 폴더


tomcat7/common/lib: 톰캣을 이용하는 웹 프로그램을 실행하기 위한 폴더, 모든 프로젝트에 공통으로 적용되는 라이브러리 파일을 인식한다.

cf.) %JAVA_HOME%/jre/lib 폴더나 %JAVA_HOME%/jre/lib/ext  폴더 내의 JAR 파일들도 자동으로 인식된다.


C:\\Web_Java\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps: 이클립스에서 웹 프로그램이 실행될 때 파일 구조가 변경


tomcat7/conf/server.xml: 웹 서버를 구동하면서 사용할 포트를 설정하기 위해 인식한다.


tomcat7/conf/web.xml: 모든 프로젝트에 공통으로 적용되는 환경을 설정하기 위해 인식한다.


[프로젝트 이름]/WEB-INF/web.xml: 프로젝트별로 적용되는 환경을 설정하기 위해 인식한다.


[프로젝트 이름]/WEB-INF/lib: 프로젝트별로 적용되는 라이브러리 파일을 인식한다.


[프로젝트 이름]/WEB-INF/classes: 프로젝트별로 적용되는 서블릿 파일을 인식하고 설정에 따라 init() 메서드를 실행한다. <load-on-start> 태그로 정의한다.



'Programing > JSP/Servlet' 카테고리의 다른 글

[Servlet] 서블릿 필터  (0) 2014.12.10
[Servlet] 서블릿 기초  (0) 2014.12.10
[Servlet] 데이터 저장 영역  (0) 2014.12.10
[Servlet] 초기화 파라미터  (0) 2014.12.09
[Servlet] web.xml 주요 태그  (0) 2014.12.09

故 신해철_ 저 당당함





오늘만 100번은 들은거 같다. 만화 주제곡을 만드라고 하니까 이렇게 웅장하고 멋진 곡을 만들어 냄.










사실 신해철하면 자기주장 지나치고, 자기 잘난 맛에 사는 사람으로 생각했음. 사실 별 관심도 없었음.










우연히 유투브에서 본 신해철의 대마초 사건으로 경찰 취조를 받고 있는 동영상을 보게됨. (손석희 청순ˇˇ)












보이시는가~~ 경찰 수사에서 심리적으로 위축될 상황인데도 손 자세며 눈빛이며.. 무엇보다 고개숙이지 않는 저 당당한 모습

이게 신해철의 진짜 모습일지 모름.










잘생겼다... 멋있다... 사이즈가 장난이 아님. 자신이 불법이라고 생각했다면 저런 당당함은 나오지 않음. 사실 대마초 피었다고 남에게 피해주지 않지....

분명 자신만의 논리가 있음.











마왕이라 불리우며 항상 카리스마 넘치고, 세상 앞에 자신의 주장을 떳떳하게 펼침. 전공이 철학이 었다지...











겉은 강인하고 카리스마 넘치는 모습 속에서도, 이렇게 여리고 섬세한 감수성까지 있다니...

그를 일찍 알았더라면...


이쯤하고.. Servlet 필터에 대해 정리해야함.ㅠ







'낙서장' 카테고리의 다른 글

Nocturne  (0) 2014.12.29
불위야 비불능야  (0) 2014.12.22
블로그 개설  (0) 2014.11.25

[DBMS_Oracle] 시퀀스


시퀀스


1. 시퀀스 개념 이해와 시퀀스 생성

- 오라클에서는 행을 구분하기 위해서 기본 키를 두고 있습니다. 기본 키는 중복된 값을 가질 수 있으므로 항상 유일한 값을 가져야 합니다. 

- 기본 키가 유일한 값을 갖도록 사용가가 직접 값을 생성해내려면 부담이 클 것입니다. 

- 시퀀스는 블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기이므로 시퀀스를 기본 키로 사용하게 되면 사용자의 부담을 줄일 수 있습니다.


2. 뷰의 기본 테이블

다음은 시퀀스를 생성하기 위한 기본 형식입니다. 

CREATE SEQUENCE sequence_name 

                [START WITH n]                             ① 

                [INCREMENT BY n]                         ② 

                [{MAXVALUE n | NOMAXVALUE}]     ③

                [{MINVALUE n | NOMINVALUE}]       ④

                [{CYCLE | NOCYCLE}]                    

                [{CACHE n | NOCACHE}]                ⑥ 

① START WITH 

시퀀스 번호의 시작값을 지정할 때 사용됩니다. 만일 1부터 시작되는 시퀀스를 생성하려면 START WITH 1이라고 기술하면 됩니다. 


② INCREMENT BY 

연속적인 시퀀스 번호의 증가치를 지정할 때 사용됩니다. 만일 1씩 증가하는 시퀀스를 생성하려면 INCREMENT BY 1이라고 기술하면 됩니다. 


③ MAXVALUE n | NOMAXVALUE 

MAXVALUE 은 시퀀스가 가질 수 있는 최대값을 지정합니다. 만일 NOMAXVALUE를 지정하게 되면 ASCENDING 순서일 경우에는 1027승이고 DESCENDING 순서일 경우에는 -1로 설정됩니다.


④ MINVALUE n | NOMINVALUE

MINVALUE 은 시퀀스가 가질수 있는 최소값을 지정합니다. 만일 NOMINVALUE을 지정하게 되면 ASCENDING 순서일 경우에는 1이고 DESCENDING 순서일 경우에는 1026승으로 설정됩니다.


⑤ CYCLE | NOCYCLE

CYCLE 은 지정된 시퀀스 값이 최대값까지 증가가 완료되게 되면 다시 START WITH 옵션에 지정한 시작 값에서 다시 시퀀스를 시작하도록 합니다. NOCYCLE은 증가가 완료되게 되면 에러를 유발시킵니다. 


⑥ CACHE n | NOCACHE 

CACHE 은 메모리상의 시퀀스 값을 관리하도록 하는 것인데 기본 값은 20입니다. NOCACHE는 원칙적으로 메모리 상에서 시퀀스를 관리하지 않습니다.


다음은 부서 번호를 자동으로 부여해주는 시퀀스 객체를 생성하는 문장입니다. 

CREATE SEQUENCE DEPT_DEPTNO_SEQ

INCREMENT BY 10

START WITH 10;

시작 값이 10이고 10씩 증가하는 시퀀스 EMP_SEQ을 생성합니다. 


3. 시퀀스 관련 데이터 딕셔너리

- 사용자가 작성한 객체들의 정보를 저장하고 있는 데이터 딕셔너리의 이름을 보면 다음과 같은 규칙성이 있습니다. 

- 테이블(TABLE) 객체에 대한 정보를 저장하는 데이터 딕셔너리는 USER_TABLES이고, 뷰(VIEW)객체에 대한 정보를 저장하는 데이터 딕셔너리는 USER_VIEWS이므로 이번 장에서 새로 배운 시퀀스(SEQUENCE)에 대한 자료사전의 이름은 USER_SEQUENCES 이라고 사료될 것입니다.

- 생성된 시퀀스 객체에 대한 정보를 저장하는 데이터 딕셔너리로는 USER_SEQUENCES가 있습니다. 


(1)  시퀀스 관련 데이터 딕셔너리

시퀀스 객체의 정보를 살펴봅시다. 

1) 우선 데이터 딕셔너리 USER_SEQUENCES의 테이블 구조를 먼저 살펴봅시다. 

DESC USER_SEQUENCES;

SEQUENCE_NAME은 시퀀스 객체의 이름을 저장하고 

MIN_VALUE는 최소값, MAX_VALUE는 최대값. 

INCREMENT_BY는 증가치에 대한 정보를 가지고 있으며, 

CYCLE_FLAG는 CYCLE옵션을 사용하는지, 하지 않는지에 대한 정보를 가지며

LAST_NUMBER는 마지막 숫자 값을 가지고 있습니다. 


2) 데이터 딕셔너리 USER_SEQUENCES로 현재 사용 중인 시퀀스 객체의 정보를 살펴봅시다. 

SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE,

INCREMENT_BY, CYCLE_FLAG

FROM USER_SEQUENCES;


지금까지 생성한 시퀀스 객체는 DEPT_DEPTNO_SEQ 한 개이기에 데이터 딕셔너리에도 DEPT_DEPTNO_SEQ 시퀀스 객체 하나에 대한 정보만 나타납니다. 

INCREMENT_BY가 증가치를 지정하는 컬럼으로 10씩 증가한다고 증가치가 설정되어 있고 MIN_VALUE와 MAX_VALUE, CYCLE 옵션 값은 따로 지정하지 않았으므로 기본 값인 1과 1027, N(사이클을 사용하지 않겠다)으로 지정되어 있습니다. 


4. CURRVAL, NEXTVAL 

- 시퀀스의 현재 값을 알아내기 위해서 CURRVAL를 사용하고, 다음 값을 알아내기 위해서는 NEXTVAL를 사용합니다. 

CURRVAL : 현재 값을 반환한다.

NEXTVAL : 현재 시퀀스값의 다음 값을 반환한다


- CURRVAL에 새로운 값이 할당되기 위해서는 NEXTVAL로 새로운 값을 생성해야 합니다. 

- 즉, NEXTVAL로 새로운 값을 생성한 다음에 이 값을 CURRVAL에 대체하게 됩니다. 

NEXTVAL, CURRVAL을 사용할 수 있는 경우와 사용할 수 없는 경우를 살펴봅시다. 


- NEXTVAL, CURRVAL을 사용할 수 있는 경우

서브 쿼리가 아닌 SELECT 문

INSERT 문의 SELECT 절

INSERT 문의 VALUE절

UPDATE문의 SET 절


- NEXTVAL, CURRVAL을 사용할 수 없는 경우

VIEW의 SELECT 절

DISTINCT 키워드가 있는 SELECT 문

GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문

SELECT, DELETE, UPDATE의 서브 쿼리

CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값 


- 실습 [CURRVAL, NEXTVAL 사용하기]

CURRVAL, NEXTVAL의 실제 사용 예를 살펴봅시다.

 

1) NEXTVAL로 새로운 값을 생성해야 합니다.

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;


2) 시퀀스의 현재 값을 알아내기 위해서 CURRVAL를 사용합니다. 

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;


5. 시퀀스 실무에 적용하기 

- 시퀀스는 99.9%가 INSERT 연산과 같이 사용되어 컬럼 값을 자동으로 발생시키는 용도로 사용됩니다. 

- 사원 테이블을 생성하면서 사원 번호를 기본 키로 설정하였습니다. 

- 기본 키는 반드시 유일한 값을 가져야 합니다. 사용자가 새로운 사원을 추가할 때마다 유일한 사원번호를 INSERT 해야 하는 번거로움이 있습니다. 

- 사원 번호를 생성하는 시퀀스 객체를 사용하여 사원 번호가 자동 생성되도록 한다면 이러한 번거로움을 덜어줄 수 있습니다. 


- 실습 [시퀀스를 테이블의 기본 키에 접목하기]

사원 번호를 생성하는 시퀀스 객체를 생성하여 이를 기본 키인 사원 번호에 사용하여 사용자가 새로운 사원을 추가할 때마다 유일한 사원번호를 INSERT 해야 하는 번거로움을 줄입시다. 


1) 시작 값이 1이고 1씩 증가하고, 최댓값이 100000이 되는 시퀀스 EMP_SEQ 생성합니다.

CREATE SEQUENCE EMP_SEQ

START WITH 1 

INCREMENT BY 1 

MAXVALUE 100000 ; 


2)  이번에는 생성된 시퀀스를 사용하기 위해서 사원 번호를 기본 키로 설정하여 EMP01란 이름으로 새롭게 생성합시다.

DROP TABLE EMP01;

CREATE TABLE EMP01(

EMPNO NUMBER(4) PRIMARY KEY,

ENAME VARCHAR(10),

HIREDATE DATE

)


3) 사원 번호를 저장하는 EMPNO 컬럼은 기본 키로 설정하였으므로 중복된 값을 가질 수 없습니다. 

다음은 생성한 EMP_SEQ 시퀀스로부터 사원번호를 자동으로 할당받아 데이터를 추가하는 문장입니다. 

INSERT INTO EMP01

VALUES(EMP_SEQ.NEXTVAL, 'JULIA' , SYSDATE); 


- 실습 [뷰 정의하기]

- 뷰를 생성하려는데 다음과 같이 권한을 설정하였다면 30번 부서에 소속된 사원들의 사번과 이름과 부서번호를 출력하기 위한 SELECT문을 하나의 뷰로 다시 정의해 봅시다. 

1) 뷰를 정의합시다.

CREATE VIEW EMP_VIEW30

AS 

SELECT EMPNO, ENAME, DEPTNO

FROM EMP_COPY

WHERE DEPTNO=30;


2)  뷰를 생성할 때 컬럼 이름을 명시하지 않으면 뷰(EMP_VIEW30)를 정의하는 기본 테이블(EMP_COPY)의 컬럼 명을 상속받아 사용합니다. 다음은 생성된 뷰의 구조를 살펴봅시다. 

DESC EMP_VIEW30


3) 데이터를 추가하면서 EMP_SEQ 시퀀스로부터 사원번호를 자동으로 할당받았는지 EMP01 테이블의 내용을 확인합시다.

SELECT * FROM EMP01;



6. 시퀀스 제거하기
DROP SEQUENCE문으로 시퀀스를 제거해 봅시다.
DROP SEQUENCE DEPT_DEPTNO_SEQ;


7. 시퀀스 수정 

- 시퀀스를 제거한 후 확인까지 해보았습니다. 이번에는 시퀀스를 변경해 봅시다. 

- 시퀀스를 변경하려면 ALTER SEQUENCE 문을 사용해야 합니다.

ALTER SEQUENCE sequence_name 

[INCREMENT BY n] 

[{MAXVALUE n | NOMAXVALUE}] 

[{MINVALUE n | NOMINVALUE}] 

[{CYCLE | NOCYCLE}] 

[{CACHE n | NOCACHE}] 


- ALTER SEQUENCE는 START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 구조가 동일합니다. 

- START WITH 옵션은 ALTER SEQUENCE를 써서 변경할 수 없습니다. 

- 다른 번호에서 다시 시작하려면 이전 시퀀스를 삭제하고 다시 생성해야 합니다.  


- 실습 [시퀀스 최대값을 변경하기]

이미 생성해서 사용하던 시퀀스의 최대값을 변경해 봅시다. 

1)  시퀀스는 최대값을 지정하지 않으면 기본적으로 1027으로 지정됩니다. 사용자가 임의로 최대값을 지정할 수 있는데 MAXVALUE에 값을 지정하면 됩니다. 10부터 10씩 증가하면서 최대 30까지의 값을 갖는 시퀀스를 생성합시다. 

DROP SEQUENCE DEPT_DEPTNO_SEQ;

CREATE SEQUENCE DEPT_DEPTNO_SEQ

START WITH 10

INCREMENT BY 10 

MAXVALUE 30; 


2) 부서 번호를 계속 생성하다 보면 최대값을 넘게 됩니다. 최대값을 넘을 때까지 시퀀스를 생성해 봅시다. 

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

이때 CYCLE 옵션을 지정하지 않으면 기본값으로 NOCYCLE를 갖게 되므로 오류가 발생하게 됩니다.


3) ALTER SEQUENCE문을 사용하여 사용 중이던 DEPT_DEPTNO_SEQ 시퀀스의 최대값을 수정해 봅시다.

ALTER SEQUENCE DEPT_DEPTNO_SEQ

MAXVALUE 1000;


4) USER_SEQUENCES 를 조회하면 시퀀스가 수정되었는지 확인할 수 있습니다. 

SELECT SEQUENCE_NAME, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG

FROM USER_SEQUENCES; 




'Server > DBMS' 카테고리의 다른 글

[DBMS_MySQL] MySQL 설치 및 사용자 추가,권한  (0) 2014.12.13
[DBMS_Oracle] 인덱스  (0) 2014.12.10
[DBMS_Oracle] dual  (0) 2014.12.08
[DBMS] HAVING 조건  (0) 2014.12.02
[DBMS] Group By  (0) 2014.12.02

[DBMS_Oracle] dual


dual


일반적으로 DUAL TABLE의 Owner는 SYS이지만 모든 사용자가 사용할 수 있다. 그리고 SELECT 문장에서 조회 시 오직 하나의 Row, 하나의 Column에 'X'만 출력된다.

DUAL TABLE은 Internal Views에 조인을 위한 목적으로 오라클의 Chuck Weiss에 의해 만들어졌다.

"DUAL 테이블을 오라클 데이터 딕셔너리에 Object로 만들었고, 뷰 내부에서 사용하기 위한 용도로 만들었다. DUAL이라는 이름에서 단지 하나로부터 한 쌍의 열을 만들어 내는 과정을 쉽게 볼 수 있다. 최초 2개의 열을 가지고 있었기 때문에 이름이 DUAL 테이블로 명명된 것이며 지금은 단지 하나의 데이터만 저장되게 되었다."

위 원작자의 설명은 DUAL 테이블의 제작 의도와 중요성에 대해 시사하는 바가 크다고 할 수 있다. 


1. DUAL TABLE 

- Oracle RDBMS가 제공하는 Dummy Table입니다.(임시TABLE)

- 하나의 Row와 하나의 Column으로 이루어져 있습니다. 

- 수식을 계산하거나 Sysdate를 Display하려고 할때 사용합니다.

-  DUAL 이라는 테이블은SYS 사용자가 소유하는 오라클의 표준 테이블로서 오직 한 행(row)에 한 컬럼만 담고 있는 dummy 테이블로서 일시적인 산술연산이나 날짜 연산을 위하여 주로 쓰인다.



2. DUAL TABLE 예제

select 1+2,2+3 from dual;

select 'leejunsik' from dual;

select 12/2,'leejun' from dual;

select sysdate from dual;

 

3. DUAL TABLE 을 쓰는 이유는?

MySQL 에서는 간단한 계산이나 날짜를 출력시 select now(); 형식을 사용합니다.

MySQL 은 이렇게 table명없이 사용해도 되지만 oracle에서는 단순계산이나 날짜를 출력하거나 실제 table의 내용이 아닌  임시의 값을 출력할때  from dual을 씁니다.

dual table은 drop시키거나 insert명령을 줄수없습니다.





'Server > DBMS' 카테고리의 다른 글

[DBMS_Oracle] 인덱스  (0) 2014.12.10
[DBMS_Oracle] 시퀀스  (0) 2014.12.08
[DBMS] HAVING 조건  (0) 2014.12.02
[DBMS] Group By  (0) 2014.12.02
[DBMS] NULL도 데이터이다  (0) 2014.12.02

[TIP] 이클립스 단축키 모음


이클립스 단축키 모음


사실 단축키를 몰라도 개발을 하는데 큰 어려움은 없다. 하지만, 개발을 한다는 사람이 마우스로 클릭클릭하며, 작업을 하다보면 간지가 안난다.

필자는 영타연습도 열심히 하려한다. 다른 사람은 그걸 왜 염두해두냐지만, 다시 한번 말한다. 간지가 안난다.ㅎㅎ


1. 단축키 확인

- Window > Preference > General > Keys 메뉴에서 확인


- 단축키 보기 Hint : Ctrl + Shift + L



2. 실행

Ctrl + F11 : 실행(바로 전에 실행했던 클래스(Run파일) 실행).


3. 디버그

1) F11 : 디버그 모드로 실행


2) F5 : step into(현재의 명령문이 호출되는 메소드 속으로 진행하여, 그 첫 문장을 실행하기 전에 멈춘다. 하지만 자바 라이브러리 클래스 수준까지 들어가므로 단계필터 사용을 체크(Shift + F5)를 하면 필터를 설정한 클래스에 대하서는 Step Over 기능과 같은 기능을 수행한다.)


3) F6 : step over(현재의 명령문을 실행하고 다음 명령문 직전에 다시 멈춘다.)


4) F8 : 멈추어 있던 쓰레드를 다시 계속 실행한다.(Resume) 


5) Ctrl + Shift + B : 현재커서위치에 Break point설정 또는 해제 


6) Ctrl + R : 현재 라인까지 실행(Run to Line)

Display view(표시) : Window > Show View > Other > Debug > Display를 선택하여 소스상에서 필요한 부분을 선택해서 실행시켜 볼 수 있다. 한 순간의 값만 필요할 때 볼 수 있는 반면에 아래는 계속적으로 값이 변하는 것을 확인 할 수 있다.


4. 소스 네비게이션

1) Ctrl + 객체클릭(혹은 F3) : 클래스나 메소드 혹은 멤버를 정의한 곳으로 이동(Open Declaration)


2) Ctrl + O : 해당 소스의 메소드 리스트를 확인하려 할때


3) F4 : 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.


4) F3 : 메소드 정의부로 이동


5) Alt + Shift + R : 변수 및 메소드 변경(변경할 변수 에서 단축키를 누르고 변경 후에 엔터를 누르면 변수명이 모두 변경)


5. 소스 편집

1) Ctrl + spacebar : 자동 완성 기능. 어휘의 자동완성(Content Assistance)


2) Ctrl + Shift + O : 자동으로 import 하기(사용하지 않는 Class는 삭제)


3) Ctrl + Shift + M : 캐럿이 위치한 대상에 필요한 특정클래스 import


4) Ctrl + Shift + G : 클래스의 메소드나 필드를 Reference하고 있는 곳으로 이동


반대 : F3 (Reference하는 클래스로 이동)


5) Shift + Alt + S R : getter/setter 자동 생성


6) Ctrl + Shift + Space : 메소드 파라미터 힌트 (메소드에 입력해야 하는 파라미터 정보가 표시된다.)


7) F2 : 에러의 원인에 대한 힌트 (에러 라인에 커서를 위치시키고...)


8) Ctrl + Shift + / : 블록 주석(/*..*/) 추가


9) Ctrl + Shift + \ : 블록 주석 제거


10) Ctrl + / : 한줄 또는 선택영역 주석처리 또는 제거(//)


11) Alt + Shift + J : 설정해 둔 기본주석 달기(JavaDoc 주석)


12) Ctrl + S : 저장 및 컴파일


13) Ctrl + Shift + F4 : 열린 파일 모두 닫기


14) Ctrl + Shift + W : 열린 파일 모두 닫기


15) Ctrl +W : 창 닫기


16) Ctrl + Q : 마지막 편집위치로 가기


17) Ctrl + L : 특정줄번호로 가기. 로컬 히스토리 기능을 이용하면 이전에 편집했던 내용으로 변환이 가능하다.


18) Ctrl + O : 현재 편집 화면의 메소드나 필드로 이동하기


19) CTRL + 휠 : 페이지 단위 이동


20) Ctrl + D : 한줄삭제


21) Ctrl + I : 들여쓰기 자동 수정


22) Ctrl + Shift + F : 소스 정리


23) Alt + Up(Down) : 위(아래)줄과 바꾸기


24) Ctrl + Alt + ↑↓(상/하) : 한줄(블럭) 복사


25) Alt + Shift + 방향키 : 블록 선택하기


26) Ctrl + M : 전체화면 토글


27) Ctrl + Z / Ctrl + Y : Undo / Redo


28) Ctrl + , or . : 이전 또는 다음 annotation(에러, 워닝, 북마크 가능)으로 점프 


29) Ctrl + T : 하이어라키 팝업 창 띄우기(인터페이스 구현 클래스간 이동시 편리)


30) Ctrl + F6 (재정의 하는게 편리) : ULTRAEDIT나 EDITPLUS 의 Ctrl +TAB 과 같은 기능


31) Alt + ←→(좌/우) : 이후, 이전(뷰 화면의 탭에 열린 페이지 이동)


32) Ctrl + Shift + R : Open Resource


33) Ctrl + Shift + ↑↓(상/하) : 다음/이전 메소드로 이동


34) Ctrl + Shift + E : Switch to Editor (탭에 열려있는 Editor 이동)


35) Ctrl + Shift + G : 클래스의 메소드나 필드를 Reference하고 있는 곳으로 이동


36) Ctrl + 1 : Quick Fix(구현하지 않은 메소드 추가, 로컬 변수 이름 바꾸기, 행둘러싸기(if, while, for emd))


37) Ctrl + 2 + R : Rename(리팩토링)


6. 문자열 찾기

Ctrl + K : 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.


Ctrl + Shift + K : 역으로 찾고자 하는 문자열을 찾아감.


Ctrl + J : 입력하면서 찾을 수 있음.


Ctrl + Shift + J : 입력하면서 거꾸로 찾아갈 수 있음.


Ctrl + F : 기본적으로 찾기


Ctrl + H : Find 및 Replace


7. 템플릿 사용

1) sysout 입력한 후 Ctrl + Space 하면 System.out.println(); 으로 바뀐다.


2) try 입력한 후 Ctrl + Space 하면 try-catch 문이 완성된다.


3) for 입력한 후 Ctrl + Space 하면 여러가지 for 문을 완성할 수 있다.


4) 템플릿을 수정하거나 추가하려면 Window > Preference > Java > Editor > Templates 에서 할 수 있다.


8. 에디터 변환

1) 에디터가 여러 파일을 열어서 작업중일때 Ctrl + F6 키를 누르면 여러파일명이 나오고 F6키를 계속 누르면 아래로


2) Ctrl + Shift + F6 키를 누르면 위로 커서가 움직인다.


3) Ctrl + F7 : 뷰간 전환


4) Ctrl + F8 : 퍼스펙티브간 전환


5) Ctrl + E : 뷰 화면의 탭에 열린 페이지 이동


6) Ctrl + H6 : 열린 페이지 이동


7) F12 : 에디터로 포커스 위치





'ETC' 카테고리의 다른 글

request XSS 처리  (0) 2017.05.29
이클립스 eclipse.ini 설정  (0) 2015.09.01
[TIP] EditPlus 단축키 모음  (0) 2014.12.07
[티스토리] 소스코드 사용법  (0) 2014.11.29

[TIP] EditPlus 단축키 모음


EditPlus 단축키 모음

  

  새 보통 문서            Ctrl+N                보통 텍스트 문서를 새로 작성합니다

  새 HTML 페이지       Ctrl+Shift+N        HTML 페이지를 새로 작성합니다

  열기                       Ctrl+O                기존 문서를 엽니다

  인쇄                       Ctrl+P                현재 열린 문서를 인쇄합니다

  저장                       Ctrl+S                현재 열린 문서를 저장합니다

  FTP 업로드             Ctrl+Shift+S          파일을 FTP 서버로 업로드합니다

  날짜                       Ctrl+D                현재 날짜를 삽입합니다

  날짜 길게                Ctrl+Shift+D          현재 날짜를 긴 형식으로 삽입합니다

  들여쓰기 줄임          Ctrl+Shift+I          현재 줄이나 선택 부분의 들여쓰기를 줄입니다


  줄 끝까지 지우기      Ctrl+Shift+Delete     현재 줄의 끝까지 지웁니다


  단어 끝까지 지우기   Ctrl+Delete           현재 단어의 끝까지 지웁니다


  줄 지우기                Alt+Shift+Delete      현재 줄을 지웁니다


  단어 지우기             Alt+Delete            현재 단어를 지웁니다

  글자 복제                Ctrl+-                이전 줄에서 글자를 복제합니다

  줄 복제                   Ctrl+J                현재 줄을 복제합니다

  클립텍스트 찾기       F2                    현재 단어를 대응하는 클립텍스트 항목으로 바꿉니다

  들여쓰기 늘임          Ctrl+I                현재 줄이나 선택 부분의 들여쓰기를 늘입니다

 

  들여쓰기 축소          Ctrl+shift+I         현재 줄이나 선택 부분의 들여쓰기를 축소합니다

  삽입 모드                Insert                삽입 모드와 겹쳐쓰기 모드를 전환합니다

  대소문자 뒤바꿈       Ctrl+K                선택한 텍스트에서 대소문자를 뒤바꿉니다

  

  소문자로 바꿈           Ctrl+L                 선택한 텍스트를 소문자로 변환합니다

  

  줄 합치기                Ctrl+Shift+J         선택한 줄들을 하나로 합칩니다

  붙여넣기                 Ctrl+V                클립보드의 내용을 붙여 넣습니다

  다시 실행               Ctrl+Y                이전에 취소한 동작을 다시 수행합니다

  모양 재구성             Ctrl+Shift+R          모양 기준 칸에 맞추어 단락의 모양을 다시 구성합니다

  문서에서 찾기          Shift+F2              현재 단어를 현재 문서에서 찾은 확장된 단어로 바꿉니다

  열려진 모든파일 찾기  Ctrl+F2            현재 단어를 열려진 모든 파일에서 찾은 확장된 단어로 바꿉니다

  선택 시작/종료        Alt+Shift+B           선택영역 지정을 시작하거나 종료합니다

  전체 선택               Ctrl+A                문서 전체를 선택합니다

  칸 단위 선택 시작/종료Alt+Shift+E           칸 단위 선택영역 지정을 시작하거나 종료합니다

  줄 선택                 Ctrl+R                   현재 줄을 선택합니다


  단어 선택             Ctrl+Shift+방향키    현재 단어를 선택합니다 (cf. Ctrl+W 현재 단어를 선택합니다)


  단어 이동              Ctrl+방향키             커서를 한 단어 뒤로 이동합니다

  소문자로               Ctrl+L                선택한 텍스트를 소문자로 변환합니다

  대문자로               Ctrl+U                선택한 텍스트를 대문자로 변환합니다

  실행 취소              Ctrl+Z                마지막으로 한 동작을 취소합니다

  브라우저로 보기     Ctrl+B                현재 열린 문서를 웹 브라우저에 읽어 들입니다

  모두 숨김              Ctrl+Alt+Num -        들여쓰기된 텍스트를 모두 숨깁니다

  표시                     Ctrl+Num +            현재 줄에 생략된 코드를 표시합니다

  모두 표시              Ctrl+Alt+Num +        생략된 텍스트를 모두 표시합니다

  한 단계 표시          Ctrl+Shift+Num +      전체 코드를 한 단계 표시합니다

  클립텍스트/디렉토리로 가기F5            포커스를 클립텍스트/디렉토리와 문서 사이에서 전환합니다

  코드 생략 사용        Ctrl+Shift+F          코드 생략 기능을 켜거나 끕니다

  전체화면 모드         Alt+Shift+0           전체화면 모드를 켜거나 끕니다

  커서 위치 표시        Alt+Shift+C           커서 위치 표시를 보이거나 숨깁니다


  탭과 공백 기호        Alt+Shift+I           탭과 공백 기호를 보이거나 숨깁니다

  줄 번호                  Ctrl+Shift+L          현재 열린 문서에서 줄 번호를 보이거나 숨깁니다

  URL 강조               Alt+Shift+U           URL과 전자 메일 주소를 강조합니다

  찾기                      Alt+F3                지정한 문자열을 찾습니다


  다음 찾기               F3                    다음 일치하는 말을 찾습니다


  이전 찾기               Shift+F3              이전에 일치하는 말을 찾습니다


  바꾸기                   Ctrl+H                지정한 문자열을 다른 문자열로 바꿉니다

  괄호 찾기               Ctrl+]                짝을 이루는 괄호를 검색합니다

  다음 단어 찾기        Ctrl+F3              현재 단어나 선택한 텍스트와 다음에 일치하는 말을 찾습니다

  이전 단어 찾기        Ctrl+Shift+F3      현재 단어나 선택한 텍스트와 이전에 일치하는 말을 찾습니다

  URL로 가기            F8                    강조된 URL로 찾아갑니다

  자동 줄 바꿈          Ctrl+Shift+W          현재 열린 문서에서 자동 줄 바꿈 기능을 켜거나 끕니다

  최근 작업 창          F12                   바로 전에 작업한 문서 창으로 이동합니다

  창 목록                 F11                   모든 문서 창들의 목록을 보여줍니다

  다음 창                 Ctrl+Tab              다음 문서 창으로 이동합니다


  이전 창                 Ctrl+Shift+Tab        이전 문서 창으로 이동합니다


Shift+Left 선택 부분을 한 글자 왼쪽으로 확장합니다

Shift+Right 선택 부분을 한 글자 오른쪽으로 확장합니다

Ctrl+End 문서의 끝으로 이동합니다

Ctrl+Shift+End 현재 위치부터 끝까지 선택합니다.

Ctrl+Home 문서의 처음으로 이동합니다

Ctrl+Shift+Home 선택 부분을 문서의 처음까지 확장합니다

End 커서를 현재 줄의 끝으로 이동합니다

Home 커서를 현재 줄의 처음으로 이동합니다

Shift+End 선택 부분을 현재 줄의 끝까지 확장합니다

Shift+Home 선택 부분을 현재 줄의 처음까지 확장합니다

Alt+F3 지정한 문자열을 찾습니다

F3 다음 일치하는 말을 찾습니다

Ctrl+F3 현재 단어나 선택한 텍스트와 다음에 일치하는 말을 찾습니다

Shift+F3 이전에 일치하는 말을 찾습니다

Ctrl+Shift+F3 현재 단어나 선택한 텍스트와 이전에 일치하는 말을 찾습니다

Ctrl+G 현재 열린 문서의 지정된 줄로 찾아갑니다

Alt+Shift+C 커서 위치 표시를 보이거나 숨깁니다

Ctrl+Shift+L 현재 열린 문서에서 줄 번호를 보이거나 숨깁니다

Alt+Shift+R 눈금자를 보이거나 숨깁니다

Alt+Shift+I 탭과 공백 기호를 보이거나 숨깁니다

Ctrl+Shift+R 모양 기준 칸에 맞추어 단락의 모양을 다시 구성합니다

Ctrl+K 선택한 텍스트에서 대소문자를 뒤바꿉니다

Ctrl+L 선택한 텍스트를 소문자로 변환합니다




'ETC' 카테고리의 다른 글

request XSS 처리  (0) 2017.05.29
이클립스 eclipse.ini 설정  (0) 2015.09.01
[TIP] 이클립스 단축키 모음  (0) 2014.12.07
[티스토리] 소스코드 사용법  (0) 2014.11.29

[jQuery] Ajax 기초

Ajax 기초


1. Ajax란?

- Asynchronous JavaScript and XML 의 약자

- 자바스크립트를 이용해서 비동기식으로 서버와 통신하는 방식. 이 때 XML을 이용한다.

- 꼭 XML을 이용할 필요는 없고, 최근에는 json을 더 많이 이용한다.

- 비동기식이란 여러가지 일이 동시적으로 발생한다는 뜻으로, 서버와 통신하는 동안 다른 작업을 할 수 있다는 의미.


2. 선행지식

- 폼


3. $.ajax(settings)

- jQuery를 이용한 ajax통신의 가장 기본적인 API

- 주요속성

   data 서버에 전송할 데이터, key/value 형식의 객체

   dataType 서버가 리턴하는 데이터 타입 (xml, json, script, html)

   type : 서버로 전송하는 데이터의 타입 (POST, GET)

   url : 데이터를 전송할 URL

   success : ajax통신에 성공했을 때 호출될 이벤트 핸들러


예제1-1. 웹페이지

<!DOCTYPE html>

<html>

    <head>

        <script src="http://code.jquery.com/jquery-latest.js"></script>

    </head>

    <body>

        <div id="result"></div>

        <input type="text" id="msg" />

        <input type="button" value="get result" id="getResult" />

        <script>

            $('#getResult').click( function() {

                $('#result').html('');

        // 사용자가 getResult 버튼을 눌렀을 때 텍스트 노드에 있는 결과값을 지워준다.

                $.ajax({

                    url:'http://opentutorials.org/example/jquery/example.jquery.ajax.php',

                    dataType:'json',

            // 서버가 리턴해주는 데이터 타입이 json이다.

                    type:'POST',

                    data:{'msg':$('#msg').val()},

            // data 속성 내부에 또다른 {}가 있다. 중괄호 내부는 객체이다.

                    // data: 서버에 전송할 데이터로서 값은 key와 value로 이루어진 객체

                    success:function(result){

    // 인자 result에는 서버에서 리턴해준 배열이 들어감

                    // 배열이 들어온 이유는 dataType속성을 JSON으로 했기 때문에 리턴되는 데이터가 텍스트더라도 내부적으로 그 데이터를                                     // JSON으로 해석하여 배열로 변환

                    // 그래서 배열에 있는 result값을 체크하면 result가 true라면 성공 이벤트 관련 로직을 출력한다.

                    // 서버와의 통신이 성공하면 호출되는 이벤트 핸들러인 function(result)

                    // result 인자에는 서버가 리턴해주는 데이터가 들어감

                        if(result['result']==true){

    //result['result']는 연상 배열인가 확인하자

                          $('#result').html(result['msg']);

                        }

                    }

                });

            })

       // 자바스크립트에서 중괄호는 객체를 의미 , $ajax{}도 마찬가지이다. 

        </script>

    </body>

</html>


예제 1-2. 서버 쪽 로직

<?

echo json_encode(array('result'=>true, 'msg'=>$_REQUEST['msg']));

?>

//json_encode메소드로 배열을 JSON 데이터 형식으로 php가 변경해줌

'WebFont-end > jQuery' 카테고리의 다른 글

[jQuery] 문서 준비 이벤트  (0) 2015.01.11
[jQuery] Ajax 설정  (0) 2015.01.11
[jQuery] Chain  (0) 2014.12.07
[jQuery] Animation  (0) 2014.12.07
[jQuery] Effects  (0) 2014.12.07