레이블이 오엔제이프로그래밍인 게시물을 표시합니다. 모든 게시물 표시
레이블이 오엔제이프로그래밍인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 28일 월요일

Column Name & Constraints 이름 변경 예 테이블이나 인덱스의 이름을 변경 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr) [주간] [11/4]Spring3.X, MyBatis, Hibernate실무과정 [11/6]SQL초보에서실전전문가까지 [평일야간] [11/1]C#,ASP.NET마스터 [11/5]iPhone 하이브리드 앱 개발 실무과정 [11/7]JAVA&WEB프레임워크실무과정 [11/8]Spring3.X, MyBatis, Hibernate실무과정 [주말] [11/2]C#,ASP.NET마스터 [11/2]Spring3.X, MyBatis, Hibernate실무과정 [11/2]JAVA&WEB프레임워크실무과정 [11/9]안드로이드개발자과정 JAVA ORACLE iPhone/Android .NET 표준웹/HTML5 채용/취업무료교육 초보자(재학생)코스 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 11-04 JAVA&WEB프레임워크실무과정 총 33일 99시간 11-07 Spring3.X, MyBatis, Hibernate실무과정 총 12일 36시간 11-08 자바초보에서안드로이드까지 총 18일 54시간 11-15 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 11-02 JAVA&WEB프레임워크실무과정 총 14일 98시간 11-02 SQL초보에서실전전문가까지 총 8일 56시간 11-06 고급개발자를위한 오라클힌트&SQL튜닝 총 10일 30시간 11-08 SQL초보에서실전전문가까지 총 18일 54시간 11-13 고급개발자를위한 오라클힌트&SQL튜닝 총 4일 32시간 11-09 SQL초보에서실전전문가까지 총 8일 56시간 11-10 Column Name & Constraints 이름 변경 예 테이블이나 인덱스의 이름을 변경하는 것은 오라클 9iR2 이전에도 가능했지만 9iR2에서는 테이블의 컬럼 명 또는 제약조건의 이름을 변경하는 것이 가능해 졌습니다. 실제 예제를 통해 확인해 보자구요~~ SQL> create table test ( 2 c1 varchar2(4) not null, 3 c2 number(10) not null 4 ); 테이블이 생성되었습니다. 프라이머리 키를 추가 합니다. 이때 C1컬럼에 대해 인덱스가 생성 됩니다. SQL> alter table test add (constraint pk_test 2 primary key (c1)); 테이블이 변경되었습니다. SQL> desc test; 이름 널? 유형 ----------------------------------------- -------- -------------- C1 NOT NULL VARCHAR2(4) C2 NOT NULL NUMBER(10) 사용자의 제약 조건을 확인 할 수 있는 USER_CONSTRAINTS VIEW를 통해 TEST 테이블에 제약조건의 타입이 ‘P’ 인것 즉 Primary Key인 제약조건을 검색 합니다. 제약조건에는 NOT NULL, UNIQUE, CHECK, PRIMARY KEY등 테이블의 컬럼에 제약을 가하는 조건을 말합니다. SQL> select constraint_name 2 from user_constraints 3 where table_name = 'TEST' 4 and constraint_type = 'P'; CONSTRAINT_NAME ------------------------------ PK_TEST 이번에는 TEST 테이블에 생성되어 있는 인덱스를 확인 합니다. 위에서 C1 컬럼을 Primary Key로 설정하여 저절로 이 컬럼에 대한 인덱스가 생성되어 있습니다. SQL> select index_name, 2 column_name 3 from user_ind_columns 4 where table_name = 'TEST'; INDEX_NAME COLUMN_NAME ------------------------------------ PK_TEST C1 우선 테이블의 이름을 바꾸어 봅니다. 이 기능은 오라클의 이전 버전에서도 되는 기능 입니다… SQL> alter table test rename to test1; 테이블이 변경되었습니다. 이번에는 컬럼명을 바꾸어 보죠^^ SQL> alter table test1 rename column c1 to code; 테이블이 변경되었습니다. Primary Ket 제약 조건의 이름을 변경 합니다. SQL> alter table test1 rename constraint pk_test to pk_test1; 테이블이 변경되었습니다. 이번에는 Primary Key에 걸린 인덱스의 이름을 바꿉니다. SQL> alter index pk_test rename to pk_test1; 인덱스가 변경되었습니다. 위에서 변경한 내역에 대해 확인해 보겠습니다… SQL> select constraint_name 2 from user_constraints 3 where table_name = 'TEST1' 4 and constraint_type = 'P'; CONSTRAINT_NAME ------------------------------ PK_TEST1 SQL> select index_name, 2 column_name 3 from user_ind_columns 4 where table_name = 'TEST1'; INDEX_NAME COLUMN_NAME --------------------------------------------- PK_TEST1 CODE [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=107 [개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr) [주간] [11/4]Spring3.X, MyBatis, Hibernate실무과정 [11/6]SQL초보에서실전전문가까지 [평일야간] [11/1]C#,ASP.NET마스터 [11/5]iPhone 하이브리드 앱 개발 실무과정 [11/7]JAVA&WEB프레임워크실무과정 [11/8]Spring3.X, MyBatis, Hibernate실무과정 [주말] [11/2]C#,ASP.NET마스터 [11/2]Spring3.X, MyBatis, Hibernate실무과정 [11/2]JAVA&WEB프레임워크실무과정 [11/9]안드로이드개발자과정 JAVA ORACLE iPhone/Android .NET 표준웹/HTML5 채용/취업무료교육 초보자(재학생)코스 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 11-04 JAVA&WEB프레임워크실무과정 총 33일 99시간 11-07 Spring3.X, MyBatis, Hibernate실무과정 총 12일 36시간 11-08 자바초보에서안드로이드까지 총 18일 54시간 11-15 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 11-02 JAVA&WEB프레임워크실무과정 총 14일 98시간 11-02 SQL초보에서실전전문가까지 총 8일 56시간 11-06 고급개발자를위한 오라클힌트&SQL튜닝 총 10일 30시간 11-08 SQL초보에서실전전문가까지 총 18일 54시간 11-13 고급개발자를위한 오라클힌트&SQL튜닝 총 4일 32시간 11-09 SQL초보에서실전전문가까지 총 8일 56시간 11-10

