출처 : http://blog.naver.com/tit99hds?Redirect=Log&logNo=130017643620


ASP.NET 보안.

 

1. 개요.

 

사용자를 확인하고 리소스에 대한 액세스를 제어하는 기능은 많은 웹 응용 프로그램에서 중요한 부분에 속합니다.

요청 엔터티의 ID를 확인하는 것을 인증이라고 합니다.

일반적으로 인증을 받기 위해 이름/암호 쌍 같은 자격 증명을 입력해야 합니다.

ID를 인증한 다음에는 해당 ID가 특정 리소스에 액세스할 수 있는지 여부를 확인해야 합니다.

이러한 과정을 권한 부여라고 합니다.

ASP.NET IIS와 함께 응용 프로그램에 대한 인증 및 권한 부여 서비스를 제공합니다.

COM 개체에는 ID를 제어할 수 있는 중요한 기능이 있습니다.

COM 개체 코드는 이 ID 아래에서 실행됩니다.

COM 개체가 요청 엔터티의 ID를 사용하여 코드를 실행하는 것을 가장이라고 합니다.

ASP.NET Framework 응용 프로그램은 필요에 따라 요청을 가장하도록 선택할 수 있습니다.

일부 응용 프로그램에서는 요청 ID에 따라 또는 요청 ID가 속한 역할 집합에 따라 표시되는 내용이 동적으로 변경되도록 할 수 있습니다.

ASP.NET Framework 응용 프로그램은 현재 요청 ID가 특정 역할에 참여하는지 여부를 동적으로 확인할 수 있습니다.

예를 들어, 응용 프로그램은 관리자에 대한 내용을 조건에 따라 생성하기 위해 현다시 사용자가 관리자 역할에 속하는지 여부를 확인할 수도 있습니다.

 

 

2. 인증 및 권한 부여.

 

ASP.NET IIS와 함께 사용되어 기본, 다이제스트 및 Windows 인증 방식을 지원합니다.

또한 ASP.NET에서는 단일 로그온 서비스와 사용자 프로필 서비스를 사용할 수 있는 Microsoft Passport 인증 서비스를 지원하며,

폼 기반의 인증을 사용하는 응용 프로그램에 강력한 서비스도 제공합니다.

폼 기반의 인증은 쿠키를 사용하여 사용자를 인증하고 응용 프로그램 자체에서 자격 증명 확인을 수행할 수 있게 합니다.

ASP.NET 인증 서비스는 IIS에서 제공하는 인증 서비스를 따른다는 사실을 이해할 필요가 있습니다.

예를 들어, IIS 응용 프로그램에서 기본 인증을 사용하려면 인터넷 서비스 관리자 도구를 사용하는 응용 프로그램에 맞게 기본 인증을 구성하여 사용해야 합니다.

ASP.NET에는 다음 두 가지 방식의 인증 서비스가 있습니다.

(1) 리소스에 대한 ACL이나 사용 권한을 검사하여 인증된 사용자 계정이 해당 리소스에 액세스할 수 있는지 여부를 확인하는 방식

(2) 웹 공간에 대해 ID를 인증하는 URL 인증 방식

IUSR_MYMACHINE 계정을 사용하여 익명으로 액세스할 수 있도록 응용 프로그램을 구성하는 시나리오를 만들면 차이점을 쉽게 이해할 수 있습니다.

ASP.NET 페이지(: "/default.aspx")에 대한 요청이 인증되면 IUSR_MYMACHINE 계정에 파일을 읽을 수 있는 권한이 있는지 여부를 확인하기 위해

해당 파일(: "c:\inetpub\wwwroot\default.aspx") ACL을 검사합니다.

권한이 있으면 액세스가 인증되고, 파일 인증은 자동으로 수행됩니다.

URL 인증의 경우에는 ASP.NET 응용 프로그램에서 사용하기 위해 계산된 구성 데이터에 익명 사용자가 액세스할 수 있는지 여부를 검사합니다.

요청된 URL에 액세스할 수 있으면 요청이 인증됩니다.

이 경우, ASP.NET에서는 익명 사용자가 /Default.aspx에 액세스할 수 있는지 여부를 확인하기 위한 검사를 수행합니다.

이 검사의 대상은 해당 URL이 가리키는 파일이 아니라 URL 자체입니다.

미세한 차이 같지만, 이를 통해 사용자가 시스템 또는 도메인 계정에 해당되지 않는

폼 기반의 인증이나 Passport 인증 같은 인증 스키마를 응용 프로그램에서 사용할 수 있게 됩니다.

또한 해당 리소스를 원본으로 사용하는 물리적 파일이 없는 가상 리소스에 대해서도 인증할 수 있습니다.

예를 들어, .stk로 끝나는 파일에 대한 모든 요청을 쿼리 문자열에 있는 변수에 따라 주식 시세를 보여 주는 처리기에 매핑하도록 응용 프로그램에서 선택할 수 있습니다.

이러한 경우 ACL 검사를 수행할 물리적 .stk 파일이 없으므로 가상 리소스에 대한 액세스를 제어하는 데 URL 인증이 사용됩니다.

IIS에서 제공하는 인증 계정에서는 항상 파일 인증을 수행합니다.

익명 액세스가 허용되면 이 인증 계정은 구성된 익명 계정이 되며, 허용되지 않으면 NT 계정이 사용됩니다. 이 방식은 ASP에서도 동일합니다.

Explorer 속성 페이지의 보안 탭에서 지정한 파일이나 디렉터리에 대한 파일 ACL을 설정합니다.

URL 인증은 ASP.NET Framework 응용 프로그램의 일부로 구성됩니다.

ASP.NET 인증 서비스를 사용하려면 응용 프로그램의 구성 파일에서 <authentication> 요소를 구성해야 합니다.

이 요소는 다음 표에 나열된 값을 가질 수 있습니다.

 

설명

없음

사용할 수 있는 ASP.NET 인증 서비스는 없지만, IIS 인증 서비스는 여전히 사용할 수 있습니다.

Windows

ASP.NET 인증 서비스에서는 NT 사용자나 그룹을 인증하기 위해 현재 요청에 WindowsPrincipal(System.Security.Principal.WindowsPrincipal)을 첨부합니다.

Form

ASP.NET 인증 서비스에서는 쿠키를 관리하여 인증되지 않은 사용자를 로그온 페이지로 리디렉션합니다. 이 서비스는 대개 응용 프로그램에 익명으로 액세스하기 위해 IIS 옵션과 함께 사용됩니다.

Passport

Passport SDK를 시스템에 설치하면 ASP.NET 인증 서비스에서는 Passport SDK에서 제공하는 서비스에 대한 편리한 래퍼를 제공합니다.

 

예를 들어, 다음 구성 파일에서는 응용 프로그램에 대해 폼 기반(쿠키) 인증을 사용할 수 있습니다.

 

<configuration>

  <system.web>

    <authentication mode="Forms"/>

  </system.web>

</configuration>

 

 

3. Windows 기반 인증.

 

ASP.NET Windows 인증을 사용할 때 ASP.NET에서는 WindowsPrincipal 개체를 현재 요청에 연결합니다.

이 개체는 URL 권한 부여에 사용됩니다.

또한 응용 프로그램에서는 요청하는 ID가 특정 역할을 가지고 있는지 확인하는 데 이 개체를 사용합니다.

 

if(User.IsInRole("Administrators")) {

    DisplayPrivilegedContent();

}

 

If User.IsInRole("Administrators") Then

    DisplayPrivilegedContent()

End If

 

if(User.IsInRole("Administrators")) {

    DisplayPrivilegedContent();

}

 

WindowsPrincipal 클래스는 NT 그룹 등록에 따라 역할을 확인합니다.

자체의 역할을 확인하려는 응용 프로그램에서는 다음 예제에서 보여 주는 것처럼

Global.asax 파일에서 WindowsAuthentication_OnAuthenticate 이벤트를 처리하고

System.Security.Principal.IPrincipal을 구현하는 해당 응용 프로그램의 클래스를 요청에 연결하면 역할을 확인할 수 있습니다.

 

// Create a class that implements IPrincipal

public class MyPrincipal : IPrincipal {

  // implement application-defined role mappings

}

 

// In a Global.asax file:

public void WindowsAuthentication_OnAuthenticate(Object Source, WindowsAuthenticationEventArgs e) {

  // Attach a new application-defined class that implements IPrincipal to

  // the request.

  // Note that since IIS has already performed authentication, the provided

  // identity is used.

  e.User = new MyPrincipal(e.Identity);

}

 

' Create a class that implements IPrincipal

Public Class MyPrincipal : Inherits IPrincipal

  ' Implement application-defined role mappings

End Class

 

' In a Global.asax file

Public Sub WindowsAuthentication_OnAuthenticate(Source As Object, e As WindowsAuthenticationEventArgs)

  ' Attach a new application-defined class that implements IPrincipal to

  ' the request.

  ' Note that since IIS has already performed authentication, the provided

  ' identity is used.

  e.User = New MyPrincipal(e.Identity)

End Sub

 

// Create a class that implements IPrincipal.

public class MyPrincipal implements IPrincipal {

  // Implement application-defined role mappings.

}

 

// In a Global.asax file

public function WindowsAuthentication_OnAuthenticate(Source:Object, e:WindowsAuthenticationEventArgs) : void {

  // Attach a new application-defined class that implements IPrincipal to

  // the request.

  // Note that since IIS has already performed authentication, the provided

  // identity is used.

  e.User = new MyPrincipal(e.Identity);

}

 

다음 샘플에서는 User.Identity.Name으로 사용할 수 있는 인증된 사용자 이름에 액세스하는 방법을 보여 줍니다.

ASP에 익숙한 프로그래머라면 이 값을 AUTH_USER 서버 변수로도 사용할 수 있음을 주목해야 합니다.

 

 

<html>

 

  <script language="C#" runat=server>

 

    void Page_Load(Object Src, EventArgs E ) {

 

      AuthUser.Text = User.Identity.Name;

      AuthType.Text = User.Identity.AuthenticationType;

    }

 

  </script>

 

  <body>

 

    <h3><font face="굴림">Windows 인증 사용</font></h3>

 

    <table Width="700" rules="all" bordercolor="Black" style="background-color:#ccccff;bordercolor:black;font-family:굴림;font-size:9pt;border-collapse:collapse;">

      <tr>

        <td>사용자:</td>

        <td><asp:label id=AuthUser runat=server/>

      </tr>

      <tr>

        <td>인증 형식:</td>

        <td><asp:label id=AuthType runat=server/>

      </tr>

    </table>

 

  </body>

 

</html>

 

/* web.config */

 

<configuration>

  <system.web>

    <authentication mode="Windows" />

    <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />

  </system.web>

</configuration>

 

 

 

4. Form 기반 인증.

 

ASP.NET의 인증 서비스는 폼 기반의 인증으로, 이 인증 방식을 사용하면 응용 프로그램에서

해당 응용 프로그램 고유의 로그온 UI를 제공하고, 고유한 자격 증명을 확인할 수 있습니다.

ASP.NET은 인증되지 않은 사용자를 로그온 페이지로 리디렉션하고 필요한 모든 쿠키를 관리하는 방식으로 사용자를 인증합니다.

이 인증 방식은 많은 웹 사이트에서 사용되는 인기 있는 기술입니다.

익명 사용자가 액세스할 수 없게 <authentication>Forms으로 설정한 폼 기반의 인증을 사용하도록 응용 프로그램을 구성해야 합니다.

다음 예제에서는 해당 응용 프로그램의 Web.config 파일에서 이 작업을 수행하는 방법을 보여 줍니다.

 

<configuration>

  <system.web>

    <authentication mode="Forms"/>

    <authorization>

        <deny users="?" />

    </authorization>

  </system.web>

</configuration>

 

폼 기반의 인증을 사용하여 관리자는 사용할 쿠키의 이름, 보호 유형, 로그온 페이지에 사용할 URL, 쿠키 유효 기간 및 발생한 쿠키에 사용할 경로를 구성합니다.

다음 표에서는 아래 예제에 나와 있는 <authentication> 요소의 하위 요소인 <Forms> 요소에 유효한 특성을 보여 줍니다.

 

<authentication mode="Forms">

   <forms name=".ASPXCOOKIEDEMO" loginUrl="login.aspx" protection="all" timeout="30" path="/">

      <!-- protection="[All|None|Encryption|Validation]" -->

   </forms>

</authentication>

 

특성

설명

loginUrl

인증되지 않은 사용자가 리디렉션되는 로그온 URL, 같은 컴퓨터나 원격 컴퓨터에 있습니다. 원격 컴퓨터에 있으면 양쪽 컴퓨터에서는 decryptionkey 특성에 대해 같은 값을 사용해야 합니다.

name

인증을 위해 사용할 HTTP 쿠키의 이름입니다. 여러 응용 프로그램에서 한 컴퓨터에 있는 폼 기반의 인증 서비스를 사용하려면 응용 프로그램마다 고유한 쿠키 값을 구성해야 합니다. URL에 종속 관계가 생기는 것을 방지하기 위해 ASP.NET에서는 인증 쿠키 설정 시 경로 값으로 "/"를 사용하여 사이트의 모든 응용 프로그램에 인증 쿠키를 다시 보냅니다.

timeout

쿠키가 만료되기까지의 시간()으로 정수로 표시됩니다. 기본값은 30입니다. timeout 특성은 마지막 요청을 받은 뒤 n분 후에 만료되는 슬라이딩 값입니다. 성능 저하를 방지하고 쿠키 경고를 설정한 사용자에게 브라우저 경고가 여러 번 표시되는 것을 방지하기 위해 시간이 반 이상 지나면 쿠키가 업데이트됩니다. 따라서 일부의 경우에 정밀도가 떨어질 수도 있습니다.

path

발생된 쿠키에 사용할 경로로, 기본값은 "/"입니다. 쿠키가 반환될 때 브라우저에서 대소문자를 구분하기 때문에 "/"를 사용하면 경로의 대소문자가 일치하지 않아 발생하는 문제를 방지할 수 있습니다. 공유 서버 환경의 응용 프로그램에서는 이 지시문을 사용하여 개인 쿠키를 관리해야 합니다. 또는 쿠키를 발생시키기 위해 API를 사용하여 런타임에 경로를 지정할 수도 있습니다.

protection

쿠키 데이터를 보호하는 데 사용되는 메서드로, 유효한 값은 다음과 같습니다.

All: 데이터 유효성 검사와 암호화를 사용하여 쿠키를 보호합니다. 구성된 데이터 유효성 검사 알고리즘은 요소를 기반으로 합니다. Triple DES를 사용할 수 있고 키가 48바이트이면 암호화에 Triple DES가 사용됩니다. 기본(권장)값은 All입니다.

None: 맞춤 정보를 제공하기 위해서만 쿠키를 사용하는 사이트와 보안 요구 사항이 낮은 사이트에 사용합니다. 암호화와 유효성 검사를 비활성화할 수 있습니다. 이처럼 쿠키를 사용하는 경우 주의가 필요하지만 이렇게 설정하면 .NET Framework를 사용하여 맞춤 정보를 제공하는 모든 방법에서 성능을 향상시킬 수 있습니다.

Encryption: TripleDES DES를 사용하여 쿠키를 암호화합니다. 그러나 해당 쿠키의 데이터 유효성을 검사하지는 않습니다. 이러한 유형의 쿠키는 일반 텍스트 공격의 대상이 되기 쉽습니다.

Validation: 쿠키의 내용을 암호화하지 않지만 전환 시 쿠키 데이터가 변경되지 않았는지 확인합니다. 쿠키를 만들기 위해 유효성 검사 키가 버퍼에서 쿠키 데이터와 연결되고 MAC가 계산되어 나가는 쿠키에 추가됩니다.

 

응용 프로그램이 구성되면 로그온 페이지를 만들어야 합니다.

다음 샘플에서는 간단한 로그온 페이지를 보여 줍니다.

이 샘플이 실행되면 Default.aspx 페이지가 요청됩니다.

인증되지 않은 요청의 경우에는 전자 메일 주소와 암호를 묻는 간단한 폼이 있는 로그온 페이지(Login.aspx)로 리디렉션됩니다.

로그온 페이지가 표시되면 사용자 이름 "jdoe@somewhere.com"과 암호 "password"를 사용하여 로그온하십시오.

액세스 권한이 있는지 확인한 다음 응용 프로그램에서 다음을 호출합니다.

 

FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);

FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);

 

이 샘플에서는 원래 요청한 URL로 사용자를 다시 리디렉션합니다.

응용 프로그램에서 리디렉션하지 않는 경우 FormsAuthentication.GetAuthCookie를 호출하여 쿠키 값을 검색하거나

FormsAuthentication.SetAuthCookie를 호출하여 올바르게 암호화된 쿠키를 나가는 응답에 연결할 수 있습니다.

포함하는 페이지에 로그온 UI를 삽입하거나 사용자가 리디렉션되는 위치를 세부적으로 제어할 응용 프로그램에는 이 기술이 유용합니다.

인증 쿠키는 임시 쿠키와 영구 쿠키로 나뉩니다.

임시 쿠키는 현재 브라우저의 세션 동안에만 지속됩니다.

따라서, 브라우저를 닫으면 쿠키도 없어집니다.

영구 쿠키는 브라우저에 의해 저장되어 사용자가 명시적으로 삭제하지 않는 한 여러 브라우저 세션에 걸쳐 다시 보내집니다.

 

/* default.aspx */

<%@ Import Namespace="System.Web.Security " %>

<html>

  <script language="C#" runat=server>

    void Page_Load(Object Src, EventArgs E ) {

      Welcome.Text = "Hello, " + User.Identity.Name;

    }

    void Signout_Click(Object sender, EventArgs E) {

      FormsAuthentication.SignOut();

      Response.Redirect("login.aspx");

    }

  </script>

  <body>

    <h3><font face="굴림">쿠키 인증 사용</font></h3>

    <form runat=server>

      <h3><asp:label id="Welcome" runat=server/></h3>

      <asp:button text="로그아웃" OnClick="Signout_Click" runat=server/>

    </form>

  </body>

</html>

 

/* login.aspx */

<%@ Import Namespace="System.Web.Security " %>

<html>

  <script language="C#" runat=server>

    void Login_Click(Object sender, EventArgs E) {

      // authenticate user: this samples accepts only one user with

      // a name of jdoe@somewhere.com and a password of 'password'

      if ((UserEmail.Value == "jdoe@somewhere.com") && (UserPass.Value == "password")) {

        FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);

      }

      else {

        Msg.Text = "Invalid Credentials: Please try again";

      }

    }

  </script>

  <body>

    <form runat=server>

      <h3><font face="굴림">로그인 페이지</font></h3>

      <table>

        <tr>

          <td>전자 메일:</td>

          <td><input id="UserEmail" type="text" runat=server/></td>

          <td><ASP:RequiredFieldValidator ControlToValidate="UserEmail" Display="Static" ErrorMessage="*" runat=server/></td>

        </tr>

        <tr>

          <td>암호:</td>

          <td><input id="UserPass" type=password runat=server/></td>

          <td><ASP:RequiredFieldValidator ControlToValidate="UserPass" Display="Static" ErrorMessage="*" runat=server/></td>

        </tr>

        <tr>

          <td>지속적 쿠키:</td>

          <td><ASP:CheckBox id=PersistCookie runat="server" /> </td>

          <td></td>

        </tr>

      </table>

      <asp:button text="로그인" OnClick="Login_Click" runat=server/>

      <p>

      <asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat=server />

    </form>

  </body>

</html>

 

/* web.config */

<configuration>

  <system.web>

      <authentication mode="Forms">

        <forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" timeout="60" />

      </authentication>

      <authorization>

        <deny users="?" />

      </authorization>

    <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />

  </system.web>

</configuration>

 

폼 인증에서 사용되는 인증 쿠키는 선형 버전의 System.Web.Security.FormsAuthenticationTicket 클래스로 구성되어 있습니다.

이 정보에는 사용자 이름, 사용된 폼 인증 버전, 쿠키가 발생된 날짜, 선택적 응용 프로그램 관련 데이터 필드 등이 포함되지만 암호는 포함되지 않습니다.

응용 프로그램 코드에서 FormsAuthentication.SignOut 메서드를 사용하여 인증 쿠키를 해지하거나 제거할 수 있습니다.

이 메서드는 인증 쿠키가 임시 쿠키인지 또는 영구 쿠키인지에 관계 없이 인증 쿠키를 제거합니다.

또한 다음 샘플처럼 구성을 사용하여 폼 기반의 인증 서비스에 유효한 자격 증명 목록을 포함할 수도 있습니다.

 

