작성자 : 한동훈 제목 : 효율적인웹응용프로그램구축 들어가기두번째섹션에서는먼저데이터액세스계층 (DAL: Data Access Layer) 작성에대한이야기를했습니다. 따라서데이터액세스계층에대해서먼저살펴본다음에 ASP.NET을기준으로 'Everything in one pa

Size: px
Start display at page:

Download "작성자 : 한동훈 제목 : 효율적인웹응용프로그램구축 들어가기두번째섹션에서는먼저데이터액세스계층 (DAL: Data Access Layer) 작성에대한이야기를했습니다. 따라서데이터액세스계층에대해서먼저살펴본다음에 ASP.NET을기준으로 'Everything in one pa"

Transcription

1 작성자 : 한동훈 제목 : 효율적인웹응용프로그램구축 들어가기두번째섹션에서는먼저데이터액세스계층 (DAL: Data Access Layer) 작성에대한이야기를했습니다. 따라서데이터액세스계층에대해서먼저살펴본다음에 ASP.NET을기준으로 'Everything in one page(or method)' 안티패턴에대해서얘기하며이를풀기위해 MVC(Model-View-Controller) 패턴과이패턴의다양한변형들에대해서살펴보도록하겠습니다. 마지막으로는캐싱에대해서살펴볼것입니다. Section 2. 웹응용프로그램작성및설계 2.1 데이터액세스계층데이터액세스응용프로그램에서흔히나타나는실수들중에는기본키 (Primary Key) 값만전달해주면특정레코드를가져오거나특정필드의값을가져오는함수, 값을비교해서다양한처리를하는함수, 특정테이블에데이터를업데이트하는함수, 추가하는함수를작성하는것입니다. 이러한종류의함수는해당응용프로그램에서해당하는작업을반복하는것을피하는데도움을줄수있으나재사용성이떨어지며추상화가제대로이뤄진것이아니며자신이하는작업의공통된부분이무엇인지이해하지못한것입니다. 어떤테이블에액세스하는가, 어떤필드에액세스하는가하는것은중요하지않습니다. 중요한것, 여러분이파악해야할것은이들작업들의공통점입니다. 데이터를액세스하는응용프로그램의작업유형은다음과같이나눌수있습니다. 1. 질의를수행해서한필드의값을가져오는경우 2. 질의에해당하는레코드가몇건이나존재하는가여부. 3. 질의를수행해서하나의레코드를반환하는경우. ex. 각종조회화면들 4. 질의를수행해서여러개의레코드를반환하는경우. 5. 질의를수행하고성공여부만을반환하는경우. ex. 각종 UPDATE, INSERT, DELETE 질의 처음부터이러한다섯가지를분류해내는것은쉬운일이아니며개발자에따라더세분화하는분들도 있을것입니다. 그러나 DB 설계와마찬가지로응용프로그램작성에있어도절대적인원칙이나답은 없습니다. 다만이런방법도있구나라고생각했으면합니다. 세상은상대성과절대성이있으며사람수만큼다양한생각이존재한다는것을인정하는마음은상 대성이라생각합니다. 프랑스의브리지트바르도의한국고유문화비판이나미국의이라크비판은

2 자신의척도를제일로삼는문화절대주의이며, 서로이해하려는자세가부족한것이라생각합니다 PHP 버전 PHP 웹응용프로그램에서는두개의파일을먼저작성합니다. 첫번째는데이터베이스연결정보나 응용프로그램정보를저장하기위한것으로다음과같습니다. 예제 : settings.inc.php // database hostname $ma_config['dbhost'] = 'localhost'; // database user name $ma_config['dbuser'] = 'mona'; // database user password $ma_config['dbpassword'] = 'monauser'; // database name $ma_config['dbname'] = 'mona'; define(disable_attachment, 0); define(enable_attachment, 1); 예제에서각설정정보를 $dbhost와같은변수의형태가아닌키와값으로된해쉬테이블형태로저장하는것은 URL을통한변조를예방하기위한것입니다. URL을통한변조예방은 $_GET, $_POST를사용하는방법과 php.ini 설정을변경하는방법이있으며이에대한것은관련도서를참고하시기바랍니다.($_GET, $_POST는 PHP 4.2 이상에서만제공됩니다 ) 두번째로흥미있는부분은 define으로정의된부분인데여기서는 ma_configuration.mcf_ispds 열에서사용하는 0과 1이라는값을정의한것입니다. 숫자에의미를부여하는매직넘버는종종코드를읽기어렵게만들고프로그래머도각숫자의의미를쉽게혼동하여프로그래밍하는실수를하게됩니다. 이러한버그는찾기도어렵습니다. 보다읽기쉽게하고, 실수를줄이기위해매직넘버 (Magic Number - 숫자를이용한해결책 ) 에대한상수를정의합니다. 다음은실제데이터베이스에액세스하는함수들을다룰차례입니다. 이들은 database-mysql.inc.php 로작성된것이며전체가아닌일부만소개해드리겠습니다.

3 먼저연결을얻는부분은다음과같습니다. 연결은데이터연결 (Data Connection) 을의미하는 $dc 에 저장하며이는전역변수로사용하고있습니다. $dc = mm_openconnection(); // open db connection function mm_openconnection() global $mm_config; $dc ($mm_config['dbhost'], $mm_config['dbuser'], $mm_config['dbpassword']); if (@mysql_select_db ($mm_config['dbname'], $dc)) return $dc; 위와같이연결을얻기때문에 settings.inc.php와 database-mysql.inc.php를 include 문을사용하여차례대로코드에포함시키는것으로데이터베이스연결을얻게됩니다. 로시작하는데이는에러가발생할경우어떠한메시지도출력하지않도록하는것입니다. 나중에어떻게에러메시지를출력하고디버깅할수있는지살펴보도록하겠습니다. 데이터베이스액세스프로그램의유형중에첫번째부터살펴보겠습니다 질의를수행해서한필드의값을가져오는경우 이에대한함수는다음과같습니다. function mm_queryvalue($query) global $dc; $query = stripslashes($query); $rows $dc); $row return $row[0];

4 위질의를수행하는예는다음과같다. $name = mm_queryvalue("select Name FROM user where id = 'mona'"); echo $name; mm_queryvalue와같은함수에서특정레코드가존재하지않는경우반환값은 '0' 이되기때문에적절한비교를통해서데이터베이스에해당하는레코드가존재하는지판단할수있습니다. 그러나이런경우는질의에해당하는레코드가몇건이나존재하는가를알려주는함수를먼저사용하는것이좋습니다 질의에해당하는레코드가몇건이나존재하는가여부. function mm_queryscalar($query) global $dc; $query = stripslashes($query); $rows $dc); 위함수는다음과같은방법으로보다세련되게사용할수있습니다. If(!mm_queryScalar( $query ) ) $name = mm_queryvalue( $query ); echo $name; 세번째는질의를수행해서하나의레코드를반환하는경우로주로게시물을조회하는것과같이어떤 정보를조회하는화면을위해자주사용됩니다.. 네번째는질의를수행해서여러개의레코드를반환하는경우로주로게시물의목록을보여주는것과같이어떤정보에대한목록을보여주기위해자주사용됩니다. 세번째를확장한것이네번째이기때문에세번째와네번째는각각의함수를작성하는대신하나의함수로작성하였습니다 질의를수행해서하나의레코드를반환하는경우와 질의를수행해서여러개의레