Column Name & Constraints 이름 변경 예

테이블이나 인덱스의 이름을 변경하는 것은 오라클 9iR2 이전에도 가능했지만 9iR2에서는 테이블의 컬럼 명 또는 제약조건의 이름을 변경하는 것이 가능해 졌습니다.

실제 예제를 통해 확인해 보자구요~~


SQL> create table test (
  2  c1 varchar2(4) not null,
  3  c2 number(10)  not null
  4  );

테이블이 생성되었습니다.

프라이머리 키를 추가 합니다. 이때 C1컬럼에 대해 인덱스가 생성 됩니다.

SQL> alter table test add (constraint pk_test
  2                        primary key (c1));

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- --------------

 C1                                        NOT NULL VARCHAR2(4)
 C2                                        NOT NULL NUMBER(10)

사용자의 제약 조건을 확인 할  수 있는 USER_CONSTRAINTS VIEW를 통해 TEST 테이블에 제약조건의 타입이 ‘P’ 인것 즉 Primary Key인 제약조건을 검색 합니다. 제약조건에는 NOT NULL, UNIQUE, CHECK, PRIMARY KEY등 테이블의 컬럼에 제약을 가하는 조건을 말합니다.

SQL> select constraint_name
  2  from  user_constraints
  3  where  table_name = 'TEST'
  4  and    constraint_type = 'P';

CONSTRAINT_NAME
------------------------------
PK_TEST

이번에는 TEST 테이블에 생성되어 있는 인덱스를 확인 합니다. 위에서 C1 컬럼을 Primary Key로 설정하여 저절로 이 컬럼에 대한 인덱스가 생성되어 있습니다.

SQL> select index_name,
  2        column_name
  3  from  user_ind_columns
  4  where  table_name = 'TEST';

INDEX_NAME          COLUMN_NAME
------------------------------------

PK_TEST                    C1

우선 테이블의 이름을 바꾸어 봅니다. 이 기능은 오라클의 이전 버전에서도 되는 기능 입니다…

SQL> alter table test rename to test1;

테이블이 변경되었습니다.

이번에는 컬럼명을 바꾸어 보죠^^

SQL> alter table test1 rename column c1 to code;

테이블이 변경되었습니다.

Primary Ket 제약 조건의 이름을 변경 합니다.

SQL> alter table test1 rename constraint pk_test to pk_test1;