<authentication>

    <credentials passwordFormat="SHA1" >

        <user name="Mary" password="GASDFSA9823598ASDBAD"/>

        <user name="John" password="ZASDFADSFASD23483142"/>

    </credentials>

</authentication>

 

이렇게 하면 사용자 이름과 암호를 제공하는 FormsAuthentication.Authenticate를 응용 프로그램에서 호출할 수 있게 되고,

ASP.NET에서는 자격 증명을 확인합니다.

자격 증명은 passwordFormat 특성의 다음 값에 따라 일반 텍스트, SHA1 또는 MD5 해시로 저장될 수 있습니다.

 

해시 유형

설명

Clear

암호가 일반 텍스트로 저장됩니다

SHA1

암호가 SHA1 다이제스트로 저장됩니다.

MD5

암호가 MD5 다이제스트로 저장됩니다.

 

 

5. 사용자 및 역할 권한 부여.

 

ASP.NET URL 리소스에 대한 클라이언트 액세스를 제어하는 데 사용됩니다.

이 인증은 GET이나 POST같은 요청을 수행하는 데 사용되는 HTTP 메서드를 위해 구성될 수 있으며

사용자 그룹이나 역할에 액세스를 허용하거나 거부하도록 구성될 수도 있습니다.

다음 예제에서는 John이라는 사용자와 Admins라는 역할에 부여되는 액세스 권한을 보여 줍니다.

다른 모든 사용자는 액세스할 수 없습니다.

 

<authorization>

    <allow users="jdoe@somewhere.com" />

    <allow roles="Admins" />

    <deny users="*" />

</authorization>

 

인증 지시문에서 사용할 수 있는 요소는 allow 또는 deny입니다.

allow 또는 deny 요소에는 usersroles 특성이 들어 있어야 합니다.

쉼표로 구분하여 한 요소에 여러 사용자나 역할을 지정할 수 있습니다.

 

<allow users="John,Mary" />

 

Verb 특성을 사용하여 HTTP 메서드를 나타낼 수 있습니다.

 

<allow VERB="POST" users="John,Mary" />

<deny VERB="POST" users="*" />

<allow VERB="GET" users="*" />

 

이 예제에서는 Mary John만 보호된 리소스에 POST를 사용할 수 있으며, 다른 사용자는 모두 GET만 사용할 수 있습니다.

다음과 같은 두 가지의 특별한 사용자 이름이 있습니다.

 

*: 모든 사용자

?: 인증되지 않은 익명 사용자

 

다음 예제에 나와 있는 것처럼, 이러한 특별한 사용자 이름은 대개 폼 기반의 인증을 사용하는

응용 프로그램에서 인증되지 않은 사용자의 액세스를 거부하는 데 사용됩니다.

 

<authorization>

    <deny users="?" />

</authorization>

 

URL 인증은 계층적으로 지정되며 액세스 여부를 결정하는 데 사용되는 규칙은 다음과 같습니다.

 

(1) URL과 관련된 규칙이 여러 계층에서 수집되어 병합 규칙 목록이 구성됩니다.

(2) 가장 최근의 규칙이 목록의 맨 위에 놓입니다.

따라서, 목록의 맨 위에는 현재 디렉터리의 구성이 위치하게 되고 그 다음에는 바로 위 부모의 구성이 위치합니다.

이러한 방식으로 마지막에는 해당 컴퓨터의 최상위 파일이 위치합니다.

(3) 일치하는 항목을 찾을 때까지 규칙을 검사합니다.

일치하는 규칙을 찾을 수 있으면 액세스 권한이 부여되고, 찾을 수 없으면 액세스 권한이 부여되지 않습니다.

 

따라서, 구성을 상속 받지 않는 응용 프로그램은 자신의 응용 프로그램과 관련된 가능한 모든 항목을 명시적으로 구성해야 합니다.

지정된 컴퓨터의 기본 최상위 Web.config 파일에는 모든 사용자가 액세스할 수 있습니다.

사용자가 인증되어 파일 인증 ACL 검사가 통과된다고 가정할 때 응용 프로그램을 이와 반대로 구성하지 않는 한 권한이 부여됩니다.

역할이 검사되는 경우, URL 인증은 효율성을 높이기 위해 구성된 역할 목록의 아래쪽으로 일치 여부를 확인하며, 다음 의사(pseudo) 코드와 유사한 작업을 수행합니다.

 

if(User.IsInRole("ConfiguredRole")) {

  ApplyRule();

}

 

사용자 응용 프로그램에서는 System.Security.Principal.IPrincipal을 구현하는 사용자 자신의 클래스를 사용하여 자신의 역할 매핑 의미론을 부여합니다.

다음 예제에서는 폼 기반의 인증 서비스를 사용합니다.

이 예제에서는 jdoe@somewhere.com과 익명 사용자에 대해 명시적으로 액세스가 거부됩니다.

, 사용자 이름 "jdoe@somewhere.com"과 암호 "password"를 사용하여 샘플에 로그인하면

액세스가 거부되고 로그온 페이지로 리디렉션됩니다.

사용자 이름 "mary@somewhere.com"과 암호 "password"로 로그인하면 액세스가 허가됩니다.

 

/* default.aspx */

<%@ Import Namespace="System.Web.Security " %>

<html>

  <script language="C#" runat=server>

    void Page_Load(Object Src, EventArgs E ) {

      Welcome.Text = "Hello, " + User.Identity.Name;

    }

    void Signout_Click(Object sender, EventArgs E) {

      FormsAuthentication.SignOut();

      Response.Redirect("login.aspx");

    }

  </script>

  <body>

    <h3><font face="굴림">쿠키 인증 사용</font></h3>

    <form runat=server>

      <h3><asp:label id="Welcome" runat=server/></h3>

      <asp:button text="로그아웃" OnClick="Signout_Click" runat=server/>

    </form>

  </body>

</html>

 

/* login.aspx */

<%@ Import Namespace="System.Web.Security " %>

<html>

  <script language="C#" runat=server>

    void Login_Click(Object sender, EventArgs E) {

      if (((UserEmail.Value == "jdoe@somewhere.com") && (UserPass.Value == "password")) || ((UserEmail.Value == "mary@somewhere.com") && (UserPass.Value == "password"))) {

        FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);

      }

      else {

        Msg.Text = "Invalid Credentials: Please try again";

      }

    }

  </script>

  <body>

    <form runat=server>

      <h3><font face="굴림">로그인 페이지</font></h3>

      <table>

        <tr>

          <td>전자 메일:</td>

          <td><input id="UserEmail" type="text" runat=server/></td>

          <td><ASP:RequiredFieldValidator ControlToValidate="UserEmail" Display="Static" ErrorMessage="*" runat=server/></td>

        </tr>

        <tr>

          <td>암호:</td>

          <td><input id="UserPass" type=password runat=server/></td>

          <td><ASP:RequiredFieldValidator ControlToValidate="UserPass" Display="Static" ErrorMessage="*" runat=server/></td>

        </tr>

        <tr>

          <td>지속적 쿠키:</td>

          <td><ASP:CheckBox id=PersistCookie runat="server" /> </td>

          <td></td>

        </tr>

      </table>

      <asp:button text="로그인" OnClick="Login_Click" runat=server/>

      <p>

      <asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat=server />

    </form>

  </body>

</html>

 

/* web.config */

<configuration>

  <system.web>

      <authentication mode="Forms">

        <forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" timeout="60" />

      </authentication>

      <authorization>

        <deny users="jdoe@somewhere.com" />

        <deny users="?" />

      </authorization>

    <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />

  </system.web>

</configuration>

 

 

6. 보안 및 웹 서비스.

이 단원에서는 XML Web services 보안 방법에 대해 설명합니다

 

6.1. Windows 인증 및 권한 부여

.aspx 페이지에 사용한 Windows 인증 XML Web services 보안에도 사용합니다.

인증을 사용하려면 응용 프로그램에 대해 Windows 통합 인증을 활성화하고 IIS 관리 콘솔에서 익명 액세스를 비활성화합니다.

특정 사용자의 서비스 액세스를 허용하거나 거부하려면 다음 예제와 같이 ASP.NET 구성 시스템을 사용하거나 서비스 파일 자체에서 ACL을 설정하십시오.

 

<configuration>

  <system.web>

    <authentication mode="Windows"/>

  </system.web>

  <location path="secureservice.asmx">

    <system.web>

      <authorization>

        <allow users="Administrator"/>

        <allow users="DOMAIN\Bradley"/>

        <deny roles="BUILTIN\Power Users"/>

      </authorization>

    </system.web>

  </location>

</configuration>

 

XML Web services의 클라이언트가 특정 Windows 사용자로 실행되는 것이 확실한 경우 이 방식이 적합합니다.

특이한 점은 클라이언트가 한 사용자로 실행되지만 다른 사용자의 역할을 대신한다는 것입니다.

자신에 액세스하는 클라이언트를 가장하지 않는 보안 XML Web services에 액세스하는 ASP.NET 페이지의 경우,

웹 서비스에 연결하기 전에 사용자 이름과 암호를 프로그래밍 방식으로 설정해야 합니다.

다음 예제에서는 기본 인증을 사용하고 간단한 WebService를 설명합니다.

 

<%@ WebService language="C#" Class="SecureService" %>

 

using System.Web.Services;

using System;

 

class SecureService : WebService {

 

    [WebMethod]

    public String SecureTest() {

        return "Hello from the secure web service";

    }

}

 

<%@ WebService language="VB" Class="SecureService" %>

 

Imports System.Web.Services

Imports System

 

Class SecureService : Inherits WebService

 

 

    <WebMethod()> Public Function SecureTest As String

        Return "Hello from the secure web service"

    End

End Class

 

<%@ WebService language="JScript" Class="SecureService" %>

 

import System.Web.Services;

import System;

 

class SecureService extends WebService {

 

 

    WebMethodAttribute function SecureTest() : String {

        return "Hello from the secure web service";

    }

}

 

다음 단계에 따라 IIS에서 적절하게 설정하면 이 서비스에 대해 기본 인증을 사용할 수 있습니다.

 

(1) IIS MMC 콘솔을 엽니다.  ( Start->Run "inetmgr" )

(2) 왼쪽 창에서 트리를 확장하여 가상 디렉터리를 찾습니다.

(3) 오른쪽 창에서 Secureservice.asmx를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

(4) 파일 보안 탭을 선택합니다. 익명 액세스 및 인증 제어 아래에서 편집을 클릭합니다.

(5) 익명 액세스를 비활성화합니다.

(6) Windows 통합 인증을 비활성화합니다.

(7) 기본 인증을 활성화합니다.

(8) 확인을 눌러 이 설정을 저장하고 MMC 콘솔을 종료합니다.

 

기본 WebService 프록시 클래스에는 UsernamePassword라는 두 개의 속성이 있습니다.

원격 웹 서비스에 연결할 때 이 두 속성을 사용하여 자격 증명을 지정할 수 있습니다.

이들 속성은 해당 웹 서비스의 컴퓨터나 도메인에서 유효한 Windows 자격 증명으로 설정되어야 합니다.

 

<%@ Import Namespace="SecureService" %>

<html>

<script language="C#" runat="server">

    public void Page_Load(Object sender, EventArgs e) {

        SecureService s = new SecureService();

        s.Credentials = new System.Net.NetworkCredential("Administrator", "test123");

        Message.Text = s.SecureTest();

    }

</script>

<body>

  <h4><font face="verdana">

    <asp:Label id="Message" runat="server"/>

  </font></h4>

</body>

</html>

 

또한 기본 WebService 클래스에는 클라이언트 사용자에 대한 정보를 검색하는 데 사용할 수 있는

System.Security.Principal.IPrincipal 형식의 User 속성이 있습니다.

다시 ASP.NET 구성 시스템의 Authorization 섹션을 사용하여 웹 서비스에 액세스하는 권한을 부여할 수 있습니다.

 

6.2. Soap Header를 사용한 사용자 지정 인증 및 권한 부여

Windows 인증은 해당 도메인에 속한 사용자에 대해 인증하는 인트라넷 시나리오에 적합합니다.

그러나 인터넷에서는 SQL 데이터베이스에 대해 사용자 지정 인증과 권한 부여를 수행할 수 있습니다.

이러한 경우 서비스에 사용자 지정 자격 증명(: 사용자 이름과 암호)을 전달하여 해당 서비스가

스스로 인증과 권한 부여를 처리할 수 있도록 해야 합니다.

SOAP header를 사용하면 요청과 함께 추가 정보를 XML Web services에 간단하게 전달할 수 있습니다.

이렇게 하려면 SOAPHeader에서 파생된 클래스를 서비스에 정의한 다음 서비스의 공용 필드를 해당 형식으로 선언합니다.

다음 예제와 같이 이 클래스는 서비스에 대한 공용 계약에 노출되며 WebServiceUtil.exe에서 프록시가 만들어지면 클라이언트에서 사용할 수 있게 됩니다.

 

using System.Web.Services;

using System.Web.Services.Protocols;

 

// AuthHeader class extends from SoapHeader

public class AuthHeader : SoapHeader {

    public string Username;

    public string Password;

}

 

public class HeaderService : WebService {

    public AuthHeader sHeader;

    ...

}

 

Imports System.Web.Services

Imports System.Web.Services.Protocols

 

' AuthHeader class extends from SoapHeader

Public Class AuthHeader : Inherits SoapHeader

    Public Username As String

    Public Password As String

End Class

 

Public Class HeaderService : Inherits WebService

    Public sHeader As AuthHeader

    ...

End Class

 

import System.Web.Services;

import  System.Web.Services.Protocols;

 

// AuthHeader class extends from SoapHeader

public class AuthHeader extends SoapHeader {

    public var Username:String;

    public var Password:String;

}

 

public class HeaderService extends WebService {

    public var sHeader:AuthHeader;

    ...

}

 

서비스의 각 WebMethodSoapHeader 사용자 지정 특성을 사용하여 관련 헤더 집합을 정의할 수 있습니다.

기본적으로 헤더는 필수이지만 선택적인 헤더도 정의할 수 있습니다.

SoapHeader 특성은 공용 필드의 이름이나 Client 또는 Server 클래스(이 항목에서는 Headers 속성이라고 함)의 속성을 지정합니다.

WebServices는 입력 헤더에 대해 메서드가 호출되기 전에 Headers 속성의 값을 설정하고 출력 헤더에 대해 메서드가 반환하는 값을 검색합니다.

출력 또는 선택적 헤더에 대한 자세한 내용은 NET Framework SDK 설명서를 참조하십시오.

 

[WebMethod(Description="This method requires a custom soap header set by the caller")]

[SoapHeader("sHeader")]

public string SecureMethod() {

    if (sHeader == null)

        return "ERROR: Please supply credentials";

    else

        return "USER: " + sHeader.Username;

}

 

그러면 다음 예제와 같이 헤더를 필요로 하는 메서드를 호출하기 전에 클라이언트가 직접 프록시 클래스의 헤더를 설정합니다.

 

HeaderService h = new HeaderService();

AuthHeader myHeader = new AuthHeader();

myHeader.Username = "JohnDoe";

myHeader.Password = "password";

h.AuthHeader = myHeader;

String result = h.SecureMethod();

 

전체 코드는 아래와 같습니다.

 

/* SoapHeader.asmx */

<%@ WebService Language="C#" Class="SoapHeadersCS.HeaderService" %>

using System;

using System.Web.Services;

using System.Web.Services.Protocols;

// Note the namespace has to be different from the one used

// on the proxy dll or we get errors about AuthHeader being

// defined in multiple places.

namespace SoapHeadersCS {

     // AuthHeader class extends from SoapHeader

    public class AuthHeaderCS : SoapHeader {

        public string Username;

        public string Password;

    }

    [WebService(Description="헤더의 사용 방법을 보여주는 단순 샘플입니다.")]

    public class HeaderService {

        public AuthHeaderCS sHeader;

        [WebMethod(Description="이 메서드에는 호출자가 설정한 사용자 지정 soap 헤더가 필요합니다.")]

        [SoapHeader("sHeader")]

        public string SecureMethod() {

            if (sHeader == null)

              return "오류: 자격 증명을 입력하십시오.";

            string usr = sHeader.Username;

            string pwd = sHeader.Password;

            if (AuthenticateUser(usr, pwd)) {

                 return "성공: " + usr + "," + pwd;

            }

            else {

                 return "오류: 인증할 수 없습니다.";

            }

        }

        private bool AuthenticateUser(string usr, string pwd) {

            if ((usr != null)&&(pwd != null)) {

                // could query a database here for credentials...

                return true;

             }

            return false;

        }

    }

}

 

/* SoapHeader.aspx */

<%@ Import Namespace="SoapHeaders" %>

  <script language="C#" runat="server">

    public void Page_Load(Object sender, EventArgs e) {

        Response.Write("<h4><font face=\"verdana\">Using Soap Headers for Custom Authentication</font></h4>");

        // Create a new instance of the UsingSoapHeaders

        // proxy class used to call the remote .asmx file

        HeaderService h = new HeaderService();

        // Call the secure method without credentials

        Response.Write("First call result: <p>");

        try {

          Response.Write(h.SecureMethod() + "<p>");

        }

        catch (Exception ex) {

          Response.Write("<pre>" + ex.StackTrace + "</pre><p>");

        }

        // Create a new instance of the AuthHeader class

        AuthHeaderCS myHeader = new AuthHeaderCS();

        // Set the value of myHeader

        myHeader.Username = "JohnDoe";

        myHeader.Password = "password";

        // Set the AuthHeader public member of the

        // UsingSoapHeaders class to myHeader

        h.AuthHeaderCSValue = myHeader;

        // Call the secure method with credentials

        Response.Write("Second call result: <p><pre>" + h.SecureMethod() + "</pre>");

    }

  </script>

 

 

6.3. 단원요약.

1. .aspx 페이지에서 Windows 인증을 사용한 것처럼 서버의 XML Web services 보안에도 이 인증 방식이 사용됩니다.

 

2. 또한 WebService 프록시 클래스의 Username Password 속성을 사용하여 프로그래밍 방식으로 Windows 자격 증명을 설정할 수도 있습니다.

 

3.마지막으로, 인증이 필요한 메서드에 대한 SOAP 요청과 함께 자격 증명 정보를 SOAPHeaders로 전달하여 사용자 지정 인증을 수행할 수 있습니다.


ASP.NET에서 전역 변수를 사용 현재 접속자 리스트 구현

웹 기반의 응용프로그램을 작성하다 보면 한 사이트에 로그인한 사용자들 끼리 메시지를 주고 받는다거나 현재 접속한 사용자가 누구인지 알고 싶은 경우가 있습니다.

물론 웹 환경 자체가 비연결 지향이라는 점 때문에 이러한 부분의 구현이 까다로운 게 사실입니다.

몇몇 웹 서버 엔진들에서는 접속로그 및 현재 사용자들의 정보에 관해 자세한 정보를 제공하는 걸로 알려져 있지만 보통의 웹 서버(IIS)가 개발환경의 주 무대가 되므로 이러한 선택은 제외하고 생각하겠습니다.

소켓 프로그램처럼(예를 들면 MSN의 현재 로그인한 사용자 목록 보여주기 정도) 대단히 정밀한 계측을 피하는 대신 거의 비슷한 수준의 정보를 전해주는 것이라면 현재 접속자에 대한 정보를 웹 환경에서도 무리 없이 구현이 가능합니다.

순수 웹 프로그래밍만으로 이런 한 기능을 구현하는 것은 몇 가지 해결해야 할 문제들과 운영상의 문제들이 존재하지만 아마도 불만족스럽지는 않을 것 이라 생각됩니다.
 
구현하는 데는 여러 가지 방식이 존재 하겠지만 쿠키를 사용하지 않고 세션과 전역변수 만으로 구현하는 것을 예로 들겠습니다.

우선 웹 솔루션 전체에서 사용될 수 있는 Application 전역변수를 이용 해야 합니다.
웹 솔루션 전체에서 Global.asax 파일은 하나이고 이 속에는 몇 가지 기본 이벤트들이 구성되어 있습니다.

대표적인 이벤트는 아래와 같습니다.

protected void Application_Start(Object sender, EventArgs e)protected void Session_Start(Object sender, EventArgs e)

protected void Application_BeginRequest(Object sender, EventArgs e)

protected void Application_EndRequest(Object sender, EventArgs e)protected void Application_AuthenticateRequest(Object sender, EventArgs e)

protected void Application_Error(Object sender, EventArgs e)protected void Session_End(Object sender, EventArgs e)

protected void Application_End(Object sender, EventArgs e)

이벤트의 이름만으로 그 용도를 쉽게 이해하시리라 생각됩니다.
 

우선 여기서 주목할만한 이벤트는 Application_Start 입니다.