5 코드를반환하는경우. function mm_getrecordsbyfields($query) global $dc; $query = stripslashes($query); $result $dc); if ( 0 == $result ) return false; exit; for( $loopctr = 0; $loopctr $loopctr++ ) $row_array for( $ctr = 0; $ctr $ctr++ ) $field_name $ctr); $data_set[$loopctr][$field_name] = $row_array[$ctr]; // end mm_getrecords return $data_set; 쿼리를실행한결과는 2 차원배열로반환됩니다. 결과집합 $data_set[m][n] 에서 m 은각레코드의번 호이며 n 은각레코드에대한열을가리킵니다. 일반적인사용법은다음과같습니다. define( NL, '<br/>' ); $query = "SELECT ma_id, ma_title FROM ma_articles ORDER BY ma_id DESC LIMIT 1, 20"; if( $rs = mm_getrecordsbyfields( $query ) ): $rscount = count( $rs ); for( $ctr = 0; $ctr < $rscount; $ctr++ ):

6 echo $rs[$ctr]['ma_id']; echo $rs[$ctr]['ma_title']; echo NL; endfor; endif; 하나의레코드를질의하는경우에는루프를반복하지않고다음과같이쓸수있습니다. <? $number = $rs[0]['ma_id']; $title = $rs[0]['ma_title'];?> <font color=red><?= $number?></font><br> <?= $title?> 이와같은방법을사용하여 PHP 에서도템플릿의도움없이도최대한디자인과 UI 를분리시킬수있습 니다. 물론, $number, $title 과같이중간단계를만들어야하는것은번거롭습니다. mm_getrecordsbyfields와비슷한함수로 mm_getrecords 함수가있는데이함수가반환하는이차배열은모두숫자인덱스를통해서접근합니다. 동일한함수를이와같이작성한이유는템플릿이나다른함수들에서프레젠테이션을모두자동화하기위해서입니다. 다음은쿼리를실행한다음에결과를받을필요가없는경우를위한함수입니다. 이러한함수는질의를수행하고성공여부만을반환하며되며 UPDATE, INSERT, DELETE 질의등이대표적입니다 질의를수행하고성공여부만을반환하는경우. function mm_querynonresult($query) global $dc; $query = $dc); 의결과를반환합니다. 이값을검사하여 1 이상의값 이나오면쿼리가성공한것을알수있습니다. 따라서쿼리의성공여부와몇개의레코드를추가, 갱신, 삭제했는지알수있습니다.

7 이상 4가지함수는데이터액세스를유형별로나누어추상화한것이며일반적인레코드처리에대한함수는 mm_ 로정의되어있습니다. 이들함수는 PHP 함수에하나의레이어를추가한것에불과합니다. 디버깅이필요한경우에에러메시지를어떻게볼수있는지알아보기위해다음함수를살펴보겠습니다 일반함수 function mm_error () global $dc; 디버깅이필요한곳에다음과같은코드를사용하여에러메시지를출력할수있습니다. echo mm_error(); 연결을닫는함수는다음과같다. function mm_closeconnection() global $dc; mysql_close($dc); 위함수를매번호출하는것은매우어려운일입니다. 이런경우에는 dispose.inc.php 와같은별도의 파일을작성하고, 이파일에서 mm_closeconnection 함수를비롯한각종리소스를해제하는코드를추 가하고각페이지의마지막에 dispose.inc.php 를포함시킵니다. mm_error 와마찬가지로나머지함수들역시 PHP 함수를포장한것에불과합니다. function mm_affectedrows() global $dc;

8 나머지함수들에대해서는직접살펴보기바라며, 이들을이용한 PHP 응용프로그램의전체구조는 다음과같습니다. <? define('mm_path', '/var/run'); require(mm_path."/common/libraries/settings.inc.php"); require(mm_path."/common/libraries/database-mysql.inc.php"); require(mm_path."/common/header.inc.php"); require(mm_path."/common/menu.inc.php"); // PHP 코드들, 임시변수를사용해 UI 부분에는코드를사용하지않게한다.?> HTML 코드와약간의 for 루프 <? require(mm_path."/common/footer.inc.php"); require(mm_path."/common/copyright.inc.php"); require(mm_path."/common/libraries/dispose.inc.php");?> mm_path 와같은상수를정의함으로써페이지를어느위치에옮기더라도한번의수정으로페이지전 체를수정한효과를누릴수있으며절대경로를이용하면서도상대경로를이용하는이점을누릴수 있게됩니다. 단순히현재디렉터리를지정하는경우에는 define( 'mm_path', '.' ); 과같이설정하면됩니다 C# 버전 C# 버전은별도로작성하지않고 Microsoft Application Building Blocks 으로소개된 Data Access 를 소개합니다. public static int ExecuteNonQuery(SqlConnection connection, CommandType commandtype, string commandtext, params SqlParameter[] commandparameters)

9 //create a command and prepare it for execution SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, connection, (SqlTransaction)null, commandtype, commandtext, commandparameters); //finally, execute the command. int retval = cmd.executenonquery(); // detach the SqlParameters from the command object, so they can be used again. cmd.parameters.clear(); return retval; 이것은 PHP에서살펴본 mm_querynonresult와같은역할을하며언어는다르지만코드는비슷한방식으로동작하는것을알수있습니다. SqlCommand.ExecuteNonQuery를호출하여쿼리를실행하고결과로수행된레코드수를반환받습니다. 이러한종류의함수는 PHP, ADO.NET 뿐만아니라 ASP, VB, JSP 와같은다른언어에서도모두있으므로비슷한함수를쉽게작성하실수있습니다. PHP 버전보다 C# 버전이더복잡해보이는이유는오버로딩을통한다형성을지원하고있으며 MySQL 에서는기대할수없는저장프로시저를다루기때문입니다. PHP 버전에서는레코드의반환타입으로 2차원배열이나 mm_result를사용한 MySQL Resource Identifier로불리는참조만을반환하는두가지유형만을사용하지만 C# 버전은 ADO.NET에서제공하는데이터컨테이너종류에따라함수를별도로작성하기때문에가지수가증가합니다. C# 버전에대한보다자세한소스코드나사용법은도움말에맡기고생략하겠습니다. 설치하면 C# & VB.NET 버전이모두설치되며도움말도제공됩니다. 2.2 Everything in one page 모든코드가한페이지에있는것은매우흔합니다. 초기의웹프로그래밍언어들에서이러한문제는흔히발견됩니다. 다음은 ASP.NET 코드지만한페이지에모든것을작성했으며이것은 ASP, PHP에서도가장보편적입니다. <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %>

10 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <title>single</title> </head> <script language="c#" runat="server"> protected string page; protected string mcfid; void Page_Load(object sender, System.EventArgs e) // Initialize page = Request[ "page" ]; mcfid = Request[ "mcf" ]; if( page == null ) page = "1"; if( mcfid == null ) mcfid = "1"; string dsn = ConfigurationSettings.AppSettings[ "dsn" ]; SqlConnection dc = new SqlConnection( dsn ); dc.open(); // Execute SqlCommand cmd = new SqlCommand( "usp_articlesbypagesplit", dc ); cmd.commandtype = CommandType.StoredProcedure; cmd.parameters.add( "@PAGE", page ); cmd.parameters.add( "@MCF_ID", mcfid ); SqlDataAdapter adapter = new SqlDataAdapter( cmd ); DataSet ds = new DataSet();