테이블이 변경되었습니다.

이번에는 Primary Key에 걸린 인덱스의 이름을 바꿉니다.

SQL> alter index pk_test rename to pk_test1;

인덱스가 변경되었습니다.

위에서 변경한 내역에 대해 확인해 보겠습니다…

SQL> select constraint_name
  2  from  user_constraints
  3  where  table_name = 'TEST1'
  4  and    constraint_type = 'P';

CONSTRAINT_NAME
------------------------------
PK_TEST1

SQL> select index_name,
  2        column_name
  3  from  user_ind_columns
  4  where  table_name = 'TEST1';

INDEX_NAME            COLUMN_NAME
---------------------------------------------

PK_TEST1                    CODE



2013년 8월 10일 토요일

[오라클자바,오라클자바커뮤니티]Oracle Types of Data Integrity

Oracle Types of Data Integrity

A. Nulls
- 기본적으로 Column은 Null을 허용한다. 
Column에 대해서 null을 포함하는 row들의 insert나 또는 update를 허용하는 또는 허용하지 않는  하나의 column에 대해서 정 의되는 규칙.

B. Unique Column Values
-Column(또는 column들의 집합)에 대해서 unique value를 포함하는 row들의 insert나 또는  update만을 허용하는 column들(또는 column들의 집합)에 대해서 정
의되는 규칙, 즉 지정된 열또는 열들에서중복된 값을 허용안함

- Unique 제약조건을 구성하는 열중 일부분이 Null을 허용한다면 Null을 허용하지 않는 열은  동일한 값을 가질수 없다.

C. Primary Key Values
-Table에 있는 각 row는 column(또는 column들의 집합)에 있는 value들에 의해서 유일하게 식별될 수 있도록 하는 하나의 column(또는 column들의 집합)에 정의된
규칙.

- Primary Key Column은 Null을 허용하지 않는다.

- 만약 dept Table의 dept_no Column이 Primary Key라면 해당열에 대한 고유 인덱스를 암시적으로  생성하며 해당열에대해 not null제약조건을 암시적으로 생성한다.

- Primary Key Column은 16개 까지로 제한됨

D. Referential Integrity(참조 무결성)과 Foreign Key 무결성 제약조건
- 만약 Column 또는 column들의 집합에 대한 값(the dependent value)이 관련된 table의 column에 있는 값(the referenced value)과 match 된다면 하나의 row에
대한 insert 또는 update만을 허용하는 하나의 table에 존재하는 column(또는 column들의 집합)에 대해서 정의된 규칙.

-Referential integrity는 또한 어떤 data 조작의 유형이 참조되는 값들에 허용되는 지와 이러한 action들이 종속된 값들에 어떠한 영향을 주는 지를 지시하는 규칙들을 포함한다. 

Restrict
 참조되는 data의 update 또는 deletion을 허용하지 않는 referential
integrity.

Set to Null
 참조되는 data가 update되거나 delete될 때, 관련되는 모든 종속된 data는 NUll이 설정된다.

Set to Default
 참조되는 data가 update되거나 delete될 때, 관련되는 모든 종속된 data는 default value가 설정된다.

Cascade
 참조되는 data가 update될 때, 관련되는 모든 종속된 data도 update된다; 참조되는 row가 delete될 때, 관련되는 모든 종속된 row들도 delete된다.

F. Check Constrints
- 각 열또는 열집합에 대한 Check Constraints는 지정된 조건이 참인지 거짓인지 알수있게 한다.

- 사용자가 확인 조건을 지정함으로서 특수하거나 복잡한 무결성 조건을 시행한다.

- 문자열 리터럴이나 인수(투캐랙터, 투넘버, 투데이트)로 NLS 매개변수를 가지는 SQL을 포함한는  제약조건을 평가하기 위해 Oracle은 기본적으로 DataBase의 NLS설정값을 사용한다.

2013년 8월 8일 목요일

[jquery mouse event, 오라클자바교육강좌]click, dblclick, mousedown, mouseup, mouseenter

제이쿼리마우스 이벤트 입니다. 참고하세요
click, dblclick, mousedown, mouseup, mouseenter(경계외부에서 내부로 진입시),


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



 mouseleave(경계내부에서 외부로 이동시), mousemove, mouseout, mouseover

