목차

  1. 전문가 시스템이란?
  2. 전문가 시스템의 구성 요소
  3. 전문가 시스템의 장점과 한계
  4. 대표적인 전문가 시스템 사례
  5. 오늘날의 전문가 시스템 활용

 

1. 전문가 시스템이란?

전문가 시스템(Expert System)이란 특정 분야의 인간 전문가가 가지고 있는 지식과 추론 능력을 컴퓨터로 구현한 인공지능 시스템을 말합니다. 1970~1980년대에 인공지능 연구에서 크게 주목받았으며, 당시에는 ‘지식기반 시스템’이라고도 불렸습니다.

전문가 시스템은 질병 진단, 금융 분석, 법률 상담 등 인간 전문가가 수행하는 복잡한 문제 해결을 지원하거나 대체하는 목적으로 개발되었습니다. 예를 들어, 의료 분야에서 진단 전문가 시스템은 환자의 증상 데이터를 입력받아 질병을 추론하는 역할을 합니다.

2. 전문가 시스템의 구성 요소

전문가 시스템은 크게 지식 베이스(Knowledge Base), 추론 엔진(Inference Engine), 그리고 사용자 인터페이스(User Interface)라는 세 가지 기본 요소로 구성됩니다. 하지만 실무에서는 유지 관리, 설명 기능 등 몇 가지 추가적인 구성 요소도 중요하게 다루어집니다.

1) 지식 베이스 (Knowledge Base)

지식 베이스는 전문가 시스템의 핵심입니다.

  • 정의: 해당 분야의 전문가들이 수년간 쌓아온 경험과 노하우, 규칙(rule), 사실(fact), 객체(object), 관계(relation) 등을 체계적으로 모아놓은 데이터베이스입니다.
  • 구성: 보통 “만약 A라면 B다”와 같은 IF-THEN 규칙, 또는 프레임(frame), 의미망(semantic network), 온톨로지(ontology) 등 다양한 형태로 저장됩니다.
  • 예시:
    • 의료 전문가 시스템에서는 “만약 환자에게 발열과 기침이 있으면 독감을 의심한다”와 같은 규칙이 포함됩니다.
    • 금융 분야에서는 “고객의 신용점수가 600점 이하이면 대출을 거절한다”와 같은 규칙을 담을 수 있습니다.

2) 추론 엔진 (Inference Engine)

추론 엔진은 지식 베이스에 저장된 정보를 바탕으로 사용자의 질문이나 문제에 대해 전문가처럼 추론(Reasoning)을 수행합니다.

  • 역할: 입력된 정보(사실, 증상, 데이터 등)와 지식 베이스의 규칙을 비교·분석하여, 가장 적합한 해결책을 도출합니다.
  • 추론 방식:
    • 전방 추론(Forward Chaining): 사용자의 입력 데이터를 출발점으로, 적용 가능한 규칙을 순차적으로 적용하여 결론을 도출합니다.
    • 후방 추론(Backward Chaining): 원하는 결론(목표)에서 출발해, 해당 결론에 도달하기 위해 어떤 조건들이 필요한지 역으로 추적합니다.
  • 예시:
    • 사용자가 “기침과 두통”을 입력하면, 추론 엔진이 여러 규칙을 조합해 “감기일 가능성이 높다”고 결론을 내릴 수 있습니다.

3) 사용자 인터페이스 (User Interface)

사용자 인터페이스는 사용자가 시스템과 쉽게 상호작용할 수 있게 해주는 창구입니다.

  • 형태:
    • 초창기에는 텍스트 기반 질문-답변 형식이 많았지만, 현대에는 그래픽 기반(GUI)이나 웹 인터페이스, 음성 인식 등 다양한 방식이 사용됩니다.
  • 기능:
    • 사용자가 질문을 입력하고, 시스템이 답변을 제공하는 기본 기능 외에도, 시스템이 중간 과정에서 추가 질문을 하거나, 최종 결과를 설명하는 역할을 합니다.

4) 설명 모듈 (Explanation Module)