11 adapter.fill( ds, "articles" ); DataTable table = ds.tables[0]; rptlist.datasource = table; rptlist.databind(); // Terminate dc.close(); private void btnwrite_click(object sender, System.Web.UI.ImageClickEventArgs e) Response.Redirect( "write.aspx?mcf=" + mcfid ); </script> <body MS_POSITIONING="GridLayout"> <form id="form1" method="post" runat="server"> <!-- Begin ArticleList --> <asp:repeater id="rptlist" runat="server"> <HeaderTemplate> <table align="center" class="listtitle" cellspacing="0"> <tr class="listtitle"> <td><b> </b></td> <td> 제 목 </td> <td> 이름 </td> <td width="150px"> 등록일 </td> </tr> </HeaderTemplate> <ItemTemplate> <tr class="ltlist"> <td width="50"> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_id" ) ) %> </td> <td class="ltlisttitle"> <a href='view.aspx?id=<%# Convert.ToString(

12 DataBinder.Eval( Container.DataItem, "ma_id" )) %>'> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_title" )) %> </a> </td> <td> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_userid" )) %> </td> <td width="150px"><%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_recordeddate" ))%> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:repeater> <!-- End ArticleList --> <!-- Begin IconSection --> <table class="headercell"> <tr valign="bottom"> <td align="right"> <a href="list.aspx?mcf=<%= mcfid %>&page=<%= Convert.ToInt32(page) + 1 %>"><img src="images/form/mai_next.gif" border="0" alt="next Page"></a> <!-- Write --> <asp:imagebutton id="btnwrite" runat="server" ImageUrl="images/form/mi_write.gif" AlternateText=" 글쓰기 " /> </td> </tr> </table> <!-- End IconSection --> </form> </body>

13 </html> 예제를간단하게하기위해게시판에서목록을보여주는기능외에는아무것도구현하지않았습니다. 그러나게시물을등록, 삭제하는과정은모두저장프로시저로작성해두었기때문에그사용방법은크게다르지않습니다. 게시물목록을보여주기위해 Repeater 컨트롤을사용했습니다. 이처럼한페이지에모든것을작성하는것은코드재사용성이낮으며다른페이지와자원을공유하 기어렵습니다. 따라서 ASP.NET 에서제공하는코드숨김 (Code-Behind) 기능을이용해서코드와프레 젠테이션을분리합니다. 이구조는 View-Model Controller 라얘기합니다. Model-View-Controller 에서제공하는이야기는 GoF 의디자인패턴, 마틴파울러의 Pattern of Enterprise Application Architecture, 마이크로소프트의 Enterprise Solution Patterns using Microsoft.Net 에소개된내용을옮기는것에불과합니다. 2.3 View-Model Controller View Page language="c#" Codebehind="Model-View_Controller.aspx.cs" AutoEventWireup="false" Inherits="MonaArticle1.Model_View_Controller" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>webform1</title> </HEAD> <body> <form id="form1" method="post" runat="server"> <!-- Begin ArticleList --> <asp:repeater id="rptlist" runat="server"> <HeaderTemplate> <table align="center" class="listtitle" cellspacing="0"> <tr class="listtitle"> <td><b> </b></td> <td> 제 목 </td> <td> 이름 </td> <td width="150px"> 등록일 </td>

14 </tr> </HeaderTemplate> <ItemTemplate> <tr class="ltlist"> <td width="50"> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_id" ) ) %> </td> <td class="ltlisttitle"> <a href='view.aspx?id=<%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_id" )) %>'> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_title" )) %> </a> </td> <td> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_userid" )) %> </td> <td width="150px"><%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_recordeddate" ))%> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:repeater> <!-- End ArticleList --> <!-- Begin IconSection --> <table class="headercell"> <tr valign="bottom"> <td align="right"> <a href="list.aspx?mcf=<%= mcfid %>&page=<%= Convert.ToInt32(page) + 1 %>"><img src="images/form/mai_next.gif" border="0" alt="next Page"></a> <!-- Write --> <asp:imagebutton id="btnwrite" runat="server" ImageUrl="images/form/mai_write.gif"

15 AlternateText=" 글쓰기 " /> </td> </tr> </table> <!-- End IconSection --> </form> </body> </HTML> Model Controller UI 로부터분리되어데이터를다루는부분을 Model Controller 라하며, ASP.NET 에서는코드숨김 (Code Behind) 이이역할을담당한다. using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Configuration; namespace MonaArticle1 public class Model_View_Controller : System.Web.UI.Page protected string page; protected System.Web.UI.WebControls.Repeater rptlist; protected System.Web.UI.WebControls.ImageButton btnwrite; protected string mcfid; private void Page_Load(object sender, System.EventArgs e)

16 // Initialize page = Request[ "page" ]; mcfid = Request[ "mcf" ]; if( page == null ) page = "1"; if( mcfid == null ) mcfid = "1"; string dsn = ConfigurationSettings.AppSettings[ "dsn" ]; SqlConnection dc = new SqlConnection( dsn ); dc.open(); // Execute SqlCommand cmd = new SqlCommand( "usp_articlesbypagesplit", dc ); cmd.commandtype = CommandType.StoredProcedure; cmd.parameters.add( "@PAGE", page ); cmd.parameters.add( "@MCF_ID", mcfid ); SqlDataAdapter adapter = new SqlDataAdapter( cmd ); DataSet ds = new DataSet(); adapter.fill( ds, "articles" ); DataTable table = ds.tables[0]; rptlist.datasource = table; rptlist.databind(); // Terminate dc.close(); private void btnwrite_click(object sender, System.Web.UI.ImageClickEventArgs e)

17 Response.Redirect( "write.aspx?mcf=" + mcfid ); 위예제코드에서 VS.NET에의해생성되는코드는생략하였다. View와 Model Controller로구분하였지만버튼을클릭하면처리를담당하는 Controller와 Model이분리가되어있지않으며 Model과 Controller가코드숨김클래스에강하게결합되어있습니다. 재사용성을높이기위해서는이들을분리해야합니다. 다음은이를분리한 Model-View-Controller(MVC) 패턴입니다. 2.4 Model-View-Controller Model Model에서는뷰와관련된코드를포함하지않으며오로지모델에관련된코드와데이터베이스액세스에대한코드만포함합니다. Model은데이터를다루며다른것에는간여하지않으므로 C# 클래스형태로작성합니다. using System; using System.Collections; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace MonaArticle1 public class Model1 public Model1() public static DataTable ExecuteDataSet( string page, string mcfid ) // Initialize string dsn = ConfigurationSettings.AppSettings[ "dsn" ];

18 SqlConnection dc = new SqlConnection( dsn ); dc.open(); // Execute SqlCommand cmd = new SqlCommand( "usp_articlesbypagesplit", dc ); cmd.commandtype = CommandType.StoredProcedure; cmd.parameters.add( "@PAGE", page ); cmd.parameters.add( "@MCF_ID", mcfid ); SqlDataAdapter adapter = new SqlDataAdapter( cmd ); DataSet ds = new DataSet(); adapter.fill( ds, "articles" ); DataTable table = ds.tables[0]; // Terminate dc.close(); return table; 여기에는 View 나 Controller 와관련된코드가존재하지않습니다. Model 에대한코드만작성했습니다 View-Controller View는 aspx 페이지가되며코드숨김클래스는 Controller가됩니다. View는앞의예제와동일하며여기서는 Controller만소개합니다. using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI;