<style>
.outer {width:200px; height:200px; background:red; padding:50px; margin:10px;}
.inner {width:100%; height:100%; background:Yellow;}
</style>
<script src="/ajaxjquery/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
  
$(".outer").mouseover(function() {
//inner에 갔다오는 경우, 외부에서 진입시
$("body").append("<h1>MOUSE OVER</h1>");
}).mouseenter(function() {
//외부에서 집입시
$("body").append("<h1>MOUSE ENTER</h1>");
});
});
</script>
<body>   
<div class="outer">
<div class="inner"></div></div></body>
 
 

2013년 8월 5일 월요일

Struts Action 클래스

Struts Action 클래스 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 
 www.onjprogramming.co.kr 

org.apache.struts.action.Action 클래스는 컨트롤러 컴포넌트의 연장으로 보시면 되며 클라이언트의 요청과 비즈니스 로직을 연결해 주는 역할을 합니다. Action 클래스에서는 비지니스 로직을 처리하기 전의 인증이나 세션 검증 등의 작업을 수행 합니다.

Action에 대해서는 Model이냐 Controller이냐를 고민 하는 경우가 있는데 아마도 Controller 영역으로 보시는 것이 맞을 것 같습니다, 그 이유 중 하나는 Model 영역은 컨트롤러 영역을 알면 안되지만 Action 클래스는 ActionServlet에 접근 하므로 컨트롤러의 모든 자원에 접근이 가능 하기 때문에 이를 Controller 쪽으로 보는 것 입니다.

만약 Action 클래스 내에 비즈니스 로직을 넣어 둔다면 스트럿츠 프레임워크를 다른 프레임워크로 바꾸는 경우가 발생 한다면 다른 클래스로 대체해야 할지도 모릅니다. 결국 비즈니스 로직을 Action 클래스 안에 두는 것은 다른 타입의 클라이언트에서 재사용하지 못하는 결과를 초래 할 수도 있습니다.

 

Action 클래스는 여러 메소드를 포함하지만 가장 중요한 메소드는 execute() 입니다.

원형을 살펴보면 다음과 같습니다.

public ActionForward execute(ActionMapping mapping,
                              ActionForm form,
                              HtpServletRequest request,
                              HttpServletResponse response) throws Exception;

클라이언트의 요청을 받으면 execute() 메소드가 호출 됩니다.Controller는 Action 클래스의 인스턴스가 존재하지 않으면 생성하며 있으면 재활용 합니다. 스트럿츠에서는 각 Action 클래스에 대해 하나의 인스턴스만 생성하여 자원을 공유 합니다.

Action 클래스의 execute() 메소드의 기본적인 구현은 null을 return 하므로 새로운 Action 클래스를 작성하여 execute() 메소드를 오버라이드 해야 합니다.

스트럿츠에서 폼액션을 처리하기 위해 여러 개의 Action 클래스를 만들 수 있는데 각 클래스가 org.apache.struts.action.Action 클래스를 상속 받은 후 execute() 메소드를 오버라이드 한다는 이야기 입니다.

그런데 다음처럼 모든 Action 클래스들이 상속 받아서 구현할 추상 클래스를 만들어 둘 수 있는데 … Action클래스들의 공통 기능이 있는 경우 이를 추상클래스에서 처리하고 나머지는 이 추상클래스에서 상속 받은 하위 클래스에서 정의하도록 추상 클래스를 만들어 둘 수 있습니다.

앞의 로그인 예제를 생각 한다면 LoginAction과 LogoffAction이 공통적으로 하는 일은 세션을 확인 하는 일인데 이러한 부분을 추상클래스를 두어 처리가 가능 하다는 이야기 입니다.

Action 클래스를 만들 때 주의할 부분은 execute() 메소드 안에 try/catch 블록이 없다는 것입니다. 아래를 참고 하세요…

<global-exceptions>
  <exception
        key=”global.error.invalidlogin”
        path=”/login.jsp”
        scope=”request”
        type=”login2.exception.InvalidLoginException”
</global-exceptions>

위와 같이 설정을 해 둔다면 프레임워크에서 어떤 동작으로 인해 InvalidLoginExceptiondl 발생 했을 경우 요청을 login.jsp로 포워드하고 global.error.invalidLogin 이라는 key를 통해 에러 메시지를 구축 하도록 설정을 하는 것 입니다.