최초로 웹 서버가 응용프로그램을 호출할 때 발생하는 이벤트로 이 부분에 우리는 전역변수를 할당 시켜 줘야 합니다. 현재 사용자 정보가 들어있는 자료구조는 딱 한번 이때 초기화 되어야 할 필요가 있으니깐 말이죠.

현재 사용자는 중복될 수 없으므로 (예를 들어 한 컴퓨터에서 두개의 브라우져를 띄우고 두 번 로그인 할 경우 한 사람이 로그인 한 걸로 판단해야 합니다) 사용자를 쉽게 검색할 수 있는 자료구조에 담는 것이 중요합니다.
 

그러므로 해쉬 테이블에 사용자리스트를 다고 이 해쉬 테이블을 전역(Application)변수에 할당하는 것이 적당합니다.
다음은 사용자 정보가 들어갈 헤쉬 테이블을 만들고 전역변수에 할당하는 예제입니다.
 

Global.asax

public static Hashtable now_user=null;

protected void Application_Start(Object sender, EventArgs e)

{

if(now_user==null) now_user=new Hashtable();

Application.Add("now_user",now_user);}

Application.Add("now_user",now_user);

application 변수로 해쉬 테이블을 밀어 넣는 부분입니다.
이렇게 선언되고 나면 웹 응용프로그램 전체에서 이 변수를 참조하는 것이 가능합니다.

그 다음으로는  실제 로그인이 성공하는 페이지에서 이 전역변수에 할당된 헤쉬 테이블 안으로 사용자 정보를 밀어넣는 부분입니다.


if(로그인 성공)

{

System.Collections.Hashtable now_user = (System.Collections.Hashtable)Application.Get("now_user");

 

if(!now_user.ContainsKey(userID))

now_user.Add(userID,userName);

}

로그인이 성공하면 Application에서 할당했던 헤쉬테이블을 들고 옵니다.


System.Collections.Hashtable now_user = (System.Collections.Hashtable)Application.Get("now_user");

 

해쉬 테이블에서 이 사용자가 있는지 여부를 검사한 뒤(컬렉션 객체들 중 키 값 검색에서 헤쉬 테이블이 단연 빛을 발하는 부분) 해당 해쉬 테이블에 사용자 아이디를 키 값으로 사용자이름을 삽입합니다.


if(!now_user.ContainsKey(userID)) now_user.Add(userID,userName);

 

간단히 사용자 리스트를 얻어오긴 했지만 아직 로그아웃 했을 때의 상황을 고려해야 합니다.
로그아웃 시 현재사용자 리스트에서 사용자를 제거하지 않는다면 만든 의미가 없으므로 사용자 세션이 끝나는 코드에서 로그인한 사용자의 정보를 헤쉬 테이블에서 제거 해야 합니다.

 

Global.asaxprotected void Session_End(Object sender, EventArgs e){ string userId = (string)session["UserID"]; now_user.Remove(userId);}

사용자의 세션이 끝날 때 마다 세션 안의 사용자 아이디를 이용 전역 변수로 저장된 해쉬 테이블에서 사용자 정보를 제거합니다.

한가지 문제점은 만약 정상적인 로그아웃을 하지 않은 사용자의 경우 어떻게 처리하는가 하는 것입니다.

로그인 했다가 다른 사이트로 그냥 나가버리는 경우인데 이 경우 정확한 체크가 불가능합니다.
웹 환경이다 보니 언제 이 사람이 다시 웹 서버로 요청을 줄지 알 수 없는 상황이라 지금 당장 없다고 로그아웃 했다고 가정할 수 없는 것입니다.

오히려 대부분의 사용자는 연결지향 소켓의 관점에서는 전부 로그아웃 이라고 볼 수 있습니다.
이 부분에서 정책이 개입하게 되는데 우리 사이트에서는 몇분 동안 응답이 없으면 다른 사이트나 로그아웃 한걸로 간주해서 다시 로그인 시키겠다 머 이런 것입니다.

이 부분은 개발자가 직접 코딩 할 필요 없이 환경설정 파일만으로도 마지막 요청시간과 현재시간을 비교 이후의 것은 짤라 버리는 것이 가능합니다.
 
아래의 Web.config 는 10분 동안 다시 요청이 없으면 사용자 세션을 죽여 강제 로그아웃 상태로 돌립니다.

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=DBSERVER;user id=sa;password=gokis..." cookieless="false" timeout="10"/>

[출처] ASP.NET에서 전역 변수를 사용 현재 접속자 리스트 구현|작성자 세인트


 
 

http://blog.naver.com/plok223/80011580921

ASP.NET 인프라스트럭처(Global.asax,카운터 작성) 

   

요약설명

ASP.NET 인프라스트럭처(Infrastructure)는 웹 애플리케이션을 제어하는 데 있어서 많은 편의성과 효율성을 제공하고 있다.
예를 들어 XML 기반의 machine.config와 web.config파일을 통해 모든 웹 애플리케이션의 전반적이 제어를 가능하게 한다든지, Session과 Application, Cache와 같은 향상된 상태관리 그리고 웹 애플리케이션의 관리 및 사이트 보안과 인증 등에 내용이 포함된다.
 

HOONS
  
  

[ASP.NET 인프라스트럭처(Global.asax)]

 

-. ASP.NET 인프라스트럭처(Infrastructure)는 웹 애플리케이션을 제어하는 데 있어서 많은 편의성과 효율성을 제공하고 있다.   예를 들어 XML 기반의 machine.config와 web.config파일을 통해 모든 웹 애플리케이션의 전반적이 제어를 가능하게 한다든지,   Session과 Application, Cache와 같은 향상된 상태관리 그리고 웹 애플리케이션의 관리 및 사이트 보안과 인증 등에 내용이 포함된다.

 

   웹 애프리케이션의 인스턴스를 총괄하는 Global.asax 파일,

   애프리케인션 레벨에서 발생하는 이벤트의 종류와 핸들링 방법,

   페이지와 애플리케이션이 실행되는 과정을 체계적으로 조사하는 추적(trace) 기능에 대해 알아 보자.

 


   Global.asax

 

  이 파일은 클라이언트가 처음 요청이 일어난 시점에서 HttpApplication  클래스로부터 상속받는 인스턴스가 생성되고 이후의 사용자 요청을 처리하게 된다. 이후에 웹 서버를 종료시키거나 또는 애플리케이션의 코드가 변경된 경우에는 해당 웹 애플리케이션이 중지되고, 이 시점에서 HttpApplication의 인스턴스도 종료되는 방식으로 진행된다.


 

  1) 이벤트

 

    Application 객체의 이벤트

 

    -. Application_OnStart : ASP.NET 애플리케이션이 처음에 시작될 때 발생하는 이벤트

    -. Application_OnEnd    : ASP.NET 애플리케이션이 종료되기 바로 직전에 발생하는 이벤트

    -. Application_OnError : 애플리케이션 내에서 핸들링 되지 않는 에러가 났을때 발생하는 이벤트

    -. Application_OnDisposed : Security 모드에서 사용되는 특정 리소스에 대한 권한을 부여 받기 전에 발생하는 이벤트


    Request에 대해서 발생하는 이벤트

 

    -. Application_BeginRequest : 새로운 Request 요청이 들어올 때마다 발생하는 이벤트

    -. Application_AuthenticateRequest :  Security 모드에서 사용되는 인증여부 판단 이벤트

    -. Application_AuthoriseRequest : Security 모드에서 사용되며 특정 리소스에 대한 권한을 부여받기 전에 발생하는 이벤트

    -. Application_ResolveRequestCache : Cache된 데이터를 복원할 때 발생하는 이벤트

    -. Application_AccquireRequestState : Request 요청시마다 상태를 얻을 때 발생하는 이벤트

    -. Application_PreRequestHandlerExecute : ASP.NET 페이지나 웹 서비스가 실행되기 직전에 발생하는 이벤트

    -. Application_PostRequestState : ASP.NET 페이지나 웹 서비스가 실행되고 난 직후에 발생하는 이벤트

    -. Application_ReleaseRequestState : Application Request의 상태를 저장할 때 발생하는 이벤트

    -. Application_UpdateRequestCache : 모든 처리를 마치고 ASP.NET Cache에 다시 추가될 준비가 되었을때 발생하는 이벤트

    -. Application_EndRequest : Application의 Request가 종료될 때 일어나느 가장 최종적인 이벤트

 

 


    Session 모듈에서 발생하는 이벤트

 

    -. Session_Start : 사용자로부터 요청을 받아서 새로운 세션이 시작될 때 발생하는 이벤트

    -. Session_End : 사용자의 세션이 종료될 때 발생하는 이벤트


    세션(Session)은 웹 애플리케이션에 접속하는 사용자별로 생성되는 객체이다. 웹 환경은 사용자의 요청에 대하여 반응한 후에 네트워크 연결이  끊어지므로 웹 서버의 입장에서는 클라이언트를 구별할 방법이 없으므로 사용자별 고유한 Session ID를 발급해서 접속자를 구분하는데 사용한다.

 

    사용자가 최초에 요청할 때 세션 객체가 생성되며 마지막 요청으로부터 20분이 지나면 세션 객체는 소멸한다.

 


    2) 상태관리

 

ASP.NET에서의 상태관리는 기존의 Application, Session, Cookie 변수를 사용하는 방법 외에도 ViewState나 Cache 등이 추가되어서 보다  효율적으로 관리할 수 있게 되었다.


    -. Application 변수 : HttpApplicationState형의 컬렉션 객체로서 키 값을 사용해서 애플리케이션 범위에서 공통적으로 사용할 수 있는 값을

                         저장한다.

        Application["키값"] = 저장할 변수 값  : Return Type Object

        Application.Contents["키값"] = 저장할 변수 값

        objTemp = Application["키값"]

        objTemp = Application.Contents["키값"]

   

    -. Session 변수 : HttpSessionStates형의 컬렉션 객체로서 사용자별로 변수 값을 저장하는 데 사용한다. 특히, ASP.NET에서는 Session을

                     관리하는데 있어서 기존보다 안정성 측면에서 개선되었고 또한 웹 팜(WebFarm) 환경에서도 사용할 수 있는 방법을 제공하고 있다.


 

 

    view_counter.aspx (카운터 만들기)

 

<form id="Form1" method="post" runat="server">

        <P><FONT face="굴림">카운터 예제</FONT></P>

        <P><FONT face="굴림">

            총접속자 : <asp:Label id="lblTotal" runat="server">Label</asp:Label>명   

            현재접속자 : <asp:Label id="lblNow" runat="server">Label</asp:Label>명

        </FONT></P>

    </form>

 

    private void Page_Load(object sender, System.EventArgs e)

    {

        lblTotal.Text = Application["TotalCount"].ToString();

        lblNow.Text = Application["NowCount"].ToString();

    }

    


    Global.asax

 

// ASP.NET 애플리케이션이 처음에 시작될 때 발생하는 이벤트이다.

    protected void Application_Start(Object sender, EventArgs e)

    {

        Application["TotalCount"] = 0;

        Application["NowCount"] = 0;

    }

 

    protected void Session_Start(Object sender, EventArgs e)

    {

        Application.Lock();

        Application["TotalCount"] = (int)Application["TotalCount"] + 1;

        Application["NowCount"] = (int)Application["NowCount"] + 1;

        Application.UnLock();

    }

     http://blog.naver.com/zzonsang2/140040869086

 

 

 

Global.asax 파일


UI 코드를 직접 작성할 수 있을 뿐만 아니라 응용 프로그램 수준의 논리 및 이벤트 처리 코드를 웹 응용 프로그램에 추가할 수도 있습니다. 이 코드는 생성되는 UI를 처리하지는 않으며, 대개 개별 페이지 요청에 대한 응답으로도 호출되지 않습니다.

 

대신 Application_Start, Application_End, Session_Start 및 Session_End 같은 상위 응용 프로그램 이벤트를 처리합니다. 개발자는 해당 웹 응용 프로그램의 가상 디렉터리 트리의 루트에 있는 Global.asax 파일을 사용하여 이 논리를 작성합니다. ASP.NET은 응용 프로그램 네임스페이스 내의 모든 리소스나 URL이 처음 활성화되거나 요청될 때 HttpApplication 기본 클래스를 확장한 동적 .NET Framework 클래스로 이 파일을 자동으로 구문 분석하고 컴파일합니다.

 

 

Global.asax 파일은 해당 응용 프로그램 네임스페이스 내의 모든 리소스나 URL이 처음 활성화되거나 요청될 때 ASP.NET에 의해 .NET Framework 클래스로 구문 분석되고 동적으로 컴파일됩니다.

 

Global.asax 파일은 외부 사용자가 코드를 다운로드하거나 볼 수 없게 모든 직접 URL 요청을 자동으로 거부하도록 구성되어 있습니다.

 

 

응용 프로그램 또는 세션 범위 이벤트

 

개발자는 Application_EventName(AppropriateEventArgumentSignature)" 명명 패턴에 맞는 메서드를 Global.asax 파일에 작성하여 HttpApplication 기본 클래스의 이벤트에 대한 처리기를 정의할 수 있습니다. 예를 들면 다음과 같습니다.

<script language="C#" runat="server">

void Application_Start(object sender, EventArgs e)

// Application startup code goes here

}

</script>



C#


이벤트 처리 코드로 추가 네임스페이스를 가져와야 할 경우 다음과 같이 .aspx 페이지에 @ import! 지시문을 사용할 수 있습니다.


<%@ Import! Namespace="System.Text" %>


다음 샘플은 Application, Session 및 Request의 수명을 설명합니다.

 
C# Application1.aspx

[샘플 실행] | [소스 보기] 


페이지를 처음 열 때 응용 프로그램과 세션에 대해 Start 이벤트가 발생합니다.


void Application_Start(object sender, EventArgs e)

   // Application startup code goes here

}

void Session_Start(object sender, EventArgs e)

   Response.Write("Session is Starting...<br>");  Session.Timeout = 1;

}

 

C#


각 요청에 대해 BeginRequest 및 EndRequest 이벤트가 발생합니다. 페이지가 새로 고쳐지면 BeginRequest, EndRequest 및 Page_Load 메서드의 메시지만 나타납니다.

 

"End this session" 단추를 클릭하여 현재 세션을 중단시키면 새 세션이 만들어지고 Session_Start 이벤트가 다시 발생합니다.

 

응용 프로그램 또는 세션 범위 개체

 

정적 개체, .NET Framework 클래스 및 COM 구성 요소는 개체 태그를 사용하여 Global.asax 파일에 정의될 수 있습니다. 범위에 사용할 수 있는 값에는 appinstance, session 또는 application이 있습니다.

 

appinstance 범위는 개체가 HttpApplication의 한 인스턴스에 한정되어 사용되고, 공유되지 않음을 나타냅니다.

 

<object id="id" runat="server" class=".NET Framework class Name" scope="appinstance"/>

<object id="id" runat="server" progid="COM ProgID" scope="session"/>

<object id="id" runat="server" classid="COM ClassID" scope="application"/>

 

 

단원 요약


ASP.NET Framework 응용 프로그램은 Global.asax 파일에 응용 프로그램 전체 범위나 세션 전체 범위의 이벤트 처리기를 정의할 수 있습니다.


ASP.NET Framework 응용 프로그램은 Global.asax 파일에 응용 프로그램 전체 범위나 세션 전체 범위의 개체를 정의할 수 있습니다.

 

 


출처 : http://blog.daum.net/jejupurewater/29

[증상]

ASP.NET with C#에서

GRIDVIEW나 DATALIST를 EXCEL 다운로드 수행 중에

"Error Message: RegisterForEventValidation은 Render()를 실행하는 동안에만 호출할 수 있습니다"

라는 오류 메시지 출력

 

[원인]

EnableEventValidation="false" 미등록

[해결]
@page 지시자에
 EnableEventValidation="false"
추가


StringBuilder strBuilder = new StringBuilder();
        strBuilder.Append("w=810;h=620;");
        strBuilder.Append("x=Math.floor( (screen.availWidth-(w+12))/2 );y=Math.floor( (screen.availHeight-(h+30))/2 );");
        strBuilder.Append("window.open('Trade_Download.aspx', '',");
        strBuilder.Append("'height='+h+',width='+w+',top='+y+',left='+x+',scrollbars=no,resizable=no');");

        ScriptManager.RegisterStartupScript(this, this.GetType(), "PopupScript", strBuilder.ToString(), true);



닫기

self.close()


DateDiff(interval, date1, date2)

interval 인수의 설정 옵션

yyyy 연도
q 분기
m 월
y 일 년 중 몇째 날
d 일
w 평일
ww
h 시간
n 분
s 초

 

ex) 게시물 등록날짜가 30일 이내인 게시물중 조회수가 높은거로 정렬

SELECT *

FROM BoardTotal

WHERE -1 < DATEDIFF(D, RegDate, GETDATE())

               AND DATEDIFF(D, RegDate, GETDATE()) < 30

ORDER BY ReadCnt DESC

[출처] DateDiff 함수|작성자 Rimi

출처 : http://dialup.egloos.com/1293002

 아직도 .NET에 대해서는 생초보를 벗어나지 못하여, 문제가 생기면 검색을 통해서 문제 해결을
하는 경우가 많다. 당연히 "시키는 대로 할 뿐"이며 이해를 충분히 하지 못하고 넘어가는 경우가
있다. 개발자에게 두려운 것 중의 하나가 "왜? 어떻게? 해결이 되었는지.." 모르면서 해결이 되어
버린 경우인데 그런 경우가 많다. 특히나 초보자에게는 너무 낯설기만 한 설정파일(web.config)는
바라보는 것 만으로도 괴로움을 주는데, 여러가지 trouble shooting 검색 결과를 적용하다 보면
도대체 어떤 것 때문에 해결이 되었는지 모르는 난망한 경우가 많이 생긴다.

 .NET에서 AJAX를 사용하고 싶을 때는 설치된 .NET framework버전에 따라 아래와 같이 작업을 한다.
1. .NET 3.5 SP1이 설치되어 운영되는 서버의 경우
2. .NET 3.5 SP1이 설치되어 있지 않는 서버의 경우

#1의 경우는 추가적인 모듈의 설치가 필요가 없다. .NET 3.5 SP1에 관련 모듈들이 모두 integrate
되어 있기 때문이다. 하지만 .NET 3.5 SP1이 설치되어 있지 않는 시스템의 경우는 추가적인 모듈의
설치가 필요하다.


(web.config설정)
아래의 설정 값들을 web.config에 추가하면 AJAX를 사용할 수 있다.


☞.NET 3.5 SP1의 경우
------------------------------------------------------------------------------------------
<configSections>
  ......
  <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <section name="scriptResourceHandler"type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
      <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
        <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"requirePermission="false" allowDefinition="MachineToApplication" />
      </sectionGroup>
    </sectionGroup>
  </sectionGroup>
</configSections>

<system.web>
  <pages ......>
    <controls>
      ......
      <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </controls>
  </pages>

  <httpHandlers>
    ......
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
  </httpHandlers>

  <httpModules>
    ......
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </httpModules>
</system.web>
------------------------------------------------------------------------------------------


☞.NET 3.5 SP1 아래 버전의 경우
------------------------------------------------------------------------------------------
<configSections>
  <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <section name="scriptResourceHandler"type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
      <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
        <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"requirePermission="false" allowDefinition="MachineToApplication" />
      </sectionGroup>
    </sectionGroup>
  </sectionGroup>
</configSections>

<system.web>
  <pages ......>
    <controls>
      ......
      <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </controls>
  </pages>

  <compilation>
    <assemblies>
      ......
      <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </assemblies>
  </compilation>
 
  <httpHandlers>
    ......
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
  </httpHandlers>

  <httpModules>
    ......
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </httpModules>
</system.web>
------------------------------------------------------------------------------------------


(필수 모듈 설치) !!.NET 3.5 SP1에서는 필요없는 작업이다.
Download ASP.NET AJAX Extensions 1.0
Installing ASP.NET AJAX Version 1.0
Configuring ASP.NET AJAX Version 1.0

Download ASP.NET AJAX관련 설치 파일들

*혹시 Visual Studio에서 AJAX관련 도구가 보이지 않는다면, 아래의 메뉴에서 "대상 프레임워크"가 3.5로
세팅이 되어 있는지 확인하자. (Visual Studio 2008 Express edition기준)
메뉴 -> 웹사이트 -> 시작 옵션 -> 빌드
!!세팅을 변경하기 전 꼭 web.config를 backup받아 놓는다. 세팅을 왜냐하면 변경하면서 tool에서 자동으로
  설정값을 변경하기 때문이다.

※개발자 PC에 .NET 3.5 SP1이 설치가 되어 있지 않는 경우는 모르겠음.

'Programming > AJAX' 카테고리의 다른 글