19 using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace MonaArticle1 /// <summary> /// Summary description for Controller1. /// </summary> public class Controller1 : System.Web.UI.Page protected System.Web.UI.WebControls.Repeater rptlist; protected System.Web.UI.WebControls.ImageButton btnwrite; protected string page; protected string mcfid; private void Page_Load(object sender, System.EventArgs e) // Initialize page = Request[ "page" ]; mcfid = Request[ "mcf" ]; if( page == null ) page = "1"; if( mcfid == null ) mcfid = "1"; // Execute DataTable table = Model1.ExecuteDataSet( page, mcfid ); rptlist.datasource = table; rptlist.databind(); private void btnwrite_click(object sender, System.Web.UI.ImageClickEventArgs e) Response.Redirect( "write.aspx?mcf=" + mcfid );

20 Page_Load 메서드에서볼수있는것처럼모델을분리함으로써코드가더단순해지는것을알수있 습니다. Model1 클래스는다시 Model 부분과데이터액세스층 (Data Access Layer) 으로분리될것입 니다. 자카르타스트러츠의 Model2와같은 MVC 변형이등장하게되는것처럼웹응용프로그램에서 MVC는문제점이있습니다. 인터페이스와비즈니스로직을분리하는데는 MVC 패턴이성공적이지만웹페이지간에네비게이션은정적이라는문제점이있습니다. 비즈니스로직과 UI 관련코드를분리시켜야할것입니다 Page Controller PageController, Model, View 는위와같이상호작용하며, 각페이지에 PageController 를작성하는것 은많은코드중복을만들어냅니다. 따라서 PageController 에서공통된부분을추출하여일반화 (Generalization) 를시키면다음과같습니다. 웹응용프로그램은사용자요청에매우의존적입니다. 쿼리스트링, 폼요소의제출, 멀티파트폼 등의처리는 Controller 를테스트하는것을어렵게만들며이러한작업은매우시간소모적이며지루 합니다. 따라서 BaseController 클래스는다시웹종속코드와웹독립코드로분리합니다.

21 PageController PageController에는 Template Mothod 패턴을적용합니다. Template Method는하위클래스에서알고리즘의구조를변경하지않고알고리즘의특정단계를재정의하는데유리합니다. 웹응용프로그램은각페이지에따라서다양한초기화를수행해야합니다. 따라서 BasePage에서는알고리즘의구조를정의하고, 하위클래스에서알고리즘의특정단계즉 PageLoadEvent() 에서알고리즘을재정의하는것이유리합니다. 행위패턴으로알려진 Template Method 패턴은알고리즘구조가변하지않는곳에서사용되며, 하위클래스에서공통적인부분에대한코드중복을줄이기위해공통된부분을 Base Class로일반화 (Generalization) 하는것입니다. 따라서 PageController를일반화시킨 BaseController를살펴봅니다.

22 BaseController C# 클래스 BasePage.cs를추가합니다. 소스코드는다음과같습니다. 웹응용프로그램의오퍼레이션을정의하는것이기때문에 System.Web.UI.Page 클래스를상속하며웹폼디자이너가생성해주는것과같이 Load 이벤트등을정의하고있다는것이주의하십시오. 또한각하위클래스에서재정의하게될 PageLoadEvent를선언하고있습니다. using System; using System.Web.UI.WebControls; using System.Web.UI; namespace MonaArticle1 public class BasePage : System.Web.UI.Page protected virtual void PageLoadEvent(object sender, System.EventArgs e) private void Page_Load(object sender, System.EventArgs e) PageLoadEvent(sender, e); #region Web Form Designer generated code override protected void OnInit(EventArgs e) InitializeComponent(); base.oninit(e); private void InitializeComponent() this.load += new System.EventHandler(this.Page_Load); #endregion

23 모든페이지에공통적으로들어갈헤더파일도작성합니다. 이헤더파일의이름은 BasePage.inc로합니다. <style> A:link FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none A:visited FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none A:active FONT-WEIGHT: normal; COLOR: red; TEXT-DECORATION: none A:hover FONT-WEIGHT: normal; COLOR: #177c15; TEXT-DECORATION: none BODY FONT-WEIGHT: normal; FONT-SIZE: 9px; FONT-FAMILY: Arial, Verdana, 굴림 TR.ListTitle FONT-WEIGHT: 500; COLOR: #177c15; FONT-FAMILY: Verdana, 돋움 ; BACKGROUND- COLOR: #d8e8d8; TEXT-ALIGN: center TABLE.ListTitle BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: 0px; WIDTH: 700px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; FONT-FAMILY: verdana, Arial, 돋움 ; TEXT-ALIGN: center TR.LTList PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: normal; FONT-SIZE: 9pt; PADDING-BOTTOM: 3px; COLOR: dimgray; LINE-HEIGHT: 18pt; PADDING-TOP: 3px; FONT-FAMILY: 굴림 ; BACKGROUND-COLOR: white TD.LTListTitle COLOR: dimgray; FONT-FAMILY: 굴림 ; TEXT-ALIGN: left TABLE.HeaderCell BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1px; BORDER-LEFT: 0px; WIDTH: 700px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; TEXT-ALIGN: center; CellSpacing: 0px </style> <table width=100% border=0 cellspacing=0 cellpadding=5> <tr> <td valign=bottom align=right> <font size=-2 face=verdana> Everything here is <a href=" <br> All rights reserved. </font> </td> </tr> <tr> <td colspan=2> </td> </tr>

24 </table> Model Model 부분은 C# 클래스 DataAccess.cs에서처리합니다. 이와같은 DataAccess는마틴파울러의 POEAA에따르면 Table Data Gateway 패턴입니다. using System; using System.Data.SqlClient; using System.Data; using System.Configuration; namespace MonaArticle1 public class DataAccess public DataAccess() public static DataTable ExecuteDataSet( string page, string mcfid ) // Initialize string dsn = ConfigurationSettings.AppSettings[ "dsn" ]; SqlConnection dc = new SqlConnection( dsn ); dc.open(); // Execute SqlCommand cmd = new SqlCommand( "usp_articlesbypagesplit", dc ); cmd.commandtype = CommandType.StoredProcedure; cmd.parameters.add( "@PAGE", page ); cmd.parameters.add( "@MCF_ID", mcfid ); SqlDataAdapter adapter = new SqlDataAdapter( cmd ); DataSet ds = new DataSet(); adapter.fill( ds, "articles" );

25 DataTable table = ds.tables[0]; // Terminate dc.close(); return table; SubPage SubPage는웹폼이며 System.Web.UI.Page 클래스를상속하는대신 BasePage 클래스를상속하여동작합니다. 여기서는 SubPage의예로게시판목록을사용했습니다. 이름 : SubPage.aspx <%@ Page language="c#" Codebehind="SubPage.aspx.cs" AutoEventWireup="false" Inherits="MonaArticle1.SubPage" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>subpage</title> <meta name="generator" Content="Microsoft Visual Studio.NET 7.1"> <meta name="code_language" Content="C#"> <meta name="vs_defaultclientscript" content="javascript"> <meta name="vs_targetschema" content=" </HEAD> <body MS_POSITIONING="FlowLayout"> <!-- #include virtual="basepage.inc" --> <form id="form1" method="post" runat="server"> <!-- Begin ArticleList --> <asp:repeater id="rptlist" runat="server"> <HeaderTemplate> <table align="center" class="listtitle" cellspacing="0">