Controller가 어떤 요청을 받았을 때 어떤 Action 클래스의 인스턴스를 수행 할지를 어떻게 알 것인가? …… 컨트롤러는 Action 매핑을 조사 함으로서 Action 인스턴스를 결정 하는데 웹 애플리케이션이 시작 될 때 web.xml 파일에 있는 스트럿츠 설정 부분에 struts-config.xml 파일의 위치를 설정 합니다. 이 정보를 바탕으로 이 내용을 메모리에 올려 객체화 해서 웹 애플리케이션에서 보관을 하고 있는데 이 정보 중 Action 매핑 정보를 참고 한다고 생각 하시면 됩니다. (물론 스트럿츠 설정 파일의 이름이 struts-config.xml 일 필요는 없습니다.)

struts-config.xml 파일에 있는 Action과 관련된 매핑 정보는 org.apache.struts.action.ActionMapping 클래스의 인스턴스로 표현  되는데 ActionMapping 객체는 URI와 매칭되는 path 속성을 포함하고 있습니다.

아래는 struts-config.xml 파일에서의 Action 매핑 예 입니다.(로그인 예제의 경우)

<!-- valiedate를 true라고 함으로써 LoginForm의 validate가 호출 됩니다.            -->
    <action-mappings>
            <!-- loginAction에 대한 정의 -->
        <action         
                path="/LoginSubmit"
                type="login2.LoginAction"
            name="loginForm"                       
            validate="true"
            input="/login.jsp"
        />
       
        <!-- logoffAction에 대한 정의 -->
        <action         
                path="/logoff"
                type="login2.LogoffAction"
            name="logoffForm"                       
            validate="false"         
        />                     
    </action-mappings>

로그인과 관련된 액션 매핑을 보면 /LoginSubmit 패스와 login2.LoginAction를 매핑 하고 있는 것을 알 수 있습니다. Controller가 “/LoginSubmit” 문자열이 포함된 요청을 받으면 LoginAction 인스턴스의 execute() 메소드를 실행 하게 되는 것 입니다. 물론 스트럿츠에서는 매핑 정보를 Action 인스턴스의 execute()가 종료 한 후 포워드 할 곳을 인식하는데도 사용 합니다. 

2013년 8월 3일 토요일

[Oracle SQL Hint]오라클힌트-실행계획 SQL연산(MERGE SEMI JOIN), ORACLE HINT

실행계획 SQL연산(MERGE SEMI JOIN)

구로디지털 오엔제이프로그래밍실무교육센터

SEMI JOIN은 첫 번째 매칭되는 value를 찾기만 하면 결과를 돌려주는 join 문입니다.

MERGE SEMI JOIN HASH SEMI JOIN으로 나타나는데 EXISTS와 같은 Query에서 서브 쿼리 조건에 대한 인덱스가 존재하지 않으면 비효율적인 실행 계획이 세워지게 되는데 이러한 경우 세미 조인을 적절히 이용하면 됩니다.

아래 예문을 따라 해 보면서 각각의 경우 실행계획 및 수행 시간을 유심히 보시기 바랍니다. 기본적으로 오라클 11g에서 MERGE 보다는 HASH 조인을 우선적으로 선택 함을 할 수 있습니다.

SQL> select index_name, table_name from user_indexes
  2  where table_name like 'EMPTEST'
  3  /

INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
IDX_EMPTEST_ADDR               EMPTEST
IDX_EMPTEST_DEPTNO             EMPTEST



실습을 위해 DEPTNO 컬럼의 인덱스를 숨기자
(오라클 옵티마이저가 사용하지 않도록 )

SQL> alter index IDX_EMPTEST_DEPTNO invisible;
  인덱스가 변경되었습니다.

-- CBO로 동작하는 경우 서브조인에서 exists등이 인덱스가 없는 경우라면 어떻게 동작하는지 보자

SQL> select  count(e.ename)
  2  from emptest e
  3  where exists (select  1
  4                  from depttest d
  5                 where e.deptno = d.deptno);

COUNT(E.ENAME)
--------------
       2500000

   : 00:00:02.34
--------------------------------------------------------------------

|   0 | SELECT STATEMENT
|   1 |  SORT AGGREGATE      
|*  2 |   HASH JOIN RIGHT SEMI|
|   3 |    TABLE ACCESS FULL  | DEPTTEST
|   4 |    TABLE ACCESS FULL  | EMPTEST