많은 전문가 시스템은 사용자의 신뢰를 얻기 위해 설명 기능을 포함합니다.

  • 역할: 시스템이 왜 이런 결론을 내렸는지, 어떤 규칙과 사실을 바탕으로 결과가 도출됐는지 설명합니다.
  • 예시: 당신의 증상과 일치하는 규칙 A, B, C에 따라 ‘감기’로 진단했습니다.

5) 지식 획득 모듈 (Knowledge Acquisition Module)

지식 베이스의 내용을 입력·관리하는 역할을 합니다.

  • 기존: 초기에는 전문가가 시스템 개발자에게 구두로 지식을 전달하고, 개발자가 직접 입력했습니다.
  • 현대: 최근에는 자동화 도구, 머신러닝, 데이터 마이닝 등을 활용하여 지식 획득이 이루어지는 경우도 많습니다.

3. 전문가 시스템의 장점과 한계

장점

  • 인간 전문가의 지식을 언제, 어디서나 빠르게 사용할 수 있습니다.
  • 일관된 판단을 제공하며, 피로·감정 등 인간의 한계를 극복할 수 있습니다.
  • 특정 분야에서 초보자도 전문가의 조언을 받을 수 있습니다.

한계

  • 전문가의 지식이 충분히 축적되어야 하며, 새로운 지식 추가·갱신이 어렵습니다.
  • 비정형적이거나 창의적인 문제에는 한계가 있습니다.
  • 시스템이 오작동하거나 오류를 일으킬 경우 원인 분석이 쉽지 않습니다.

 

4. 대표적인 전문가 시스템 사례

  • MYCIN(마이신):
    1970년대 미국에서 개발된 의료 진단용 전문가 시스템으로, 세균 감염과 항생제 추천을 목적으로 사용되었습니다.
  • DENDRAL(덴드랄):
    화학 구조 분석 전문가 시스템으로, 분자 구조를 추론하는 데 쓰였습니다.

Dream Beginners 과정 진행상황

 

오늘의 진행 내역 

How to use

1 Wargame

-워게임에 대한 설명이였다. 

워게임의 카테고리는 포너블(pwnable, system hacking), 웹(web), 리버스 엔지니어링(reversing), 암호학(crypto), 포렌식(forensic)이 있는데 DreamHack에서의 커리큘럼을 봤을 때,

보안에서 나눠진 대로 워게임도 나눠진 듯함 

https://dreamhack.io/wargame/challenges/812

 

Exercise: Welcome-Beginners

Description Wargame 실습을 위한 문제입니다. "Dreamhack"을 입력하여 플래그를 획득하세요! 플래그의 형식은 DH{...} 입니다.

dreamhack.io

문제풀이에 대한 예시

 

2 Lecture

- 사이트에서 들을 수 있는 강의들에 대한 정보

3 Community

- 사이트의 커뮤니티와 공식 디스코드에 대한 안내 

링크를 통해 공식 디스코드에 참여했다.

4 CTF

- Capture The Flag의 약자. 지금 계획하고 있는 커리큘럼이 끝나고 워게임에 익숙해졌을 때, CTF에 한번 참여해보는게 목표이다 

 

Environment Setup

 

1. Virtual Machine

- Virtual Box를 이용하여 Ubuntu와 Windows10 가상 환경을 만들어봄 

 

 

DH101

1. 컴퓨터 과학 기초

-  바로 해킹에 대한 공부가 아닌 기본적으로 정리하고 넘어가야 할 것들에 대한 설명이 있다 
진법, 비트와 바이트 , 비트 연산 , 인코딩 , 디코딩 , 운영체제

2. 리눅스 사용법 

- 기초적인 명령어에 대한 정리 

열기 , 닫기와 같은 모르면 리눅스를 사용할 수 없는 명령어들을 요약해줬다

3. 코딩

- VS code에 대한 설명과 설치 방법 뒤에는 C로 간단한 코드를 작성하여 컴파일 한다

- Vim에 대한 설명도 있음

4. System Hacking , Reverse Engineering , Web Hacking , CrytoGgraphy 101

- 처음 입문하는 나같은 사람이라면 어떤 걸 할지 정할 때 이 코스에서 각 분야의 설명을 보고 진입하는 것을 추천함.

- System Hacking을 하려고 했었는데 글을 읽고 나니 다시 생각하게 됨

Tips

1.NC

2.SSH

3.Docker