26 <tr class="listtitle"> <td><b> </b></td> <td> 제 목 </td> <td> 이름 </td> <td width="150px"> 등록일 </td> </tr> </HeaderTemplate> <ItemTemplate> <tr class="ltlist"> <td width="50"> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_id" ) ) %> </td> <td class="ltlisttitle"> <a href='view.aspx?id=<%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_id" )) %>'> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_title" )) %> </a> </td> <td> <%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_userid" )) %> </td> <td width="150px"><%# Convert.ToString( DataBinder.Eval( Container.DataItem, "ma_recordeddate" ))%> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:repeater> <!-- End ArticleList --> <!-- Begin IconSection --> <table class="headercell"> <tr valign="bottom">

27 <td align="right"> <a href="list.aspx?mcf=<%= mcfid %>&page=<%= Convert.ToInt32(page) + 1 %>"><img src="images/form/mai_next.gif" border="0" alt="next Page"></a> <!-- Write --> <asp:imagebutton id="btnwrite" runat="server" ImageUrl="images/form/mi_write.gif" AlternateText=" 글쓰기 " /> </td> </tr> </table> <!-- End IconSection --> </form> </body> </HTML> 이름 : SubPage.aspx.cs( 코드숨김파일 ) using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace MonaArticle1 public class SubPage : BasePage protected string page; protected System.Web.UI.WebControls.Repeater rptlist; protected System.Web.UI.WebControls.ImageButton btnwrite; protected string mcfid; private void Page_Load(object sender, System.EventArgs e)

28 // Put user code to initialize the page here protected override void PageLoadEvent(object sender, System.EventArgs e) // Initialize page = Request[ "page" ]; mcfid = Request[ "mcf" ]; if( page == null ) page = "1"; if( mcfid == null ) mcfid = "1"; // Execute DataTable table = DataAccess.ExecuteDataSet( page, mcfid ); rptlist.datasource = table; rptlist.databind(); SubPage.aspx를시작페이지로설정한후컴파일하면잘동작하는것을알수있습니다. 이와같은패턴이갖는장점은다음과같습니다. - PageController를웹종속적인부분과웹독립적인부분으로나누었기때문에각페이지에서는매우한정된부분만을작업하는것으로페이지를동적으로생성할수있으며코드를최대한단순하게유지할수있습니다. 웹페이지의네비게이션을고려한패턴으로는 MVC외에 Intercepting Filter, Front Controller 등이있습니다. 이들은여기서소개한방법들보다네비게이션에대해더강력한방법을제공하지만보다복잡해집니다. 2.6 캐싱

29 캐싱을할수있는종류는웹프로그래밍언어마다조금씩차이가있으나대부분은동일합니다. ASP.NET 에서는캐싱할수있는종류로는 Class, Configuration( 설정정보 ), Output Caching, Object Caching 이있으며, 데이터베이스연결을캐싱하는연결풀링 (Connection Pooling) 이있습니다 Output 캐싱대부분의사용자들에게시물목록페이지의 1-3페이지정도를보며, 게시물을조회하는페이지도평균 5개이내의게시물을조회한다는것을생각하면아주작은캐싱만으로도매우큰퍼포먼스를얻을수있습니다. ASP.NET에서캐싱을적용하는방법은 aspx 페이지의처음에다음과같이하면됩니다. OutputCache Duration="1" VaryByParam="none"%> OutputCache Duration="1" VaryByParam="page;mcf"%> 첫번째는정적인페이지를캐싱하는경우에적당하며두번째는게시물목록페이지에서와같이매개변수 page, mcf의값을기준으로캐싱하라는것을의미합니다. Duration은캐시를보유할시간을나타내며여기서는 1분으로설정하였습니다. 그러나신문사, 도서정보, 영화정보, 쇼핑몰과같이컨텐트제공이위주인사이트에서는페이지캐싱을 30-60분정도로설정하는것만으로도많은성능을얻을수있습니다. 메모리에저장된캐시를가져오는비용은데이터베이스연결을생성하고, 데이터를가져오는비용과비교할수없을만큼적습니다. 이러한캐싱은적게는 200% 에서많게는 2000% 의성능향상을보여줍니다. 모든매개변수에대해서캐싱을하고싶은경우에는 VaryByParam="*" Location을사용하여캐시된정보를어디에저장할지지정할수있습니다. 이값은 Client, DownStream, Server, None, Any가있습니다. 기본값은 Any이며이는 Client, DownStream, Server 무엇이든될수있습니다. None은캐싱을사용하지않는것을의미합니다. Client는사용자브라우저에캐시정보를저장하는것을의미하며 DownStream은웹서버로부터요청을받은서버가되며대부분의경우에프록시서버에저장하는것을의미합니다. Server는여러웹서버중에요청을받은웹서버에캐시정보를저장하는것을의미합니다 Class 캐싱클래스를이용한캐싱은공유자원을 static으로선언하는것으로각페이지를여러인스턴스들간에데이터를공유할수있습니다. 클래스캐싱은어떤멤버든지 static으로선언할수있으면모두이용할수있으며 Hashtable, Dictionary, Vector 등을이용하여캐싱을직접구현하는경우에도사용할수있습니다. 직접캐싱을구현할때주의할점은언제캐싱을만료할것인지결정해야한다는것입니다. 여기서는간단히 int counter를 static으로선언하여방문자수를카운트하는경우를설명하였

30 습니다. 웹서버에서이페이지를실행한다음에다른 PC 에서이페이지를실행하시면결과를볼수 있습니다. 이름 : SimpleCache.aspx <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="SimpleCache.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>class Cache</title> </HEAD> <body MS_POSITIONING="FlowLayout"> <form id="form1" method="post" runat="server"> <FONT face=" 굴림 ">Counter: </FONT> <asp:label id="label1" runat="server">label</asp:label> </form> </body> </HTML> 이름 : SimpleCache.aspx.cs using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace SimpleCache public class WebForm1 : System.Web.UI.Page

31 protected System.Web.UI.WebControls.Label Label1; public static int counter; private void Page_Load(object sender, System.EventArgs e) // Put user code to initialize the page here ++counter; Label1.Text = counter.tostring(); ASP.NET 과같이자체캐싱을지원하지않는경우에는 WAS(Web Application Server) 에서제공하는캐 싱이나전용캐싱솔루션을구입하는방법도있으며결과를임시파일로저장하는방법도있습니다. 그러나캐싱에는단점이있습니다. 캐싱도자원을소비하는것이기때문에히트율이높은페이지만을캐싱해야효율적이며히트율이낮은페이지까지캐싱하는것은메모리를차지하는결과를가져옵니다. 캐싱은디스크캐싱, 메모리캐싱의경우에사용되는디스크양과메모리양을정확히관리하는것이필요합니다 조각캐싱조각캐싱은닷넷에서사용자컨트롤 ascx 캐싱을사용하는사용자컨트롤을페이지에추가하면사용자컨트롤에대해서캐싱되기때문에전체페이지를실행하는것보다나은성능을보여주게됩니다. 앞에서작성한 BasePage.inc 를사용자컨트롤을사용하여작성하면다음과같습니다. 이름 : BasePage.ascx <%@ Control Language="c#" AutoEventWireup="false" Codebehind="BasePage.ascx.cs" Inherits="MonaArticle1.BasePage1" TargetSchema=" <%@ OutputCache Duration="60" VaryByParam="none" %> <table width=100% border=0 cellspacing=0 cellpadding=5> <tr> <td valign=bottom align=right> <font size=-2 face=verdana>