CascadingDropDown 속성  (0) 2010.03.29
AJAX TOOL KIT 도구 상자에 설치하기  (0) 2010.03.27
AJAX 1.0 설치하기  (0) 2010.03.27

출처 :: http://www.gsion.com/KisulsaKaeyo.aspx

-기술사의 정의
-기술사의 직무
-기술사의 역할

 

-디지털 경제의 시대
-기술사의 사회적 역할
-외국의 기술사 제도
-APEC(Asia Paccific Economic Cooperation) Engineer

-국가기술자격법 설명
-기술사시험 메커니즘
-시험 출제 메커니즘
-답안 채점 메커니즘
-합격 수기
-합격 성공 요인

-전략 수립 단계
-지식구조화 단계
-점검 단계
-필기 수검
-면접 단계
-합격 후 단계
-유용한 자료들

 

■ 기술사의 정의

"기술사"라 함은 해당 기술분야에 관한 고도의 전문지식과 실무경험에 입각한 응용능력을
보유한 자로서 국가기술자격법 제4조의 규정에 의하여 기술사의 자격을 취득한 자를 말한다.
- IT 기술사 해당 종목 : 정보관리기술사, 전자계산조직응용기술사, 정보통신기술사


■ 기술사의 직무

① 기술사는 과학기술에 관한 전문적 응용능력을 필요로 하는 사항에 대하여
계획· 연구· 설계· 분석· 조사· 시험· 시공· 감리· 평가· 진단· 사업관리· 기술판단· 기술중재
또는 이에 관한 기술자문과 기술지도를 그 직무로 한다.
② 기술사의 직무에 관하여 다른 법률에 특별한 규정이 있는 경우를 제외하고는
이 법의 규정에 의한다.
③ 제1항의 규정된 과학기술에 관한 전문적 응용능력을 필요로 하는 사항의 종류 및
범위는 대통령령으로 정한다. <법률제4500호 기술사법>


■ 기술사의 역할


안보이는영역


■ 2009년도 시험일정

년도
회별
원서접수
필기
시험
필기시험
합격예정자
발표
인터넷 원서접수
실기(면접)시험
합격자
발표
2009
87
1.30 ~ 2.5
2.22
4.6
4.6~4.9
5.9 ~ 5.21
6.1
2009
89
7.24 ~ 7.30
8.16
10.6
10.6 ~ 10.9
10.31 ~ 11.12
11.23

■ '07.1.1 부터 시행되는 자격요건

기술자격 소지자
관련학과 졸업자
순수 경력자
- 기사+4년
- 산업기사+6년
- 기능사+8년
- 동일종목의
외국자격취득자
- 대졸+7년
- 3년제 전문대졸+8년
- 2년제 전문대졸+9년
- 기사(산업기사)수준의
훈련과정 이수자+7년(9년)
11년
※ 정보처리(정보관리,전자계산 조직응용)기술사는 비관련학과 구분없이 전학과 확대 시행.

 


   ※ 학점인정등에관한법률에 의해서 106학점이상 인정받은 자는 4년제 대학 졸업예정자로 보며,
   41학점이상은 2년제 전문대학졸업예정자로 본다.

   

1. 정보처리부문 ( ~ 2008년제 86회 검정)

총인원 : 950명

- 정보관리기술사 : 538명
- 전자계산조직응용기술사 : 412명

2. 정보통신부문

- 정보통신기술사 : 430명


1999년도 부터 통신분야의 두 가지 종목을 단일종목으로 통합
(전기통신기술사 + 정보통신기술사 = 정보통신기술사)

3. 업체별 기술사 보유 현황

업체명
기술사 보유 현황
(정보처리 , 정보통신)
삼성SDS
LG CNS
한국 IBM
KOSCOM
포스데이타
SK C&C
대우정보시스템
현대정보기술
아시아나IDT
CJ드림소프트
한전KDN
라이거시스템
한국후지쯔
SK 텔레콤
한국통신진흥
금융결재원
데이콤 ST
한국전력공사
우리은행
인프라닉스
효성데이타시스템
유니시스
신한은행
109
60
18
18
21
45
19
23
5
2
5
3
3
3
3
2
2
2
1
1
1
1
1
폐사에서 현재 서비스 받고 있는 대표 업체만 기재 하였음

 


■ 국가기술자격법 설명

국가 기술 자격법은 기술자격에 관한 기준과 명칭을 통일하여 적정한 자격제도를 확립하고 그 관리와 운영을 효율화함으로써 기술인력의 자질 및 사회적 지위의 향상과 경제개발에 기여함을 목적 으로 만든 법이다.

1. 국가 기술 자격법에 의한 기술사 우대

기술사 자격 취득자는 국가 기술 자격법 제10조(기술자격취득자에 대한 우대)에 의해서 여러 가지의 우대 항목을 정의하고 있다.

<표2-1 기술사 우대 항목>

구분
우대 항목
신분 보장 시책
정부와 지방자치단체는 기술자격취득자의 경제적 사회적 지위의 적정한 유지와 그 취업 및 신분보장에 관하여 필요한 시책을 강구한다.
기술 분야 영업 및 인가 및 권리 보장
정부와 지방자치단체는 기술분야에 관한 영업을 허가 또는 인가하거나 권리의 설정 기타 이익을 부여하는 경우에는 관계법령에 저촉되지 아니하는 범위 안에서 당해 기술분야의 기술자격취득자를 우대한다 .
기술사 채용
기술자격직종에 해당하는 근로자를 사용하는 사업주는 기술자격취득자를 대통령영이 정하는 바에 의하여 우대한다.
우대 범위
기술자격취득자는 대통령령이 정하는 바에 의하여 그 자격과 동종,·동등한 다른 법령에 의한 자격의 취득자와 당해 법령상 같은 대우를 받는다.

2. 국가기술자격법시행령 목적 및 내용

국가기술자격법 시행령은 국가기술자격법에서 위임된 사항과 그 시행에 관하여 필요한 사항을 규정함을 목적으로 한다 이법에 의해서 기술사 자격 시험 문제의 출제, 시험, 평가를 하게 된다.

3. 정보 처리 기술사 자격 종목

국가기술자격법 시행령에서 정보처리분야는 정보관리 및 전자계산기조직응용으로 구분하고 있으며, 정보처리 기술사 관련 자격 종목에 대한 검정은 정보통신부주관으로 명시되어 있다. 정보관리 분야의 경우 정보관리에 관한 고도의 전문지식과 실무경험에 정보의 구조, 수집, 정리, 축적, 검색등 한 업무를 설계 및 수치 계산 기타 정보의 분석, 관리 및 기본적인 응용에 관한 사항에 대수행하며, 전자계산기 조직응용의 경우 하드웨어시스템, 소프트웨어시스템에 관한 분석, 설계 및 구현, 기타 컴퓨터 응용에 관한 사항에 대해서 업무를 수행하는 기술사를 의미한다.

4. 기술사 응시 자격 기준

국가기술자격법 시행령의 제 11조에 기술사 응시자격은 아래의 같이 정의한다.

가. 기사의 자격을 취득한 후 응시하고자 하는 종목이 속하는 직무분야에서 4년 이상 실무에 종사한 자

나 .산업기사의 자격을 취득한 후 응시하고자 하는 종목이 속하는 동일 직무분야에서 6년 이상 실무에 종사한 자

다. 기능사의 자격을 취득한 후 응시하고자 하는 종목이 속하는 동일 직무분야에서 8년 이상 실무에 종사한 자

라. 4년제 대학 졸업자 또는 이와 동등이상의 학력이 있다고 인정되는 자로서 졸업 후 응시하고자하는 종목이 속하는 동일 직무분야에서 7년 이상 실무에 종사한 자

마. 기술자격 종목별로 기사의 수준에 해당하는 교육훈련을 실시하는 기관으로서 노동부령이 정하는 교육훈련기관의 기술훈련과정을 이수한 자로서 이수 동일 직무분야에서 7년 상 실무에 종사한 자

사. 전문대학 졸업자 또는 이와 동등이상의 학력이 있다고 인정되는 자로서 졸업 후 응시하고자하는 종목이 속하는 동일 직무분야에서 9년 이상 실무에 종사한 자

아. 기술자격종목별로 산업기사의 수준에 해당하는 교육훈련을 실시하는 기관으로서 노동부령이 정하는교육훈련기관의 기술훈련과정을 이수한 자로서 이수 후 동일 직무분야에서 9년 이상 실무에 종사한 자

자. 응시하고자 하는 종목이 속하는 동일 직무분야에서 11년 이상 실무에 종사한 자

차. 외국에서 동일한 등급 및 종목에 해당하는 자격을 취득한 자

5. 검정 기준

국가기술자격법 시행령의 14조에 의하면 응시하고자 하는 종목에 관한 고도의 전문지식에 입각한 계획 연구·설계·분석,조사·시험·시공·감리·평가·진단·사업관리·기술관리 등의 기술업무를 수행할 수 있는 능력의 유무를 검정하도록 되어 있다.

6. 기술사 검정 방법

국가기술자격법 시행령의 15조 검정 방법에 의하면 기술사는 단답형 또는 주관식 논문형의 1차 필기 시험을 치루고 합격한자에 한해서 구술형 면접시험을 치르도록 규정되어 있다.

7. 기술사 시험 위원의 선정

국가기술자격법 시행령의 제22조에는 기술사 검정 시험의 시험 출제 위원은 기술자격 종목마다 2인 이상의 출제위원을 위촉하도록 되어 있으며 채점 위원은 3인 이상의 채점위원을 위촉하여야 하도록 규정되어 있다. 면접 시험의 경우 기술자격 종목마다 2인 이상의 면접위원을 위촉하여야 하도록 되어
있다.

8. 기술사 합격 결정 기준

국가기술자격법 시행령의 제23조에는 기술사 합격결정기준을 필기시험 및 구술 시험의 합격결정기준은 100점을 만점으로 하여 60점 이상으로 하도록 규정하고 있다.

9. 기술사 필기 시험 면제 사항

필기 시험에 합격한 자는 당해 실기 시험 발표일부터 2년간 필기시험 면제 받을 수 있도록 되어있으므로, 면접시험에 떨어진 경우 구술시험만 다시 볼 수 있다.

 


필기시험 메커니즘

필기 시험은 100분씩 총 4교시 동안 시험을 보게 되고. 각 시험 시간당 20분의 휴식 시간이 있다. 시험은 9시부터 시작하여 1교시 100분 후 20분간 휴식, 2교시 후 60분간 점심 시간, 3교시 100분 후 20분간 휴식 그리고 마지막으로 4교시 100분을 치루게 된다. 필기 시험은 1교시는 단답형으로 출제되고, 2,3,4 교시는 서술식 논문형식으로 출제된다. 1교시 단답형의 경우 보통 10문제 이상이 출제되고 여기에서 선택하여 문제를 풀게 되는데, 요즘은 보통 13문제를 출제하고 10문제를 선택 하도록 하고 있다. 2,3,4 교시의 경우는 4문제 이상이 출제되고, 여기에서 선택하여 문제를 풀게 되며, 요즘은 보통 6문제가 출제되고, 4문제를 선택하여 풀도록 하고 있다. 그러나 이러한 출제 방법은 강제되는 사항이 아니므로 시험 시에 주의해야 한다. 즉 1교시에 5문제를 주고 4문제를 풀 것을 지시할 수도 있으며, 10문제를 주고 단답형으로 5문제를 풀고 2문제를 서술식 논문형으로 풀 것을 지시할 수도 있다. 이러한 출제 매커니즘은 출제 위원의 고유한 권리 영역이므로, 시험 시에 는 출제자의 문제 풀이 방법에 대한 지시 사항을 정확히 읽어 보고 풀어야 한다. 아래는 요즘의 일반적인 출제 방법에 대한 자세한 설명이다.

 

1. 1교시 출제 유형

보통은 13문제를 내고 그 중에 10문제를 골라서 쓰는 형식으로 1교시의 문제를 내는데 주로 용어 풀이 정도의 문제가 대부분이다. 일반적으로 정보 처리 기술사 시험에서 1교시의 문제가 기출 문 제의 범위에서 벗어나지 않고 출제되고 있으며, 65회의 경우 새로 나온 기술에 대한 문제는 ERMS 및 PAN 정도였다.

<83회 정보관리 기술사>

[1교시]
1. AOP(Aspect-Oriented Programming)에 관해서 설명하시오.
2. AJAX(Asynchronous Javascript and XML)에 대하여 설명하시오.
3. SaaS(Software as a Servive)의 개념을 설명하시오.
4. Mobile RFID 기술과 응용기술을 설명하시오.
5. OpenAPI를 설명하고 응용기술을 설명하시오.
6. 이벤트 기반의 시스템 테스팅을 위한 Record and Replay 기법에 대하여 설명하시오.
7. XSS(Crosss-Site Scripting)란 무엇이며, 2가지 유형을 설명하시오.
8. 데이터 프로파일링(Data Profiling)에 대하여 설명하시오.
9. Use Case Realization-Analysis에 대하여 설명하시오.
10. Tamper-Proofing 기술에 대하여 설명하시오.
11. DOCSIS 3.0의 정의, 특징 및 활용분야에 대하여 설명하시오.
12. ISM(Industrial Science Medical)band 정의, 특징 및 활용분야 등에 대해서 설명하시오.
13. I-PIN(Internet Personal Identification Number) 정의, 등장배경, 특징 및 활용분야에 대해서 설명하시오.

2. 2,3,4교시 필기 시험 출제 유형

일반적으로 2교시부터는 보통 6문제를 출제하고 그 중에 4문제를 골라서 쓰는 것으로 출제되고 있 다. 대부분의 시험 문제가 논하라, 설명하라 등으로 제시되며, 1교시와 마찬가지로 기출문제에서 많이 출제되고 있다. 출제 위원에 따라서 특정 분야에 대한 문제를 집중적으로 내는 경우도 있으 나 일반적인 경향은 아닌 것으로 판단된다.

[2교시]
1. 최근 사회적 문제로 대두되고 있는 개인정보 노출이슈와 침해기술 유형을 설명하고 이를 해결하기 위한 개인정보보호 아키텍처 구현 방안을 제시하시오.
2. 전사적 데이터베이스 통합 프로젝트환경에서 데이터 중복 및 오류 문제를 줄이고자 데이터 품질 개선을 위해 요구되는 품질기준 4가지 이상을 제시하고, 데이터 표준화 및 메타데이터 구축방안을 설명하시오.
3. 정보시스템의 효율적 도입 및 운용 등에 관한 법률안이 공포되어 공공기관을 중심으로 ITA/EA프로젝트가 진행되고 있다. 정보공학 방법론에 기반한 ISP와 EAP를 비교 설명하시오.
4. 소프트웨어의 명세기반기법(Specification-Based Technique)테스트와 구조기반기법 (Structure-Based Technique)테스트 방법을 나열하고 설명하시오.
5. 중앙처리장치 스케줄링 방식에는 비선점(Nonpreemptive)와 선점(preemptive)방식이 있다.
1) 선점 방식과 비선점 방식의 특징을 비교하여 설명하시오.
2) 다음표와 같이 작업이 제출되었을 때 SJF(Shortest Job First)정책으로 스케줄링할
때의 평균 turnaround시간을 구하시오
작업 제출시간 실행시간
X 0 4
Y 1 6
Z 2 3
3) HRN(Highest Response-ratio Next)방식으로 스케줄링할 경우, 입력된 작업이 다음과 같을 때 우선순위가 가장 높은 작업을 선정하는 절차를 나타내시오
작업 대기시간 서비스시간
A 0 4
B 1 6
C 2 3
D 20 8
6. 다음 정규 분포(Normal Distribution)에 관해서 약술하시오.
1) 정규 분포는 어떤곳에서 활용되는지 설명하시오.
2) 일정한 수입이 있는 한 집단에서 소속된 가정들 27%가 3년에 한번씩 이사를 한다.
100가정이 소속된 집단에서 20에서 30사이의 가정들이 다음 3년 사이에 이사할 확률을 구하시오.
단, p(z <= 1.69) = 0.9545, p(z <= 0.79) = 0.7852 이고, = 4.44이다.

[3교시]
1. Web 2.0이 등장한 배경과 Web 2.0기반의 시스템을 개발하기 위한 프로세스, 그리고 프레임워크(framework)를 설명하시오.
2. 지식경영을 위한 지식관리시스템(KMS)을 도입하는 주된 이유와 아키텍처를 ① 하부 구조서비스(Infrastructure Service) ② 지식서비스(Knowledge Service) ③ 화명제공서비스(Presentation Service)로 구분하여 설명하시오.
3. 정보화 전략계획수립(ISP)사업에 대한 정보시스템 감리 프레임워크를 제시하고 중요 감리점검사항에 대하여 설명하시오.
4. 소프트웨어시스템이 어떤 순서에 의거해서 개발, 운영, 유지보수되어 생명주기를 마칠 때까지의 전체적인 작업 프로세스를 모델화한 소프트웨어 생명주기 모형에 관해서 물음에 답하시오.
1) 폭포수(Waterfall)모델과 프로토타이핑(Prototyping)모델의 특징을 설명하시오.
2) 나선형(Spiral)모델을 개발 4단계 절차 중심으로 설명하시오.
3) 클린룸(Clean Room)모델을 3개의 박승 중심으로 설명하시오.
5. Lagrange의 보간식은 (n+1)개의 점을 지나는 경우에 n차 이하의 다항식을
(1) 수치 해법에 보간식을 활용하는 주된 이유를 설명하시오.
(2) f(1.0)=0, f(1.1)=0.99, f(1.3)=0.26일때, f(1.2)의 근사값을 구하는 절차를 설명하시오.
6. 신규 소프트웨어 개발 프로젝트 계획단계에서 기능점수를 측정하였더니 아래의 [표1]과 같이 기능이 식별되었다. 측정시점에서 신규 개발기능의 세부내용에 대한 개별복잡도 측정이 어려워 평균복잡도 가중치를 적용키로 하였으며, 다른 요구기능은 없다고 가정하고 다음 질문에 대하여 설명하시오
[표1] 기능점수 식별 내용 예시
구분 기능 수(개)
데이터 기능 내부논리파일(ILF) 12
외부논리파일(EIF) 6
트랜잭션 기능 외부입력(EI) 24
외부출력(EO) 3
외부조회(EQ) 12
[표2] 기능점수 평균 복잡도 가중치
유형 내부논리파일 외부연계파일 외부입력 외부출력 외부조회
가중치 7.3 5.4 4.0 5.1 3.8
1) IFPUG의 기능점수 측정 절차를 설명하시오.
2) 기능별 평균점수와 조정된 개발 기능점수를 구하시오.
3) 기능점수 측정의 유의사항과 기능점수 측정결과에 대한 지식화방안을 제시하시오.

[4교시]
1. 내부관리회계제도(K-SOX)에서 내부통제와 정보기술의 역할을 설명하시오.
2. 최근 공공기관의 대규모 정보시스템 구축 프로젝트에서는 컨소시엄방식의 사업자 참여가 증가학도 있는 실정이다. 이들 프로젝트에서 예상되는 문제점을 범위, 일정, 위험, 품질, 자원배치, 의사소통 관점에서 이슈사항을 도출해보고 전사적 조직측면의 프로젝트관리 전공전략을 제시하여 보시오.
3. 컴퓨터 알고리즘 중 Greedy method에 관해서 물음에 답하시오.
1) Greedy method의 특징과 해를 구하는 프로세스 절차에 관해서 설명하시오.
2) knapsack problem에서 n=3(objects수), m=20(knapsack capacity),그리고
(p1,p2,p3)=(25,24,15), (w1,w2,w3)=(18,15,10)일 때 물음에 답하시오.
단, p1,p2,p3은 profit 이고, w1,w2,w3은 weight 이다.
①4개의 feasible solution을 나타내시오.
②최적해가 어떤 것인지 설명하시오.
4. 데이터베이스의 주요개념에 관해서 물음에 답하시오.
1) 정규화를 하는 이유를 약술하고, 관계형 DB에서2NF와 3NF의 차이점을 약술하시오.
2) 비정규화를 고려할 때 가장 중요하게 검토해야 할 기준이 무엇인지 설명하시오.
3) 데이터웨어하우징 시스템에서 비정규화를 도입하는 주된 이유를 설명하시오.
5. 프로젝트 일정관리에서 임계경로(Critical Path)의 의미를 설명하고, 다음의CPM(Critical Path Method)네트워크에서 임계경로(Critical Path)를 찾으시오.
작업 선행작업 소요시간
없음 8
10
5
없음 3
없음 7
2
다, 라 1
6
바, 사, 아 4
6. A기관 차세대통합정보시스템 구축 사업에서는 웹서비스 방식으로 모든 서비스를 제공할 계획이다. 고객 제안요청서에서는 CBD (Component Based Development)방법론으로 구축을 요구하고 있으나, 현재 개발업체 입장은 과제해결에 요구되는 몇가지 기존 소프트웨어 컴포넌트 구매가 필요하고, 나머지는 EJB(Enterprise Java Beans)환경으로 개발을 고려하고 있다. 고객과의 이견차이를 좁히기 위한 적합한 응용소프트웨어 아키텍처구현방안을 다음사항을 기준으로 설명하시오.
1) 개발 방법론(팩키지+CBD) 적용방안을 제시하시오.
2) 응용 소프트웨어 아키텍처 구성방안을 기술하시오.
3) 기성 소프트웨어 컴포넌트와 신규개발 컴포넌트간 인터페이스 방안을 설명하시오.  