-- 기본적으로 전체 테이블 FULL SCAN HASH SEMI 조인으로 수행된다.
-- 이번엔 RULE 힌트를 넣어 RBO로 동작하도록 하고 결과를 보자.

SQL> select  count(e.ename)
  2  from emptest e
  3  where exists (select 1
  4                  from depttest d
  5                 where e.deptno = d.deptno);

COUNT(E.ENAME)
--------------
       2500000

Execution Plan
----------------------------------------------------------
|   0 | SELECT STATEMENT   
|   1 |  SORT AGGREGATE    
|*  2 |   FILTER            
|   3 |    TABLE ACCESS FULL| EMPTEST 
|*  4 |    TABLE ACCESS FULL| DEPTTEST |


이번에는 HASH SEMI JOIN 힌트 구문을 이용해 보자.
당연히 해시 세미조인을 이용할 것이다.

SQL> select  count(e.ename)
  2  from emptest e
  3  where exists (select  1
  4                  from depttest d
  5                 where e.deptno = d.deptno);

COUNT(E.ENAME)
--------------
       2500000

   : 00:00:02.32

Execution Plan
--------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |     1 |    20 |  4172   (2)|
|   1 |  SORT AGGREGATE       |          |     1 |    20 |            |
|*  2 |   HASH JOIN RIGHT SEMI|          |  2500K|    47M|  4172   (2)|
|   3 |    TABLE ACCESS FULL  | DEPTTEST |     5 |    15 |     3   (0)|
|   4 |    TABLE ACCESS FULL  | EMPTEST  |  2500K|    40M|  4156   (1)|


이번엔 MERGR SEMI JOIN으로 해시 세미 조인 보다는 시간이 좀 더 걸린다.


SQL> select  count(e.ename)
  2  from emptest e
  3  where exists (select 1
  4                  from depttest d
  5                 where e.deptno = d.deptno);

COUNT(E.ENAME)
--------------
       2500000

   : 00:00:03.50

Execution Plan
----------------------------------------------------------
|   0 | SELECT STATEMENT     |          |     1 |    20 |       | 17977  
|   1 |  SORT AGGREGATE      |          |     1 |    20 |       |            |
|   2 |   MERGE JOIN SEMI    |          |  2500K|    47M|       | 17977  
|   3 |    SORT JOIN         |          |  2500K|    40M|   134M| 17973  
|   4 |     TABLE ACCESS FULL| EMPTEST  |  2500K|    40M|       |  4156  
|*  5 |    SORT UNIQUE       |          |     5 |    15 |       |     4  (25)| 0
|   6 |     TABLE ACCESS FULL| DEPTTEST |     5 |    15 |       |     3  
  

2013년 8월 2일 금요일

오라클자바커뮤니티 및 오엔제이프로그래밍실무교육센터소개

1998년부터 운영되고 있는 오라클자바커뮤니티(www.oraclejavacommunity.co.kr) 에서 설립 운영되고 있는 오엔제이 프로그래밍실무학원(www.onjprogramming.co.kr )은 개발자를 위한 실무 SKILL UP 전문 교육센터 입니다.
(2008년5월부터부터 운영하던 "오라클자바교육센터"는  2013년5월 양도 하였으며 오엔제이프로그래밍실무교육센터에서 "개발자 실무교육"을 이어갈 수 있도록 더욱 더 노력 하겠습니다.)

자바, 오라클의 기초부터 자바프레임워크(Struts, Spring), 오라클 튜닝, 모델링, 고급SQL, Xinternet(GAUCE, Miplatform, XPlatform), 닷넷(C#, ASP.Net), 스마트폰앱개발교육(안드로이드, 아이폰)까지 실무전문 교육을 진행하고 있습니다.

자바, 스프링, 오라클 교육 받으셨는데 이론으로 교육을 받으셨다고요? IT프로그래밍 교육은 실전예제, 실습을 통해 이론을 습득을 해야 합니다. 본원은 모든 강좌가 실습을 통해 이론을 취득하는 실무중심 교육 입니다.

한번 방문 하시어 정통 실무교육의 진수를 느껴 보시기 바랍니다!

아래 카테고리를 클릭하면 해당 강좌로 이동 합니다.
감사합니다.