32 Everything here is <a href=" <br> All rights reserved. </font> </td> </tr> <tr> <td colspan=2> </td> </tr> </table> 사용자컨트롤 BasePage.ascx을사용하는페이지예제는다음과같습니다. Page language="c#" Codebehind="BasePageUsage.aspx.cs" AutoEventWireup="false" Inherits="MonaArticle1.BasePageUsage" %> Register TagPrefix="Mona" TagName="Header" Src="BasePage.ascx" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <title>basepageusage</title> </head> <body MS_POSITIONING="FlowLayout"> <Mona:Header runat="server" /> <form id="form1" method="post" runat="server"> </form> </body> </html> 객체캐싱 static 키워드를이용한클래스캐싱보다나은방법은닷넷프레임워크에서제공하는 Cache 클래스를이용하는것입니다. 다음은 Cache 클래스를사용하여객체캐싱을하는예제이며그리드를채우기위해 SQL Server의예제데이터베이스인 Northwind를사용했습니다. 이름 : Cache.aspx <%@ Page language="c#" Codebehind="Cache.aspx.cs" AutoEventWireup="false"

33 Inherits="CacheView.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>object Cache</title> </HEAD> <body> <form id="form1" method="post" runat="server"> <FONT face=" 굴림 "> <asp:button id="button1" runat="server" Text="Button"></asp:Button> <asp:label id="label1" runat="server">label</asp:label> <asp:datagrid id="datagrid1" runat="server"></asp:datagrid></font> </form> </body> </HTML> 이름 : Cache.aspx.cs using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; namespace CacheView public class WebForm1 : System.Web.UI.Page protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.DataGrid DataGrid1;

34 protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e) // Put user code to initialize the page here DataView view = new DataView(); string date; view = (DataView) Cache[ "CacheView" ]; date = (string) Cache[ "CacheDate" ]; if( view == null date == null ) SqlConnection sc = new SqlConnection( "server=(local); database=northwind; uid=sa; pwd=ndsndkealva" ); SqlDataAdapter adapter = new SqlDataAdapter( "SELECT * FROM Products", sc ); DataSet ds = new DataSet(); adapter.fill( ds, "Product" ); view = ds.tables[0].defaultview; date = DateTime.Now.ToString(); Cache.Insert( "CacheView", view ); Cache.Insert( "CacheDate", date ); Label1.Text = "I came from DB. " + date; else Label1.Text = "I came from cached data. " + date; // end if DataGrid1.DataSource = view; DataGrid1.DataBind();

35 private void Button1_Click(object sender, System.EventArgs e) if( Cache["CacheView"] == null ) Cache.Remove("CacheView"); Cache.Remove("CacheDate"); Cache 에추가하기위해 Cache.Insert 를사용하고, 캐시된항목을삭제하기위해 Cache.Remove 를사용 합니다 연결캐싱 동적으로생성되는페이지를캐싱하는방법외에연결을캐싱하는방법이있습니다. ASP.NET 에서는연 결문자열에다음과같이설정하면됩니다. <add key="dsn" value="server=(local); uid=mona2; password=mona2user; database=mona2; Min Pool Size=0; Max Pool Size=20;" /> ASP.NET에서연결을캐싱하는기준은연결문자열의값이같은지의여부입니다. 따라서같은데이터베이스에연결하는경우라해도연결문자열이다른경우에는동일한채널로인식하지않습니다. PHP 도마찬가지로 dbhost, dbuser 등을조합하여하나의고유한연결로인식합니다. PHP 자체에서 Persistent Connection( 연결지속 ) 을제공하더라도이들조합의요소가달라지면다른연결로인식합니다. PHP 에서는연결을캐싱하기위해 sqlrelay 를사용합니다. 앞서소개한 database-mysql.inc.php 를 sqlrelay 버전으로다시작성한 database-sqlrelay.inc.php 에서는다음과같은방법을사용합니다. $dc = mm_openconnection(); $cursor = mm_opencursor();

36 // open db connection function mm_openconnection() global $mm_config; //global $dc; $dc = sqlrcon_alloc( $mm_config['dbhost'], 9000, "", $mm_config['dbuser'], $mm_config['dbpassword'], 0, 1); return $dc; 여러개의레코드를가져오기위해사용한 mm_getrecordsbyfields 는다음과같이재작성됩니다. function mm_getrecordsbyfields($query) global $dc; global $cursor; $query = stripslashes($query); // buffering the result set all at once sqlrcur_setresultsetbuffersize( $cursor, 0 ); sqlrcur_openquery( $cursor, $query ); sqlrcon_endsession( $dc ); if ( 0 == $cursor ) return false; exit; for( $loopctr = 0; $loopctr < sqlrcur_rowcount( $cursor ); $loopctr++)

37 $row_array = sqlrcur_getrow( $cursor, $loopctr ); for( $ctr = 0; $ctr < sqlrcur_colcount( $cursor ); $ctr++ ) $field_name = sqlrcur_getcolumnname( $cursor, $ctr ); $data_set[$loopctr][$field_name] = $row_array[$ctr]; // end mm_getrecords return $data_set; 현재연결캐싱은다양한웹프로그래밍언어에서제공되거나 sqlrelay 와같이별도의라이브러리형 태로제공됩니다. 마치며웹응용프로그램에서는오늘날웹응용프로그램에서널리쓰이는 MVC와 MVC의변형에대해서살펴보았습니다. 그러나시간상의제약으로인해 Front Controller, Intercepting Filter 등을다루지못했습니다. 또한웹응용프로그램에서유용하게적용될수있는 Observer, Command, 분산환경응용프로그램에적용될수있는 Broker, Data Transfer Object, Serialize 등을다루지못한아쉬움이남습니다. 지금까지소개한것들중에진정제자신의것은없습니다. 모두책, 인터넷, 뉴스그룹을통해서얻은것들일뿐입니다. 따라서익명으로많은지식을인터넷을통해전파하는많은분들에게감사드립니다. 이강좌를통해여러분의웹응용프로그래밍에도움이되었으면바랄것이없겠습니다.

PHP & ASP

PHP & ASP 단어장프로젝트 프로젝트2 단어장 select * from address where address like '% 경기도 %' td,li,input{font-size:9pt}

More information

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E > 6. ASP.NET ASP.NET 소개 ASP.NET 페이지및응용프로그램구조 Server Controls 데이터베이스와연동 8 장. 데이터베이스응용개발 (Page 20) 6.1 ASP.NET 소개 ASP.NET 동적웹응용프로그램을개발하기위한 MS 의웹기술 현재 ASP.NET 4.5까지출시.Net Framework 4.5 에포함 Visual Studio 2012

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습문제 Chapter 05 데이터베이스시스템... 오라클로배우는데이터베이스개론과실습 1. 실습문제 1 (5 장심화문제 : 각 3 점 ) 6. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (2) 7. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (5)

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

PART 1 CHAPTER 1 Chapter 1 Note 4 Part 1 5 Chapter 1 AcctNum = Table ("Customer").Cells("AccountNumber") AcctNum = Customer.AccountNumber Note 6 RecordSet RecordSet Part 1 Note 7 Chapter 1 01:

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 7. HTML 와 CSS 로웹사이트만들 기 웹사이트작성 웹사이트구축과정 내비게이션구조도 홈페이지레이아웃 헤더 web Shop 내비게이션메뉴

More information

VS_chapter10