구술[면접]시험 메커니즘

2차 시험은 실기형 구술 시험이다. 어떤 기술사들은 면접이 더 어렵다고 한다. 왜냐하면 필기는 생각할 시간이 조금은 있지만 면접은 생각할 여유를 주지 않고 면접 위원이 계속적으로 질문을 하 기 때문이다. 면접 위원은 보통 2명으로 구성되고, 한 사람 당 30분에서 1시간 정도 보게 되는데 손에 땀을 쥐게 하고, 면접 후에는 힘이 쏙 빠질 정도로 대답을 열심히 해야 한다. 면접은 경력에 대한 질문과 기술에 대한 질문으로 구분할 수 있는데, 경력이 오래된 사람에게는 그 동안의 프로 젝트 경험위주로 질문을 하는 경향이 강하며, 경력이 적은 사람에게는 기술 위주의 질문을 하는 경향이 강하다고 알려져 있다.

만약 자신의 경력이 10년차 전이라면 기술사로써 경험이 부족한 편이다. 그러므로 필기 시험 준비 하는 것처럼 현재의 기술에 대해서 공부한다. 특히 중요 IT 경향에 대해서는 철저하게 준비한다. 경험이 적은 사람에게는 기술적인 문제를 집중적으로 묻는 경향이 있음에 주목하고 그에 대한 준 비를 철저히 해야 한다. 경험이 10년이 넘게 있었으면, 주로 자신의 프로젝트 경험에 대해서 정리 하고 그에 대한 답변을 준비한다. 또한 자신의 경험에 따른 IT의 경향이나 프로젝트 수행 경험 상 의 장점, 단점 등을 일목요연하게 정리할 필요가 있다.

 


■ 시험 출제 메커니즘

기술사 검정은 논술고사 형태로 이루어지고 있다. 논술에 있어 지식은 재료이고 논술력은 자동화 기계장치라고 할 수 있다. 그런데 우리가 현재 치중하고 있는 것은 재료의 모음에만 급급하고 있 는지 되돌아 봐야 한다. 아무리 좋은 재료를 많이 갖추었다 하더라도 훌륭한 기계장치가 없으면 보잘 것 없는 제품이 나올 것은 뻔한 이치이다. 또한, 비용과 시간도 훨씬 많이 소모될 것이다. 즉, 생산성이 떨어진다는 것이다. 품질 저하, 생산성 저조의 딜레마에 빠지게 될 것이다. 나름대 로 열심히 준비하고 있는데 왜 남들에 비해서 좋은 답안이 만들어지지 않는지를 생각해 봐야 한다.
기술사 시험 준비를 위해서는 논술에 대한 준비를 해야 한다. 논술이 무엇인지, 왜 필요한지, 정 확히 알고 대처해야 한다. 논술은 얼마나 많이 알고 있는지 평가하기 보다는 상상력과 창조력을 테스트하는 것이다. 논술에 대한 메커니즘의 이해는 비단, 기술사시험에 국한된 것은 아니다. 회 사에서 제안서 작성시, 임원 또는 상사와 대화를 할때, 품위서 작성시, 승진 시험을 준비시 논술 에 대한 이해를 하고 있다면, 논리적인 전개가 훨씬 쉬어질 것이다.

기술사 시험 출제 메커니즘은 이러한 논술에 대한 정확한 이해를 바탕으로 알 수 있다. 출제 위 원은 학계의 교수 1분과 기술 산업계의 기술사 1분으로 선정되는 것으로 알려져 있다. 출제 위원 은 정보처리분야에 있어서의 기술적 능력, 견해 제시 능력, 업무 추진 능력 및 자문 능력을 평가 하기 위하여 대학의 전산학과 관련 학과목을 기본으로 하여, 관련 기술 토픽 및 정보 기술과 관 련 있는 사회적 이슈에 대해서 논술형 주관식 문제를 출제하게 된다. 그러므로 출제 위원이 참고 할 것으로 예상되는 자료를 빠르게 Catch up하는 것이 중요한 합격의 성공 요인이 될 수 있다.

기술사 검정 시험에 포함할 문제의 출제에는 일정한 관습이 지금까지 만들어져 그 관습이 어떤 원칙을 형성하면서 지금까지 발전되면서 굳어져 오고 있다. 여기에 소개하는 원칙들은 지금까지 출제된 문제들을 분석하여 본 결과를 가지고, 여러 원칙들의 단편을 추출한 것이다.


1. 출제 방침

국가 기술사자격수검원서에서 10번 항목이 실무 경력 사항이다. 응시하고자 하는 자격 종목과 관 련 있는 실무를 기재하되, 최종학력 또는 국가 기술자격취득 후의 실무 경력을 기재하고 현업의 담당업무와 근무 년수를 구체적으로 기재하도록 되어 있다. 이 자료를 사용하여 당해 회차에 응 시한 수검자들의 담당 업무별 빈도수를 조사하여 출제위원에게 알려준다. 예를 들어 프로젝트관 리에 40명, 소프트웨어개발에 20명, 시스템 유지보수에 50명 정보기획 등의 업무에 10명 등과 같 이 각 담당업무별 응시자의 평균 근속 연수를 포함하여 현황을 알려주게 된다. 이 통계 자료가 출제위원에게 출제의 범위, 방향, 특징, 세분화 정도 등을 선정할 때 영향을 미친다.

출제 방침은 당해 종목의 시험 과목별로 검정 기준이 평가될 수 있도록 출제되고, 주관식 논술형 으로 출제되며, 이론위주의 출제는 가급적 지향하도록 되어 있으며, 산업 현장에서의 직무 수행 능력을 평가하는데 중점을 두고 출제된다. 과거에 출제된 문제는 가급적 재 출제하지 말 것을 권 장한다. 그러나 기출 문제를 분석하면 과거에 출제된 문제가 재 출제되는 것을 알 수 있다. 1교시의 단답형 문제의 경우는 매 회마다 약간씩 재 출제되는 것을 알 수 있다. 그러나 25점짜리 설 명형 및 논문형의 경우는 출제시 마다 체계적인 기술형, 견해 제시형, 프로젝트 추진 능력 및 경 험 평가형, 자문 능력 평가형 등으로 바꾸어 가면서 새롭게 출제된다. 이렇게 동일 기술에 대해 서 문제의 형태를 바꾸면서 출제하는 것은 해당 정보기술에 대한 사회적인 이슈의 지속 정도가 강하기 때문이다. 그러나 수검자의 입장에서 보면 세부적인 답안의 내용은 문제의 요구에 따라 바뀌어야 하지만 기본적인 뼈대는 동일한 것이 대다수이다.

출제 위원의 입장에서 보면 이러한 권고 사항을 기준으로 문제를 출제할 경우 출제가 잘되었다는 말을 듣고 싶을 것이다. 또한 좀 많이 합격되었으면 하는 소망을 문제에 담을 것이다. 그러므로 출제를 위해서는 사회적 관심 분야를 중심으로 출제의 줄기를 잡는다. 또한 출제 문제 선정 시에 는 하향식으로 접근한다. 이러한 사회적 이슈와 관련이 있는 문제를 내야만 수험 준비를 한 수검 자와 호흡이 잘 맞아 좋은 답안을 작성할 수 있을 것이다.

문제에 대한 답안을 잘 작성하여 변별력이 높은 상태에서 채점이 가능하도록 출제하게 된다. 문 제가 너무 어려워서 채점 위원이 채점할 기회를 뺏기지 않도록 문제의 수준을 잘 정할 수도 있도 록 노력할 것이다.

그러므로 이러한 가정으로 출제의 가이드라인을 보면

-최근에 사회적으로 관심이 집중되고 있는 기술은 무엇인가?
-학회지, 잡지 및 신문에서 특집으로 기재되고 있는 기술은 무엇인가?
-지금 연구 개발되고 있는 분야는 무엇인가?
-정부 및 관련 단체에서 발간하고 있는 정기 간행물의 주요 토픽은 무엇인가?
-각종 학회나 기관에서 주최한 세미나의 주제는 무엇인가?
-정부나 공공기관에서 발주한 연구 용역의 연구 테마는 무엇인가?

로 출제되고 있음을 알 수 있다. 그러므로 수검자 입장에서는 이러한 주제들이 예상문제로 선정 될 수 있을 것이다.


2. 출제범위

해당 종목(정보관리기술사 혹은 전자계산기 조직 응용 기술사)의 시험 과목 범위 내에서 출제 기 본 방침에 의거하여 출제된다. 시험과목은 위에서 언급한 국가 기술사 자격법 시행규칙 제 5조 (검정의 시험과목)에 상세히 기술되어 있다. 정보 관리 기술사(자격코드0601)의 경우 정보의 구 조, 수집, 정리, 축적, 검색 등의 정보 시스템 설계 및 수치 계산, 기타의 정보의 분석, 관리 및 기본적인 응용에 관한 사항을 출제하도록 되어 있으며, 전자계산기조직응용(자격코드 0620)의 경 우는 하드웨어시스템, 소프트웨어시스템에 관한 분석, 설계 및 구현과 기타 컴퓨터 응용에 관한 사항으로 출제하도록 되어 있다. 산업 현장의 실무에 적정하고 해당 종목을 대표할 수 있는 전형 적이고, 보편 타당성 있는 주제들 중에서 최근의 사회적 이슈가 되고 있는 현안들을 가장 그리고 잘 해결할 수 있는 기술 또는 개념이 중핵을 이루는 주제가 시험의 핵심 주제어로 등장하고 있다.

가. 난이도

기술사 검정 기준의 평균치 수준을 지향하고 있다. 즉 지금까지 합격률은 개략적으로 10% 선으로 되어있다. 응시자의 10% 정도가 평균 60점 정도를 획득할 수 있을만한 수준의 난이도로 출제되고 있다. 물론 각 회차마다 합격률은 다를 수 있지만, 10% 정도의 평균적인 수준으로 합격이 되도록 난이도를 조정하는 것으로 알려져 있다.

나. 시험 형태

가급적 계산 문제는 지향하고 있다. 계산 문제는 계산기의 지참을 허용해야 하는 어려운 문제가 발생하게 된다. 또한 기사 시험에서는 계산기의 지참을 다기능메모리 계산기를 제외하고는 허용 하고 있으나, 기술사 수검에서는 계산기 자체가 필요 없을 정도의 문제가 출제되고 있다. 또한 계산을 요구하는 문제가 출제되면 제시할 공식, 통계자료 등도 함께 문제에 첨부하여야 하나 출 제 위원의 입장에서는 상당히 번거로운 일이 될 것이다. 그래서 수검자의 논리적 문제 해결 능력 을 주안점으로 평가되도록 출제하게 된다. 외국의 시험 문제 특히 일본의 기술사 시험 문제를 수 정 없이 출제하는 것은 지향하고 있다. 특히 요즘은 국내의 정보 기술의 발전이 해외의 그것과 차이가 없을 정도로 발전하고 있으므로 굳이 외국의 시험 문제를 모방하여 출제할 이유가 없을 것이다.

기출 문제 중에서는 1년이 경과한 문제 중에서 일정한 기준에 따라 재출제 하도록 하고 있다. 이 유는 기출 문제를 제외하고는 사실상 출제할 만한 문항이 별로 없기 때문이다.

다. 출제 형식

수검자의 입장에서 시험 문제를 출제하고 있다. 출제자의 출제 의도를 수검자에게 정확히 전달할 수 있도록 문항 구성을 하고 있다. 1교시에는 주로 단답형 문제로 출제되는데, 가급적 해당 종목 의 기초적인 내용을 출제하고 2,3,4 교시는 논문형 문제들로써 전공 실무 중에서 많은 문제를 제 시하여 수검자가 실무 및 전공을 감안하여 답할 수 있도록 출제하고 있다. 시험 문제는 매 문항 별로 출제 위원이 상호 협의하여 최종 결정하게 된다. 매 시험 시간마다 100분간의 응시자에게 1 0% 정도가 평균 60점을 얻을 수 있을 정도의 문제를 엄선하게 된다. 이 과정에서 어려운 문제라 고 판단되면 1교시 단답형으로 변경하여 출제할 수도 있다.

요즘은 주로 국문 및 영어를 혼용하여 시험 문제를 출제하고 있으며, 영어는 전공 과목에서 많이 사용되는 단어이므로 염려하지 않아도 된다. 법규와 관련된 문제는 관계 법규(법, 시행령, 시행 규칙)는 최신의 개정 법규를 중심으로 출제하고 있다. 용어는 국정 교과서에서 사용되는 용어, 교육부 제정 과학 기술 용어, 과학 기술 단체 및 학회에서 제정한 용어, 한국 산업표주규격에서
규정한 용어 및 일상적으로 통용되는 용어 순으로 출제에 사용된다.

라. 기타 출제 메커니즘

응시자 또는 관계자들이 합격자 발표 후 시험 문제 수준 내용 등에 이의 제기 사례가 없도록 문 제 구성에 완벽을 기하여 출제되고 있다.


3. 출제 사례 연구

시험의 출제 메커니즘은 기술의 발전 경향(Trend)를 이해하고 현재의 기술의 문제점은 무엇인지, 새로운 기술은 왜 연구 개발되었는지, 새로운 기술은 어떤 문제를 갖고 있는지, 새로운 기술은 어떻게 발전할 것인지를 전문가적인 견해를 밝힐 수 있도록 하는 것이다. 또한 출제자는 기술의 기본 개념에서 출발하여 상위 개념, 하위 개념에 대해서 알고 있는지 묻고 싶을 것이다.

지금까지 출제되었던 문제 중에 CRM (Customer Relationship Management)의 경우로 사례를 보면 57회에는 간단한 개념 및 구성요소 등에 대해서 설명할 것을 요구한 반면 출제 횟수가 늘어날수 록 더욱 세부적인 질문과 동시에 연관 기술을 같이 설명할 것을 요구하고 있음을 알 수 있다.

- 57회 정보관리 : CRM의 구성요소 및 활용 방안에 대해서 설명하시오,
- 60회 정보관리 : CRM의 성공요인과 고객 중심의 Data Warehouse 구축 방법에 대해서 논하시오.
- 62회 정보관리 : CRM의 구성도와 프로세스, 기존 DB 마켓팅과의 차이점 및 운영 사례를 논술 하시오.
- 63회 정보관리 : CRM의 관계도를 그리고 구성요소인 고객, 고객 정보 취합 DW, Data Mining, 고객 서비스에 대해서 각각 설명하시오.

위의 사례에서 알 수 있듯이 처음에는 기본적인 질문인 개념, 구성도, 활용 방안 등에 대해서 질 문하고 반복적으로 출제되는 횟수가 많아 질수록 다른 질문이 추가되고 있음을 알 수 있다. 즉 새로운 기술이 출제될 경우에는 기본적인 개념만 알아도 되지만 그 기술에 실제로 사용되고, 확 산되고 있을 경우는 좀 더 심도 있는 질문을 통하여 수험자의 능력을 평가하고자 하는 것이다.


4. 출제 문제 유형

출제 문제의 유형은 2가지로 요약할 수 있는데, 무엇을 설명하시오, 무엇을 논하시오, 등으로 구 분할 수 있다. 질문의 유형이 '무엇을 설명하시오'의 경우 기술에 대한 사실을 객관적인 입장에 서 설명하면 된다. 또한 질문의 유형이 '무엇을 논하시오'의 경우는 기술에 대해서 자기의 주관 적인 견해를 논리적으로 작성하면 된다. 이때는 서론, 본론, 결론의 순으로 쓰되, 서론에는 선행 기술의 문제점 및 신기술이 나온 배경에 대해서 요약 설명하고, 본론에서 신기술에 대한 자세한 설명을 기술하고 결론에서 향 후의 발전 방향 및 문제점 등의 자신의 견해를 기술하면 된다.


5. 시험 출제 의도 파악 사례

출제자의 출제 의도를 파악한다는 것은 정확한 답안을 작성하기 위한 핵심 성공 요소이다. 62회 정보관리분야에서 1교시에 그룹웨어에 대한 문제가 출제되었다. 그룹웨어는 이미 대부분의 기업 에서 사용하고 있는 Messaging Infra로 특별히 신기술도 아닌데 최신 기술 위주로 나오는 1교시 에 나온 이유는 무엇일까? 이러한 Point을 찾는 것이 출제의도를 파악하는 것이다. 그룹웨어가 출제된 이유는 인터넷이라는 기술과 연관하여 생각해 볼 수 있다. 즉 인터넷의 핵심적인 필요성 은 정보공유(Information Sharing) 과 협업(Collaboration)이며 이것을 가능하게 하는 것이 그룹 웨어이며, 지식 경영이나 지식관리시스템 (KMS, Knowledge Management System)을 가능하게 하는 기반 기술이 그룹웨어이다. 아마도 출제위원은 이러한 점을 알고 있는지 확인하고 싶었을 것이다. 이러한 출제 의도를 정확히 파악해야 올바른 답안을 작성할 수 있는 것이다. 출제 의도 파악은 아래의 4가지로 요약하여 설명될 수 있다.

가. 요구된 기술의 트랜드

요구된 문제에서 필요한 기술의 트랜드가 어느 위치에 있는지, 즉 연구소의 연구 개발 중인 기술 인지, 시제품으로 생성된 기술인지, 여러 밴더에 의해서 생산-적용된 기술인지에 대한 이해도 평 가하는 것이다.

새로운 기술의 트랜드에 대한 사례

1) Potal Service란 무엇이며, 주요서비스 분야는 무엇이 있는지 설명하시오.
(58회 조직응용의 2교시 문제)

58에 출제된 문제로 새로운 개념으로 등장한 Portal Service에 대해서 개념과 이 기술의 사용 용도가 무엇인지를 묻고 있다. 이러한 문제를 풀기 위해서는 Portal의 시간적 트랜드를 정확히 알 고 있어야 가능하며, 새로운 기술이 사용될 용도(서비스) 및 필요성을 이해하고 있어야 한다.

2) CRM 구성요소 및 활용방안을 설명하시오. (57회 정보관리의 2교시 문제)

57회에 출제된 문제로 CRM의 개념을 알고 CRM은 어떤 기술이 사용되고 있는지, 어디에 사용할 수 있는 지를 묻고 있다.

나. 선행 기술의 문제점 및 새로운 기술에서 해결하고자 하는 것

선행 기술이 갖고 있는 문제점 및 이 문제점을 해결할 수 있는 신기술은 무엇인지에 대한 응용력 판단의 평가하는 것이다.

선행 기술의 문제점 및 새로운 기술에서 해결에 대한 사례

1)메인 프레임의 인사정보시스템이 운영되고 있다. 그런데 화상정보시스템을 도입하려고 한다.
UNIX시스템을 이용하여 화상정보를 관리하고 인사시스템을 통합하여 신규 시스템을 구축하는 방안을 논하시오. (63회 정보관리의 3교시 문제)

선행 기술인 메인 프레임의 문제점을 지적하고 새로운 기술을 사용해야 가능한 화상 정보 시스템 의 구축 안을 묻는 문제이다.

2)인터넷을 이용한 전자상거래의 정보보호를 위해 사용되는 암호화 시스템 중 대칭키 암호시스템 과 비대칭 암호시스템을 설명하고 각각의 장단점을 비교하시오(54회 조직응용의 4교시 문제)

선행 기술인 인터넷의 문제점 중의 하나인 보안성 취약을 해결하기 위한 보안 기법에 대해서 알 고 있는지 출제된 문제이다.

다. 새로운 기술이 갖고 있는 문제점 및 새로운 기술을 해결하고자 하는 활동 및연구

새로운 기술의 문제점은 무엇인지에 대한 기술적 평가 및 새로운 기술의 문제점을 해결할 수 있 는 또 다른 기술 개발 및 응용에 대한 전문적 기술의 이해도 평가의 경우이다.

새로운 기술을 해결하고자 하는 활동 및 연구에 대한 사례

1) T-Commerce의 개념, 구성도, T-Commerce를 위한 성공요건 및 인터넷 TV를 이용한 응용 서비스 및 향후 전망에 대해 논술하시오. (62회 정보관리의 2교시 문제)

