이장에서는 오류 처리와 디버깅에 대해 알아 보는데 커스텀 오류 핸들링과 이벤트로그의 이용은 인증과 보안, 이벤트로그 부분의 파일에 자세히 기록되어 있으니 참조 바랍니다.
--------------
오류의 종류
--------------
1.문법 오류 : 함수, 객체, 컨트롤의 이름에 대한 오타 등등
실행 하면 라인수와 잘못된 부분에 대해 오류 표시가 난다.
[소스 코드]
<html>
<head><title>문법 오류</title></head>
<body>
<form runat="Server">
<asp:testbox id="txtName" runat="server"/>
</form>
</body>
</html>
이 경우 "응용 프로그램에 서버 오류가 있습니다" 라고 오류가 나며 파서오류가 출력 됩니다.
2.논리적 오류 : 프로그래밍 로직의 실수로 인해 발생 되며 주로 0으로 나눈다 든지, 타입 변환시 오류가 난다든지, NULL 객체를 참조 한다든지 등등의 경우에 흔히 일어나는 경우 이다.
3. 시스템 오류 : ASP.NET 자체에서 발생 하는 오류, CLR 오류등
[소스 코드.. 런타임 오류를 임의로 발생 시키는 코드]
<%@ Page Language="C#" %>
<script language="C#" runat="server">
void CreateRunTimeError() {
int[] array = new int[5];
array[5] = 5;
Response.Write("오류 코드");
}
</script>
<%
CreateRunTimeError();
%>
이 경우 "응용 프로그램에 서버 오류가 있습니다" 라고 오류가 나며 인덱스가 배열 범위를 벗어났다는 메시지가 출력 됩니다. 앞의 코드에서 debug=”true”를 생략 하면 어떻게 나타나는지 보시기 바랍니다.
-----------------------
디버그 모드
-----------------------
디버그 모드를 사용하면 런타임 오류 발생시 오류 메시지의 일부로 소스 오류 부분이 출력되며 오류가 발생 한 라인의 위치를 알려 준다. 반대로 디버그 모드를 사용하지 않으면 소스 오류 부분이 출력되지 않는다.
디버그 모드를 설정 하는 방법붕 첫번째는 Page 지시자에서 debug=”true” 라고 하는 것이며 두번째 방법은 애플리케이션 수준의 디버그 모드를 수정 하는 것으로 web.config 파일의 <compilation> 섹션에서 설정 된다.
<system.web>
<compilation debug=”true”>
…
</ compilation>
</system.web>
------------------------
트레이싱(Tracing)
------------------------
애플리케이션을 개발 시 각 페이지는 서로 다른 조건에서 실핼 될 수 있으며 효과적인 디버깅을 위해 각 단계에서의 변수값괴 여러 상태등을 확인 할 필요가 있다. 이전 버전의 ASP 에서는 개발자가 Response.Write() 메소드를 이용하여 이러한 정보를 출력하여 확인 했으나 맣은 불편 함이 있었다.
ASP.NET 에서는 간단하고 효율적으로 진행 할 수 있도록 Trace 기능을 지원 한다. Response.Write() 구문을 사용 할 필요 없이 요청 시간, 성능 데이터, 서버 변수, 그리고 개발자가 추가 한 메시지등을 확인 할 수 있다.
특정한 페이지의 프레이스 정보를 보기 위해서는 Page 지시자의 Trace 속성을 이용 한다.
<%@ Page language="C#" trace="true" %>
<html>
<head><title>페이지 레벨의 트레이싱</title>
<body>
<form runat="server">
<asp:label text="이름" runat="server"/>
<asp:textbox name="txtName" runat="server" />
</form>
</body>
</html>
이번에는 트레이스 로그에 메시지를 작성 해 보자
[소스 코드]
<%@ Page language="C#" trace="true" %>
<script language="C#" runat="server">
void WriteTrace() {
int intCounter = 1;
Trace.Write("첫번째 카테고리","볌수 초기화");
while(intCounter > 10) {
intCounter++;
}
if (intCounter < 10) {
//경고는 붉은색으로 출력 된다.
Trace.Warn("오류 카테고리","intCounter 값이 증가 하지 않음");
}
}
</script>
<%
WriteTrace();
%>
애플리케이션 레벨의 트레이싱을 위해서는 web.config 파일의 <trace> 섹션을 이용 한다. 애플리케이션 레벨의 트레이싱의 경우 페이지 레벨의 설정에 위해 덮여 질 수 있다.
<configuration>
<system.web>
<trace enabled=”false” requestLimit = “10” pageOutput=”false” tracemode=”SortByTime” localOnly=”true”/>
</system.web>
</ configuration>
-------------------------
예외(Exception)
-------------------------
예외(Exception)란 프로그램의 실행 중 발생하여 일반적인 실행 흐름을 방해하는 오류나 예기치 못한 조건을 의미 한다. 우선 Exception 객체에 대해 알아보자.
.NET Framework은 System.Exception 클래스를 제공 하며 이는 모든 예외의 기본 클래스로 사용 된다. Exception 클래스는 발생 한 오류에 대한 정보를 제공하는 여러 속성들을 포함 하고 있으며 이를 정리 하면 아래와 같다.
StackTrace : 프로그램이 실행한 함수의 호출 순서를 보여주는 정보를 포함, 오류가 어디에서 발생되었는지 확인이 가능 하다.
Message : 오류 메시지를 포함
InnerExsception : 예외 처리 과정에서 예외의 내용을 만들고 저장하는데 사용된다.예외가 발생되면 예외와 핸들러를 핸들러의 InnerException 속성에 저장 한 후 필요할 때 참조가 가능 하다.
Source : 오류가 발생한 애플리케이션의 정보를 포함 한다.
TargetSite : 예외를 발생 시킨 메소드에 대한 정보를 포함 한다.
HelpLink : 예외가 발생 했을 때 필요한 도움말이 있는 곳의 URL을 제공 하는데 사용된다.
System.Exception 으로부터 상속되는 ApplicationException과 SystemException이 있다. SystemExcpetion은 런타임에 의해, ApplicationException은 애플리케이션에 의해 호출되는 클래스 이다. 프로그램에서 예외 처리를 위해서는 익히 알고 있는 try , catch, finally를 적절히 이용해야 한다.
아래의 예를 참고 하자.
<script Language="c#" runat="server" >
void StructuredErrorHandling ()
{
try
{
int [] array = new int[9];
for(int intCounter=0; intCounter <= 9; intCounter++)
{
array[intCounter] = intCounter;
Response.Write("The value of the counter is:" + intCounter + "<br>");
}
}
// Handler for index out of range exception
catch (IndexOutOfRangeException ex)
{
Response.Write("Error Occurred"+ "<br>" + ex.ToString() + "<br>");
}
// Handler for generic exception
catch (Exception e)
{
Response.Write("Generic Error Occurred" + "<br>");
}
finally
{
Response.Write("The Page Execution is completed" + "<br>");
}
}
</script>
<%
StructuredErrorHandling();
Response.Write("Function call completed" + "<br>");
%>
---------------------
오류 핸들링 프로그램
---------------------
try ~ catch 블록을 이용하여 예외를 잡아낸다고 하더라도 그 사이를 빠져 나가는 경우가 있다. ASP.NET은 이러한 경우를 대비하여 두가지 메소드를 지원하며 이를 통해 런타임 오류 화면이 아닌 친숙한 오류 메시지를 사용자에게 전달 할 수 있다. 두 메소드는 다음과 같다.
Page_Error()
Application_Error()
1. Page_Error()
이 메소드는 페이지 클래스에 의해 제공된다. Page_Error() 메소드는 페이지 단위의 오류를 제어 하는데 사용된다. 제어되지 않은 오류가 발생 할 때 마다 이 이벤트가 호출되어 내부의 코드가 실행 된다. 아래의 예제를 확인 하자.
[소스 코드]
<script language="C#" runat="server">
void PageLevelErrorTest() {
int[] array = new int[5];
for(int cnt=0; cnt <=5; cnt++) {
array[cnt] = cnt;
Response.Write("카운터 값 : " + cnt + "<br>");
}
}
void Page_Error(object sender, EventArgs e) {
Response.Write("Error : " + Server.GetLastError().ToString());
Server.ClearError();
}
void Page_Load() {
PageLevelErrorTest();
}
</script>
2. Application_Error() 메소드
이 메소드는 Page_Error()와 비슷하지만 페이지 단위가 아니라 애플리케이션 내에 있는 모든 페이지에 적용 된다는 점이 다르다. 이 메소드는 Global.asax 파일 내에 포함되며 Page_Error()과 마찬 가지로 오류의 내용을 기록하고 관리자에게 알리거나 데이터베이스에 저장 하는 용도로 쓰인다.
일반적인 형식은 다음과 같다.
void Application_Error(object sender, EventArgs e) {
…….
}
------------------------
이벤트 로그의 이용
------------------------
이번에는 오류의 내용을 이벤트로그에 저장하고 사이트 관리자에게 오류 발생을 통지하는 방법에 대해 알아보자.
Application_Error, Page_Error 메소드로 제어 할 수 없는 예외가 발생 했다면 이러한 오류에 대한 정보를 얻어 내어 오류 제어에 관한 실마리로 사용해야 한다.
이를 위해 이벤트 로그의 내용을 윈도우의 이벤트 로그에 저장하고 주기적으로 확인 하는 것이 중요 하다.
System.Diagnostics 네임스페이스는 이벤트로그와 관련된 작업을 할 때 이용하는 네임스페이스로 이벤트 로그를 읽고 쓰는 클래스들이 포함되어 있다.
EventLog 클래스는 새로운 로그를 만들거나 기존의 로그 파일에 새로운 엔트리를 작성 하는 것이 가능 하다. 먼저 로그 파일을 만들고 이벤트 소스를 지정 해야 한다. 소스란 각각츼 엔트리를 식별하기 위한 문자열을 뜻하는 것으로 소스를 만들면 로그내에 기록 가능한 엔트리가 생기게 된다. 소스와 로그를 만드는 데는 CreateEventSource() 메소드가 사용 된다. 로그에 엔트리를 작성 할때는 WriteEntry() 메소드를 사용 한다.
아래의 예를 참조 하자.
[소스 코드]
<%@ Import Namespace="System.Diagnostics" %>
<%@ Page debug="true" %>
<script Language="C#" runat="server">
void EventToLog() {
int[] array = new int[5];
for(int cnt=0; cnt <=5; cnt++) {
array[cnt] = cnt;
Response.Write("카운터 값 : " + cnt + "<br>");
}
}
void Page_Error(object sender, EventArgs e) {
string errMsg = "Error : " + Server.GetLastError().ToString();
Server.ClearError();
string LogName = "MyEventLog";
string SourceName = "TEST";
if (!(EventLog.SourceExists(SourceName))) {
EventLog.CreateEventSource(SourceName, LogName);
}
EventLog log = new EventLog();
log.Source = SourceName;
log.WriteEntry(errMsg, EventLogEntryType.Error);
}
void Page_Load() {
EventToLog();
}
</script>
[실행 결과]
----------------------------
사이트 관리자에게 메일 전송
----------------------------
System.Web.Mail 네임스페이스는 이메일을 작성 하고 전송하는데 필요한 세가지의 클래스를 제공 한다.
1. MailMessage : 이 메일을 만드는데 사용하는 클래스
속성
From : 송신자
To : 수신자
Subject : 주제
Body : 본문
2. MailAttachment : 첨부 파일을 이용시 사용 된다.
3. SmtpMail : SMTP 서비스를 통하여 메일을 전송 하는데 사용되는 클래스, 필요한 메소드는 Send()로 아래와 같은 형식으로 이용 한다.
SmtpMail.Send(mailMessage);
아래의 소스를 참조하자.
[소스 코드]
<%@ Import Namespace="System.Web.Mail" %>
<%@ Page debug = "true" %>
<script language="C#" runat="server">
void sendMailTest() {
int[] array = new int[5];
for(int cnt=0; cnt <=5; cnt++) {
array[cnt] = cnt;
Response.Write("카운터 값 : " + cnt + "<br>");
}
}
void Page_Error(object sender, EventArgs e) {
string errMsg = "Error : " + Server.GetLastError().ToString();
Server.ClearError();
//이메일 데이터 작성
MailMessage mailMessage = new MailMessage();
mailMessage.From = "test@test.co.kr";
mailMessage.To = "test@hanmail.net";
mailMessage.Subject = "오류 발생!";
mailMessage.Body = errMsg;
SmtpMail.SmtpServer = "localhost";
SmtpMail.Send(mailMessage);
}
void Page_Load() {
sendMailTest();
}
</script>
--------------
오류의 종류
--------------
1.문법 오류 : 함수, 객체, 컨트롤의 이름에 대한 오타 등등
실행 하면 라인수와 잘못된 부분에 대해 오류 표시가 난다.
[소스 코드]
<html>
<head><title>문법 오류</title></head>
<body>
<form runat="Server">
<asp:testbox id="txtName" runat="server"/>
</form>
</body>
</html>
이 경우 "응용 프로그램에 서버 오류가 있습니다" 라고 오류가 나며 파서오류가 출력 됩니다.
2.논리적 오류 : 프로그래밍 로직의 실수로 인해 발생 되며 주로 0으로 나눈다 든지, 타입 변환시 오류가 난다든지, NULL 객체를 참조 한다든지 등등의 경우에 흔히 일어나는 경우 이다.
3. 시스템 오류 : ASP.NET 자체에서 발생 하는 오류, CLR 오류등
[소스 코드.. 런타임 오류를 임의로 발생 시키는 코드]
<%@ Page Language="C#" %>
<script language="C#" runat="server">
void CreateRunTimeError() {
int[] array = new int[5];
array[5] = 5;
Response.Write("오류 코드");
}
</script>
<%
CreateRunTimeError();
%>
이 경우 "응용 프로그램에 서버 오류가 있습니다" 라고 오류가 나며 인덱스가 배열 범위를 벗어났다는 메시지가 출력 됩니다. 앞의 코드에서 debug=”true”를 생략 하면 어떻게 나타나는지 보시기 바랍니다.
-----------------------
디버그 모드
-----------------------
디버그 모드를 사용하면 런타임 오류 발생시 오류 메시지의 일부로 소스 오류 부분이 출력되며 오류가 발생 한 라인의 위치를 알려 준다. 반대로 디버그 모드를 사용하지 않으면 소스 오류 부분이 출력되지 않는다.
디버그 모드를 설정 하는 방법붕 첫번째는 Page 지시자에서 debug=”true” 라고 하는 것이며 두번째 방법은 애플리케이션 수준의 디버그 모드를 수정 하는 것으로 web.config 파일의 <compilation> 섹션에서 설정 된다.
<system.web>
<compilation debug=”true”>
…
</ compilation>
</system.web>
------------------------
트레이싱(Tracing)
------------------------
애플리케이션을 개발 시 각 페이지는 서로 다른 조건에서 실핼 될 수 있으며 효과적인 디버깅을 위해 각 단계에서의 변수값괴 여러 상태등을 확인 할 필요가 있다. 이전 버전의 ASP 에서는 개발자가 Response.Write() 메소드를 이용하여 이러한 정보를 출력하여 확인 했으나 맣은 불편 함이 있었다.
ASP.NET 에서는 간단하고 효율적으로 진행 할 수 있도록 Trace 기능을 지원 한다. Response.Write() 구문을 사용 할 필요 없이 요청 시간, 성능 데이터, 서버 변수, 그리고 개발자가 추가 한 메시지등을 확인 할 수 있다.
특정한 페이지의 프레이스 정보를 보기 위해서는 Page 지시자의 Trace 속성을 이용 한다.
<%@ Page language="C#" trace="true" %>
<html>
<head><title>페이지 레벨의 트레이싱</title>
<body>
<form runat="server">
<asp:label text="이름" runat="server"/>
<asp:textbox name="txtName" runat="server" />
</form>
</body>
</html>
이번에는 트레이스 로그에 메시지를 작성 해 보자
[소스 코드]
<%@ Page language="C#" trace="true" %>
<script language="C#" runat="server">
void WriteTrace() {
int intCounter = 1;
Trace.Write("첫번째 카테고리","볌수 초기화");
while(intCounter > 10) {
intCounter++;
}
if (intCounter < 10) {
//경고는 붉은색으로 출력 된다.
Trace.Warn("오류 카테고리","intCounter 값이 증가 하지 않음");
}
}
</script>
<%
WriteTrace();
%>
애플리케이션 레벨의 트레이싱을 위해서는 web.config 파일의 <trace> 섹션을 이용 한다. 애플리케이션 레벨의 트레이싱의 경우 페이지 레벨의 설정에 위해 덮여 질 수 있다.
<configuration>
<system.web>
<trace enabled=”false” requestLimit = “10” pageOutput=”false” tracemode=”SortByTime” localOnly=”true”/>
</system.web>
</ configuration>
-------------------------
예외(Exception)
-------------------------
예외(Exception)란 프로그램의 실행 중 발생하여 일반적인 실행 흐름을 방해하는 오류나 예기치 못한 조건을 의미 한다. 우선 Exception 객체에 대해 알아보자.
.NET Framework은 System.Exception 클래스를 제공 하며 이는 모든 예외의 기본 클래스로 사용 된다. Exception 클래스는 발생 한 오류에 대한 정보를 제공하는 여러 속성들을 포함 하고 있으며 이를 정리 하면 아래와 같다.
StackTrace : 프로그램이 실행한 함수의 호출 순서를 보여주는 정보를 포함, 오류가 어디에서 발생되었는지 확인이 가능 하다.
Message : 오류 메시지를 포함
InnerExsception : 예외 처리 과정에서 예외의 내용을 만들고 저장하는데 사용된다.예외가 발생되면 예외와 핸들러를 핸들러의 InnerException 속성에 저장 한 후 필요할 때 참조가 가능 하다.
Source : 오류가 발생한 애플리케이션의 정보를 포함 한다.
TargetSite : 예외를 발생 시킨 메소드에 대한 정보를 포함 한다.
HelpLink : 예외가 발생 했을 때 필요한 도움말이 있는 곳의 URL을 제공 하는데 사용된다.
System.Exception 으로부터 상속되는 ApplicationException과 SystemException이 있다. SystemExcpetion은 런타임에 의해, ApplicationException은 애플리케이션에 의해 호출되는 클래스 이다. 프로그램에서 예외 처리를 위해서는 익히 알고 있는 try , catch, finally를 적절히 이용해야 한다.
아래의 예를 참고 하자.
<script Language="c#" runat="server" >
void StructuredErrorHandling ()
{
try
{
int [] array = new int[9];
for(int intCounter=0; intCounter <= 9; intCounter++)
{
array[intCounter] = intCounter;
Response.Write("The value of the counter is:" + intCounter + "<br>");
}
}
// Handler for index out of range exception
catch (IndexOutOfRangeException ex)
{
Response.Write("Error Occurred"+ "<br>" + ex.ToString() + "<br>");
}
// Handler for generic exception
catch (Exception e)
{
Response.Write("Generic Error Occurred" + "<br>");
}
finally
{
Response.Write("The Page Execution is completed" + "<br>");
}
}
</script>
<%
StructuredErrorHandling();
Response.Write("Function call completed" + "<br>");
%>
---------------------
오류 핸들링 프로그램
---------------------
try ~ catch 블록을 이용하여 예외를 잡아낸다고 하더라도 그 사이를 빠져 나가는 경우가 있다. ASP.NET은 이러한 경우를 대비하여 두가지 메소드를 지원하며 이를 통해 런타임 오류 화면이 아닌 친숙한 오류 메시지를 사용자에게 전달 할 수 있다. 두 메소드는 다음과 같다.
Page_Error()
Application_Error()
1. Page_Error()
이 메소드는 페이지 클래스에 의해 제공된다. Page_Error() 메소드는 페이지 단위의 오류를 제어 하는데 사용된다. 제어되지 않은 오류가 발생 할 때 마다 이 이벤트가 호출되어 내부의 코드가 실행 된다. 아래의 예제를 확인 하자.
[소스 코드]
<script language="C#" runat="server">
void PageLevelErrorTest() {
int[] array = new int[5];
for(int cnt=0; cnt <=5; cnt++) {
array[cnt] = cnt;
Response.Write("카운터 값 : " + cnt + "<br>");
}
}
void Page_Error(object sender, EventArgs e) {
Response.Write("Error : " + Server.GetLastError().ToString());
Server.ClearError();
}
void Page_Load() {
PageLevelErrorTest();
}
</script>
2. Application_Error() 메소드
이 메소드는 Page_Error()와 비슷하지만 페이지 단위가 아니라 애플리케이션 내에 있는 모든 페이지에 적용 된다는 점이 다르다. 이 메소드는 Global.asax 파일 내에 포함되며 Page_Error()과 마찬 가지로 오류의 내용을 기록하고 관리자에게 알리거나 데이터베이스에 저장 하는 용도로 쓰인다.
일반적인 형식은 다음과 같다.
void Application_Error(object sender, EventArgs e) {
…….
}
------------------------
이벤트 로그의 이용
------------------------
이번에는 오류의 내용을 이벤트로그에 저장하고 사이트 관리자에게 오류 발생을 통지하는 방법에 대해 알아보자.
Application_Error, Page_Error 메소드로 제어 할 수 없는 예외가 발생 했다면 이러한 오류에 대한 정보를 얻어 내어 오류 제어에 관한 실마리로 사용해야 한다.
이를 위해 이벤트 로그의 내용을 윈도우의 이벤트 로그에 저장하고 주기적으로 확인 하는 것이 중요 하다.
System.Diagnostics 네임스페이스는 이벤트로그와 관련된 작업을 할 때 이용하는 네임스페이스로 이벤트 로그를 읽고 쓰는 클래스들이 포함되어 있다.
EventLog 클래스는 새로운 로그를 만들거나 기존의 로그 파일에 새로운 엔트리를 작성 하는 것이 가능 하다. 먼저 로그 파일을 만들고 이벤트 소스를 지정 해야 한다. 소스란 각각츼 엔트리를 식별하기 위한 문자열을 뜻하는 것으로 소스를 만들면 로그내에 기록 가능한 엔트리가 생기게 된다. 소스와 로그를 만드는 데는 CreateEventSource() 메소드가 사용 된다. 로그에 엔트리를 작성 할때는 WriteEntry() 메소드를 사용 한다.
아래의 예를 참조 하자.
[소스 코드]
<%@ Import Namespace="System.Diagnostics" %>
<%@ Page debug="true" %>
<script Language="C#" runat="server">
void EventToLog() {
int[] array = new int[5];
for(int cnt=0; cnt <=5; cnt++) {
array[cnt] = cnt;
Response.Write("카운터 값 : " + cnt + "<br>");
}
}
void Page_Error(object sender, EventArgs e) {
string errMsg = "Error : " + Server.GetLastError().ToString();
Server.ClearError();
string LogName = "MyEventLog";
string SourceName = "TEST";
if (!(EventLog.SourceExists(SourceName))) {
EventLog.CreateEventSource(SourceName, LogName);
}
EventLog log = new EventLog();
log.Source = SourceName;
log.WriteEntry(errMsg, EventLogEntryType.Error);
}
void Page_Load() {
EventToLog();
}
</script>
[실행 결과]
----------------------------
사이트 관리자에게 메일 전송
----------------------------
System.Web.Mail 네임스페이스는 이메일을 작성 하고 전송하는데 필요한 세가지의 클래스를 제공 한다.
1. MailMessage : 이 메일을 만드는데 사용하는 클래스
속성
From : 송신자
To : 수신자
Subject : 주제
Body : 본문
2. MailAttachment : 첨부 파일을 이용시 사용 된다.
3. SmtpMail : SMTP 서비스를 통하여 메일을 전송 하는데 사용되는 클래스, 필요한 메소드는 Send()로 아래와 같은 형식으로 이용 한다.
SmtpMail.Send(mailMessage);
아래의 소스를 참조하자.
[소스 코드]
<%@ Import Namespace="System.Web.Mail" %>
<%@ Page debug = "true" %>
<script language="C#" runat="server">
void sendMailTest() {
int[] array = new int[5];
for(int cnt=0; cnt <=5; cnt++) {
array[cnt] = cnt;
Response.Write("카운터 값 : " + cnt + "<br>");
}
}
void Page_Error(object sender, EventArgs e) {
string errMsg = "Error : " + Server.GetLastError().ToString();
Server.ClearError();
//이메일 데이터 작성
MailMessage mailMessage = new MailMessage();
mailMessage.From = "test@test.co.kr";
mailMessage.To = "test@hanmail.net";
mailMessage.Subject = "오류 발생!";
mailMessage.Body = errMsg;
SmtpMail.SmtpServer = "localhost";
SmtpMail.Send(mailMessage);
}
void Page_Load() {
sendMailTest();
}
</script>
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/14)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]안드로이드개발자과정
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(7/09)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/16)Spring3.X, MyBatis, Hibernate실무과정
(7/21)웹퍼블리싱 마스터
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/12)SQL초보에서 Schema Object까지
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/14)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]안드로이드개발자과정
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(7/09)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/16)Spring3.X, MyBatis, Hibernate실무과정
(7/21)웹퍼블리싱 마스터
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/12)SQL초보에서 Schema Object까지
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기