VS_chapter10 Part. Chapter 10 ActiveX Data Objects.NET(ADO.NET).NET, ADO.NET..NET ADO(ActiveX Data Objects). ADO. ADO,. ADO,.NET ADO.NET... ADO.NET ADO Connection DataReader Command DataAdapter DataSet DataView DataSet

More information

MVVM 패턴의 이해

MVVM 패턴의 이해 Seo Hero 요약 joshua227.tistory. 2014 년 5 월 13 일 이문서는 WPF 어플리케이션개발에필요한 MVVM 패턴에대한내용을담고있다. 1. Model-View-ViewModel 1.1 기본개념 MVVM 모델은 MVC(Model-View-Contorl) 패턴에서출발했다. MVC 패턴은전체 project 를 model, view 로나누어

More information

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) 8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) - DDL(Data Definition Language) : show, create, drop

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint 세션.ppt 웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session)

More information

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법

More information

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일 Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 Introduce Me!!! Job Jeju National University Student Ubuntu Korean Jeju Community Owner E-Mail: ned3y2k@hanmail.net Blog: http://ned3y2k.wo.tc Facebook: http://www.facebook.com/gyeongdae

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 ONE page html 이란? 원페이지는최근의홈페이지제작트렌드로한페이지에상단에서하단으로의마우스스크롤링을통해서컨텐츠를보여주는스타일의홈페이지입니다. USER 의시선을분산시키지않고위쪽에서아래쪽으로마우스스크롤링을통해서홈페이지의컨텐츠를보여주게됩니다. 반응형으로제작되어스마트폰, 아이패드, 태블릿,PC, 노트북등다양한디바이스에서자동으로최적화됩니다. ONE page 웹사이트사례

More information

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

하둡을이용한파일분산시스템 보안관리체제구현

하둡을이용한파일분산시스템 보안관리체제구현 하둡을이용한파일분산시스템 보안관리체제구현 목 차 - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - 1. 사용자가웹서버에로그인하여다양한서비스 ( 파일업 / 다운로드, 폴더생성 / 삭제 ) 를활용 2. 웹서버와연동된하둡서버에서업 / 다운로드된파일을분산저장. ( 자료송수신은 SSH 활용 ) - 9 - - 10 - - 11 -

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

문서 템플릿

문서 템플릿 HDSI 툴분석 [sql injection 기술명세서 ] Sql injection 기술명세서 Ver. 0.01 이문서는 sql injection 기술명세가범위입니다. Copyrights Copyright 2009 by CanvasTeam@SpeeDroot( 장경칩 ) All Rights Reserved. 장경칩의사전승인없이본내용의전부또는일부에대한복사, 전재,

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

MySQL-.. 1

MySQL-.. 1 MySQL- 기초 1 Jinseog Kim Dongguk University jinseog.kim@gmail.com 2017-08-25 Jinseog Kim Dongguk University jinseog.kim@gmail.com MySQL-기초 1 2017-08-25 1 / 18 SQL의 기초 SQL은 아래의 용도로 구성됨 데이터정의 언어(Data definition

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

한국 컴퓨터그래픽스(디지털컨텐츠)의 현황과 미래 위기인가? 기회인가?

한국 컴퓨터그래픽스(디지털컨텐츠)의 현황과 미래 위기인가? 기회인가? Chapter 14 ADO.NET 학습목표 ADO.NET 은데이터베이스사용의편의를위해, MS 사가만든표준데이터베이스인터페이스이다. 프로그램을한다는것에있어서빠질수없는부분이데이터베이스부분이다. ADO.NET 의 C# 에서활용을학습하도록한다. 2 ADO.NET 의개요 ADO.NET.NET 에서데이터베이스조작에관련된.NET 클래스들의집합 다양한방법으로데이터베이스를검색,

More information

2파트-07

2파트-07 CHAPTER 07 Ajax ( ) (Silverlight) Ajax RIA(Rich Internet Application) Firefox 4 Ajax MVC Ajax ActionResult Ajax jquery Ajax HTML (Partial View) 7 3 GetOrganized Ajax GetOrganized Ajax HTTP POST 154 CHAPTER

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2 03 장. 테두리여백지정하는속성 이번장에서는테이블, 레이어, 폼양식등의더예쁘게꾸미기위해서 CSS 를이용하여 HTML 요소의테두리속성을바꾸어보자. 이장에서다룰내용 1 2 3 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2 01. 테두리를제어하는스타일시트 속성값설명 border-width border-left-width

More information

초보자를 위한 분산 캐시 활용 전략

초보자를 위한 분산 캐시 활용 전략 초보자를위한분산캐시활용전략 강대명 charsyam@naver.com 우리가꿈꾸는서비스 우리가꿈꾸는서비스 우리가꿈꾸는서비스 우리가꿈꾸는서비스 그러나현실은? 서비스에필요한것은? 서비스에필요한것은? 핵심적인기능 서비스에필요한것은? 핵심적인기능 서비스에필요한것은? 핵심적인기능 서비스에필요한것은? 적절한기능 서비스안정성 트위터에매일고래만보이면? 트위터에매일고래만보이면?

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드] GUI 설계 6 주차 DB 연동김문정 tops@yd.ac.kr 강의순서강의전환경 JDK 설치및환경설정톰캣설치및환경설정이클립스 (JEE) 설치및환경설정 MySQL( 드라이버 ) 설치및커넥터드라이브연결 DB 생성 - 계정생성이클립스에서 DB에연결서버생성 - 프로젝트생성 DB연결테이블생성및등록 2 MySQL 설치확인 mysql - u root -p MySQL 에데이터베이스추가

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Reasons for Poor Performance Programs 60% Design 20% System 2.5% Database 17.5% Source: ORACLE Performance Tuning 1 SMS TOOL DBA Monitoring TOOL Administration TOOL Performance Insight Backup SQL TUNING

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 HTML5 웹프로그래밍입문 부록. 웹서버구축하기 1 목차 A.1 웹서버시스템 A.2 PHP 사용하기 A.3 데이터베이스연결하기 2 A.1 웹서버시스템 3 웹서버의구축 웹서버컴퓨터구축 웹서버소프트웨어설치및실행 아파치 (Apache) 웹서버가대표적 서버실행프로그램 HTML5 폼을전달받아처리 PHP, JSP, Python 등 데이터베이스시스템 서버측에데이터를저장및효율적관리

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용   한 수업환경구축 웹데이터베이스구축및실습 구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 http://chrome.google.com 한림대학교웹데이터베이스 - 이윤환 APM 설치 : AUTOSET6

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

Web Scraper in 30 Minutes 강철

Web Scraper in 30 Minutes 강철 Web Scraper in 30 Minutes 강철 발표자 소개 KAIST 전산학과 2015년부터 G사에서 일합니다. 에서 대한민국 정치의 모든 것을 개발하고 있습니다. 목표 웹 스크래퍼를 프레임웍 없이 처음부터 작성해 본다. 목표 웹 스크래퍼를 프레임웍 없이 처음부터 작성해 본다. 스크래퍼/크롤러의 작동 원리를 이해한다. 목표

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

Javascript

Javascript 1. HTML 이란? HTML 은 Hyper Text Mark Up Language 의약자로예약되어있는각종태그라는명령어를이용하여웹페이지를작성할때사용하는언어입니다. 2. HTML 의기본구조 < 태그 > 내용 < 태그속성 = 변수 > 내용

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역 WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역시쉽게해결할수있다. 이번화이트페이퍼에서는 Window Function 중순위 RANK, ROW_NUMBER,

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