T-Commerce는 TV를 이용한 신개념의 상거래 비즈니스를 의미하며, 여기에 적용된 기술의 성공 요 건은 주요 성공 요건은 양방향성 능력, 고속의 데이터 전송 능력, HDTV, Set Top Box와 같은 기 술의 현재의 문제점을 해결해야 가능하다는 것을 알고 있어야 한다.

2) z39.50의 개념 및 지원서비스 기능을 설명하시고, Z39.50의 문제점 및 이를 극복하기 위한 동 향을 설명하시오(62회 정보관리의 4교시 문제)

전자 도서관 구축의 표준 프로토콜로 사용되는 z39,50에 대한 문제점 및 해결을 위한 연구 활동 을 요구하는 문제이다.

라. 새로운 기술에 대한 종합적인 견해 및 응용 정도

새로운 기술에 대한 종합적인 견해와 발전 방향에 대한 견해의 평가하는 경우이다.

종합적인 기술의 적용 능력 및 이해도를 평가하기 위한 문제 사례

1) CRM의 관계도를 그리고 구성 요소인 고객, 고객정보취합 DW, Data Mining, 고객서비스에 대하 여 각각 설명 하시오(63회 정보관리의 4교시 문제)

이 문제를 해결하기 위해서는 CRM의 구성도 및 CRM을 주변의 기술이나 시스템을 이해하고 있어야 한다. 또한 CRM이 적용될 수 있는 비즈니스 요구 사항에 대해서도 알고 있어야 한다. CRM은 제시 된 문제의 고객 서비스 뿐만 아니라, 마켓팅 및 영업 활동에서도 사용되고 있으며, 인터넷을 이
용한 e-CRM의 개념으로 확대되고 있다는 사실을 알고 있어야 한다.

 


■ 답안 채점 메커니즘

시험 출제 위원은 문제에 대한 모범 답안을 같이 만드는 것으로 알려져 있다. 논술형의 문제이므 로 정확한 답안을 만드는 것은 불가능한 일이지만, 향 후에 채점할 채점 위원을 위해서는 가장 일 반적인 내용으로 답안을 만들 것으로 예측된다. 답안 채점에 대해서 일반적으로 알려진 바에 의하 면 3명 이상의 채점 위원이 채점을 실시하는데, 한문제당 보는 시간이 불과 몇 분 밖에 안 된다고 한다. 한번에 시험 보는 예비 기술사의 수가 평균 200명 수준이므로(65회의 경우 300명 정도로 늘 었음), 4교시의 시험을 12페이지의 답안을 작성할 경우에 채점을 위해서 읽어야 할 분량이 9600페 이지에 달하고. 한 명의 채점 위원이 채점하기 위해서 읽어야 하는 총 페이지 수는 3200페이지로한 문제 당 1분씩 사용한다고 가정할 경우 17시간이라는 긴 시간을 투입해야 채점을 할 수 있다는 결론에 도달 할 수 있다. 결론적으로 답안을 정확히 이해하고 채점하는 것은 어려운 일일 것이므 로 시험자 입장에서는 채점자가 채점하기 좋게 답안을 작성하는 것이 중요한 성공 요소임을 알 수 있다.
알려진 바에 의하면 채점 위원은 답안의 내용이 채점하기 좋은 형태로 되어 있을 경우에 좋은 점 수를 부여하는 것으로 알려져 있다. 그러므로 답안에는 채점하기 쉽도록, 표나 그림을 삽입하여 자신이 표현하려는 것을 남들이 쉽게 이해할 수 있도록 하는 배려가 필요한 것이다.

내가 쓴 답안이 맞으면 점수가 높게 나올 것이고, 틀린 답이면, 점수가 낮게 나올 것이라는 생각 을 한다면 이는 아직도 기술사 수검의 깊은 맛을 모르는 사람이다. 왜냐하면 맞는 답이라고 할지 라도 수검자 대부분이 천편일률적으로 동일한 답안을 작성했다면 채점 위원은 높은 점수 주기가 싫어지기 때문이다. 또한 정답을 모르는 문제에 대해서도 성심 성의껏 작성한 답안은 점수를 주고 싶은 것이 채점위원의 생각이기 때문이다. 만약 채점 위원이 답안을 채점할 때의 주요한 평가 척 도나 기준을 안다면 답안 작성 시에 득점력이 높은 답안으로 만들 수 있을 것이다.

채점 위원이 답안을 채점 하기 위하여 쭉 훑어보는데 소요되는 시간은 매쪽 당 불과 몇 초 정도이 다. 이 짧은 시간 동안에 채점 위원은 답안에 대한 첫인상, 논리성, 출제의도 반영성, 응용 능력 정도, 답안의 특화 정도, 견해 제시력을 보게 된다. 그러므로 답안은 이러한 평가 기준 및 척도를 이해하고 작성되어야 한다.


1. 첫인상

답안이 너무 싸늘해 보이지 않도록 짜임새가 있어야 한다. 키워드 만을 암기하여 쓰다 보면 답안 에 빈공간이 너무 많아 지게 되는데 이런 경우를 방지해야 한다. 글씨는 진하고 굵은 볼펜으로 약 간 크다고 생각되는 정도로 정성껏 써야 한다. 너무 흐리게 써도 안된다. 그림 또는 표를 매 쪽 당 한 개씩 삽입한다면 채점 위원을 즐겁게 해주는 것이다. 이점이 채점 위원에게 좋은 인상을 주 게 된다. 중요한 점은 그림과 표는 가치가 있어야 한다는 것이다. 그림과 표에는 깊은 정보를 함 축적으로 표현되어 있어야 좋은 점수를 얻을 수 있다.


2. 논리성

10점짜리 문제의 답안에도 논리성 있는 단락의 구성이 필요한가? 그렇지 않다. 10점짜리 문제인 경우 핀 포인트를 맞춰 핵심을 정확하게 기술해야 한다. 25점짜리의 문제의 답안은 10점짜리와는 달라야 한다. 논리성을 갖추기 위해서는 우선 단락의 흐름이 좋아야 한다. 단락의 흐름을 좋게 하는 구성요소로는 단락의 구성과 단락의 개수가 포함된다. 단락의 구성은 대개 도입부와 본체부 및 마감부로 나눌 수 있다. 도입부에는 천편일률적으로 무엇의 개요로 시작하는데 꼭 그렇게 할 필요는 없다. 문제에 따라 출현 배경 또는 현행 이슈 등을 나열하면 좋겠다. 본체부의 단락은 3개 이내가 좋을 것이며 특히 문제에서 요구하는 부분이 본체부에 정확하게 기술되어야 한다. 마감부 는 효용성 등을 열거하며, 향후의 발전 방향이나 전망 등을 기술하면 좋을 것이다.


3. 출제의도 반영성

이 부분이 답안 작성시 가장 신경써야 하는 부분이다. 출제 의도를 얼마나 잘 포커싱 하느냐가 좋 은 점수를 얻을 수 있느냐? 와 직결되기 때문이다. 출제 문항에 있는 키워드를 단락에 포함시킴으 로써 포커싱이 잘 된 답안임을 과시할 필요가 있다. 또한 답안의 깊이 정도가 너무 깊거나, 너무 엷다든가 해서는 안된다. 깊이가 너무 깊다면 제한된 시간과 지면을 잘 못 활용하는 결과를 초래 하기 때문이다. 또한 출제 의도는 지나치게 깊은 내용을 원하지 않는 경우가 대분이다. 답안의 핵 심이 되는 키워드들의 적절성이 요구된다. 또한 키워드들의 위계성 있는 배치가 필요하다. 키워드 들을 표현하기 위해 구조적인 체제를 유지해야 한다.


4. 응용 능력 정도

암기한 내용을 전개시킨 답안을 채점 위원은 싫어한다. 이 답안 내용을 다른 사람에게 설명하고 필요하다면 설득할 수 있는가? 이 답안 내용을 핵심으로 프로젝트를 발주자로부터 프리젠테이션하 여 수주할 수 있는가? 이 답안 내용이 포함된 프로젝트를 수행한다면 성공적으로 완료할 수 있는 가를 생각하면서 수검자의 응용 능력을 판단하게 된다.


5. 특화의 정도

답안 작성자가 어느 정도의 전문성을 갖추고 있는 지를 가름하게 된다. 내가 가진 전문 적 시각 에서 답안을 작성해야 한다. 독특한 아이디어가 제시된다면 더욱 좋다. 또한 실무 경험의 유무도 알라 볼 수 있다. 실무 경험을 통해 느낀 점이 있다면 이를 소개하는 것도 좋다. 표현이 독창적인 답안이라면 더욱 좋다.


6. 견해 제시력

답안 작성자의 탁월한 견해를 채점위원은 기다리고 있다. 보편 타당한 논지에서 벗어난 엉뚱한 논 지가 아닌 사회적으로 수용 가능한 견해이지만 이 견해는 답안 작성자의 신념이 묻어 있고 체취가 물씬 풍기는 답안이면 더욱 좋다.

이와 같이 답안은 천편일률적으로 같은 방식으로 작성되어서는 안되며 독창적이어야 하고, 채점자 의 입장에서 답안이 작성되어야 하며, 자신의 견해를 제시하는 방법으로 자신이 전문가임을 은연 중에 강조할 수 있어야, 좋은 답안으로 채점이 될 수 있다.

 


■ 합격 수기

작성자 : 추연수(NDS/81회 정보관리기술사)

Ⅰ. 서론
유난히 길고 길었던 시험준비 기간을 마치고, 이렇게 합격 수기를 쓰게 되다니 감개가 무량하다. 항상 선배들의 합격수기를 읽으며 마음을 가다듬었는데, 나의 합격수기가 같은 길을 걸어올 후배들에게 조금이나마 도움이 되었으면 좋겠고, 오랫동안 공부한 수험생들에게는 조금이나마 위안이 되었으면 좋겠다는 마음으로 1차 합격수기를 적어본다.


Ⅱ. 본론

1. 72회 : 2003. 8 ~ 2004. 2
2003년 8월 인사교육팀의 추천에 의하여 지아이에스에 입과 등록을 하고 가벼운 마음으로 강의를 들었다. 약 4개월 정도 교육을 받았던 것 같다. 그리고 까맣게 잊어버리고 있었다. 2004년 2월 시험을 앞두고 인사교육팀에서 합숙훈련을 들어가라고 했다. 공부한건 없지만, 일단 합숙을 들어갔다. 2주 동안 공부를 하고 받은 점수는 40점대... 나름대로 해볼만한 시험이라는 생각이 들었다.

2. 74회 : 2004. 3 ~ 2004. 8
신규로 기술사학습을 시작하는 멤버들과 함께 6명의 인원이 모여서 스터디를 시작했다. 마침 사내 기술사 합격자가 있어서, 멘토기술사로 모시고 공부를 시작했다. 퇴근 후에 회사 회의실에서 공부를 했다. 분야를 나눠서 공동으로 서브노트를 만들었다. 시간을 절약하기 위해서였다. 하루에 3시간 정도를 학습하고, 약속이 있거나 회식이 있으면 다 참석했다. 모의고사를 보러가면 책을 꺼내놓고 쓰는 정도의 실력이었다. 어쨌든 나름 열심히 했고, 74회에 응시했다. 결과는 54점... 조금만 열심히 했으면 붙었으리라 하는 아쉬움이 남았다.

3. 75회 : 2004. 9 ~ 2005. 2
지난번 시험에서 54점을 획득했던 우리 스터디는 이제는 멘토기술사 없이 공부를 해도 붙을 수 있다는 자신감이 생겼다. 우리 스터디는 조금 느슨한 형태로 스터디를 진행했다. 퇴근 후 자율적인 공부를 수행했다. 시험보기 3주전 갑자기 아버지가 돌아가셨다. 제대로 시험 준비를 할 수 없었다. 시험지를 채우는 것도 버거웠다. 결과는 45.5 1차 필기 합격자 0명인 75회 시험이다.

4. 77회 : 2005. 3 ~ 2005. 8
지난 시험에서 쓰라림을 맛본 우리 스터디는 중도에 3명이 포기를 하고, 새롭게 2명을 받아들였다. 그리고 외부에서 멘토기술사를 영입했다. 체계적인 방법으로 스터디를 수행했다. 매주 200분의 시험과 퇴근 후 버스가 끊기기 직전까지의 공부를 수행했다. 꾸준한 스터디를 거쳐 시험보기 직전 모의고사에서 60점 이상의 점수를 획득했다.
시험장에서 1,2 교시에 문제가 생겼다. 1교시 시험 도중에 시험감독이 자꾸 주의사항을 말하는 것이었다. 시험 리듬이 자꾸 끊겼다. 결국 1,2 교시에 문제를 다 풀지 못하고 시험지를 뺐겨 버렸다. 시험점수는 58.25. 당시에는 시험감독이 원망스러웠지만 지금 생각하면 아직도 준비가 모자랐지 않았나 싶다. 시험 준비기간이 길어지는 순간이었다.

5. 78회 : 2005. 9 ~ 2006. 2
78회에는 심기일전하는 심정으로 외부스터디에 참가했다. 우리회사에서 2명, 외부 3명 도합 5명의 인원이 스터디를 진행했다. 대부분 지난 시험에서 아깝게 떨어진 수험생이었다. 강도높은 스터디가 시작되었다. 매주 200분의 모의시험과 토픽발표를 했다. 토픽을 한바퀴 돌고는 기출문제에 대한 목차잡는 훈련이 진행되었다. 추운 겨울에 스터디를 마치고 새벽에 귀가하면 술집에서 술을 마시는 사람들이 보인다. 그런 사람들이 부러워 보이곤 했다.
지루했던 시험 준비기간이 끝나고, 드디어 시험을 치렀다. 자신있게 시험을 봤다. 4교시에 갑자기 문제를 바꾸느라 모바일 RFID를 잘못읽어서 RFID로 푼게 마음에 걸렸다. 그러나 1교시를 워낙 자신있게 푼 터라 별로 개의치 않았다. 드디어 결과가 나왔다. 충격이다. 58.75로 탈락. 같이 스터디를 진행했던 최해룡 기술사와 김광수 기술사는 이때 합격했다.

6. 80회 : 2006. 3 ~ 2006. 8
78회의 충격이 오래갔다. 시험 발표 후 일주일 동안은 밤에 잠을 자지 못했다. 와이프와 딸아이를 데리고 동해안으로 여행을 갔다. 매년 여름 휴가도 못가고, 명절도 지내지 못했는데, 미안한 마음을 표현할 길이 없었다. 와이프가 지금까지 공부한게 아까우니 한번 더 도전해 보라고 한다. 용기를 내어서 한번 더 도전한다. 다시 사내 스터디로 복귀했다. 4명의 스터디 멤버와 외부 멘토기술사를 초빙했다. 이 시험이 마음만 앞선다고 되는 시험이 아니구나 라는 생각이 들었다. 평일에는 퇴근 후에 사내 회의실에서 공부를 하고, 주말에는 스터디 팀원들이 모여서 모의고사를 보고, 충실하게 준비를 했다. 그리고 시험에 응시했다. 낯선 시험문제가 많이 출제됐다. 실무 경험을 묻는 문제가 다수 출제됐다. 수치해석 문제도 다수 출제되어 피해갈 수가 없었다. 결과는 58.42로 탈락

7. 81회 : 2006. 9 ~ 2007. 2
이제 그만 포기해야 겠다는 생각이 들었다. 해볼 수 있는 것은 다 해봤다. 운이 나빴다고 생각했다. 어느날 사장님 비서로부터 연락이 왔다. 사장님이 찾는다고 했다. 사장실 앞에 가니 나 혼자 들어가라고 한다. 사장님과 독대하기는 처음이다. 사장님 말씀이 '모든 일에는 성공법칙이 있다. 추과장이 자꾸 떨어지는 것은 이 성공법칙을 모르기 때문이다. 성공법칙을 찾아서 회사는 어떻게 지원을 해주면 되는지 또 추과장은 어떻게 할 것인지 보고를 하라.' 일주일을 고민해서 사장님께 보고를 했다. 최선을 다하겠다고 약속을 했다.
공부를 독하게 시키기로 유명한 스터디에 참가했다. 내 답안지를 컨설팅 받았다. 약점을 지적받고 고치기 위해 노력했다. 스터디에서는 토픽에 대한 심도있는 토의가 이뤄졌다. 일주일에 2번의 스터디를 진행했다. 평일 스터디에서는 버스가 끊기는 일도 다반사였다. 대학때 보던 수치해석 책을 꺼내어 수치해석 문제도 대비했다. 그렇게 하루도 빼놓지 않고 4개월을 한결같이 공부를 했다. 시험 결과가 발표되는날 떨리는 손으로 인터넷을 확인했다. 결과는 합격. 지아이에스에 입과한지 3년 6개월, 본격적으로 공부한지 36개월만에 드디어 합격했다.


Ⅲ. 결론

합격과 불합격의 차이는 무엇일까?
81회 시험을 치르면서 느낀점을 말하자면 이전에 시험문제를 풀때 아는 문제가 나오면 잘 풀었지만 모르는 문제가 나오면 당황하고 엉성한 답안을 작성했었다. 대부분의 시험문제는 우리가 예상하지 못한 분야에서 나온다.
합격자의 답안은 모르는 문제가 나오더라도 아는 문제와 똑같은 품질로 풀 수 있어야 합격을 할 수 있다고 생각한다. 사실 시험준비를 시작한지 1년 6개월이 되면서부터 합격권에 들었었다. 이 차이를 알기까지 다시 18개월의 시간이 흘렀다. 어쩌면 조금 더 겸손해지라고 이런 시련의 시간을 보냈는지도 모르겠다. 시험에 떨어질 때마다 읽었던 차동진 기술사의 글을 적으며 마치고자 한다.

떨어지셨는지요? 그렇다면 합격 후에 그 떨어졌던 만큼의 자부심을 가지게 될 것입니다. 쉽게 얻을 수 있는 것들은 성공의 감동도 쉽게 사라지는 것입니다. 깊은 맛을 내는 음식은 반드시 추운 겨울을 버텨냅니다. 그것도 여러 차례 버텨낼수록 명품이라고 하지 않습니까? 결단코, 손쉬운 합격은 없습니다. 쉽다는 기준이 다를 뿐입니다. 다시말해, 기술사 합격을 쉽게 할 정도로 그 분께서는 기본적인 내공이 있으셨다. 그렇게 되기까지 얼마나 많은 노력이 있었을까? 라고 다시 반문해보시길 바랍니다. 실패를 이겨내는 것이야말로 몇 배나 소중한 미덕입니다.



작성자 : 김한주(BMC S/W / 81회 전자계산조직응용기술사)

1. 수험을 시작하게된 계기
- 작년(2006년) 초부터 업무의 양이 줄어들게 되면서, 업무시간 내외에서 여유시간이 많이 남게되었습니다.
처음에는 여유시간을 즐기면서 편하게 직장생활을 하였지만, 아직 창창한 30대의 나이에 편안함에 안주하는것이 불안해지기 시작하였습니다. 여유시간을 활용하여 미래를 위해 무엇을 준비할까 고민하던 순간 우연히 78회 기술사 합격자 명단을 보게 되었습니다. 이 때, 제가 아는 이름이 그 명단에 있었고 그것은 저에게 신선한 충격 이었습니다. 저와 아시아나항공에서 같이 근무했던 최치림 기술사님이었습니다. 내가 편안한 직장생활에 안주할 때 다른 이들은 무언가를 열심히 준비하는구나...이틀여간의 고민끝에 최치림 기술사님을 찾아뵈었습니다.
기술사가 무엇인지, 기술사가 되면 무엇이 좋은지도 잘 몰랐기에 최치림 기술사님과의 만남이 저의 기술사 준비 시작으로 봅니다. 성격이 워낙 급하기에 최치림 기술사님을 6월말에 만나뵙고 바로 그 다음날 지아이에스에 등록했습니다. 사실, 지아이에스도 최치림기술사님이 알려주신 거죠.
- 선배 기술사님의 합격수기에 보면 가족들의 엄청난 희생이 따르기에 와이프의 동의가 우선적임을 알게 되고 와이프의 동의를 구하였는데, 저의 와이프는 제가 테니스와 술을 안하고 공부한다고 하니 전폭적으로 지지해 주었습니다. 아마, 와이프가 시험에 대해서 잘 몰랐기에 지지해 준거 같습니다. 다시 한다면 하지말라고 할지도 모릅니다. 와이프가 너무 힘들게 고생했지요.