4.정규 표현식 (regex)

5.구글링

6.Markdown

7.Tools

'정보보호 > Dreamhack' 카테고리의 다른 글

[dreamhack.io] baby-linux 문제  (0) 2023.11.17
[dreamhack.io] 64se64 문제  (1) 2023.11.17
[dreamhack.io] devtools-sources 문제  (1) 2023.11.16
[dreamhack.io] cookie 문제  (1) 2023.11.12
[Webhacking.kr]17번 문제  (0) 2023.11.10

Custom Editor

스크립트가 기능을 하는지 확인하기 위해 
void Start(), Update()나 상호작용을 통해 스크립트를 실행하여 확인했습니다.


크게 불편하지 않았지만 이번에 맵 오브젝트를 생성하며  0.8 X 0.8의 타일을 수작업으로 생성하다가 
20개를 만들 때, 이건 아니다 싶어 유니티의 기능을 찾아보고 정리하게 되었습니다.

 

 

여기서도 예시로 타일 설치로 해보겠습니다.

1.스크립트 준비 

우선 타일을 자동 생성하는 스크립트를 작성합니다. ( ObjectPlacer.cs )

 

using UnityEngine;

public class ObjectPlacer : MonoBehaviour
{
    public GameObject objectToPlace; // 배치할 오브젝트의 프리팹
    public int numberOfObjects = 10; // 생성할 오브젝트 수
    public float spacing = 0.8f; // 오브젝트 간의 간격

    // 이 메서드를 호출하여 오브젝트 배치 시작
    public void PlaceObjects()
    {
        // spacing 간격으로 세로 추가
        for (int i = 0; i < numberOfObjects; i++)
        {
            // 새 오브젝트의 위치 계산
            Vector3 position = new Vector3(0, i * spacing, 0);

            // 오브젝트 인스턴스화 및 배치
            GameObject newObject = Instantiate(objectToPlace, position, Quaternion.identity);
            newObject.transform.parent = this.transform; 
        }
    }
}

 

2. 스크립트 할당

 

 

스크립트를 배치하고자 하는 오브젝트(예: 빈 게임 오브젝트)에 할당합니다.

그 다음 인스펙터에서 Object To Place 필드에 배치할 오브젝트의 프리팹을 드래그합니다.

 

3.커스텀 에디터 스크립트 사용하기

Unity 에디터에서 Assets/Editor 폴더 내에 새 C# 스크립트를 생성합니다. 폴더가 없다면 만들어주세요. 스크립트의 이름을 ObjectPlacerEditor.cs 같은 것으로 지정합니다.

 

아래의 커스텀 에디터 스크립트 코드를 ObjectPlacerEditor.cs 파일에 복사합니다.

 

 

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(ObjectPlacer))]
public class ObjectPlacerEditor : Editor
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector(); // 기본 인스펙터 UI를 그리기

        ObjectPlacer script = (ObjectPlacer)target; // 현재 인스펙터의 대상 스크립트를 가져옴

        // 버튼 UI 추가
        if (GUILayout.Button("Place Objects"))
        {
            script.PlaceObjects(); // 버튼 클릭 시 PlaceObjects 메서드 실행
        }
    }
}

 

 

이 스크립트는 ObjectPlacer 타입의 오브젝트에 대해 커스텀 인스펙터를 생성하고, "Place Objects"라는 버튼을 인스펙터에 추가합니다. 이 버튼을 클릭하면 PlaceObjects 메서드가 실행됩니다. 

 

4. 실행하기

 

이제 유니티로 돌아가서 ObjectPlacer.cs를 컴포넌트로 가지고 있던 오브젝트를 클릭해 봅시다.

 

Place Objects 버튼이 추가되었다.

Place Objects 버튼을 누르면 ObjectPlacer.cs의 PlaceObjects 함수가 실행되는 것을 확인해 보겠습니다.

 

 

이상으로 간단한 커스텀에디터 사용법을 마무리하겠습니다!

'Unity > 공부' 카테고리의 다른 글

[Unity] Text Mesh Pro 한글 폰트 사용하기  (0) 2024.03.04
[Unity] 폴리 브러쉬(Polybrush)  (1) 2023.11.21

+ Recent posts