Discrete Mathematics

Discrete Mathematics 웹프로그래밍 () 2005 년봄학기 문양세컴퓨터과학과강원대학교자연과학대학 데이터베이스? (1/4) 데이터베이스 (database), DBMS 처리 / 관리하고자하는정보혹은데이터를모아놓은저장소 저장된정보에의미를부여하고, 다양한연산 ( 검색, 갱신등 ) 을제공하는소프트웨어시스템 사용자에의해지시되는일련의연산 (transaction) 을효과적이고정확하게처리하는소프트웨어시스템

More information

Lab1

Lab1 Lab 1: HTML CSS 2015 Fall human-computer interaction + design lab. Joonhwan Lee HTML Web Server (World Wide Web: WWW)? (., FTP ). web 3 웹 구조의 이해 웹페이지 웹페이지는 HTML 이라는 언어로 만들어진 일종의 프로그램 웹페이지는 텍스트, 이미지, 동영상,

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

untitled

untitled A Leader of Enterprise e-business Solution FORCS Co., LTD 1 OZ Application Getting Started (ver 5.1) 2 FORCS Co., LTD A Leader of Enterprise e-business Solution FORCS Co., LTD 3 OZ Application Getting

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가 혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에

More information

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

3ÆÄÆ®-14

3ÆÄÆ®-14 chapter 14 HTTP >>> 535 Part 3 _ 1 L i Sting using System; using System.Net; using System.Text; class DownloadDataTest public static void Main (string[] argv) WebClient wc = new WebClient(); byte[] response

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

untitled

untitled A Leader of Enterprise e-business Solution FORCS Co., LTD 1 OZ Application Getting Started 2 FORCS Co., LTD A Leader of Enterprise e-business Solution FORCS Co., LTD 3 OZ Application Getting Started 'OZ

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache

More information

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F31C2F7BDC32E >

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F31C2F7BDC32E > Chapter 8 데이터베이스응용개발 목차 사용자인터페이스와도구들 웹인터페이스와데이터베이스 웹기초 Servlet 과 JSP 대규모웹응용개발 ASP.Net 8 장. 데이터베이스응용개발 (Page 1) 1. 사용자인터페이스와도구들 대부분의데이터베이스사용자들은 SQL을사용하지않음 응용프로그램 : 사용자와데이터베이스를연결 데이터베이스응용의구조 Front-end Middle

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 11. 자바스크립트와캔버스로게임 만들기 캔버스 캔버스는 요소로생성 캔버스는 HTML 페이지상에서사각형태의영역 실제그림은자바스크립트를통하여코드로그려야한다. 컨텍스트객체 컨텍스트 (context) 객체 : 자바스크립트에서물감과붓의역할을한다. var canvas = document.getelementbyid("mycanvas"); var

More information

Microsoft PowerPoint MySQL 연동.ppt

Microsoft PowerPoint MySQL 연동.ppt 고급웹프로그래밍 () Lectures 21 & 22: 2005 년중등 1급정교사연수 문양세컴퓨터과학과강원대학교자연과학대학 데이터베이스? (1/4) 데이터베이스 (database), DBMS 처리 / 관리하고자하는정보혹은데이터를모아놓은저장소 저장된정보에의미를부여하고, 다양한연산 ( 검색, 갱신등 ) 을제공하는소프트웨어시스템 사용자에의해지시되는일련의연산 (transaction)

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 13. HTML5 위치정보와드래그앤드롭 SVG SVG(Scalable Vector Graphics) 는 XML- 기반의벡터이미지포맷 웹에서벡터 - 기반의그래픽을정의하는데사용 1999 년부터 W3C 에의하여표준 SVG 의장점 SVG 그래픽은확대되거나크기가변경되어도품질이손상되지않는다. SVG 파일에서모든요소와속성은애니메이션이가능하다. SVG 이미지는어떤텍스트에디터로도생성하고편집할수있다.

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

Cookie Spoofing.hwp

Cookie Spoofing.hwp Cookie Spoofing&Sniffing By Maxoverpro[max]( 장상근) maxoverpro@empal.com http://www.maxoverpro.org 1. 서론 이문서는 Cookie Spoofing 과 Sniffing 에대해정석적인방법을이야기하도록하며또 한어느특정곳의취약점을설명하지않고직접제작한예제를가지고 Cookie Spoofing 과

More information

MySQL-Ch05

MySQL-Ch05 MySQL P A R T 2 Chapter 05 Chapter 06 Chapter 07 Chapter 08 05 Chapter MySQL MySQL. (, C, Perl, PHP),. 5.1 MySQL., mysqldump, mysqlimport, mysqladmin, mysql. MySQL. mysql,. SQL. MySQL... MySQL ( ). MySQL,.

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 WINDOWS ADO.NET 환경의 ALTIBASE 개발가이드 2010. 09 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change

More information

PowerPoint Presentation

PowerPoint Presentation WordPress 를이용한웹사이트만들기 2015 년 한지웅 WordPress 를이용한웹사이트만들기 Day 1 Day 2 Day 3 Day 4 Day 5 1. 웹사이트제작기초 HTLM 기본 CSS 기본 WordPress 개론 ( 웹사이트구축툴 ) 2. 웹호스팅 / 웹사이트구축 웹호스팅업체선택 cpanel 설정 WordPress 설치 3. WordPress 기초활용

More information

untitled

untitled A Leader of Enterprise e-business Solution FORCS Co., LTD 1 OZ Application Designer Getting Started 2 FORCS Co., LTD A Leader of Enterprise e-business Solution FORCS Co., LTD 3 OZ Application Designer

More information

untitled

untitled A Leader of Enterprise e-business Solution FORCS Co., LTD 1 OZ Application Designer Getting Started 2 FORCS Co., LTD A Leader of Enterprise e-business Solution FORCS Co., LTD 3 OZ Application Designer

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

thesis

thesis ( Design and Implementation of a Generalized Management Information Repository Service for Network and System Management ) ssp@nile nile.postech.ac..ac.kr DPE Lab. 1997 12 16 GMIRS GMIRS GMIRS prototype

More information

Intra_DW_Ch4.PDF

Intra_DW_Ch4.PDF The Intranet Data Warehouse Richard Tanler Ch4 : Online Analytic Processing: From Data To Information 2000. 4. 14 All rights reserved OLAP OLAP OLAP OLAP OLAP OLAP is a label, rather than a technology

More information

초보자를 위한 ASP.NET 2.0

초보자를 위한 ASP.NET 2.0 (World Wide Web), HTML., (ebay) (Amazon.com) HTML,., Microsoft ASP.NET. ASP.NET ASP.NET., ASP.NET HTML,,. ASP.NET HTML.. ASP.NET, Microsoft Visual Basic. Visual Basic. 5 Visual Basic, Visual Basic. ASP.NET

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

RHEV 2.2 인증서 만료 확인 및 갱신

RHEV 2.2 인증서 만료 확인 및 갱신 2018/09/28 03:56 1/2 목차... 1 인증서 확인... 1 인증서 종류와 확인... 4 RHEVM CA... 5 FQDN 개인 인증서... 5 레드햇 인증서 - 코드 서명 인증서... 6 호스트 인증... 7 참고사항... 8 관련링크... 8 AllThatLinux! - http://allthatlinux.com/dokuwiki/ rhev_2.2_

More information