2. 수험시작을 위한 마음의 준비
- 개인적으로 친한 사회 선배님들께 기술사 시험을 준비하겠다고 알렸고, 그 분들이 많은 용기와 격려를 해주었습니다. 8개월간의 공부기간에서도 그 분들이 많은 용기를 주셨습니다...또한, 많은 질타를 주기도 하셨죠.
- 테니스와 술의 중독에서 벗어나기위해 처음에는 많이 힘들었습니다. 어떤 중독증이던가에 그것을 극복하기는 힘들었습니다. 하지만, PMS 시작과 함께 매주 주어지는 Object의 양이 버거웠기에 테니스/술을 생각할 겨를이 없었습니다.
- 내가 존경하고 사랑하는 가족과 선배, 친구들께 최선을 다하는 모습을 보이고자 노력하였습니다. 80% 이상의 수험생이 중도 포기를 하는 것 같습니다. 어떤 힘든 역경에서도 포기하지 말자고 다짐하였습니다.
- 학창시절부터 공부에 관한 한 남들보다 뒤쳐지는 것을 두려워했고, 매주 스터디 모임에서도 역시 내가 맡은 부분에 대한 철저한 준비와 10점짜리 3문제에 대한 공부를 한 주도 쉬지 않고 하였습니다.

3. 수험 기간
가. PMS (2 개월)
- 7월 PMS11기에 입과하여 받아든 전체 Object list를 보고 경악을 금치 못했습니다. 이 많은 것을 언제 어떻게 준비하라는 건지....매주 주어지는 15개여 Object, 그 중 3개에 대해선 직접 발표도 하고 자료도 만들어야 했습니다.
- PMS를 시작하시는 후배분들께 진심어린 조언을 한다면, 매 주 주어지는 Object 15개 모두 해야한다는 것입니다.
자신에게 맡겨진 부분만 한다면 스터디내에서 토론이 되지 않고 또한 그것을 나중에 채워 넣을 시간이 많지 않다는 것 입니다.
- 매주 30분 10점짜리 3개의 쪽지시험...시험문제도 미리 알려주고 답안 작성 요령도 배웠지만, 3문제를 제대로 쓰지 못하였습니다. 전체 10점 안팍의 점수를 받고 깨달은게 단순 암기해서 작성하는 것이 아니라는 것을 깨달았습니다.
- 절대 앵라퍼와 교육용 자료를 보지 않았습니다. 남이 정리한 자료는 저의 머리속에 일정기간 암기된 상태로 남아 있을수는 있지만, 이해된 상태로 큰 숲을 보는데에는 절대 도움이 되지 않는 다는 것을 절대 명심해야 합니다.

나. AMS(2개월)
- 조직응용으로 종목을 선택한 후에 정보관리 지원자와의 혼합된 AMS는 저에게는 큰 도움이 되지 않았습니다. 또한, 이 기간에 추석이 있었고, 공부를 한다고 해도 답안 작성이 형편없음에 점점 자신감을 상실하는 모습에 한달여간 방황을 하였습니다.

다. 그룹스터디(3개월)
- 조직응용을 준비하는 사람들로만 구성된 그룹스터디에 참가하고, 집중전략과목과 필수object를 선정하여 단기간에 점수를 향상시킬 수 있는 전략을 가졌습니다.
- 매주 200분의 모의고사를 실전과 동일한 마음가짐으로 준비하였고, 멘토기술사님의 Comment와 답안 작성요령에 대한 조언을 유심히 고민하며 그것들을 나의 답안지에 반영하고자 하였습니다.

4. 나만의 공부방식
가. 절대로 앵라퍼와 교육용자료를 보지 않는다.
전체적인 이해능력과 대부분의 Object에 대한 학습이 될때까지는 학회지, 기술용 원 자료를 통해 스스로 이해를 하여야 합니다.
사실, 올 1월부터는 앵라퍼와 교육용자료를 많이 참고하였습니다. 이때는 전체적인 View를 가진 후이기에 Object의 범위를 넓히고, 본인의 정리자료의 부족한 부분을 채워주기위해 참고한 것입니다.

나. 가능한 한 모든 자원 총 동원하기
- 자원이라 함은 시간, 돈, 조력자등 여러가지가 있을 수 있습니다. 단기간에 합격하는 것이 그러한 자원을 절약하는 것이라 생각하고, 주변에 내가 동원할 수 있는 모든 자원을 총동원하였습니다.

- 시간 측면 : 추석, 설, 연말 이런 것들 절대 무시하기. 맞벌이 부부로서 저녁에 6살 짜리 아들놈을 보살펴야 할 때가 많았습니다.
이때, 과감히 장모님, 저의 어머님, 조카등 주변 친지들에게 부탁을 하였습니다. 물론, 이에 따른 금전적 보상도 필요 했지만, 돈을 아끼고자 아들놈을 제가 보살폈다면 합격 못했을 것입니다.

- 조력자 측면 : 80회때 무선통신분야에서 문제가 어렵게 출제하였고, 이를 커버하기가 부담스러웠습니다. 봐도 모르겠고, 안다고 해도 답안 작성이 되지 않았습니다. 다행히 저의 절친한 고교친구가 카이스트 무선통신 박사로 있었고, 친구를 통해서 많은것을 배웠습니다. 근데,,,중요한 것은 81회때 무선통신이 한문제도 안 나왔다는 것입니다.
시험 준비 막판, 80회 합격자 이현정기술사님 과 최치림 기술사님의 공부방식과 최신의 채점기준에 대한 Comment가 큰 도움이 되었습니다.

- 금전적 측면 : 사실, 저처럼 술을 자주 먹던 사람이 술을 끊고 공부를 하니 돈 확보하는 것이 그리 어렵지 않았습니다. 돈이 마지막에는 남았습니다. 술값을 줄이면 수험기간 경비가 충분히 준비됩니다. 하지만, 기술사 시험은 혼자 맨땅에 헤딩하기로 해서는 안되는 것이기에 주변의 도움이 많이 필요하게 되고 그러할 때 돈에 인색해서는 안됩니다. 도움받은 사람에게 과감히 보답하고, 그로 인해 더 큰 도움을 받을 수 있고...

다. 단계별 공부방식.
- 초반 3개월 : 새로운 Object를 공부할 때는 새로운 것을 알아간다는 즐거움에 새벽2시가 되어서도 피곤하지가 않았습니다. IT 10년 경력이지만 내가 모르는 새에 IT의 분야가 그렇게 많은지, 그리고, 그렇게 전문가가 많은지 몰랐습니다. 무언가를 알아간다는 것은 재미있는 일입니다. 초반에는 즐겁게 하십시요. 긴장과 스트레스는 후반되면 충분히 느끼실 테니까요...

- 중반 3개월 : 자료 정리에 모든것을 걸었습니다. 기존 Object를 다시 한번 스터디하면서 실제 시험에서 모든 것이 출제될 수 있다는 가정하에 세부적 사항까지도 정리하였습니다. 아무리 이해가 잘 된 토픽이라 할지라도 실제 시험은 시간 싸움이기에 핵심 키워드가 포함된 정리자료가 필수입니다. 자료 정리는 즐거운 일은 아니지만 정성스럽게 준비하여야 합니다.

- 후반 2개월 : 1월 모의고사에서 우수한 성적을 받고 잘하면 이번 81회때 될 수도 있겠다는 자신감을 갖게 되었습니다. 사실, 원래 목표가 83회였으니까요...목표 수정을 하였습니다. 일단 81회때 ALL-IN해보자... 가장 힘든 기간이 후반 2개월입니다. 2달여밖에 남지 않았는데, 아직 CA/OS와 TCP/IP, 소프트웨어공학에 대한 공부가 많이 부족하였습니다. 부족한 분야에 대한 집중 투자를 한달간 하였습니다. 마지막 한달간은 중요 Object에 대한 심화학습과 반복학습, 그리고, 중간 중간에 전혀 몰랐던 새로운 Object에 대한 간단한 이해를 하였습니다.

5. 수험기간동안 주의해야할 점
- 절대 부부싸움을 해서는 안됩니다. 회사에서의 스트레스는 그나마 공부에 방해가 되지 않습니다. 하지만, 와이프와의 싸움은 공부에 집중도를 떨어뜨립니다. 와이프가 투덜대면 그냥 감싸안아 주십시요...본인도 힘들지만, 와이프도 힘드니까요.
- 자만에 빠지지 마십시요. 모의고사에서의 우수한 성적이 실제 시험에서도 합격점수를 보장해주지 않습니다. 어느정도의 내공이 되면 모의고사에서 상위 등수에 갈 수 있습니다. 그 순간 자만에 빠질 수 있는데, 토끼와 거북이에서의 토끼꼴이 날 수 있음을 명심해야 합니다.
- 슬기로운 슬럼프 극복. 어느 누구나가 슬럼프에 빠질 수 있습니다. 그 기간을 얼마나 슬기롭게 헤쳐나오느냐, 얼마나 단기간에 극복하느냐가 중요합니다.
- 충분한 수면시간. 졸음을 참고 공부하는 것은 공부가 아닙니다. 머리속을 항상 또렷한 자세에서만 공부에 임하십시요. 졸리면 자야합니다.
- 규칙적인 생활을 통한 건강유지. 수험기간중의 감기에 걸리면 일주일 이상이 허비됩니다. 특히, 시험 막판의 건강에 유의하십시요.
저는 시험 한달 전에 난생 처음 눈따락지가 났는데, 일주일간 아무 공부를 못했습니다.
- 시험에 합격한 사람은 운이 좋아서 합격했다고 할 수 있습니다. 하지만, 불합격하신 분은 절대 운이 나빠서 불합격했다고 생각지 마십시요. 그러는 순간, 다음 시험때도 똑같은 패배를 예상하는 것입니다. 불운을 극복할 수 있는 실력을 키우면 되는 것입니다.

6. 마지막 이야기.
- 지난 8개월간 아무것도 모르던 초보 준비생을 합격수기를 쓸 수 있는 기회를 만들어 주신 김영국 기술사님께 진심으로 감사드립니다.
합격과 불합격의 차이는 멘토기술사님의 조언을 얼마나 빨리 터득하느냐인 거 같습니다. 하지만, 멘토는 말 그래도 조언자일 뿐입니다.
스스로의 전략과 고민을 통해 나만이 쓸 수 있는 답안을 준비해야 합니다. 합격수기란 것을 막상 쓰려니 특별한 내용이 없는 거 같습니다.
또한, "겸손"이라는 모습을 갖추지 못하는 것 같습니다. 하지만, 후배기술사님들께 조금이나마 도움이 되고자 제가 공부했던 방식 그대로를 적었습니다. 아무리 힘든 일이 있어도 중도에 포기하지 마십시요. 지금까지 옆에서 힘들게 내조해왔던 가족들을 생각하며...

 


■ 합격 성공 요인

기술사를 목표로 공부하는 사람은 지금까지의 경력 및 경험을 토대로 고도의 기술 응용 능력을 가진 전문가가 되기 위한 일생의 중대한 결심을 한 것이다. 출발은 굳은 신념과 포기하지 않는다는 인내심으로 시작해야 한다. 기술사는 기술분야의 최고 자격을 국가에서 부여하므로 그에 따른 책임과 역할에 대한 기대는 한없이 클 것이다. 그러므로 기술사 자격 취득 후에도 더욱더 열심히 학습, 연구해야 한다는 목표를 가지고 있어야 한다.

기술사 합격의 성공요인은 여러 가지를 들 수 있으나 대표적으로 알아보면, 시험 공부를 위한 주변 생활의 단순화, 기출 문제의 분석을 통한 예상 문제 발췌, 모범답안의 작성, 정기적인 모의 시험을 통한 자기 점검 등이 중요한다. 기술사 합격 성공 요인은 기술사들이 보편적으로 말하는 것 중에서 중요하다고 생각되는 것을 정리한 것이다. 대부분의 기술사 들이 거의 비슷한 요지의 충고를 하는 것은 비슷한 경험과 과정을 거쳤기 때문이다.


1. 현재의 생활 패턴을 단순화하고 규칙적으로 바꾼다

기술사 시험은 국가에서 시행하는 자격 고시이다. 기술사 시험 준비를 위해서는 체계적인 접근 방법이 필요하다. 기본 지식, 경험, 기술 동향, 전문지식 등 다양한 자료와 서적을 가지고 집중적으로 학습해야 하므로, 현재의 생활 패턴을 단순화시키고 가능하면 규칙적으로 바꿀 필요성이 있다.
각종 모임 및 술자리 등을 최소로 줄이는 노력이 필요하다. 대부분의 사람은 직장 생활을 하고 있을 것이므로 집중적으로 공부할 수 있는 주말이나 공휴일을 최대한 활용하여야 한다. 대부분의 합격자들의 말을 요약하면 주말과 휴일 없이 밤낮으로 도서관이나 집에서 집중적으로 공부하였음을 알 수 있다. 시험 공부를 시작할 경우 주위 사람에게 많은 광고를 하고 시작하는 것이 좋다, 그래야만 주위 사람으로부터 불필요한 오해를 방지할 수 있으며, 특히 중도에 포기하는 사태가 발생하지 않는다. 대부분의 합격자들이 말하는 성공요소 중의 하나가 공부 시간을 만드는 것임을 알 수 있다. 공부 시간을 만든다는 것은 주변 생활을 단순화하고 24시간을 알차게 쓰는 방법밖에 없다.


2. 좋은 기본 교재, 자료를 선택하고 집중적으로 학습한다

기본 교재는 컴퓨터 관련 전공을 했다면 대학 시절에 배웠던 교재, 신문 및 잡지, 학회지 등을 들수 있다. 또한 각종 기술사 관련 서적도 중요한 기본 교재로 활용할 수 있다. 누군가 정리한 자료가 있다면 행운이다. 기본 교재를 처음부터 끝가지 완벽하게 암기하려는 자세는 금물이다. 특히 처음에 시작하는 예비 기술사들이 공통적으로 범하는 실수가 무턱대고 암기하려고 덤비는 것이다. 이러한 무모한 공부 방법은 빨리 바꿔야 한다. 기본 기술을 이해하고, 응용하고, 관련 기술을 적용하는 사고를 필요로 하는 것이다. 모르는 기술에 대해서는 관련 서적을 구입하여, 중요한 부분에 대해서 완벽하게 이해하려는 자세가 중요하다. 대학원의 학위를 받기 위한 공부가 아니며, 다
양한 기술에 대한 응용력을 테스트하는 것이 목적임을 상기해야 한다. 기본 교재는 시중에 많이 나와 있으나, 최신의 기술을 잘 설명한 것을 선택해야 하며, 기술 관련 잡지는 1내지 2권 정도 정기 구독을 통하여, 주요 기술의 경향을 재빠르게 파악할 수 있는 학습 인프라를 구축해야 한다. 또한 신문도 정보기술 관련한 것을 정기 구독하여 틈틈이 지속적으로 보는 생활 습관을 만들어야 한다.


3. 기출 문제분석을 통한 예상 문제의 발췌한다

처음에 공부를 시작하는 사람은 어디서부터 공부를 시작할 지 막막한 경우가 많이 있다. 이 때 가장 효과적으로 사용할 수 있는 방법이 기출 문제 분석이다. 모든 초보 예비 기술사에게 권하는 방법이 기출 문제 분석이다. 기술사 문제는 기출문제에서 70%-80% 이상 나온다. 그러므로 기출 문제를 분석하여 최근에 출제된 문제의 유형을 분석하여, 출제자가 무엇을 묻고 있는지 파악하는 것이다. 이것이 가장 좋은 방법이다. 이렇게 기출 문제를 분석하여 어떤 문제가 출제될지 스스로 예측 하는 능력을 키울 수 있도록 능력을 쌓는 것이다. 처음에는 예상 문제가 많이 벗어날 수 있지만, 시간이 흐름에 따라 차츰 예상 문제의 출제 확률이 늘어날 것이다. 즉 지속적으로 예측하고 분석
하다 보면 차츰 예상문제를 선별할 수 있는 능력을 지니게 된다.

특히 전회에 출제되었던 문제의 모범 답안을 작성해 보면 실전에 임했을 때 많은 도움이 된다. 분석방법은 과거 3-4년 동안에 출제된 문제들을 연도별, 유형별로 분류해 각 항목별 정리하여 문제의 경향을 파악한다.

문제의 경향을 파악하기 위해서는 사전에 문제의 영역을 나름대로 구분한 기술 Domain이 필요한데, 많이 사용하는 것이 OBS(Object Breakdown Structure)이다. 그러나 자신이 분류할 수 있는 능력이 있다면 자신의 기준으로 분류하는 것이 좋다.

출제 예상 문제 분만 아니라 출제 예상 주제들을 확실하게 파악할 수 있는 핵심 주제도 함께 포함하여 주요 주제를 발굴하여야 한다. 최근의 출제 경향은 특정 주제를 감추고 그 주제가 해결해야 할 영역을 표현하는 경우가 많아지고 있다. 이는 응시자격의 연한이 하향 조정되고 나서 두두러지게 나타나는 현상이다. 또한 문제가 어느 특정한 주제만을 대상으로 하지 않고 있다는 점도 하나의 특징이라고 할 수 있다. 이러한 추세를 효과적으로 해결하기 위해서는 각 주제에 대한 이해를 위주로 학습해야 효과를 발휘할 수 있다. 즉 문제 해결의 일환으로 각 주제를 이해해야 하는 것이다. 그리고 문제에 대한 해결 안은 복합적으로 제시되어야 한다. 이러한 관점에서 출제 예상 주제와 핵심 주제의 이해를 문제 해결을 위한 방책으로 이해하면서 자신의 것으로 융합해 나가야 한다. 발굴한 출제 예상 주제 및 핵심 주제들간의 연관성을 발견하고 이해해야 한다. 이것은 대수식을 풀 때 인수분해하고 분해된 인수를 계산하는 것과 같다. 연관성을 이해한다는 것은 답안을 내용을 더욱 풍부하게 할 수 있는 중요 요소가 되는 것이다.

발굴한 주제들 간의 추상화 수준에 따라 상하 관계를 식별할 수 있어야 한다. 각각의 주제가 어느 수준의 추상화 수준을 갖고 있는지 알고 있다는 것은 답안 작성 시 어느 수준부터 제시할 수 있는지를 판단하는 중요 요소이다. 예를 들면 소프트웨어 저작권 관리는 최상위로 추상화되어 있는 주제이고 그 하위의 주제는 저작권 추적 기술과 저작권 관리 기술로 구분할 수 있다. 저작권 추적 기술은 디지털 워터 마크, DOI(Digital Object Identifier) 및 INDECS로 구분할 수 있다. 예를 들어 문제가 DOI에 대한 것이라면 소프트웨어 저작권부터 언급할 수도 있고, 저작권 추적 기술부터 언급할 수도 있는데 한단계 높은 주제부터 답안이 작성된다면 단지 DOI 만을 기술한 답안 보다 더 훌륭한 답안을 작성될 수 있는데, 이러한 것이 가능한 것은 주제에 대한 추상화 수준을 자기 것으로 만들었기 때문이다. 그러므로 학습하는 방법도 가장 추상화 수준이 높은 것부터 하향식으로 해야 하는 것이다.


4. 그룹 학습의 장점을 도입하고 최대한 활용한다.

기술사 시험내용은 구체적으로 제시되어 있지 않기 때문에 예상 문제를 도출하는 것은 너무나 어려운 일의 하나이다. 특히 처음에 시작하는 예비 기술사에게는 어지러운 퍼즐 게임과도 같을 것이다. 그러므로 동료 예비 기술사들과 상호 협조하면서 학습 경험을 공유하고 자신의 강점을 토대로 현업 한다면 짧은 시간 내에 더욱 큰 효과를 낼 수 있을 것이다. 또한 같이 공부하는 사람이 있다는 것은 서로 격려하면서 고통을 분담할 수 있으므로 좋은 공부 방식이다. 그러나 약점도 있는데, 그룹 학습의 경우 분위기가 대중에 의해서 좌우되므로, 자신의 강점을 살릴 수 없는 환경이 될 수도 있다.. 가능하면 마음에 맞는 사람들과 그룹 학습을 권유하고 싶다. 그룹으로 할 경우 시험에
따라 그룹으로 공부한 사람들이 무더기로 같이 합격하는 예를 많이 볼 수 있는데, 이것이 그룹 학습의 효과라고 할 수 있다. 처음에 공부하는 사람은 특히 그룹학습을 할 경우 많은 혜택을 받을 수 있다. 즉 이미 공부를 시작한 사람들의 성공 및 실패 사례를 들을 수 있으며, 이를 통하여 자신의 전략을 세울 수 있으므로, 시행 착오를 줄일 수 는 것이다. 많은 예비 기술사들이 처음 공부 할 때의 방법을 잘 몰라서, 많은 시간을 뺏기고 효과를 내지 못하는 경우가 있는데, 이러한 시행 착오는 주위 사람의 도움으로 얼마든지 극복할 수 있다.

기술사를 준비하는 분들과 얘기를 하다 보면 자기가 경험하지 못한 분야가 너무 많다는 말을 많이 하는 것을 쉽게 볼 수 있다. 아주 당연한 얘기이다. 모든 예비 기술사들이 요구되는 출제 범위의 업무를 모두 경험하기란 거의 불가능할 것이다. 그러므로 이러한 문제를 해결하기 위해서는 간접 경험을 자기 것으로 만드는 방법 밖에 없다. 간접 경험은 답안을 구성하는 기술을 암기하는 것과 는 차원이 다른 접근 방법이다. 간접 경험이란 주변의 동료나 선배들에게 관련 주제에 대한 심도 있는 얘기를 듣거나, 사적을 통하여 습득된 지식을 자신의 경험을 바탕으로 재해석되어야 하는 것을 의미한다.


5. 모범 답안의 작성을 작성한다

많은 자료를 통합 정리하기 위해서는 모범 답안을 작성하고 그 답안을 주요 시험 공부 자료로 활용해야 한다. 대부분의 합격자들이 모범 답안을 만들고 이 답안을 가지고 공부에 전념하면서, 다른 한편으로는 다시 요약 노트를 만들어서 가지고 다니면서 공부해야 한다고 한다. 아무리 많은 자료가 준비되어 있어도 그 자료들이 자신의 지식, 경험 및 철학으로 새로이 탄생되지 않는다면 별로 의미 없는 시간을 보내는 것이 될 수 있다. 또한 시험 전에는 모범 답안을 집중적으로 공략하여 공부의 효율성을 기할 필요가 있다. 그러므로 모범 답안은 꼭 만드는 것이 좋다. 또 한가지의 관점은 모범 답안 외에 요약 노트를 만들 것을 권유하는 경우인데, 요약노트는 암기가 잘 안되거나, 공부할 시간이 부족한 분들에게 권하고 싶은 방법이다. 예를 들어 지하철이나, 버스 안에서 간간히 볼 수 있으므로 부족한 시간을 채우는 데는 최상의 공부 방법 중의 하나이다.


6. 숲을 보고 공부하는 전략을 취한다

처음 공부하는 예비 기술사는 답안 작성 시에 쓸 말이 별로 없고 막막한 경우를 느낄 것이다. 그 이유는 전체적인 기술의 골격을 파악하지 못하고 단답형 위주로 공부했거나 외우고 있기 때문이다. 기술사 공부하는 사람들에게 가장 많이 회자되는 것이 먼저 숲을 보라이다. 단편적인 기술의 암기로는 공부하는데 끝도 안보일 뿐더러 답안 작성시에 답안지를 채우는데 많은 애로 사항이 있으므로 전체적인 기술의 개관을 이해하고, 세부적인 공부를 해야 한다. 하나 하나 주제별, 항목별 내용 이해가 전체과정의 큰 흐름과 반드시 연결되어 완벽한 구성이 되어야 한다. 단일 주제와 용어 정리에 관한 수직적 지식과 시스템 사고에 입각한 수평적 지식, 기술의 발달로 인한 시간적 과정에서 전체 골격을 이해해야 한다. 예를 들면 DW(Data Warehouse)는 CRM의 Back End 시스템으로 사용된다. 또한 Data Mining은 CRM의 고객 분석 기법으로 사용된다. 또한 CTI(Computer Telephony Integration) 기술은 CRM의 Front End 기술로 사용된다. 그러므로 CRM을 설명할 경우에는 DW, Data Mining 및 CTI를 같이 곁들여서 설명한다면 훌륭한 답안을 작성할 수 있을 것이고, 답안지의 장 수 걱정은 할 필요가 없을 것이다.


7. 모의 시험을 통한 자기 점검을 철저히 한다.

자신의 공부 기간이 어느 정도 쌓였으면 모의고사를 꼭 치루도록 한다. 모의고사는 자신이 예상 문제를 발췌하여 낼 수도 있으며, 전문 학원에서 모의 고사를 볼 수도 있다. 어느 것을 택하든 완벽한 시험 환경을 만들고, 실제 시험과 똑 같이 치루는 연습을 할 필요가 있다. 이를 통해서 자신의 약점 및 강점을 파악할 수 있으며, 실제의 시험에서 자신의 실력을 충분히 발휘할 수 있다. 자신이 시험 문제를 내기 어려우면 과거의 기출 문제를 다시 풀어보는 것도 좋은 방법이다. 그러나 이경우 최신의 문제를 노칠 수 있다는 것이 단점이다. 이러한 시험 후에는 필히 채점을 통하여 자신의 실력을 점검해야 한다. 이러한 채점을 통하여 자신의 강점 및 약점을 파악하고, 약점 부분을 보완하는 노력을 기울일 수 있다.


8. 절대로 포기하지 않는다는 신념을 갖는다.

기술사 시험을 보는 사람 중에 중도에 포기하는 사람들이 많이 있다. 그러나 한 두 번 필기 시험에서 낙방했다고 해서 포기하는 사례를 많이 보게 되는데, 절대로 포기하지 않으면 언젠가는 붙는다. 명제를 기억해야 한다. 공부는 하면 할수록 쌓인다. 2-3번 떨어졌다고 포기할 필요는 절대로 없다. 2-3번 떨어졌다면 자신의 합격 확률은 더욱 높아지는 것이다. 자기보다 상위 실력자가 많이 없어졌다고 편하게 생각하라. 대부분의 기술사들이 시험공부를 위해서 투자한 시간을 들어보면 주로 연단위의 시간을 투자한 것을 알 수 있다.

즉 1-2달 하고 시험에 붙은 사람은 별로 없다는 얘기다. 물론 운이 좋아서 붙을 수 있지만, 기술사 시험은 절대로 운으로 붙을 수 없다는 사실을 명심해야 한다


9. 중요한 것 위주로 학습한다.

100% 다 공부하려고 해서는 끝이 없다. 그러므로 중요도를 가지고 전략적인 접근 방법이 필요하다. 그러므로 정보관리인지 전자 계산기 조직응용인지 선택한 후에는 중요도 기준으로 서브노트를 읽어야 한다. 정보관리 분야를 선택할 사람이 하드웨어 공부를 아무리 해봐야 별로 소용이 없다. 물론 시간이 많으면 모든 부분을 다 철저히 대비할 필요가 있지만, 그렇지 않다면 중요한 부분 혹은 도메인부터 공부하고 그것에 집중해야 한다. 중요 도메인이라도 과거의 기술은 기본적인 사항에 대해서만 이해하고 집중적으로 공부할 분야는 최신의 기술이다. 예를 들어 경영기반시스템의 도메인인 경우 MIS와 같은 고전적인 Keyword는 공부하지 않는다. 그러나 ERP II,KMS.CRM 과 같은 최신의 기술은 집중적으로 공부할 필요가 있다. 그러므로 선정한 Keyword에 대해서 우선 순위를 부여하고 이 순위에 의해서 공부를 한다. 또한 이 우선 순위는 시험이 가까이 올수록 효과를 발휘할수 있는데, 시험 전날이나 당일날 아침에 우선 순위에 의해서 본다면 시험 합격 확률은 더욱 높아
질 것이다.


10. 쓰는 연습을 많이 해야 한다.

일주일에 1번씩은 최소한 1문제 이상을 쓰는 연습을 해야 한다. 물론 실제 상황에 맞게 시간을 보면서 풀어보는 연습을 한다. 실전에서 아는 문제도 글 쓰는 연습이 안되어 제 실력이 발휘되지 않을 수도 있다. 답안지는 누가 보더라도 읽기 좋은 모양이 되어야 하므로 평소에 쓰는 연습을 많이 해야 한다.


자동차는 2만여 개의 부품이 유기적으로 연결되어 있다. 현명한 운전자는 소모성 부품의 교환 주기를 알아두어 고장에 미리 대비해야 한다.

 

 1) Table

정비항목
정비(교환)시기
비고
엔진오일, 오일필터에어클리너
가솔린 차량
최초 5,000 Km 교환 후 통상 10,000 Km
최소 1년에 2회교환
에어클리너는 오염여부에 따라 교환결정
디젤차량
최초 5,000 Km 교환 후 통상 5,000 Km
미션오일
자동변속기
최초 10,000 Km 교환후 매 20,000 Km
필터 동시 교환
수동변속기
최초 10,000 Km 교환후 매 40,000 Km
브레이크 오일
매 2년 또는 30,000 Km
 
파워스티어링 오일
매 2년 또는 30,000 Km
 
점화플러그
매 20,000 Km
불완전 연소 배제 및 배기가스
점화플러그 케이블
매 20,000 ~25,000 Km
 
타이밍 벨트
매 70,000 ~ 80,000 Km
 
브레이크 패드
자동변속기
매 20,000 Km
수시 점검하여 마모시 교환
수동변속기
매 30,000 Km
클러치디스크/커버/베어링
매 70,000 ~ 80,000 Km
슬립현상 발생시 즉시 교환
휠얼라이먼트(차륜정렬)
매 30,000 km ~ 40,000 km
핸들이 쏠리거나 편마모시 정비
타이어 위치교환
매 10,000 Km
장기간 주행시 공기압 보충
밧데리
매 2~3년마다 점검 및 교환
 

 

2) Illustration 

2. 소모성 부품 설명


1) 엔진오일 (eigine oil)

 

- 내연 기관에 쓰는 윤활유. 엔진 내부는 고온이어서 공기에 의하여 산화되기 쉬우므로 고도로 정제한 윤활유 유분에 산화 방지제, 청정 분산제 따위를 섞어 만든다.

 

- 가장 대표적인 소모품인 엔진 오일은 어느 정도 주행을 하면 교환해야 한다.   엔진 오일은 주행 조건에 따라 교환주기가 다르다.   정속으로 장거리를 주로 주행하는 차량은 1만km에 한 번씩 교환하면 된다.   그러나 교통체증이 심한 곳이나 짧은 거리를 자주 다니는 출퇴근용 차량은 5천km마다 교환해야 한다.    엔진 오일은 얼마나 가혹하게 운전을 했느냐에 따라 수명이 달라진다.   보통 짧은 거리 출퇴근에 쓰는 차는 엔진에 무리가 없다고들 말하는데, 이는 틀린 말이다.   오히려 교통 체증이 심한 시내에서 짧은 거리 출퇴근하는 차의 엔진 오일이 더 빨리 더러워진다.

 

- 오일 필터는 엔진 오일을 갈면서 꼭 교환토록 한다. 


- 에어 필터(에어 크리너)는 엔진으로 들어오는 공기를 정화시켜 주는 장치이다. 에어 필터는 모래나 먼지가 많은 곳을 자주 다닌다면 함께 교환하도록 하고 그렇지 않다면 점검해서 털어 주기만 해도 된다. 메이커가 제시하는 에어 필터의 교환주기는 4만km지만 2만km를 넘기지 않는 것이 좋다.

 

2) 자동 변속기 오일

 

- 자동변속기는 수동변속기와 달리 오일이 동력을 전달하는 데 매우 중요한 역할을 한다. 오일이 모자라거나 상태가 나쁘면 자동변속기에 문제가 생기거나 고장을 일으킬 수 있으므로 주의한다. 무리 없는 주행을 했다면 메이커 권장주기 10만km를 채우고 갈아도 된다. 그러나 정체 구간이 많은 곳을 자주 다녔다면 좀더 빨리 교환하는 것이 낫다. 변속기의 고장을 많이 접해본 정비사들은 3만∼5만km를 달린 뒤 바꾸라고 권한다. 자동변속기 오일은 기존 오일량 만큼만 새것으로 바꾸는 것은 효과가 없다.   순환식 오일교환기(자동주입기)로 변속기 안에 있는 기존 오일의 정량보다 두 세배의 신오일을 강제 순환시켜 변속기 내의 찌꺼기를 제거해야 자동변속기의 수명을 연장시킬 수 있다.

 

3) 브레이크 오일

 

- 브레이크 오일은 밀폐된 용기에 담겨 있어 먼지와 습기만 주의하면 비교적 오래 쓸 수 있다.   꾸준히 점검하고 별다른 이상이 없다면 4만km 정도마다 교환해준다.

 

4) 파워 스티어링 오일

 

- 파워스티어링 오일은 거의 갈아줄 필요가 없다.   파워스티어링 오일은 펌프가 고장나거나 호스 연결부위에서 새지 않는다면 거의 줄어들지 않는다.   저장탱크를 열어 보고 적정 높이를 재면 된다.     파워 스티어링 오일은 교환주기가 10만km 이상으로 수명이 길다.

 

5) 점화 플러그 & 점화 플러그 케이블

 

- 점화플러그는 매 1만km에 점검하고 전극이 상했으면 교환한다. 교환주기는 4만km 정도다. 이때 플러그 배선도 같이 바꾸는 것이 좋다.

 

6) 타이밍 벨트

 

- 엔진을 돌리는 타이밍벨트는 7~8만km 정도에 새것으로 교체하는 것이 좋다. 타이밍벨트 교환시엔 냉각수를 강제 순환시키는 워터펌프와 타이밍벨트의 장력을 조정해주는 텐셔너베어링을 함께 교환해 주어야 안전하다. 주행 중 타이밍벨트가 끊어지면 안전에 치명적인 영향을 미치며, 차종에 따라 비용이 3~5배까지 초과되므로 반드시 교환주기 이내에 예방 차원에서 교환해 주어야 한다.

 

7) 브레이크 패드 & 라이닝

 

- 브레이크 패드는 일정한 교환주기가 없다.   브레이크를 많이 쓰는 운전습관이 배어있다면 교환주기가 빨라질 것이다.   앞바퀴 디스크, 뒷바퀴 드럼을 쓰는 차라면 드럼의 라이닝 주기가 훨씬 길다.   앞바퀴에 많은 제동력이 걸리는 데다 드럼 방식은 제동력이 낮은 대신 라이닝을 오래 쓸 수 있기 때문이다.   앞 디스크 패드 교환이 3만km에 이루어졌다면 뒤 라이닝은 6만km 이상 쓸 수 있다.

 

8) 배터리

 

- 배터리 수명은 정해져 있지 않다.   새것이라도 한 번 방전이 되었던 제품은 정상적인 성능을 유지하기 어렵다.   오랫동안 주행을 하지 않아도 성능이 약화된다.   보통 2년 정도 쓰면 바꾸어 주는 것이 좋다.   요즘 차에 쓰이는 무보수 배터리에는 점검 창이 있어 색깔로 배터리의 상태가 표시된다.   기초점검을 할 때 잘 살펴보도록 하자.

 

9) 발전기 (Alternator)

 

- 전기를 만들어 내는 발전기(알터네이터)는 아주 중요한 부품이다.   발전기가 제대로 돌아가지 않으면 배터리의 전력이 금새 바닥난다.   발전기는 구동벨트를 돌려 풀리가 회전하면서 전기를 만드는 방식.   벨트가 갈라졌거나 느슨해져 미끄러진다면 충전이 제대로 이뤄지지 않는다.   또 구동벨트의 수명은 4만km 정도지만 표면이 상했거나 갈라졌다면 그 전에라도 교환한다.

 

10) 냉각수 & 부동액

 

- 자동차의 냉각수는 겨울철 한랭지(寒冷地)에 방치해 두면 얼어서 팽창하여 라디에이터나 기관블록을 파괴한다. 그래서 겨울철에는 부동액을 냉각수에 섞어서 넣는다. 전에는 부동액이 과열의 원인이 되었기 때문에 여름철에는 빼내야 했지만, 4계절용이 개발되어 그대로 사용할 수 있게 되었다. 부동액으로는 염화칼슘 ·염화마그네슘 ·에틸렌글리콜 ·에틸알코올 등이 사용된다.

 

- 냉각수의 통로인 라디에이터나 고무호스는 정해진 교환주기가 없다.   알루미늄으로 만들어진 라디에이터는 냉각수의 선택이 중요하다.   알루미늄 라디에이터 전용으로는 에틸렌글리콜 냉각수가 있다.   고무호스는 10만km마다 교체하는 것이 적당하다.   냉각수는 2년마다 교환하는 것이 적당하다.

 

11) 연료 필터

 

- 연료필터는 연료탱크안에 있는 연료펌프에 하나 달려있고 연료가 최종적으로 분사되는 인젝터 사이에 있습니다. 펌프에 달린 필터는 펌프교환때나 같이 교환하는 것이고 주로 연료필터라 함은 후자를 뜻합니다. 연료중의 불순물을 제거하는게 주 목적으로 인젝터는 아주 작은 구멍으로 분사를 하는데 불순물을 제거하지 않으면 인젝터가 막힙니다. 인젝터에도 자체 필터가 있습니다.

 

- 항상 정품 휘발유를 썼다면 6만km까지 써도 무리가 없다.    그러나 유사휘발류를 사용하는 차량은 대개 3만km 달린 후 교환하기를 권한다.    불량 유사휘발류를 장기간 사용하는 경우엔 연료필터 뿐만 아니라 연료라인의 모든 부품(인젝터,연료필터,연료펌프, 연료탱크 등)에 치명적인 문제를 유발시킬 수 있으므로 정품 휘발류 사용을 권장한다.

 

12) 윈도우 실드 워셔액

 

- 겨울철에는 워셔액이 얼어 플라스틱 통이 깨지기도 한다.   워셔액을 끝까지 부어 바깥으로 흐르지는 않는지 확인한다.   날씨가 추워졌다면 얼지 않는 겨울용 워셔액으로 교체하도록 한다. 


자동차 정기점검
왜?(목적)
자동차가 일정 기간을 운행한 후 그 구조 및 장치의 기능이 안전기준에 적합한지 여부를 분해·점검하여
불량 개소를 정비하므로서 교통 사고 예방 등 자동차의 안전도 확보
어떤 차?(대상)
사업용 자동차
언제? (정기 점검 주기)
종별 점검 기간
사업용
자동차
승용 차령 3년 이상 12월
승합 차령 4년 이상 12월
특수·화물차령 5년 이상 12월
어디서?(정기 점검 시행자)
자동차관리법 제53조에 의하여 등록된 자동차종합정비업자 또는 소형자동차정비업자
얼마?(정기 점검수수료)
사업자가 정하는 금액(15,000~30,000원 정도)
점검을 받지 아니하면?(정기점검 미이행자 처벌)
최고 39만원 이하의 과태료 부과
정기검사
목적
- 운행중인 자동차의 안전도 적합 여부 확인
- 배출 가스 및 소음으로 인한 환경 오염 예방
- 자동차 등록원부와 동일성 여부 확인
- 불법구조변경 및 개조를 방지하여 운행 질서 확립
- 자동차 사고로부터 국민의 생명과 재산을 보호
종류
사업용 자동차
정기검사 유효기간
차종별 검사유효기간
비사업용 승용자동차 및 피견인자동차 차령 10년 이하 1년(다만, 신조차로서 법 제43조 제5항의 규정에 의하여
신규검사로 보는 확인검사를 받아 신규등록을 하는
자동차의 검사 유효기간은 2년)
차령 10년 경과 1년
사업용 승용자동차 1년(다만, 신조차로서 법 제43조 제5항의 규정에 의하여
신규검사로 보는 확인검사를 받아 신규등록을 하는
자동차의 검사 유효기간은 4년)
경형·소형화물자동차 차령 10년 이하 1년
차령 10년 경과 6월
사업용대형화물자동차 차령 10년 이하
1년
차령 10년 경과 6월
기타 자동차 차령 10년 이하 1년
차령 10년 경과 6월
※ 검사유효기간 만료일 전·후 30일 이내에 검사를 받으셔야 하며 자동차등록증에 표시되어 있슴.
 
검사장소
자동차 등록지에 관계없이 전국 교통안전공단의 자동차 검사소나 출장검사장으로 지정된
자동차정비사업체
 
검사시간 안내
- 하정기(10월~3월)
  평일 : 오전 9시 ~ 오후 6시 / 토요일 : 오전 9시 ~ 오후 1시
- 동절기(11월~2월)
  평일 : 오전 9시 ~ 오후 5시 / 토요일 : 오전 9시 ~ 오후 1시
 
수수료 및 과태료
- 검사수수료(정기검사 및 임시검사)
  경형 : 15,000원, 소형 : 20,000원, 중형 : 23,000원, 대형 : 25,000원
- 과태료 안내
  검사를 받아야 할 날짜(유효기간 만료일 30일 후)로부터 30일까지는 2만원,
  30일 이후부터는 매3일 초과시마다 1만원씩 추가되어 최고 30만원까지 부과되며
  검사 명령을 이행하지 아니하면 형사 고발 조치됨.

+ Recent posts