Now I'm A Farmer(Peter-KIM)

2018.01.15

[C# / WinForm] Keyword-based web URL collector

Filed under: Programming — Peter_KIM @ 12:56

google.com, baidu.com 등의 웹 검색 사이트들은 자신들만의 검색 API 함수를 웹에 노출하여 사용자에게 제공하기도 합니다만, 유료 회원으로 등록해야하고 검색량에 따라서 비용도 만만하지 않게 들어가게 됩니다.

웹 브라우저를 이용하여, 웹을 검색하고 검색된 결과 페이지에서 웹 주소들을 수집하는 도구를 만들어 보았습니다. Fiddler 라이브러리는 HTTPS 요청을 처리하기 위하여 사용되었으며, SQLite 라이브러리는 각각의 웹 검색사이트에서 수집된 웹 주소를 저장하기 위하여 사용되었습니다.

이 밖에도 CSV 파일로 결과를 출력하기 위하여, Jonathan Wood 씨의
CsvFileWriter(http://www.blackbeltcoder.com/) 클래스도 사용되었습니다.

프로그램의 Form 클래스와 UserControl 클래스는 확장된 컨트롤을 포함하고 있으므로, Visual Studio 디자인 화면에서 올바르게 표시되지 않을 수 있습니다.
이 프로그램을 사용하려면, SQL Server 또는 SQL Express 인스턴스가 필요합니다. 그리고, 데이터베이스에 연결하기 위한 문자열은 “CollectUrl.exe.config” 파일에서 직접 수정해야 합니다.
먼저 데이터베이스를 새로 만들고, 아래의 쿼리를 이용하여 4개의 테이블을 만듭니다.

USE [master]
GO
 
CREATE DATABASE [CollectionSetting]
GO

CREATE TABLE [dbo].[TBL_Category] (
    [Code] BIGINT         			NOT NULL,
    [Name] NVARCHAR (128) 			NOT NULL,
    PRIMARY KEY CLUSTERED ([Code] ASC)
);
 
CREATE TABLE [dbo].[TBL_Keyword] (
    [Keyword]      NVARCHAR (64) 		NOT NULL,
    [CategoryCode] BIGINT        		NOT NULL,
    PRIMARY KEY CLUSTERED ([Keyword] ASC),
    CONSTRAINT [FK_TBL_Keyword_TBL_KeywordCategory] FOREIGN KEY ([CategoryCode]) REFERENCES [dbo].[TBL_Category] ([Code])
);
 
CREATE TABLE [dbo].[TBL_SearchEngine] (
	[EngineName]		NVARCHAR (50)	NOT NULL,
	[QueryUrl]		NVARCHAR (MAX)	NOT NULL,
	[ResultsCount]		SMALLINT	NOT NULL,
	[PagingStart]		SMALLINT	NOT NULL,
	[PagingEnd]		SMALLINT	NOT NULL,
	[PagingIncrement]	SMALLINT	NOT NULL,
	[SearchPattern]		NVARCHAR (MAX)	NULL,
	CONSTRAINT [PK_TBL_SearchEngine] PRIMARY KEY CLUSTERED ([EngineName] ASC)
);
 
CREATE TABLE [dbo].[TBL_WebUrlInfo] (
	[HashValue]		UNIQUEIDENTIFIER	NOT NULL,
	[CategoryCode]		BIGINT			NOT NULL,
	[Url]			VARCHAR (256)		NOT NULL,
	CONSTRAINT [PK_TBL_WebUrlInfo] PRIMARY KEY CLUSTERED ([HashValue] ASC),
	CONSTRAINT [FK_TBL_WebUrlInfo_TBL_Category] FOREIGN KEY ([CategoryCode]) REFERENCES [dbo].[TBL_Category] ([Code])
);

웹 검색에 사용하는 검색어(TBL_Keyword)는 카테고리(TBL_Category)로 나누어져 관리할 수 있습니다. 예를 들어, “탈 것”이라는 카테고리에 “배”, “비행기”, “버스” 등을 등록할 수 있습니다.
검색 사이트 정보(TBL_SearchEngine)에는 사이트의 주소와 질의 패턴, HTML 응답 페이지 설정을 할 수 있도록 구성했습니다. 웹 주소 정보(TBL_WebUrlInfo)는 분석된 웹 주소에 GUID 값을 연결하여 나중에 빠른 검색을 지원하도록 했습니다.
이렇게 만들어진 테이블에 아래의 쿼리를 이용하여 데이터를 삽입합니다. (응용 프로그램에서 하나하나 집어넣어도 됩니다.)

USE [CollectionSetting]
GO
INSERT [dbo].[TBL_Category] ([Code], [Name]) VALUES (268435457, N'Porn')
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'anal', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Anal sex', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Ass', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'cumshot', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'dildo', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Drug', 268435459)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Facial', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Hardcore', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'milf', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Pornstar', 268435457)
GO
INSERT [dbo].[TBL_Keyword] ([Keyword], [CategoryCode]) VALUES (N'Pussy', 268435457)
GO
INSERT [dbo].[TBL_SearchEngine] ([EngineName], [QueryUrl], [ResultsCount], [PagingStart], [PagingEnd], [PagingIncrement], [SearchPattern]) VALUES (N'Baidu', N'http://www.baidu.com/s?wd={Keyword}&pn={Page}&rn={ResultCount}', 100, 0, 500, 100, N'(?:\>)([A-Za-z0-9_-]*(?:[.][A-Za-z0-9_-]+){1,})(?:/)')
GO
INSERT [dbo].[TBL_SearchEngine] ([EngineName], [QueryUrl], [ResultsCount], [PagingStart], [PagingEnd], [PagingIncrement], [SearchPattern]) VALUES (N'Daum', N'http://search.daum.net/search?w=dir&q={Keyword}&lpp={ResultCount}&p={Page}', 100, 1, 51, 10, N'https*(?:://|%3A%2F%2F)([A-Za-z0-9_-]*(?:[.][A-Za-z0-9_-]*){1,})')
GO
INSERT [dbo].[TBL_SearchEngine] ([EngineName], [QueryUrl], [ResultsCount], [PagingStart], [PagingEnd], [PagingIncrement], [SearchPattern]) VALUES (N'Google', N'https://encrypted.google.com/search?q={Keyword}&num={ResultCount}&start={Page}', 100, 0, 500, 100, N'https*(?:://|%3A%2F%2F)([A-Za-z0-9_-]*(?:[.][A-Za-z0-9_-]*){1,})')
GO
INSERT [dbo].[TBL_SearchEngine] ([EngineName], [QueryUrl], [ResultsCount], [PagingStart], [PagingEnd], [PagingIncrement], [SearchPattern]) VALUES (N'Naver', N'http://web.search.naver.com/search.naver?where=webkr&query={Keyword}&start={Page}', 0, 1, 5, 1, N'https*(?:://|%3A%2F%2F)([A-Za-z0-9_-]*(?:[.][A-Za-z0-9_-]*){1,})')
GO
INSERT [dbo].[TBL_SearchEngine] ([EngineName], [QueryUrl], [ResultsCount], [PagingStart], [PagingEnd], [PagingIncrement], [SearchPattern]) VALUES (N'Yahoo', N'https://search.yahoo.com/search?p={Keyword}&n={ResultCount}&b={Page}', 100, 1, 501, 100, N'https*(?:://|%3A%2F%2F)([A-Za-z0-9_-]*(?:[.][A-Za-z0-9_-]*){1,})')
GO

이렇게 데이터베이스를 준비한 뒤에는 아래와 같이, 프로젝트의 “app.config” 파일에서  연결 문자열을 수정해야 합니다.

  <appSettings>
    <add key="DatabaseConnectionString" value="Data Source=.;Initial Catalog=CollectionSetting;Integrated Security=True" />
  </appSettings>

코드를 빌드하면 실행 파일(CollectUrl.exe)이 만들어지는데, 이 파일을 실행하면, 다음과 같은 화면을 만나게 됩니다.
1
확인 버튼을 클릭하고 잠시 기다려면, 다음과 같이 SSL 인증서 추가 정보(경고)를 알리는 창이 나타납니다.
20180114_2
“예”를 클릭해야 앞으로 HTTPS 프로토콜의 검색 사이트에서 웹 주소를 수집할 수 있습니다. 만일 “아니오”를 클릭했다면, HTTP 검색 사이트에서만 작업을 할 수 있습니다.
프로그램의 첫 화면은 아래와 같습니다.
20180114_3
공장 분위기를 물씬 내고 있습니다. (화려함은 디자이너의 몫으로 프로그래머가 하기에는 너무도 버거운 일이 아닐 수 없습니다. 사실 이 GUI 화면을 만드는데에도 Pixel 수 세고, 컨트롤 배치하며 며칠이 걸렸습니다.)
“Next” 버튼을 클릭하고, 화면이 바뀌면 아래와 같이 “Category” 옆의 “Refresh” 버튼을 클릭하고, 목록에서 항목을 선택합니다. 다음, “Keyword” 옆의 “Refresh” 버튼을 클릭하면, 검색어 목록이 나타나게됩니다. “+ – ↑ ↓” 버튼은 각각 항목의 추가, 제거, 순서 조정 기능을 수행합니다.
20180114_4
웹 검색에 필요한 키워드를 모두 선택했다면, 다시 “Next” 버튼을 클릭합니다. 마찬가지로 위에 있는 Refresh 버튼을 클릭합니다. 그리고나면, 검색 사이트와 쿼리 패턴등이 목록에 표시됩니다. 검색 사이트 옆의 “Keyword” 열의 영역을 두번 클릭하면, 이전 화면에서 선택한 키워드를 다시 선택할 수 있도록 창이 나타납니다. 키워드를 선택하고, “OK” 버튼을 클릭합니다.
20180114_5
각각의 웹 사이트에 대한 질의 주소(Query Url)는 웹 브라우저에서 쉽게 얻을 수 있습니다. 반복적으로 검색을 수행하다보면, 일정한 질의 패턴을 파악할 수 있습니다. 또, “Paging” 열을 클릭하면, 다음과 같은 화면이 나타나게됩니다.
20180114_6
검색 패턴은 웹 검색으로 수신된 HTML 문서에서 웹 주소를 얻기 위한, 정규식입니다. 웹 사이트에 따라서, HTML 문서의 형태가 다양하므로, 이 패턴을 얻기 위해서는 많은 시행착오를 해야할 것입ㄴ니다.
검색 사이트와 키워드를 선택하였으면, “Next” 버튼을 클릭합니다. “RUN” 버튼을 클릭하면 검색이 진행됩니다. (google 사이트는, 여러번 반복하면 경고를 만날 수 있으니, 적당히 해야합니다. 또, 한국의 검색 사이트는 성인 인증 등의 이유로 특정 검색어에 대한 결과는 거부 될 수 있습니다.)
20180114_7
검색이 완료되면, “Next” 버튼을 클릭합니다. 사이트 별로 검색 결과가 나타나게 되는데, 검색된 사이트를 선택하고 “Insight” 버튼을 클릭하면, 그 사이트를 다시 한번 더 검색하게 됩니다.
20180114_8
계속하여, 다시 검색된 사이트를 선택하여, “Insight” 버튼을 클릭할 수도 있습니다.
“R” 버튼을 누르면 앞의 검색 동작의 결과로 트리의 항목을 다시 설장하며, “Insight” 검색으로 발견된 웹 사이트는 제거됩니다.
“Candidate” 버튼을 클릭하면, 오른쪽 목록으로 선택된 사이트들이 복사됩니다. 복사된 사이트는 MD5 해시 값을 갖게 됩니다. 이것은 문자열 비교보다 숫자(128비트 정수) 비교가 더 빠르기 때문입니다.
20180114_9
오른쪽에서 “Visit” 항목에 체크하고, 웹 사이트를 클릭하면 웹 브라우저가 실행되고 해당 사이트를 방문하게됩니다. “Verify” 버튼을 클릭하면, 데이터베이스에 저장된 정보를 검색하여 사이트의 카테고리를 표시합니다. 만일, 후보로 선정된 사이트들이 키워드와 관계없는 것들이라면, “-” 버튼으로 제거할 수 있습니다.
“Import”, “Export” 버튼을 누르면, 후보 사이트의 목록을 CSV 파일에서 읽거나, CSV 파일로 쓸 수 있습니다.
“Save” 버튼을 누르면, 검색된 결과를 데이터베이스로 저장할 수 있습니다.
“Next” 버튼을 누르면, 아래의 화면이 나타납니다. 검색된 결과를 SQLite 파일로 저장할 수 있습니다.
20180114_10
프로그램을 종료하면, 아래와 같이 인증서 제거에 대한 경고 화면이 나타납니다. “Yes” 버튼을 클릭하면, 프로그램 시작 때에 등록된 인증서를 제거할 수 있습니다.
20180114_11

사용된 코드에 대한 설명은 나중에 기회가 된다면, 다른 글에서 설명해 보겠습니다. 코드에 많은 주석이 있으므로, 관심있게 본다면 충분히 이해할 수 있을 것으로 보입니다.

전체 코드는 아래의 주소에서 얻을 수 있습니다.
https://1drv.ms/u/s!An5hHO7t37wbhh2YwLP_AB8eTICX

Advertisements

2018.01.11

[C/C++] printf / std::cout with Colour

Filed under: Programming — Peter_KIM @ 09:02

GUI 운영 체제가 대세이긴 하지만, DOS 환경을 겪었던 오래된 프로그래머에게는 명령 프롬프트(터미널) 창이 더 편리한 경우가 많이 있습니다. 리눅스 서버에서 작업하는 경우에는 필수겠지만, 사실 윈도우에서도 가끔은 명령 프롬프트 창이 편리할 때도 많이 있습니다.

Console 창에서 printf  또는  cout 함수를 이용하여, 색깔이 있는 글자를 출력하기 위해서 코드를 만들어 보았습니다.
윈도우의 명령 프롬프트에서는 Escape 문자(ANSI 코드)가 동작하지 않아서, Win32 API 기능을 이용하여, 색깔을 표시할 수 있습니다.
std::cout 함수를 printf 함수로 교체하고, std::ostringstream 함수를 sprintf 함수로 교체하여 손질하면, C 코드에서도 사용할 수 있습니다.

#include <stdio.h>
#include <sstream>
#include <iostream>
 
#ifdef _WIN32
    #include <windows.h> 
#endif
 
#ifdef _WIN32
enum ForeColour {
    Default    = 0x0008,
    Black      = 0x0000,
    Blue       = 0x0001,
    Green      = 0x0002,
    Cyan       = 0x0003,
    Red        = 0x0004,
    Magenta    = 0x0005,
    Yellow     = 0x0006,
    White      = 0x0007,
};
#else
enum ForeColour {
    Default    = 0,
    Black      = 30,
    Red        = 31,
    Green      = 32,
    Yellow     = 33,
    Blue       = 34,
    Magenta    = 35,
    Cyan       = 36,
    White      = 37,
};
#endif
 
void PrintConsole(const char *lpszText, short nColor)
{
#ifdef _WIN32
    HANDLE  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, nColor | 0x0008);
#else
    std::ostringstream oss;
    oss << "\033[1;" << nColor << "m";
    std::cout << oss.str();
#endif
 
    std::cout << lpszText;
 
#ifdef _WIN32
    SetConsoleTextAttribute(hConsole, 0x0008);
#else
    std::cout << "\033[0m";
#endif
}
 
int main()
{
   PrintConsole("Black"  , ForeColour::Black);
   PrintConsole("Red"    , ForeColour::Red);   
   PrintConsole("Green"  , ForeColour::Green); 
   PrintConsole("Yellow" , ForeColour::Yellow);
   PrintConsole("Blue"   , ForeColour::Blue);  
   PrintConsole("Magenta", ForeColour::Magenta);
   PrintConsole("Cyan"   , ForeColour::Cyan); 
   PrintConsole("White"  , ForeColour::White); 
 
   return 0;
}

2018.01.10

[C++ 11] JSON of The C++ REST SDK (Codename “Casablanca”)

Filed under: Programming — Peter_KIM @ 16:06

C# 또는 JAVA 언어를 사용하는 이유는 현대의 프로그램 개발에 필요한 많은 라이브러리들이 제공되기 때문일 것입니다. 그러나, 예전부터 사용해왔던 C++ 언어는 새롭게 등장하는 언어에 비하면 그 흔한 라이브러리들이 빈약한 것이 사실입니다.
The C++ REST SDK (Codename “Casablanca”) 라이브러리에는C#, JAVA, 더구나 스크립트 언어조차도 제공하는 JSON Parser 코드가 포함되어 있습니다. 이것을 분리하여 조금만 잘 손질하면 대부분의C++ 컴파일러에서 사용할 수 있습니다. JSON 파서만 필요한 상황에서 “Casablanca”를 모두 컴파일 할 필요는 없을 것으로 보입니다. (https://github.com/Microsoft/cpprestsdk)
아래와 같이 “Casablanca”에서 JSON Parser 작성에 필요한 몇몇 파일을 가져옵니다.
asyncrt_utils.h, basic_types.h, cpprest_compat.h, json.h, nosal.h
asyncrt_utils.cpp, json.cpp, json_parsing.cpp, json_serialization.cpp
이 파일들만으로도 훌륭한 Json Parser 라이브러리가 될 수 있지만, 사용자 편의를 위하여 클래스를 만들어 보겠습니다.

#pragma once
 
#if defined(__GNUC__)
    #define __STDC_WANT_LIB_EXT1__ 1
#elif defined(_MSC_VER)
    #define _CRT_SECURE_NO_WARNINGS
#endif /* gcc must compile with "-std=c11" */
 
#include <cstdio>
#include <sstream>
#include <vector>
#include <iterator>
#include "basic_types.h"
#include "json.h"
 
using namespace web;
using namespace web::json;
 
class ParseJson final
{
    public:
        ParseJson();
        virtual ~ParseJson();
 
        void PrintJson(const json::value& jObject, utility::string_t sTab = U(""));
        std::vector<utility::string_t> SplitText(const utility::string_t &sText, utility::char_t chDelimiter);
        const json::value *FindSingleNode(const json::value& jObject, const utility::string_t& sKey);
        const json::value *FindSingleNode(const json::value& jObject, std::vector<utility::string_t>::const_iterator& itKey, std::vector<utility::string_t>::const_iterator& itKeyEnd);
        const json::value *FindDeeply(const json::value& jObject, const utility::string_t& sKeys);
 
        bool AddKeyValue(json::value* pjObject, const utility::string_t& sKey, const json::value& jValue);
        bool SetValue(json::value *pjObject, const utility::string_t& sNodes, const json::value& jValue);
        bool AddChildNode(json::value *pjObject, const utility::string_t& sNodes, const utility::string_t& sKey, const json::value& jValue);
 
        size_t AddToArray(json::value& jObject, const json::value& jValue);
        const bool IsNullJson(json::value& jObject);
    private:
        const json::value m_jNullValue;
};

XML 문서와 JSON 문서 모두 TREE 구조를 갖는 특징이 있으므로, 노드(Node, Tag)를 검색하고 그 값을 변경하기 쉽도록 만든 클래스 입니다. 만들고보니 괜찮은 클래스인 듯합니다.
이 클래스를 사용한 예제 코드는 아래와 같습니다.

#ifdef _WIN32
int wmain(int argc, wchar_t** argv)
#else
int main(int argc, char** argv)
#endif
{
    /* String of Json type. */
    const utility::string_t sJson(
        U("{\"glossary\":{\"title\":\"example glossary\",\"GlossDiv\":{\"title\":\"S\",\"GlossList\":")
        U("{\"GlossEntry\":{\"ID\":\"SGML\",\"SortAs\":\"SGML\",\"GlossTerm\":\"Standard Generalized ")
        U("Markup Language\",\"Acronym\":\"SGML\",\"Abbrev\":\"ISO 8879:1986\",\"GlossDef\":{\"para\"")
        U(":\"A meta-markup language, used to create markup languages such as DocBook.\",")
        U("\"GlossSeeAlso\":[\"GML\",\"XML\"]},\"GlossSee\":\"markup\"}}}}}"));
    /* Json Parser */
    ParseJson oJsonParser;
 
    /* Create a json object from string. */
    json::value objJson = json::value::parse(sJson);
 
    PrintConsole(U("Original: "), ForeColour::Green);
    PrintConsole(objJson, ForeColour::Yellow);
    
    /* Print json object */
    oJsonParser.PrintJson(objJson);
 
    utility::string_t sNode((argc == 2) ? argv[1]: U("glossary/GlossDiv/GlossList/GlossEntry/GlossDef")); 
    /* Retrieve value of Node */
    const json::value *pjValue = oJsonParser.FindDeeply(objJson, sNode);
 
    PrintConsole(U("Find Test: ["), ForeColour::Blue); 
    PrintConsole(sNode.c_str(), ForeColour::Cyan);
    PrintConsole(U("]\n"), ForeColour::Blue);
    if (pjValue == nullptr)
        PrintConsole(U("NULL VALUE!\n"), ForeColour::Red);
    else
        PrintConsole(*pjValue, ForeColour::Yellow);
 
    /* Add a new node */
    bool bAdd = oJsonParser.AddKeyValue((json::value *)pjValue, U("Fruit"), json::value::string(U("Apple")));
    if (bAdd) {
        PrintConsole(U("Add Key&Value:\n"), ForeColour::Blue); 
        PrintConsole(objJson, ForeColour::Yellow);
    } else {
        PrintConsole(U("Cannot add...\n"), ForeColour::Red);
    }
 
    /* Change node's value */
    bool bSet = oJsonParser.SetValue(&objJson, U("glossary/GlossDiv/title"), json::value::number(9322506));
    if (bSet) {
        PrintConsole(U("Changed Value:\n"), ForeColour::Blue);
        PrintConsole(objJson, ForeColour::Green);
    } else {
        PrintConsole(U("Cannot change...\n"), ForeColour::Red);
    }
    
    json::value oJArray;
    oJsonParser.AddToArray(oJArray, json::value::string(U("BUS")));
    oJsonParser.AddToArray(oJArray, json::value::string(U("TRUCK")));
    oJsonParser.AddToArray(oJArray, json::value::string(U("TAXI")));
    oJsonParser.AddToArray(oJArray, json::value::number(1234567890));
 
    /* Change node's value to array */
    bool bReplace = oJsonParser.SetValue(&objJson, U("payload/custglossary/GlossDiv"), oJArray);
    if (bReplace) {
        PrintConsole(U("Replaced with Array:\n"), ForeColour::Blue);
        PrintConsole(objJson, ForeColour::Yellow);
    } else {
        PrintConsole(U("Cannot replace...\n"), ForeColour::Red);
    }
    
    /* Append a child */
    bool bAppend = oJsonParser.AddChildNode(&objJson, U("glossary"), U("vehicles"), oJArray);
    if (bAppend) {
        PrintConsole(U("Append with Array:\n"), ForeColour::Blue);
        PrintConsole(objJson, ForeColour::Green);
    } else {
        PrintConsole(U("Cannot append...\n"), ForeColour::Red);
    }
    return 0;
}

전체 코드는 아래의 주소에서 구할 수 있습니다.

https://1drv.ms/u/s!An5hHO7t37wbhhlmNGns_3FcYS-O

2017.08.08

울란바타르 도보 여행

Filed under: KOICA — Peter_KIM @ 15:17

1.      Чингэлтэй 지역의 산길

clip_image001

2.      Гачуурт 지역의

clip_image003

3.      버스 타는

clip_image004

 

 

 

2017.07.04

4차 보고서

Filed under: KOICA — Peter_KIM @ 12:59

한국에서의 직장 생활은 거의 전쟁터와 같다. 총칼을 들고 싸우는 군인의 신분에서 이제는 컴퓨터를 들고 고지를 점령하는 사람이 된 것이다. 무엇이든 처음 시작할 때에는 가슴 속에 벅찬 희망과 두려움이 생긴다. 그것으로 그 일은 매우 효율적으로 진행 될 수 있고, 때로는 시작과 더불어 큰 장벽에 부딪혀 한동안 방황하게도 한다. 누구나 그 처지에 따라서 달라진다. 낙하산을 타고, 비행기에서 떨어지기에 앞서서는 걱정이 이만저만이 아니다. “낙하” 구령과 함께 떨어지면서, 과연 내가 떨어질 곳은 어딘지 궁금해지고, 혹시나 바람이 불어 낙하산이 예정된, 평평한 공간이 아닌 숲이나 개울 또는 멀리 떨어진 곳이 아닐지 걱정된다. 어떤 사람은 목적 지점과 가까운 곳에 내려서 쉽고 빠르게 갈 수 있지만, 어떤 사람은 나뭇가지에 낙하산이 걸려서 버둥버둥 대다 가까스로 낙하산을 끊고 목적지에 한참 만에 이른다.

직장 생활도 이렇지만, 해외에서의 봉사라는 것은 더욱 그렇다. 운이 좋게 바람이 내가 조종하는 대로 불어와 낙하산을 평평한 곳에 내리게 하였다면 좋겠지만, 갑자기 난기류를 만나서 내가 조종하는 대로 움직이지 않는다면 앞 일을 예상하지 못한다. 한국에서 직장 생활은 운이 좋은 편에 속한다. 내가 하고자 한다면, 주위의 여러 사람들과 협의하고 타협하여 진행할 수 있었다. 그러나 외국에서의 봉사 단원의 삶은 그렇지 못한 경우가 많은 것으로 보인다. 한국에서의 직장이 “훈련소”라면, 이곳은 “적진” 한 가운데이다. 많은 경우, 현지 사람들과의 의사 소통에 장애가 발생한다. 그러므로, 협의와 타협은 있을 수도 없다. 어떤 경우에는 파견을 요청한 기관에서의 목적이 단원이 파견됨으로써 얻을 수 있는 활동 지원 물품이나 현장 사업이 전부인 경우가 많다. 이런 경우, 단원의 파견 뒤에 업무는 거의 없는 경우가 허다하다. 낙하산을 땅에 묻고, 전투를 하러 목적지에 갔더니 정작 그곳에서 필요한 것은 군인이 들고 간 무기와 장비인 셈이다. 군인은 넘쳐나고 있는데, 전투력도 부족하고 총검이 없어서 전투를 못하고 있는 실정이다.

내가 파견된 곳의 이름은 “Монгол-Солонгосын Политехник Коллеж”이다. 흔히 우리는 “한몽 기술대”라고 부른다. 처음에는 한국의 전문 대학교 정도로 생각했지만, 이곳의 칼리지 개념은 직업 학교에 더 가깝다. 학교에 들어오는 학생들의 나이가 15세 ~ 18세 정도이다. 원래, 이 학교는 공장에 필요한 인력을 양성하기 위하여 1966년에 설립된 곳이다. 그렇게 지내오다가 2000년에 코이카의 지원을 들여 건물과 자재를 새로 갖추면서 이름을 “몽골-한국 기술 대학교”로 바꾸었다. 그러다, 다시 2012년에 “몽골-한국 폴리테크닉 칼리지”로 이름이 바뀌었다.

본래, 나는 이곳이 아니라 “더르너드” 지역의 종합 학교로 가게 되어 있었는데, 이곳 사무소에서 나의 의지와는 관계 없이 파견 기관을 바꾸어 버렸다. 이곳이 코이카가 중점적으로 사업을 수행하는 곳이기 때문이고, 나의 경력에는 이곳이 더 적합하다고 사무소에서 판단했던 모양이다.

이 학교는 코이카에서 너무나도 많은 물질적 지원을 받은 곳이다. 2016년에 576만 달러 규모의 “역량 강화 사업”을 통하여 새로운 건물과 학습 기자재를 갖추게 되었다. 이것으로 이 학교는 최신의 학습 설비를 갖추게 되었는데, 그것은 몽골의 어느 학교에도 뒤지지 않는 최고의 수준이다. 이 학교에는 기술 한국어 통역, 의상 디자인, 인테리어 디자인, 컴퓨터(네트워크, 그래픽 디자인), 자동차 수리, 용접 등의 학과가 있다.


Figure 1. 학교 앞의 모습(왼쪽 위부터 시계방향으로 새 건물, 기숙사, 옛 건물의 기념 판, 옛 건물)

나의 코워커는 “대외 협력 매니저”였다. 처음 이 학교에 와서 했던 일은 그녀의 일을 도와준 것이었다. 그녀는 한국에서 석사 학위를 받고, 몽골로 온지 얼마 안된 30대의 젊은 사람이었다. 한국에서는 6년 정도 살았다고 한다. 한국어로 대화를 하는 데에는 큰 지장은 없었지만, 어려운 한국 낱말을 이해하는 것은 불가능했다. 특히, 한국어 문서와 이메일을 이해하는 것을 매우 어려워했기 때문에, 나에게 도움을 요청했다. 특히, 그 때에, 한국의 “오산 대학교”와 복수 학위 제도를 시행하고 있었는데, 많은 문제점이 있었고, 문제를 해결하기 위해 계약 문서를 분석하고 한국의 담당자들과 의견을 주고 받아야 했다. 계약에 관련된 문서에는 많은 전문 용어들이 있었는데 이것을 분석하는 것이 거의 불가능에 가까왔기에, 내가 먼저 이해하고 쉬운 한국 말로 설명해 주었다. 또, 이메일을 작성하는 것도 대신해서 해 주었다. 이러한 일은 오산 대학교와 계약을 파기 할 때까지 했다. 또, “역량 강화 사업”을 완료하기 전까지 관련된 업무를 도와주었다. 그 밖에도 한국과의 어떤 중요한 연락 사항이 있을 때에 많은 도움을 주었기에, 학사 행정과 학교의 현황을 파악하기가 대체로 쉬웠으며, 특정 사안에 대한 고급 정보도 얻을 수 있었다.

나는 그녀의 일을 열성적으로 도왔지만, 그녀는 나에게 그렇지 않았다. 몽골어 교육을 이 여자에게 배우기 시작했으나, 이 여자는 수업 시간에 주로 사적 전화를 했고, 비용을 받고나서는 자신의 일이 바쁘다는 핑계로 더 이상 수업을 하지 않았다. 그러면서, 6달이 넘도록 미안하다는 말을 되풀이 했다.

컴퓨터 학과의 선생은 모두 10명이다. 교육 내용은 주로 하드웨어, 네트워크, 사무 자동화, 컴퓨터 그래픽 디자인에 집중되어 있었다. 나의 기술인 소프트웨어 분야의 교육은 없었다. “역량 강화 사업”의 일환으로 교육 과정이 바뀌어 지금은 조금씩 언어에 대한 수업을 하고 있지만, 그것이 한국과 같이 깊이가 있지는 않다. 학교 선생들도 소프트웨어 개발에 대한 이해가 부족하다.

처음에 컴퓨터 학과로 갔을 때, 여러 선생이 나에게 컴퓨터 그래픽 디자인 프로그램에 대하여 이야기를 했다. 전임 단원의 전공이 컴퓨터 디자인 분야였기 때문에, 나 역시 같은 사람인 줄 알았나 보다. 나는 프로그램 개발과 시스템 분석 및 설계 업무를 주로 했던 기술자이며, 그래픽 디자인은 많이 모른다고 했다. 어떤 선생은 나에게 컴퓨터 실습실에 있는 구형 컴퓨터를 새로운 것으로 바꾸어 달라고 했다. 나의 코워커도 그랬다. 전임 단원이 교실을 개조하여 인터넷 까페와 같은 시설을 현장 사업으로 만들어 주어서 였을까? 나에게 무엇인가 물질적인 도움을 몹시 바라는 시선이 매우 부담이 되었다.

“대외 협력 매니저”와 컴퓨터 선생 한 명이 학교의 옛 건물의 네트워크 설비를 교체하고 싶다며, 나에게 어떻게 할 수 있는지 문의했다. 그래서, 나는 그것을 비용의 문제로 인하여 교체해 줄 수는 없으며, 만일 학교의 자금으로 교체할 것이라면 설계는 해줄 수 있다고 했다. 그랬더니, 그 설계를 해달라고 한다. 그래서 1달 가까이 건물의 구조와 장비 배치 현황과 배선을 조사하고 네트워크 개선을 위한 공사 자재와 장비를 포함한 시공 규격서를 한국어로 만들었다. “대외 협력 매니저”에게 문서를 전달하면서 번역을 하고 함께 요청한 컴퓨터 선생에게 전달하라고 부탁했다. 2달 정도 지났을 때, 컴퓨터 선생과 “대외 협력 매니저”가 나에게 불평을 한다. 왜, 네트워크 공사를 진행하지 않느냐?!

우리가 살아온 환경과 방식이 다르기 때문에 의사 소통에 문제가 발생하는 것으로 이해하자. 남의 말을 자기 마음대로 잘못 이해하고 판단하는 것이 얼마나 남에게 상처를 주는 것인가? 난데 없는 공사 요구에 화가 치밀어 올랐지만, 어찌 하겠는가?

무엇을 해야 할 것인지 사실, 이곳에 파견되기에 앞서 계획하고 준비를 했다. 그러나, 이러한 준비 사항들을 실무에서 사용하기에는 여러가지 문제가 발생하는 게 사실이다. 정작 소총병이 필요한 보병 부대에 대구경의 포탄을 사용하는 포병을 투입하는 불상사가 발생한 것이다. 물론 포병도 전투를 하기 위해서 소총을 사용하지만, 포병을 보병으로 활용하는 것은 정상이 아닐 것이다. 어쨌든 소총을 다루는 것도 꽤 전문적인 분야이다. 학교의 컴퓨터 선생들은 나에게 어떤 수업도 요청하지 않았다. 정작 이들에게는 그래픽 디자인이나 오피스 프로그램 사용과 같은 기술이 필요했는데, 나는 프로그램 언어와 시스템 아키텍처로 무장을 하고 있었으니 아예 요청 대상이 아니라고 판단한 모양이다. 그래서 그런 것이었는지도 모르겠다. 처음에 교무실에 갔더니, 나의 책상과 의자도 없이 중앙 테이블에 앉아 있으라고 했다. 코워커를 통해서 항의를 했더니, 출입문과 쓰레기통 옆의 구석에 작은 테이블과 의자를 마련해 주었다. 어쨌든, 낙하산을 타고 내려온 포병은 소총병들에게 적어도 박격포라도 사용할 수 있도록 알려주기로 결심했다. 그래야 전투에서 보다 나은 화력 지원을 받을 수 있고, 이들에게 보다 나은 꿈과 목표를 알려줄 수 있기 때문이며, 개인적으로는 이곳에서 노무자로 전락하는 일은 없어야 하겠다는 생각이었다.

Figure 2. C# 강의 자료 목록 (문서와 예제 프로그램 소스 코드)

우선, 컴퓨터 선생들에게 소프트웨어 개발에 대한 이해를 시켜주려고 했다. 그것이 현장에서 학생들을 대상으로 서툰 몽골어로 하는 것보다는 나을 것으로 보였다. 적어도 선생들과 영어로 이야기 할 수 있을 것이라 생각했다. 그 시작은 “C#” 언어였다. 약 20강 정도의 슬라이드와 문서를 3달에 걸쳐서 만들었다. 컴퓨터 언어의 기본 구조를 포함하여 .NET Framework 구조와 개발 기술을 배울 수 있도록 세심하게 신경 썼다. 모든 자료는 영어로 만들었다. 어설픈 몽골어로는 내용을 절못 전달할 수도 있기 때문이다.

자료를 모두 만들고나서 이제 선생들의 컴퓨터에 프로그램 개발에 필요한 소프트웨어를 설치하기 시작했다. 어떤 선생의 컴퓨터는 그 프로그램을 설치하는데만, 6시간 이상이 걸렸다. 또 설치를 성공하더라도 그것을 실행하는데 10여분 이상 걸리기도 하고, 실행된 프로그램의 반응은 인간의 인내심을 극도로 발휘하도록 주문했다.

포탄을 발사하기 위하여 전개, 방열과 조준, 탄약 조정, 발사 방법 들을 가르치기 위한 교범을 긴 기간을 하루도 거르지 않고 만들었다. 그러나, 포탄을 시험 발사를 시도 해보았으나 2차 세계대전에서나 사용했을 법한 구형의 포는 잘 작동하지 않았다. 부대에는 최신의 포가 몇 문이 있었기에 부대의 지휘관에게 새로운 포를 요청했더니, 몇 달을 더 기다리라고 한다. 조금만 더 기다리면 한국의 보급 부대에서 새롭고 성능이 좋은 신형 포가 배달된다는 것이다. 잠시만 참고 기다리라고 한다. 새로운 장비가 도착하기까지는 3달 이상을 더 기다려야 했다. 우리 포병은 그 긴 시간을 그냥 보낼 수 없어서, 다른 군인들과 함께 소총병으로 전투를 치르려고 했으나, 소총병들은 어떤 요청도 하지 않는다. 어떤 것이라도 하지 않으면서 시간을 보낼 수는 없었다. 이리저리 생각한 끝에 부대 주변의 민간인들을 도와 주기로 결심하게 된다.

새로운 기자재가 도착하기 전까지 학교의 시설은 형편 없었다. 여기저기 늘어 놓은 랜 케이블들이 얽히고설켜 있고, 구형의 네트워크 스위치들은 여러가지로 문제를 발생시켰다. 문제가 발생하면 그 원인을 찾기는 매우 어려웠다. 주로 사양이 낮은 UTP 케이블을 너무 길게 연결하거나 아무런 보호 없이 건물의 외벽에 노출 시켜서 손상된 경우가 있었다. 새로운 건물과 장비가 들어온 뒤에는 더 많은 문제가 발생하였다. 네트워크 장비의 설정과 관련된 부분이었다. 학교에는 이런 문제를 담당하는 젊은 사람이 있었다. 이 사람을 자주 도와주게 되었는데, 그는 어떤 문제가 발생하면 나를 찾아왔고, 나는 그를 도와서 많은 문제를 햐결해 주었다. 마침 현장 활동 물품으로 구매한 장비와 소모품들이 요긴하게 사용되었다.

2016년 4월에 새로운 건물이 완성되고, 새로운 장비가 들어왔다. 새로운 장비와 함께 얼마 전에 하지 못했던 소프웨어 교육을 할 수 있는 기회가 왔다는 기대를 가졌다. 처음의 계획은 컴퓨터 선생들이 새로운 건물의 큰 방으로 새로운 컴퓨터를 보급받아서 들어가는 것인데, 어찌된 영문인지 그 넓은 방에는 회계를 담당하는 직원 3명이 들어갔다. 대신, 컴퓨터 선생들은 구형 컴퓨터를 그대로 간직한 채로 옛 건물의 작은 방 2개에 나뉘어 배치되었다. 그러나, 나는 새로운 건물로 갔다. 한국어 선생 3명과 용접, 목공, 컴퓨터 디자인 선생이 함께 이 방을 사용했다. 이 나라에서는 학교에서 가장 중요한 사람은 총장과 그를 보좌하는 행정 직원인 듯하다. 사실, 학교에서 선생들은 학생들에게 개인적인 심부름도 많이 시킨다. 심지어, 선생 자신의 책상을 닦거나, 선생이 사용한 컵, 접시 등의 식기를 설거지 하라고 시킨다. 아무래도 학교에서의 서열은 총장, 행정 직원, 교사, 학생의 순서인가 보다.

한국에서 새로운 장비가 도착했으니, 이제 이 장비를 활용하면 하려던 일을 할 수 있을 것이라는 판단을 하였다. 그리나, 우리의 포병이 배속된 작은 부대에는 새로운 포가 보급되지 않았다. 성능 좋은 총과 포는 모조리 엉뚱한 사람들이 차지하게 되었고, 소속된 작은 부대는 여전히 오래된 총과 포를 들고 싸운다. 부대의 지휘관에게 그리고 상급 장교들에게 항의를 했지만, 그것은 바위에 달걀이나 던진 셈이었다. 감히, 어디서 낙하산을 타고 내려온 포병 주제에 높으신 분들에게 건방진 소리를 낼 수 있는가? 또 한 번의 좌절과 패배를 맛본다.

내가 파견되기 전에 대림 대학에서는 이 학교에 한국어 어학실을 만들어 주었다. 사실 이름만 한국어 어학실이지 딱 봐도 그냥 컴퓨터 실습실이었다. 그래서, 한국어 교육뿐만 아니라 컴퓨터 학과 선생들도 자신의 수업을 이곳에서 자주 하곤 했다. 어느 추운 2월의 겨울날 실습실에 들어가 보았다. 그런데, 이 실습실에 있는 모든 컴퓨터가 한 대도 보이지 않게 되었다. 무슨 일인지 궁금해서 여러 날에 걸쳐서 여러 사람에게 물어보았다.

이곳 사람들의 특징은 자신과 관계가 없는 일에 대해서는 알고 있어도 잘 이야기 하지 않는 습성이 있다. 또, 알려고도 하지 않는다. 겨우겨우 알아본 결과, 컴퓨터의 모든 주요 부품(램, 하드디스크)을 누군가 컴퓨터 내부에서 빼내어 훔쳐 가서 사용이 불가능한 상황이 되어 컴퓨터를 모두 창고에 처박아 둔 것이다. 난감했다. 결국 피해를 보는 것은 장비를 사용하지 못하는 학생들인 셈이다. 복구가 필요한 상황이라서 계획을 세워 보았다. 도난당한 부품과 비슷한 성능의 것들을 구매하는데 약 500달러 정도의 돈이 필요했다. 이것을 활동 물품으로 구매하여 처리할 수 있었지만, 이런 사유로 돈을 사용하는 것은 이 사람들에게 관리의 부실을 책임지지 않도록 할 수 있다는 문제가 있어 보인다고 같은 학교에서 근무하는 다른 단원들이 이야기했다.

Figure 3. 도난 현황과 복구를 위한 견적

“대외 협력 매니저”가 나에게 “선생님께서 200달러를 주세요. 나머지는 학교에서 낼 거예요.”라고 요구한다. 예상했던 것이다. 같은 학교에 근무하는 다른 단원들에게 50달러씩 찬조를 받으려 했으나, 마찬가지의 이유로 모두 거부한다. 그것은 학교의 책임이니 학교에서 감당해야 한다는 이야기이다. 그렇지만 나는 200달러를 준비했다. 나머지 금액을 학교에서 받고 그 돈으로 부품을 구매하면 된다. 그러나, 몇 달이 지나도 학교의 반응은 없었다. 할 수 없어서, 한국어 단원 선생님과 함께 총장의 비서실로 갔다. 우리는 “대림 대학교”의 담당자에게 전화를 하여, 필요한 부품을 협조 요청할 계획이었다. 비서에게 한국에 국제 전화를 이러한 사유로 하려한다고 이야기 했더니, 잠시만 기다리라고 한다. 몇 분 정도 있다가, “대외 협력 매니저”에게서 연락이 왔다. 학교에서 관계자들이 모여서 이 문제에 대하여 회의를 할 것이라고 한다. 한국에는 전화를 하지 말 것을 당부한다. 결국, 8월이 되어서 관계된 직원과 선생들이 90만 투그릭을 모았고, 그 돈으로 부품들을 구매 했다. 그리고, 여름 방학 기간 동안 컴퓨터를 수리하고 한국어 실습실의 컴퓨터를 모두 복구 했다.



Figure 4. 컴퓨터 수리 과정, 수리 후 설치 현황

장비를 유지 보수하는 면에서 보자면, 이들은 교육이 많이 필요하다. 기본적인 원리와 장치의 특징을 모르는 상태에서 아무리 좋은 장비를 갖추게 한다해도 그것을 간리하지 못하면 금세 망가지고 말 것이고, 더 사용하지 못하게 된다. 어느날부터 한국어 어학실에 WIFI 네트워크가 동작하지 않았다. 누군가 스위치의 어댑터의 선을 잘라서 그냥 플러그를 달아 놓았다. 당연히 이렇게 연결하여 스위치의 회로는 과전압으로 타버렸다. 기본적인 전기 사용법을 모르고 있다니…정말 한심했다. 새로운 스위치로 교체해 주었다.

Figure 5. 어댑터를 제거하고 잘못 연결한 스위치(왼쪽), 새로 설치한 스위치(오른쪽)

컴퓨터 교육 단원으로 파견되었지만, 이 학교에서 나의 주요 업무는 교육이 아니라, 역량 강화 사업으로 받은 신형 컴퓨터, 프린터의 기능을 설정하고, 수리하는 것이 전부인 듯하다. 이 학교가 아닌 다른 곳(주로, 다른 코이카 단원, 한국 교민들)에서도 거의 같은 도움을 주고 있다.

2016년 5월에 EPS-TOPIK 시험이 있었다. 우리 학교는 이 시험을 응시하는 사람들에게 한국어 교육 과정을 열고 운영했다. 거의 2달 동안, 매일 3시간씩 한국어 수업에 참여하여, 한국어 발음을 가르쳐주고, 매일 매일의 교재를 인쇄하는 등의 보조 역할을 했다. 한국어 선생에게는 한국 사람인 내가 조금은 도움이 되었을 것이다.

첫번째 여름 방학이 시작되었다. 이곳의 여름 방학은 6월 초에 시작하여 9월 초에 끝난다. 무려 3달이 정도의 긴 시간 동안 학교의 문은 닫힌다. 여름 방학 전에 학생들을 대상으로 소프트웨어 학습 동아리를 만들려고 했다. 우리 “대회 협력 매니저”의 도움으로 이 계획서와 동아리 조직과 운영, 수업에 관련한 문서를 만들고, 번역을 했었다. 그리고 이제 학생을 모집하려는 순간 매니저가 말한다. “방학을 하면 학생들이 학교 기숙사에 아무도 없을 거예요.” 그렇다. 거의 모든 학생들은 방학과 동시에 기숙사에서 나간다. 그들의 고향으로 돌아간다. 학교의 모든 학사는 사라지고 행정 업무만 최소한으로 운영된다. 왜, 우리 “매니저”는 이런 이야기를 미리 하지 않고, 문서를 다 만들고 준비를 마치니까 이야기하는 것인가? 이것도 역시 문화적인 차이인가?

한 일도 별로 없이 시간이 흘렀다. 어떤 다른 보람된 일이라도 해야 한다. 때마침, 코디네이터에게서 홀트(HOLT) 아동 복지 센터에 컴퓨터 교육을 해 달라고 요청이 왔다. 당연히 해야 한다. 대상은 어린이 7명이다. 수준은 컴퓨터에 대해 전혀 모르는 초급이다. 어렵지 않게 컴퓨터를 쉽게 배우도록 안내해 주어야 했다. 우선, Windows 운영 체제를 알려주는 것이 좋겠다. 그리고, Office 프로그램의 기본을 가르쳐주려고 생각했다. 또 교안 작업을 했다. 거의 2달에 걸쳐서 교재를 만들었다. 봉사의 일에 이렇게 문서 작업만 줄기차게 하고 있다. 강의를 하기에 앞서, 같은 학교에 근무하는 드림 봉사 단원 두 명과 함께 센터에 방문하여, 이틀에 걸쳐 컴퓨터를 수리하고, 인터넷을 연결하기 위한 네트워크 공사를 했다. Windows 강의는 6월의 매주 월요일, 수요일에 했고, 8월에는 Office 교육을 했다. 물론 내가 한국어로 이야기하면, 몽골 선생이 통역을 한다. 하는 말이 모두 단순하기 때문에 어렵지 않았다.

Figure 6. Windows 운영 체제 교육 자료, 네트워크 공사

Figure 7. 컴퓨터 수업에 참여한 HOLT 아동들과 함께.

봉사 중, Holt 아동 센터에서는 교실을 비롯한 내부의 벽지를 교체하고 싶다고 했다. 건물의 내부 상태를 보니, 벽지 보다는 페인트를 칠하는 것이 좋겠다고 판단되었다. 동기 단원(건축 교육 분야)에게 연락하고, 함께 봉사하자고 요청했다. 주위에 있는 여러 단원을 불러 모았다. 심지어, 이곳에 휴가로 온 지방 단원까지도 페인트 칠 작업에 섭외했다. 7월 1일부터 8일까지, 열심히 벽지를 뜯고, 석고를 바르고, 페인트를 칠했다. 일주일 넘게, 신나 냄새를 맡고, 옷과 신발을 버려가면서 수고해주신 여러분께 감사하다.






Figure 8. HOLT 아동 복지 센터의 내부 페인팅

우리 포병에게도 여름 휴가는 할당되었고, 부대 밖의 일에서 많은 보람을 느낄 수 있는 시간을 가질 수 있었다. 낙하산을 타고 내려온 군인으로서 비로소 어떤 전투에 참여하여 공을 세웠지만 그 공이라는 것은 공식적이지 못했고, 혼자만 스스로 느낄 수 있었던 것일 뿐이다.

몽골에는 토요 한글 학교가 있다. 2016년 9월에 대사관 개관식에 참여하여 뜻 밖에도 이 학교의 교장 선생님을 만났다. 이미 코이카 봉사단원 두 분께서 이 학교에서 활동을 하고 있었다. 교장 선생님께서 교육 봉사를 요청하셨고 당연히 받아 들였다. 교안을 만드느라 1주일에 이틀은 한국어와 관련된 정보를 검색하고 한국어 교육 책을 보며 시간을 보내야 했다. 몇 시간의 강의를 하려면 그 시간보다 더 많은 시간 동안 정성을 들여서 준비해야 한다. 이 학교에서도 한국어 강의 뿐만 아니라, 여러 전산 장비를 수리 했고 또 문서 전산화를 지원했다. 이 학교는 2016년 9월부터 내가 한국에 복귀하는 시점까지 봉사를 했던 곳으로 파견된 학교를 제외하고 가장 오래 봉사한 곳이다. 코이카 단원 중에서는 한국어 교육 분야의 일을 하는 사람들이 가장 필요한 것으로 보인다.


Figure 9. 몽골 토요 한글 학교 학생들과 선생님들

파견된 학교에서의 시간의 대부분이 무의미하게 흘러가는 데에는 기관의 담당자들의 무관심도 한 몫을 한다. 다른 대학교에서 강의를 해 달라고 요청이 왔다. 물론 내 전문 지식에 비해 상당히 초보적인 수준의 내용을 말이다. 그래도 거절하기 어려웠다. 이들에게서 적당한 교사를 찾기도 어렵고, 내가 해주었으면 좋겠다는 말에 응낙했다. 9월부터 시작하는 1학기 강의를 위해 또, 강의 자료를 만드느라 7월, 8월의 시간을 바쁘게 보냈다. 아무리 내용이 초급 수준이라도 대학생을 위한 강의이니 더 좋은 내용으로 준비해야 했다. PPT 문서는 모두 영어로 만들었고, 강의는 한국어로 했다. 실시간으로 통역을 해주는 사람이 지원되어 강의가 가능했다. 역시, 준비된 학교는 이렇게 해 준다. 내가 파견된 학교에도 통역을 요청 했었지만, 받아들여지지 않았다. 하루, 8시간씩 강의! 힘은 들었지만, 재미있었다. 학생들이 수준 높은 내용을 이해하기 쉽도록 강의를 구성했다. 무엇보다도 현실에서 컴퓨터를 사용하면서 생길 수 있는 의문을 중심으로 강의 내용을 편성했다. 컴퓨터를 사용하면서 왜 그렇게 동작하고 어떤 기술이 사용되는지에 대하여 이해할 것으로 기대한다. 이 강의 내용을 파라과이에 있는 동기 컴퓨터 단원에게 주었더니, 그곳에서 책으로 만들 것이라고 한다.



Figure 10. 컴퓨터 강의와 강의 자료

새로운 장비의 사용하는 우리 선생들과 학생들은 마냥 좋아 보였다. 얼마의 시간이 지나자 선생들에게 수리 요청이 들어온다. 대부분은 컴퓨터와 프린터의 문제였다. 새로운 운영 체제에 적응하지 못하여 어떤 문제가 발생했을 때 스스로 해결하지 못하는 상황과 소모품이 바닥나서 경고의 동작을 할 때에 조치를 하지 못하는 상황이 주를 이룬다. 특히, 어떤 고급 프린터의 경우, 프린터가 자체적으로 가지고 있는 웹 페이지에서 설정을 해야 원하는 동작을 할 수 있는데, 이것을 잘 모르는 것이다. 매뉴얼에 다 나와 있는데, 읽지 않고 고쳐달라고 요청한다. 사실, 일반인들에게는 조금 어렵다. 전문가라도 익숙해지는데 시간이 필요한 것이다. 이것이 새로운 기자재가 학교에 오고 나서부터 새로 생긴하나의 일거리였다. 소프트웨어 엔지니어가 장비나 수리하는 데에나 쓸모가 있다는 생각에 씁쓸하지만 조금은 위로가 되었다. 어쨌든 전혀 불필요한 사람이 아니지 않는가?

2016년의 늦은 여름, 가을의 문턱이 가깝다고 하지만, 몽골은 사실 가을을 느낄 수 있는 기간이 매우 짧다. 이렇게 바람이 불다가 눈이 내리면 바로 겨울이다. 2015년에는 9월에도 눈보라가 내리쳤다. 어느날, 우리 사무소의 코디네이터가 학교를 방문했다. 이 코디네이터는 매우 성실한 사람이라고 생각하고있다. 이런 방문은 단원들에게 큰 도움이 된다. 그는 우리 학교의 한국어 단원 선생님과 함께 학교의 부총장, 교육 실장 등의 간부와 만났다. 부총장이 코이카 단원에게 바라는 점을 이야기 했다. 나의 전임이 만들었던 “인터넷 까페” 수준의 교실을 몇 채 더 만들어 달라고 했다. 그래서, 코디네이터를 통하여 그러한 현장 사업은 피지원 기관이나 코이카 단원이 요청한다고 해서 모두 해 줄 수 없으며, 코이카 봉사 단원이 파견된 기관에 여러 기준을 적용하고 심사를 하여 형평성을 유지하며 진행한다고 이야기 해주었다. 또, 이미 576만 달러를 투자하여 새로운 건물과 최신의 기자재를 들여 놓은 이상 현장 사업이 어려울 수도 있다고 했다. 그러고나서, 얼마 있다보니 겨울이 왔다. 10월 즈음되어 교육 실장이 나에게 이야기 했다. “선생님! 이제 다른 학교에 가셔도 되요. 다른 학교에 가는 게 선생님에게도 좋잖아요.” 이런! 욕이 가슴 깊은 곳에서 나오려는 것을 꾹 참았다. 결국은 단원을 요청한 목적이 돈이었단 말인가! 학교 시설의 확충이라는 목적에 단원을 요청했던 것이 눈에 보였고, 이제 더 이상 단원이 쓸모가 없다는 판단에 이런 무례한 말을 한 것이다. 이것이 현실이다. 단원이 파견된 많은 기관에서 그 단원의 역량을 평가하는 것이 결국에는 돈의 힘이다. 무엇인가 물질적인 것을 바쳐주지 않는 한 절대로 단원의 존재 가치는 없다.

2016년 겨울의 문턱에 한국의 신한 대학에서 몽골 학생의 유학 사업을 하려고 연락이 왔다. 인접 학교의 자문단 선생님과 우리 학교의 한국어 단원 선생님과 함께 그 일에 관여 했다. 신한 대학에서는 우리 학교의 주요 간부들을 한국에 초청했다. 물론 비행기 표 값은 자기 부담이지만, 약 10일에 걸쳐 발생하는 숙식에 대한 비용은 신한 대학에서 지불하는 조건이다. 정권이 바뀌자, 이들은 서둘러 한국 방문을 추진했다. 물론, 주요 간부들의 비행기 값은 학교의 예산으로 충당했다. 그러나, 그들에게 비자 발급은 되지 않았다. 자문단 선생님께서 미리 보직 교체를 알고, 비자 발급을 막았다. 그리하여, 정권의 교체로 덕을 본 사람은 새로 온 사람들이 되었다. 한국에 놀러가는 이렇게 좋은 기회가 어디에 있겠는가? 바뀐 사람들도 이전 사람들과 다를 바가 거의 없다. 진장한 교육자들이라고 보기 어려운 자들이다. 이들 가운데 어떤 이는 전에 “오산 대학교”와 불합리한 복수 학위 제도를 체결하여, 많은 학생들과 부모들에게 피해를 입힌 사람이다.

“정보 처리 기사”가 아닌 “장비 수리 기사”로서 지내다 보니 어느덧 두 번째 겨울이 왔다. 국립 과학 기술 대학교에 다니는 한국어 교육 단원에게서 협력 활동 의뢰가 왔다. 그 학교에서 사용할 “기술 한국어(정보 통신)”에 분야의 교재를 만들어 달라는 것이다.

몽골의 학교에서 놀라운 사실은 학생들 중에서 책을 가지고 있는 사람이 드물다는 것이다. 특별히 더 놀라운 것은 학생들의 필기 능력이다. 이들은 수업 태도는 그다지 좋지 않지만 무엇이든 선생이 칠판에 적는 것을 베낀다. 책이 비싸기 때문에 사지 않는 것 같다. 그러니, 공부가 제대로 될 수 있겠는가?

사실 책을 만든다는 것이 쉬운 일은 아니다. 특히, 앞으로 계속 바뀌는 기술을 틀림이 없이 쓴다는 게 생각처럼 되지 않는다. 상당히 부담이 되었다. 특히 소프트웨어를 전공한 나에게 통신 분야는 조금 취약한 것이 사실이다. 보통 책을 쓰거나, 기술을 발휘하는 전문적인 사람들은 100 가지의 지식을 알면, 그 중에서 약 20~30 가지를 주로 활용한다고 생각한다. 지식이라는 것은 각각의 분야에서 서로 어떤 관계가 있어서, 단편적이지 않고 복잡하게 얽혀있다. 그러므로 한 분야의 지식을 사용할 때에는 다른 분야의 이론과 실제를 생각하면서 항상 조심스럽게 검증을 하면서 적용해야 한다. 약 4달에 걸쳐서 이 작업을 하는 동안은 거의 매일을 밤 늦은 시간까지 깨어 있어야 했다. 전문인으로서 부끄럽지 않은 내용을 만들어야 하고, 몽골 학생들이 공부를 할 때에 사용할 책인데, 어찌 큰 책임을 갖지 않을 수 있겠는가! 기술의 최신화와 내용의 오류를 제거하는 것도 중요했고 자료의 수집과 편집에서는 라이선스의 문제도 고려해야 했고, 한국어의 문법과 몽골어 내용을 위한 문서의 형식에도 신경을 써야했다. 모두 394 페이지 분량의 자료를 정리하여 편집하고 한국어 지문을 완성했다. 약 3달에 걸쳐서 만든 내용은 이듬해, 2월 말에 교정을 완료했다. 몽골인 한국어 선생에게 문서의 번역을 의뢰했다. 5월 말까지의 마감 시간을 지키기 위해서는 몽골어 번역에 박차를 가해야 했다. 분량이 많은 편이라서, 우리 학교의 한국어 선생과 분량을 나누어 번역하려고 했으나, 함께 일하는 한국어 단원이 반대한다. 자기네 선생이 모두 할 수 있다고 했다. 아무래도 돈 문제 때문으로 보였다. 번역료가 몽골 선생에게 큰 수입이 될 수 있는데, 그것을 나눌리가 없어 보였다. 그러나, 5월 말이 지나고 6월 초순이 되도 번역은 완료되지 못했다. 점검을 해 보니, 이제 겨우 반 230 페이지만 번역이 되었다. 담당 선생을 만나서, 책의 내용을 90 페이지 정도 줄여 주었다. 그렇지만 6월 말이 되어도 끝나지 않았다. 아무래도 7월을 넘길 것 같다.

Figure 11. 기술 한국어 (정보 통신)

2월의 어느날, 학교에서 책을 만들고 있는데, 컴퓨터 선생이 나를 찾아왔다. 왠 일인지, 그녀는 나에게 수업을 부탁했다. 이제 귀국까지 6달 정도 남았고, 협력 활동으로 책을 쓰느라 정신이 없었다. 그래서 단숨에 거부했다. 그러나, 여러번 다시 부탁한다. 그녀는 컴퓨터 그래픽 디자인을 담당하는 선생인데, 이번에 “웹 마스터” 과정의 수업을 해야 한다고 했다. 교육 내용을 보니, “역량 강화 사업”의 일환으로 바뀐 교육 내용이었다. HTML, SVG, JavaScript, jQuery 등의 내용이 들어 있다. 결국 내가 활약을 할 수 있는 기회가 생긴 것인가? 그러나, 이 선생이 제시한 수업 시간은 매우 적어서 소개 교육으로 할 수 밖에 없었다. “4월부터 시간이 가능하니 그 전에 HTML, WordPress 같은 것들을 미리 교육하면, 그 다음에 언어를 교육하겠다”고 했다. 3월을 또 밤을 세워 슬라이드 문서와 실습 프로그램을 만드는데 시간을 보냈다. 4월 말과 5월 초에 주 1회 각 3시간 정도의 수업이다. 선생에게 수업 시간을 더 요청하여, 주 2회로 시간을 더 받았다.


Figure 12. JavaScript, jQuery, SVG 강의 자료

강의는 모두 영어를 사용하여 이루어 졌다. 바뀐 학교장이 한국어 선생에게 통역을 지시했지만, 그 선생은 바쁘다는 이유로 통역을 해주지 않았다. 강의를 하기 전에는 통역을 해 주겠다고 약속을 했지만, 지키지 않은 것이다. 어쨌든, 할 수 없이 영어를 사용하여 수업을 했다. 학생들이 대부분 나의 말을 이해하지 못했다. 교육 시간에는 실습을 병행 했는데 우리 학생들이 자판을 누르는 실력이 워낙 출중하여, 강의는 매우 힘들게 진행되었다. 잘못 누르기는 기본이고, HTML 기본 태그 이름도 모르는 상황이다. 컴퓨터 선생이 이 부분에 대하여 교육을 하지 않았던 모양이다. 아니면 했는데, 학생들이 공부를 하지 않아서 아직 이해하지 못하는 것일 수도 있다. 기본적인 컴퓨터 지식이 없는 상황에서 컴퓨터 언어를 배운다는 것은 정말 잘못된 일이다. 여러번 이들의 수업을 관찰해보니, 학생들은 항상 컴퓨터로 온라인 게임이나 페이스북에 연결되어 있었다. 그리고, 수업의 대부분은 그래픽 디자인 도구로 그림 그리기 였다. 어떻게 1학기 내내 그림만 그리면서 수업이 진행되는지 아직도 이해할 수 없다. 5월의 두번째 주까지 강의를 모두 마치고, 시험 문제를 만들어 컴퓨터 선생에게 주었다. 이것으로 컴퓨터 정보학과의 선생과 공식적이고 내가 이곳에 온 목적에 부합하지만 너무나도 짧은 업무가 마무리 되었다.

컴퓨터 교실에서 역량 강화와 함께 설비된 새로운 컴퓨터 장비를 사용하는 수준은 매우 불합리했다. 무슨 인터넷 까페에서의 컴퓨터처럼, 학습에 불필요한 관리 프로그램이 여러가지로 개발 프로그램의 동작을 방해하였다. 돼지 목에 진주 목걸이라는 것이 이런 경우다. 사실 이런 것들에 대한 좋은 방법도 있는데, 이것을 알려 주기가 어렵다. 컴퓨터 선생들이 자존심이 매우 세다. 원래, 기술을 다루는 이들의 경향은 어디에서나 그렇다. 남의 조언은 받아들이기 힘든 것이고, 감히 본사 단원 따위가 그들의 업무에 관여할 필요가 없다. 컴퓨터 언어 교육은 짧은 시간에 할 수 없다. 최소한 6달 이상의 시간이 필요하고, 이 학교에서 학생들의 수준을 고려한다면 1년의 교육이 필요할 것이다. 몽골의 컴퓨터 정보 학과의 분류도 문제다, 그래픽 디자인 부분은 아무리 컴퓨터를 사용한다고 해도, 컴퓨터 정보 학과로 편입하면 안된다.

몽골 학생들은 매우 진취적이고 어느 측면에서 본다면 자신만만하다. 학생들을 대상으로 영문으로 된 간단한 문서를 만들면서, 코워커에게 번역을 의뢰한 적이 있는데 그녀가, 학생들이 영어를 모두 읽을 수 있으니 번역이 필요없다고 말한다. 정말! 놀라왔다! 그러나, 알파벳을 소리내어 읽는 것과 영어 문장을 읽고 이해하는 것은 다르다. 한국 사람들에게 읽는 것은 곧 이해하는 것이다. 그러나, 몽골 사람들에게는 읽는 것은 그저 소리내어 말하기 정도이다. 이것은 한동안 많은 생각을 하게 해 주었다. 여태까지 내가 어떤 지식이나 사실에 대하여 아느냐고 물었을 때 들었던 모든 것들을 다시금 의심하게 했다. 이것은 겸손과 자만의 문제이기도 했다.

새로운 단원들이 파견된다. 어린 단원들이 많이 있다. 그런데, 이들은 과연 봉사를 하러 온 것인가? 아니면 일자리 문제로 온 것인가? 많은 의심이 든다. 특히 , 나이가 어린 여성 단원들의 경우, 예의라는 것을 찾아보기가 어렵다. 가끔은 내 딸이라면 따끔하게 가르침을 주고 싶기도 하다. 세대의 차이가 많이 나는 만큼, 의사 소통에 문제가 많이 발생한다. 가장 이상적인 것은 이들과 어떤 관계를 갖지 않는 것이다. 그런데, 하나의 조직에서 활동하기에 어쩌다 한번이라도 부딧히는 때가 있는데, 그 때에는 여지없이 문제가 발생한다. 예의라는 것이 그렇게 어려운 것이 아니다. 잘 모르더라고, 코이카의 이름으로 만나는 장소에서는 나이가 어린 단원들이 먼저 인사를 하는게 도리인 것이다. 어르신들을 모른 척하고, 피하려는 것이 예의가 아니다. 말도 가려서 해야 한다. 한 참 어린 사람이 어르신의 이름과 “쌤”이라는 말을 붙여서 부르는 것은 매우 무례한 일이다.

거주의 문제는 매우 깊고 무거운 것이다. 집을 찾고 얻는 일은 쉽지 않지만, 그런 과정에서 사무소의 도움을 받을 수는 없다. 계약의 단계에 들어가야 사무소의 도움이 있는데, 문제는 어떤 집을 고르느냐에 있다. 몽골어의 수준이 높지 않고, 파견 기관의 코워커나 직원들의 도움을 받는 경우, 주의가 필요하다. 눈에 보이지 않는 문제, 돈! 각종 공과금을 제때에 내지 않아 연체되어 있는 경우가 허다하다. 많은 단원들이 이 문제를 햐결하지 못하고 스스로의 돈으로 처리하는 일이 많다. 나 역시 2달 동안의 비용을 처음 이사하고 나서 지불했다. 반드시 확인해야 한다. 울란바타르의 경우, 부동산이 많이 있는데 이곳에 가면 영어를 사용할 수 있다. 그리고, 앞선 문제들이 거의 없다. 어쨌든 파견 지역에 근무하는 다른 봉사 단원의 도움을 적극적으로 받는 것이 좋다. 단원에 따라서 다르겠지만, 대부분 사회 경력이 많이 있는 단원은 충분한 도움을 줄 것이다.

코디네이터는 단원의 활동이 잘 수행될 수 있도록, 지원하는 것이 무엇보다도 중요할 것이다. 그러나, 현재 몽골 사무소를 바라보건데, 이들의 목적은 지원보다는 관리에 중점이 있는 것 같다. 단원이 어떤 의견을 내면 전화를 걸어 따지는 이도 있고, 어떤 요청에 대하여 앞에서는 들어줄 것처럼 이야기 하지만 함흥차사와 같이 처리하는 이도 있다. 또, 나이가 어린 여성 단원들에게 고압적인 자세로 이야기하는 무례한 이도 있다. 이런 한 두 사람 때문에, 선량한 코디네이터들도 단원들에게 부정적인 시각으로 보일 수 있다. 특히, 연세가 많은 단원들이 이들을 매우 비판하고 있다. 그래도 사람이 바뀌어 예전보다 많이 좋아 졌지만, 아직도 군림하려는 자세를 보이는 자가 있는데, 많은 단원들에게 지탄의 대상이 되고 있는 지를 알고 있을지 모르겠다. 단원들이 파견되고 며칠이 지나지 않아서 느끼는 것은, 과연 이들이 우리의 봉사를 지원하기 위해 존재하는지, 아니면 그저 관리하고 감독하려고 존재하는지에 대한 의문을 가질 수 있다.

코이카에는 봉사 단원도 있지만, 자문단이라는 대부분 전관 예우의 혜택을 받는 사람들이 있다. 그들은 단원에 비하면 수십배의 금전적 혜택을 받는다. 몽골 울란바타르의 하나 밖에 없는 컴퓨터 단원으로 이들의 몇몇과 자주 어울렸다. 많은 위화감을 느낀다. 함께 하는 것이 어려운 사람들이다. 특히, 몇몇은 엘리트 의식이 매우 쎄다. 봉사 단원의 위에 있는 것처럼 말하고 행동하는 사람들이 있다. 너무나 잘 나신 분이라서 감히 미천한 노무자가 함께 할 수 없어 힘들다. 그런 사람들이 대부분 연장 근무를 바라고 있고 연장을 한다. 그들은 해외에서 직장 생활을 하는 사람들일 뿐이다.

코이카 봉사 단원의 파견이 곧 물질적인 원조로 연결된다는 판단에 의하여, 단원을 요청하고 파견된 단원을 방치 수준으로 만드는 이런 기관에는 단원의 파견을 다시 생각해야 한다. 상황이 지금과 같이 지속된다면, 이곳에서의 활동 지속은 무의미하다. 도움을 받으려고 하는 자는 그럴 수 있는 준비를 해야한다. 준비되지 않은 기관에 파견된 단원은 결국, 밖으로 나아가 활동을 할 수 밖에 없다. 교민들을 만나서 듣는 이야기 중에 하나는 “코이카는 봉이다”라는 것이다. 많은 몽골 사람들이 “코이카”를, “한국인”을 봉으로 취급한다는 것이다. 단원들의 파견의 목적은 이들에게 물질적인 지원이 아닐 것이다. 그러나, 이들은 단원 한명에 30,000달러 짜리 산타크로스로 취급하는 경우가 허다하다.

기술 직종의 단원들은 학교보다는 프로젝트 사업에 참여 할 수 있도록 활동 기관을 교육 기관이 아닌 실무 기관을 선정하는 것이 좋겠다. 복잡한 기술을 교육하는 것은 단순히 언어를 가르치는 것보다 어려움이 매우 많이 있다. 물론 단순한 기계 조작이나, 수리의 분야인 경우는 어렵지 않을 수도 있다. 현지 말로 대화도 어려운 상황에서 기술 용어나, 전문 이론의 전파는 매우 한계가 있는 것이 현실이다.

컴퓨터 디자인과 소프트웨어 개발 분야는 아예 다른 것이다. 이것을 같은 분야로 취급하는 것은 매우 몰상식한 일이다. 코이카의 인력 선발과 배치 과정에서 좀 더 깊이 생각하고, 판단해야 할 것이다. 전화로 “00 분야의 단원이 필요해요?”라는 식의 대화를 하고 수요 조사를 마감하는 타성에 젖은 일을 하는 것은 바람직하지 않다고 본다. 사실 이 학교에 컴퓨터 교육 단원은 필요가 없다. 그럼에도 불구하고, 컴퓨터 교육 분야의 단원을 파견하고자 한다면, 웹 디자인과 웹 프로그램을 할 수 있는 사람으로 하는 것이 좋을 것 같다. 또, 컴퓨터 학과의 대표 선생과 단원이 왜 필요한지 또, 단원에게 어떤 업무를 부여할 것인지 정확히 파악하는 것이 필요하다. 이것을 코이카 사무소 직원들이 명확하게 해야 한다.

몽골에는 한국어를 할 줄 아는 몽골인이 많이 있다. 그 중에서 한국어를 매우 잘하는 사람들과 만나서 이야기를 해 보며, 이들의 문화를 조금은 이해할 수 있고, 한국 사람들과 생각의 차이를 알 수 있다. 내가 이해한 것이 모두 옳지는 않겠지만, 몽골이라는 사회를 먼저 알아야 한다. 과거에 공산 주의 체제에서 살아왔다는 것을 기본적으로 알아야 한다. 공산 주의 사회에서는 대부분의 것들이 분배되고 인민들에게는 모두 같은 계급이 부여 되었을 것이다. 그래서, 우리 학교에서 청소를 하는 직원들도 학교 선생들도 학교의 행사에 차별이 없이 참여한다. 이런 것은 한국보다 좋은 점이다. 그러나, 자츰 자본 주의적 사상에 물들어 차별이 생기는 것을 느낄 수 있다. 사유의 개념이 약한 면이 있다. 무엇인가 책상위에 두면, 그것이 없어지는 경우가 많이 있다. 그 책상에 둔 것을 다른 사람이 필요에 의하여 장소를 이탈하여 없어질 수 있다. 물론, 나중에 다시 돌려주는 일도 있지만, 대부분은 영원히 나에게 돌아오지 않는 경우가 많다. 심지어 이런 일들은 교무실에서도 흔히 일어난다. 정말 나에게 중요한 것이라면, 어디를 가든지 휴대를 하거나 잠금 장치가 있는 곳에 잠구어 두는 것이 좋다. 사람과의 관계에 있어서 다른 사람에게 잘 관여하지 않으려는 경향이 있다. 특히, 자신과 이해 관계가 없는 경우 또는 있더라도 관계로 인한 이득이 없다면 관심을 두지 않는다. 학교에서 여러 행사가 종종 있었는데 어느 누구도 그 행사에 대하여 미리 알려주지 않았다. 물론 코워커도 없는 상황이긴 하지만, 자주 만나는 한국어 선생들도 잘 이야기하지 않았다. 그리고, 어떤 질문을 한 경우 자신들과 직접적인 관계가 없는 것이라면 대부분, 그들은 잘 알고 있어도 “모른다”는 말을 한다. 그에 비해서 자존감은 매우 센 편이다. 별 것 아닌 것에도 발끈하는 것을 볼 수 있다. 한 번은 말을 탄 적이 있는데, 말은 잘 씻지 않아서 냄새도 많이 났다. 길을 가다가 초원에 있는 더럽게 고인 흙탕물에 말이 꼬리를 적시고 흔드는 바람에 나의 얼굴과 몸에 그 더러운 물이 튀었고, 덕분에 며칠 동안 몸살에 시달렸다. 또 다른 한번은 어떤 한국인 고등학생이 말을 탔는데, 몇 분 뒤에 말위에서 울어댔고 결국 말에서 내렸다. 근처의 다른 말이 얼굴을 들이밀어서 그 학생이 놀란 것이다. 이런 경우가 있기 때문에 한국에서 여행이나 봉사를 위해 몽골에 오는 어린 학생들이 말을 타는 것을 조심해야 한다고 이야기했다. 옆에 있던 젊은 몽골인 여성이 발끈한다. 왜? 나중에 알게 되었지만, 자기네들 몽골 사람들은 그것을 더럽다고 생각하지 않는데, 내가 그렇게 이야기 했다며, 다름을 인정하지 않는 경향을 보인 것이다. 이곳에서 살면서 양보와 배려의 미덕은 좀처럼 겪기 어렵다. 대부분의 사람들이 자기 중심적이다. 또, 무엇인가 나의 물건을 쓰게 했다면, 그것은 소유권 전이의 상황을 염두해 두어야 한다. 더 이상 그것은 나의 것이 아닐 수 있다.

다시 한번 더 이야기 하지만, 약속은 하지 않는 것이 좋다. 남이 자신에게 한 약속에 대해서는 철처히 지켜지기를 바라지만, 정작 자신들이 남에게 한 약속은 거의 지키지 않는다. 그러므로, 남이 나에게 약속한 것이 지켜질 것이라고 바라지는 않는 것이 정신의 건강에 좋다. 사사로운 시간 약속은 대략 1시간을 넘기기 일쑤이다. 심지어 공식 행사나 모임도 미리 약속된 시간보다 2시간이나 지나서 시작하는 경우도 많다. 임기를 마치는 마지막 시점까지 약속에 대한 신뢰가 사라지고 있다. 협력 사업으로 책을 만들고 있는데, 번역을 하는 몽골 선생이 약속한 시간을 지키지 않는다. 무려 2달이나 넘게 기한을 넘겼지만 끝내지 못했다. 약속을 지키지 못하고 있으면, 적어도 그 이유를 상대방에게 알려주는 예의는 있어야 한다. 이 나라에 진짜로 필요한 것은 예절과 질서, 시민 의식 등을 고취할 교육이다.

외국인에 대한 차별이 심각한 나라이긴 하지만, 특히 한국인에 대하여 더 심하다. 한국 사람에 대한 바가지는 여기저기서 체험할 수 있다. 어떤 몽골 여자기가 이런 이야기를 했다. “외국인은 돈이 많이 있기 때문에, 몽골에서 몽골 사람을 위해서 돈을 많이 내야 한다.” 그렇다. 외국인은 이곳 관광지의 입장료가 몽골인의 10배에 해당한다. 같은 동포들끼리 바가지도 매우 심각한데, 몽골 전통 가옥인 “게르”를 하루 빌리는데, 한국인이 운영하는 곳에 가면 수십 배의 바가지를 경험할 수 있다. 보통 몽골인이 운영하는 곳은 4인 기준의 게르 한 동에 4만~6만 투그릭에 하루를 묶을 수있지만, 한국인이 운영하는 곳은 개인당 5~6만 투그릭을 받는다.

경찰의 부패는 매우 심각한데, 외국인을 상대로 돈을 뜯어 가려는 경향이 매우 세다. 빌미를 잡히면, 돈으로 대부분 해결된다. 더럽고 부패한 경찰은 사회에서 어떤 도움도 되지 않는다. 한번은 여행을 하는데, 여권을 보여 달라고 한다. 나에게 무슨 일을 하냐고 묻더니 약 20분 정도 그것만 처다본다. 길가는 사람을 붙잡고 이 무슨 훼방인가? 여권을 오래보고 트집을 잡으면 과연 무엇이 나올까?

울란바타르의 전체 크기는 서울보다 2배 정도로 크다. 그러나, 대부분이 도시로 이루어진 서울과 달리, 울란바타르는 의정부시 정도 크기의 도시와 주변의 초원과 산으로 되어 있다. 도시에는 많은 시설이 있고, 그 주위에는 판자로 둘러싸인 집들과 전통 가옥등이 많이 있다. 인구가 밀집되다보니 주위 산에도 집들이 많이 있는데, 80년대 서울의 달동네와 비슷하다. 몽골에서는 유연탄이 많이 생산되는데, 이것은 주요한 난방 수단이 된다. 겨울이 시작하는 9월부터 난방이 시작된다. 대기 오염의 주범이다. 겨울철의 도시의 삶은 마스크와 함께 해야한다. 예민한 사람이라면, 거리에서 숨을 쉬는 것이 매우 곤란할 수 있다. 여름에도 디젤 차량에서 내뿜는 시커먼 매연이 심하다. 병원에서 감기(Flu)가 의심된다고 한다. 담배를 피우지 않지만 폐에 무엇인가 쌓였다고 한다. 여름이 되면 남쪽의 “복드항” 국립 공원에 가는 것도 좋다. 그나마 좋은 공기를 마실 수 있다. 북쪽에는 “칭길테” 산이 있는데, 남쪽 산에 비하여 나무도 적고 밋밋하다.

밤 거리의 치안 상태는 좋지 않다. 길에서는 술에 취해서 폭력을 휘두르는 사람을 흔히 볼 수 있으며, 외국인이라는 표시가 나면 다가와서 술을 마시기 위해 돈을 달라는 일도 흔하다. 어두운 밤길은 혼자 다니지 않는 것이 좋다.

자본 주의의 영향으로 사람의 생각이 많이 변화되고 있지만, 몽골 사람들의 대부분은 순진한 면이 많이 보인다. 영악하지 않고 순진한 구석이 많이 보인다. 시내의 외곽에서 만나는 사람들은 대부분 친절하다. 좋은 사람들도 많다. 많은 사람들이 마음은 좋은데, 그것을 표현하는 것에 약하다. 예전 우리의 시골에 가면 후덕한 인심과 정취를 느꼈는데, 그런 것과 같다. 도시의 사람에게는 느낄 수 없는 그런 마음을 느끼고 싶다면, 여름에 외곽을 여행하는 것도 좋을 것 같다.

2년의 생활은 많은 것을 배우게 해주었다. 국가의 저급한 정책과 인사 관리 제도를 알 수 있었으며, 부정과 비리로 얼룩진 국가에서의 국민의 삶이 어떠한지, 다시금 느낄 수 있는 기회가 되었다.

2년의 시간이 우리 학교의 누군가에게는 도움이되는 좋은 시간이 되었을지 모르겠지만, 적어도 나의 욕심의 면에서만 보자면 내가 파견된 학교에서의 생활이 그렇게 보람된 시간만은 아니었다. 오히려, 학교 밖에서의 생활 중에서는 배운 것이 많이 있고, 그런 활동을 통하여 소중한 사람들과 알게 된 것은 매우 가치있는 일이었다. 나의 봉사는 주위의 교민들과 다른 봉사 단원들에게 도움을 주는 것이 대부분이었고, 이것이라도 만족할 수 밖에 없는게 현실이었다.

멸사봉공(滅私奉公)! 군인들은 전투에서 자신의 목숨을 내어 놓는다. 오직 승리를 위해 스스로를 희생하는 것이다. 봉사 단원은 그정도는 아니지만, 자신의 모든 것을 내려놓아야 한다. 봉사라는 것은 내가 하고 싶은 일을 하는 것이 아니다. 원대한 목표가 있었다고 하더라도 그것을 내려놓아야 한다. 봉사의 대상이 되는 사람들이 바라는 것을 해주면 된다. 그것으로 충분하다. 봉사의 대상이 되는 사람들의 행동이나 제도가 마음에 들지 않더라고 그것이 보편적으로 그 사회에서 그릇되지 않다면 맞추어 주어야 한다. 가끔 단원들을 만나다보면, 회사 생활을 하듯이 봉사를 하는 것을 볼 수 있다. 적어도 나는 어디라도 나를 원하는 곳이 있다면, 그 곳을 먼저 평가하고 활동을 할 것인지 말 것인지 결정하지 않았다. 무조건, 먼저 그곳으로 달려갔고, 그들이 바라는 것을 대부분 이루어 주었다.

“내가 필요할 때 나를 불러줘! 언제든지 달려갈게. 낮에도 좋아 밤에도 좋아! 언제든지 달려갈게……당신이 나를 불러 준다면 무조건 달려갈 거야.”

우리 학교에서 바라던 수준이 정비와 수리였기에 그것을 다 했다. 봉사 활동을 함에 있어서, 지원 받는 기관에 많은 불만을 가질 수 있지만, 결코 그곳이 봉사를 할 수 없는 곳은 아니다. 문제는 스스로가 얼마나 인내하고 그들을 받아들이느냐 이다. 나의 욕심을 비롯한 모든 것을 버릴 때, 진정한 봉사를 할 수 있다. 한국에서 취업의 문제로 인하여 코이카 단원을 지원했다고 하더라도, 파견지에 도착한 당신은 봉사를 하러 온 것이지, 회사 생활을 하러 온 것이 아니라는 것을 항상 머릿속에 간직해야 한다.

충언역이(忠言逆耳)! 미사여구(美辭麗句)를 사용한 좋은 이야기로 보고서를 쓸 수도 있었지만, 그렇게 하지 않았다. 몽골에서의 삶은 한국과 많이 다르고, 여러 서글픔과 괴로움을 참아내야만 하는 것이다. 착하고 좋은 마음을 가지고 봉사라는 것을 하러 왔는데, 잘 안되는 사람이 더 많을 것이다. 각자의 신분과 처지에 따라서 상대적인 것이지만, 어떤 사람은 몽골이 한국보다 더 좋다고도 한다. 아무쪼록 2년 동안의 삶에 조금이라도 보람을 느끼길 간절히 바란다.

“현재의 모든 것은 과거의 우리 마음의 결과다. 모든 것은 우리의 마음으로부터 나왔고, 마음으로부터 모든 것은 이루어진다.”

  • 끝.


[Windows 설치와 인증]

Filed under: KOICA,Programming — Peter_KIM @ 12:52

* Windows 원본 이미지(Image) 획득

  • Windows 설치를 위한 CD/DVD 미디어는 공식적인 채널을 이용하는 것이 좋다. 비공식적인 채널을 이용하는 경우, 원본 이미지에 포함된 악성 프로그램으로 인하여 설치 뒤에 심각한 보안 문제를 일으킬 우려가 있다.
  • 공식적인 채널은 아래와 같다.
  • 내려 받는 준비

    [Microsoft 공식 도구를 이용하는 방법]

    • 웹 브라우저로 위의 사이트에 접속하면, Windows 7, Windows 8.1, Windows 10 운영 체제의 이미지를 골라서 내려 받을 수 있다.
    • 설치하려는 운영 체제를 고른 뒤에, 페이지에 표시된 링크를 눌러서 전용의 다운로드 프로그램을 내려 받을 수 있다.

      • “Download tool now” 버튼을 누르면, “MediaCreationTool.exe”라는 파일을 얻을 수 있다.

    [Windows ISO Downloader 프로그램을 이용하는 방법]

    • 공식 채널에서 Windows 이미지를 내려 받을 수 있는 다른 프로그램으로는 “Windows ISO Downloader.exe”이 있다. 이 프로그램은 아래의 사이트에서 내려받을 수 있다.

    • 이 프로그램을 이용하면, Windows 운영 체제 외에도 MS-Office 프로그램도 함께 내려 받을 수 있다.
  • 내려 받기

    [Microsoft 공식 도구를 이용하는 방법]

    • MediaCreationTool.exe 프로그램을 실행한다.
    • 잠시 기다린 뒤, 라이선스 표시 창이 나타나면 “Accept” 버튼을 누른다.
    • 컴퓨터를 업그레이드 할 것인지, 설치 미디어를 만들 것인지 묻는 창이 나타나면, 나중에 다른 컴퓨터에 설치를 하기 위하여 “Create installation media for another PC”를 고르고, “Next” 버튼을 누른다.
    • 내려 받을 이미지의 사양을 고르고, “Next” 버튼을 누른다.
      • 언어는 가능하면, “English (United States)”으로 하는 것이 좋다. “한국어”는 설치를 완료한 뒤에 나중에 추가할 수 있다.
      • Edition: 마지막에 “N”으로 끝나는 것은 “Windows Media Player”가 빠진 것이다.
      • Architecture: Intel i-3 이상의 “CPU”는 64비트를 지원한다. 그러나, 컴퓨터의 메모리의 크기가 2GB 미만인 경우에는 32 비트를 고르는 것이 좋다.
    • 저장할 장치로 “ISO file”을 고르고, “Next” 버튼을 누른다.
      • USB flash drive: 이미지를 부팅이 가능한 상태로 USB 드라이브에 저장한다. 만일 USB 드라이브에 파일이 존재하는 경우 해당 파일이 지워지므로 주의한다.
      • ISO file: 이미지를 ISO 파일로 저장한다. 여러 번 다시 사용할 수 있다.
    • 저장할 파일 이름을 입력하고, “Save” 버튼을 누른다. 그러면, 내려받기가 시작된다.



[Windows ISO Downloader 프로그램을 이용하는 방법]

  • “Windows ISO Downloader.exe” 프로그램을 실행한다.
  • 창이 나타나면, 오른쪽 위에서 내려 받을 운영 체제를 고른다.
  • 잠시 뒤에 화면이 바뀌면, 운영 체제의 “Edition”을 고를 수 있다. 내려 받을 이미지를 고른 뒤에 “Confirm” 버튼을 누른다.
  • 계속해서 이미지의 “언어”를 고르고, “Confirm” 버튼을 누른다.
  • 32-bit 또는 64-bit 아키텍처를 고르면, 파일 내려받기 창이 나타난다.



  • 내려 받을 때 주의 사항
    • 내려 받는 이미지의 크기는 4GB 정도로 크기 때문에 많은 시간이 필요하고, 운영 체제가 설치되어 있는 시스템 드라이브에 저장하지 않는 것이 좋다.

* DVD 또는 USB 드라이브에 복사

ISO 파일을 직접 이용하여 물리적인 새로운 컴퓨터에 운영 체제를 설치할 수는 없다. 이 파일을 이용하여 부팅이 가능한 DVD 또는 USB 드라이브를 만들어야 한다.

[DVD 매체에 복사]

  • 부팅이 가능하도록 이미지를 DVD 매체에 복사하려면 “ImgBurn”이라는 프로그램을 이용한다. 이 프로그램은 아래의 사이트에서 무료로 내려 받을 수 있다.
  • 프로그램을 내려 받아 설치를 한 뒤에, 실행한다. 그러면, 아래와 같이 2개의 창이 나타난다.


  • ISO 파일을 DVD 매체에 복사하려면, 먼저 DVD 드라이브에 쓰기가 가능한 매체를 삽입하고, 프로그램의 왼쪽 위에 있는 “Write image file to disc” 메뉴를 누른다.
  • 아래와 같이 화면이 바뀌면, “Please select a file…” 옆의 노란 아이콘을 눌러서 복사할 ISO 파일을 선택한다. “Destination” 아래에는 매체가 들어 있는 DVD 드라이브가 있다.


  • 복사가 가능한 상태가 되면, 왼쪽 아래의 그림이 회색에서 다른 색으로 바뀐다. 그림을 누르면 복사가 진행된다.
  • 복사가 완료되면, 완료를 알리는 소리와 함께 DVD 드라이브가 열린다.

[USB 드라이브에 복사]

  • USB 드라이브를 ISO 파일로 부팅이 가능하게 만들어 주는 대표적인 프로그램으로는 “RUFUS”가 있다. 이 프로그램은 아래의 사이트에서 무료로 내려 받을 수 있다. 설치는 필요하지 않다.
  • 컴퓨터에 USB 드라이브를 꽂은 다음 프로그램을 실행하면, 아래와 같은 화면이 나타난다.

    • Device: USB 드라이브의 장치를 보여준다. 여러 개의 드라이브가 장착된 경우, 목록에서 복사할 드라이브를 선택하여야 한다.
    • Partition Scheme……
      • BIOS: Basic Input Output System
      • UEFI: Unified Extensible Firmware Interface. Since 2005.
      • MBR: Master Boot Record, 최대4개의 주(Primary) 파티션. 하나의 파티션에 최대 2TB 크기 지원.
      • GPT: GUID Partition Table, 최대 128개의 파티션. 최대 8ZB 크기를 지원. x64 기반의 플랫폼에서 사용 가능. UEFI 시스템이 필요. 빠른 부팅이 가능함.
      • MBR Partition scheme for BIOS or UEFI: 구형 컴퓨터와 신형 컴퓨터를 모두 지원하려면 고른다. (대부분의 컴퓨터에 설치 가능함)
      • MBR Partition scheme for UEFI: UEFI 지원이 가능한 시스템에서 MBR 모드로 설치하려면 고른다.
      • GTP Partition scheme for UEFI: UEFI 지원이 가능한 시스템에서 GPT 모드로 설치하려면 고른다.
    • 컴퓨터의 하드 디스크의 파티션 스키마 알아내기
      • “Windows + R” 키를 누르고, Diskpart 명령을 수행한다.
      • 명령 창에서 “list disk” 명령을 수행한다.

  • 위의 그림에서 볼 수 있듯이, Gpt 항목에 별표(*)가 있으면, GPT 파티션이다.
  • File System: Windows 운영 체제를 설치하는 경우, “FAT32” 또는 “NTFS”를 고른다.
  • Cluster Size: 기본 값으로 “4096 bytes”을 고른다.
  • ISO Image 옆의 아이콘을 눌러서, 복사할 ISO 파일을 선택한다.
  • “Start” 버튼을 누르면, USB 드라이브가 초기화되면서 ISO 파일이 복사 된다.

* 설치 전에 확인해야 할 사항

[네트워크 어댑터의 드라이버]

  • 가능하다면, 컴퓨터는 인터넷에 연결되어 있는 것이 좋다. 기본적으로 설치된 운영 체제는 여러 가지 하드웨어를 제대로 사용하기 위한 드라이버가 설치되지 않을 수도 있다.
  • 운영 체제를 새롭게 설치하려는 경우, 컴퓨터를 구매할 당시에 함께 제공되었던 하드웨어 드라이버를 가지고 있는 것이 좋다.
    • 네트워크 인터페이스 카드에 대한 드라이버는 반드시 가지고 있어야 한다. 최신의 Windows 10 운영 체제는 대부분의 LAN 카드에 대한 드라이버를 지원한다. 그러나, 어떤 경우 드라이버를 별도로 설치해야 하는 경우가 있다.
    • 설치할 운영 체제에 맞는 드라이버를 제조사의 웹 사이트에서 내려 받아서 보관한다.

  • 만일, 드라이버를 구하기 어려운 상황이라면, 아래의 사이트에서 “3DP NET”이라는 프로그램을 내려 받는다. 새로 설치된 운영 체제에서 자동으로 네트워크 어댑터의 드라이버를 찾아서 설치할 수 있다.

    [자료의 백업]

  • 자료의 백업. 가끔 문서, 그림과 같은 개인 자료를 시스템 드라이브에 저장한 상태에서 새로운 운영 체제를 설치하면 모두 삭제될 수 있으므로 반드시 별도의 저장 장치에 백업한다.
  • 물리적인 디스크의 파티션은 2개 이상을 갖는 것이 좋다. 첫번째 파티션은 운영 체제와 응용 프로그램을 설치하는 데에 사용하고, 두번째 파티션은 사용자의 데이터를 저장하는데 사용하는 것이 매우 효율적이다.
  • 파티션이 1개인 경우
    • 별도의 물리적인 저장 장치에 자료를 백업한다.
  • 파티션이 2개인 경우
    • 별도의 물리적인 저장 장치에 자료를 백업하는 것이 좋다.(추천)
    • 자료를 두번째 파티션에 백업한다. 이런 경우, 파티션 스키마의 변경은 불가능하므로 USB 부팅을 이용한 설치에 제한이 있을 수 있다. (MBR, GPT)

* Windows 설치 (Windows 10)

[Windows 10 설치]

  • 컴퓨터가 시작되고 바이오스(BIOS) 정보가 나타날 때, 특정 키를 눌러서 설정 화면으로 진입하여 연결된 장치의 부팅 순서와 UEFI 설정한다. 이 기능은 바이오스의 종류에 따라서 다양하게 표시된다.
    • USB 부팅을 하려는 경우, USB 드라이브의 “Partition Scheme”에 따라서 UEFI 설정을 함께 해야 한다. (특히, GTP 파티션을 사용하는 경우…)
    • 일반적으로 부팅 순서는 다음과 같이 설정하는 것이 좋다.
      • 1 – USB Drive, 2 – CD/DVD, 3 – HDD

  • 기존의 운영 체제의 파일 시스템을 유지하면서 운영 체제를 설치(Upgrade)할 수도 있는데, USB 또는 DVD 매체에서 “Setup.exe” 파일을 실행한다. (권장하지 않는다. 설치 뒤에 사용하지 않는 기존 운영 체제의 파일을 수동으로 지워야 한다.)
  • 설치 화면이 나타나면, 설치할 언어, 시간 형식, 키보드 및 입력 도구를 고르고, “Next” 버튼을 누른다.
    • English (United States), English (United States), US
  • 설치 유형을 고르는 화면이 나타나면, “Custom: Install Windows only (advanced)”를 고른다.
  • 물리적인 디스크가 2개 이상의 피티션으로 나누어져 있다면, 설치할 디스크의 파티션을 고른다. 파티션이 만들어지지 않았거나 새롭게 파티션을 만들려는 경우 파티션을 삭제하고, 다시 만들 수 있다. Windows 운영 체제와 응용 프로그램을 설치하기 위하여 약 128 GB 이상의 공간을 권장한다. 설정이 완료되면, “Next” 버튼을 누른다.


  • 일반적으로 GPT 파티션을 이용하면, 빠른 부팅이 가능하고 대용량의 디스크를 효율적으로 관리할 수 있다. 기존의 MBR 파티션 체계를 GPT 파티션으로 변경하는 경우, 모든 데이터가 파괴된다. 이런 경우, 반드시 설치를 시작하기 전에 별도의 물리적인 저장 장치에 자료를 백업한다. MBR 파티션에서 GPT 파티션으로 변경하거나, “이 디스크에 Windows를 설치할 수 없습니다.”라는 오류 메시지가 표시된다면 아래의 사이트에서 정보를 확인한다.
  • 운영 체제의 복사가 시작되고 완료되면, 컴퓨터 다시 부팅된다.
  • Windows 설정 시작 화면이 나타나면, “Use Express Settings”를 누른다.
  • 사용자 계정을 설정하는 화면이 나타나면, Microsoft Azure AD 서비스를 이용하거나, 사용자의 AD 도메인을 이용할 수 있다. 컴퓨터의 계정을 만들어 사용할 것이므로 “Join Local Active Directory Domain”을 고르고 “Next” 버튼을 누른다. (Only Enterprise Edition)


  • 새로 사용자 계정을 만드는 화면이 나타나면, “User Name”과 “Password”를 입력하고, “Next” 버튼을 누른다.
    • 비밀 번호는 적어도 8자 이상으로 만드는 것이 좋다.
    • 하나 이상의 알파벳 소문자와 대문자, 숫자, 기호를 포함하는 것이 좋다.
Lowercase a b c……z
Uppercase A B C……Z
Numerals 0 1 2 3 4 5 6 7 8 9
Symbols ` ~ ! @ # $ % ^ & * ( ) _ + -={ } | [ ] \ : ” ; ‘ < > ? , . /

[드라이버 설치]

  • 설정이 완료되면, 컴퓨터가 다시 시작되고 사용자 화면이 나타난다. 운영 체제의 왼쪽 아래에 있는 시작 버튼을 마우스의 오른쪽 버튼으로 누르면, 메뉴가 나타나는데 “Device Manager”를 마우스 왼쪽 버튼으로 누른다.
  • “Device Manager” 창은 컴퓨터에 장착된 장치들의 드라이버 설치 상태를 보여준다. 만일 드라이버가 설치되지 않은 장치가 있다면, 노란 물음표(?)의 아이콘으로 표시된다.

[디스크 관리]

  • 설치 단계에서 파티션을 여러 개로 나누었으나, 시스템을 설치할 파티션을 뺀 나머지 파티션을 초기화(Format)하지 않은 경우, 나누어진 파티션은 사용할 수 없는 상태로 남게 된다.
  • 운영 체제의 왼쪽 아래에 있는 시작 버튼을 마우스의 오른쪽 버튼으로 누르면, 메뉴가 나타나는데 “Disk Management”를 마우스 왼쪽 버튼으로 누른다.
  • “Disk Management”에서는 물리적인 디스크와 파티션들이 보여지는데, 아직 사용할 수 없는 논리적 디스크 또는 디스크의 파티션은 “Unallocated”로 표시된다. 이곳을 마우스의 오른쪽 버튼으로 눌러서 “New Simple Volume…” 메뉴를 선택한다.


  • 하나의 디스크 또는 파티션을 다시 여러 개의 논리 디스크로 나눌 수 있는데, 사용자의 상황에 따라서 논리 디스크의 크기를 조정하고, “Next” 버튼을 누른다.
  • 운영 체제에서 논리적 디스크 드라이브에 할당할 문자를 선정하고, “Next” 버튼을 누른다.
  • 파일 시스템에서 “NTFS”를 고르고, 볼륨 레이블을 입력하고, “Next” 버튼을 누른 뒤, “Finish” 버튼을 누르면, 포맷(Format)이 진행되고 논리 디스크가 만들어진다.


[ANTI-VIRUS 프로그램 설치]

  • ANTI-VIRUS 프로그램은 Microsoft 사에서 제공하는 것으로 충분하다.
  • Windows Defender 설정
    • 운영 체제의 왼쪽 아래에 있는 시작 버튼을 마우스의 오른쪽 버튼으로 누르면, 메뉴가 나타나는데 “Settings”를 마우스 왼쪽 버튼으로 누른다.
    • 검색 창에 “Virus”라고 입력하면 메뉴가 나타나는데, “Virus & threat protection”을 누르면, “Windows Defender Security Center” 창이 나타난다.
    • “Virus & threat protection settings”를 누르면, “Windows Defender”를 설정할 수 있는 화면으로 바뀐다. 여기에서 “Real-time protection”을 포함한 모든 항목을 “On”으로 한다.


  • Windows 10 설치 상태에 따라서, Windows Defender 사용이 불가능한 상황이 발생할 수 있다. 예를 들면, “그룹 정책에 의해 이 앱이 꺼져 있습니다.”라는 메시지를 만나는 경우 이다. 이런 경우, “Windows + R” 키를 눌러서 “GPEDIT.MSC” 명령을 수행한다.


  • 그룹 정책에서 Windows Defender 사용을 설정할 수 있다. 왼쪽의 목록에서 차례대로 “Computer Configuration è Administrative Templates è Windows Components è Windows Defender Antivirus”를 누른다. 그럼 다음 오른쪽의 메뉴에서 “Turn off Windows Defender Antivirus”를 두번 누른다.
  • 세부 설정 창에서 “Not configured” 또는 “Disabled”를 선택하고, “OK” 버튼을 누르면 Windows Defender 프로그램을 사용할 수 있는 상태가 된다.


[응용 프로그램 설치]

  • 압축 프로그램: 7-ZIP, http://www.7-zip.org/
  • 동영상 코덱 프로그램: K-Lite Codec, https://www.codecguide.com
  • 한컴 오피스 프로그램을 위해서는 운영 체제의 설치 미디어에 포함된 “.NET 3.5” 구성 요소를 설치하여 활성화해야 한다.
    • Windows 설치 미디어 (DVD/USB)를 컴퓨터에 연결한다.
    • Windows Command Prompt(명령 창)을 관리자 계정으로 실행한다. (Run as Administrator)
    • 명령 창에 다음 명령을 입력한다. 여기서 “D:\”는 미디어의 논리 드라이브 이름으로 시스탬 상태에 따라서 바꾸어 주어야 한다.

    DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:d:\sources\sxs

* Windows 인증

  • 가장 안전하게 인증을 받는 방법은 정식으로 소프트웨어를 구매하는 것이다.
  • 인터넷에서 제공하는 인증 프로그램등을 이용하는 경우, 해당 프로그램에 포함된 악성 코드로 인하여 운영 체제에 치명적인 결함을 만들어 낼 수 있으며, 컴퓨터 사용에 심각한 지장을 초래할 수 있다.
  • 프로그램을 이용하지 않고 인증을 처리하려면, 아래의 사이트를 이용한다.

2017.03.01

SWF TO PDF

Filed under: KOICA,Programming — Peter_KIM @ 06:56

전자책(e-Book) 형태로 제공되는 정보는 인터넷에 연결되어 있어야 이용할 수 있는 단점이 있다. 그런데, 한번 보았던 전자책을 네트워크에 연결되지 않은 상태에서 보려고 한다면, 약간의 잡스러운 기술을 이용하여 할 수 있습니다.

우선 전자책을 볼 때, 사용하는 브라우저로는 Internet Explorer”를 추천합니다. 크롬이나 파이어폭스 같은 브라우저가 대세이긴 하지만, 작업의 편의를 위해서는 “IE”가 좋습니다.

웹 브라우저는 인터넷의 정보를 로컬 하드 디스크에 내려 받아서 임시로 저장하고 사용자에게 표시합니다. 그런데, 저장하는 방식이 브라우저마다 조금씩 다릅니다. “IE”의 경우에는 인터넷에서 제공되는 파일의 형태를 그대로 로컬에 저장하지만, 다른 브라우저는 나름대로의 형식으로 바꾸어 저장합니다.

“Internet Explorer” 브라우저의 임시 저장 위치는 운영 체제와 사용자 계정에 따라서 다르지만, 대부분 다음과 같습니다.

%localappdata%\Microsoft\Windows\INetCache\IE\

%userprofile%\AppData\Local\Microsoft\Windows\INetCache\IE\

“Explorer”를 이용하여 해당 디렉터리에 들어가면, 그 아래에 8글자로 만들어진 하위 디렉터리가 있습니다.

SWF 파일을 얻기 전에 “…INetCache\IE\” 디렉터리 아래의 모든 파일과 디렉터리를 지웁니다. 그리고, “IE” 브라우저에 전자책을 볼 수 있는 웹 주소를 입력하고 열어 봅니다.

그렇게 하고 나서, “…INetCache\IE\” 디렉터리에 새로운 디렉터리와 파일이 만들어지는 것을 볼 수 있습니다. 전자책의 페이지를 넘길 때마다, SWF 파일이 계속해서 생기게 됩니다.

전자책을 처음부터 끝까지 계속 넘깁니다. 그리고, 브라우저를 닫기에 앞서, SWF 파일을 조작하기 위해 다른 디렉터리로 복사합니다. 이 파일을 SWF 파일 형식을 지원하는 동영상 플레이어나 웹 브라우저로 열어 봅니다.

이제 SWF 파일을 PDF 파일로 만드는 방법을 설명하겠습니다. 여러가지 방법이 있습니다만, 가장 간단한 것은 PDF 출력을 지원하는 가상의 프린터를 이용하는 것입니다. Windows 운영 체제에는 이미 XPS 형식의 파일로 출력할 수 있는 가상 프린터가 설치되어 있을 것입니다.

Microsoft XPS Document Writer

브라우저에서 SWF 이미지를 오른쪽 버튼을 눌러서 출력을 할 수 있습니다. 간단하지만, 단점이 있습니다. SWF 프레임에 있는 반투명의 “Water Mark” 이미지는 전자책의 내용을 가릴 수 있습니다. 그래서 화면에 보이는 것과 다른 결과를 얻을 수 있습니다. 이런, “Water Mark” 이미지를 제거하려면, 전용의 응용 프로그램을 이용할 수 있지만, 여기서는 그냥 쉬운 방법을 이용하겠습니다. 눈에 거슬리지 않는 이미지라면, 그냥 인쇄를 하는 것이 빠르고 편합니다. 우선, 화면을 갈무리 할 수 있는 프로그램을 설치합니다. 저는 “Greenshot”이라는 프로그램을 자주 이용합니다.

http://getgreenshot.org/

브라우저나 동영상 플레이어로 SWF 파일을 열어서 전자책이 잘 보이게 하고, 필요한 부분을 갈무리하여 이미지로 저장하고, PDF 파일로 출력을 합니다.

사실 더 보기 좋은 문서를 만들려면, SWF 추출 프로그램을 이용하여, “Water Mark”를 제거할 수도 있습니다.

https://sourceforge.net/projects/swfrip/

이렇게 PDF 문서를 만들 수 있지만, 가장 중요한 것은 저작권을 위반하지 않는 것입니다.

2017.02.21

Visual Studio Code 설치 및 사용 실패

Filed under: Programming — Peter_KIM @ 10:16

갑자기 ‘jQuery’ 대하여 공부를 해야만 합니다. 적어도 이것을 이용한 간단한 페이지 정도는 만들어 봐야 했습니다. 이런 스크립트 또는 개발은 사실 별로 달갑지 않은 부분이긴 하지만, 상황이 나를 어쩔 없게 만듭니다……

여러 가지 개발 도구가 있지만, ‘Visual Studio Code’라는 것이 눈에 들어옵니다. 물론, ‘Visual Studio IDE’보다는 기능이나 성능이 떨어질 같은데, 다중 플랫폼을 지원한다기에 사용해 보기로 했습니다.

우선, 깨끗한 Windows 8.1 가상 컴퓨터에서 ‘Visual Studio Code’ 내려 받아서 설치해 보았습니다.

https://code.visualstudio.com/

설치가 완료되고 프로그램을 실행했더니, 이게 일입니까? 그냥 검정 창만 덩그러니 있습니다.

clip_image001[4]

뭔가 필요한 프로그램이 빠져 있겠다 싶어서 설치 안내를 보니, “.Net Framework 4.5.2” 필요하다고 있습니다. 이것도 내려 받아서 설치를 시고 했더니, 이미 설치된 상태였습니다.

무엇인가 잘못이 있는 같은데, 찾아내기 어렵습니다. FAQ 페이지에 보니 다음과 같은 글이 있다.

VS Code main window is blank?

The Electron shell used by Visual Studio Code has trouble with some GPU (graphics processing unit) hardware acceleration. If VS Code is displaying a blank (empty) main window, you can try disabling GPU acceleration when launching VS Code by adding the Electron --disable-gpu command line switch.

지시대로 했지만, 결과는 바뀌지 않았습니다. 프로그램의 메뉴를 눌러 봤더니, “HelpèAbout” 동작했습니다. 메뉴 위에 “Toggle Developer Tools” 눌렀더니 뭔가 나타납니다.

그러나, 여전히 다른 메뉴들의 상태는 명령 거부입니다. 만들어진 것이라, 보려 했더니……

마이크로소프트에서 이런 식으로 만들다니, 역시 무료 프로그램에는 성의가 부족한 모양입니다.

“jQuery” 다른 도구로 공부해야 겠습니다.

2016.11.18

[Windows 2012R2] Windows Update Does Not Ends in the “Checking for updates…” state.

Filed under: Programming — Peter_KIM @ 04:33

며칠 전에 Windows 2012 R2 운영 체제를 다시 설치해야만 했다. Booting USB 드라이브를 만들고, 다시 설치했다.

Microsoft  Office 2016 프로그램을 설치 하려는데, KB2919355 업데이트를 먼저 설치해야 한다는 경고가 나타났다.

https://www.microsoft.com/ko-kr/download/details.aspx?id=42334

아래의 설치 지침대로 자료를 설치해 보았다.

·        기술 자료 문서는 다음 순서로 설치되어야 합니다. clearcompressionflag.exe, KB2919355, KB2932046, KB2959977, KB2937592, KB2938439, KB2934018.

·        KB2919442 Windows Server 2012 R2 Update 선행하며 KB2919355() 설치되기 전에 설치해야 합니다.

그리고, 다른 업데이트가 있는지 확인하기 위하여, Windows Update 확인을 수행했다.

결코 아래의 “Checking for updates…” 상태가 끝나지 않았다. 밤을 세우고, 다음날 아침까지도 지켜보았지만 여전히 상태였다. 문제로, 3 동안 번씩이나 Windows 운영체제를 다시 설치했는지……

clip_image001

구글의 검색 결과를 보니, 같은 문제를 겪는 사람들이 많이 있었다. 문제는 Windows Update 과정에서 어떤 버그가 있었고 그것이 원인이 되어 이런 결과를 초래하는 같았다.  정말 많은 사람들이 문제에 대한 해법을 제시하였다.

첫째로, net stop wuauserv 명령으로 서비스를 중지하고, C:\Windows\SoftwareDistribution디렉터리를 지우고, 업데이트 서비스를 다시 시작하는 .

이것은 전혀 도움이 되지 않았다.

두번째, DISM.exe /online /Cleanup-image /RestoreHealth명령을 이용하는 방법(https://support.microsoft.com/en-us/kb/947821). 이것 역시 도움이 되지 못했다.

어떤 패치(업데이트) 파일들이 필요한지 검색해보자.

https://support.microsoft.com/en-us/kb/3196684

https://support.microsoft.com/en-us/kb/3197875

이즈음에 나온, 업데이트 파일들이다. 자동으로는 안되니, 이것을 손으로 업데이트 하기로 마음을 잡았다.

그래서 윈도우 업데이트 패키지를 수동으로 내려 받았다. Windows8.1-KB0000000-x64.msu 파일을 실행해 보았다. 실행은 되지만, 아래의상태를 유지한다. 여기서 진행이 안된다.

clip_image003

작업 관리자를 열어서 프로세스를 확인해 보았다. “WUSA.EXE: Windows Update Standalone Installer” 이게 아무런 변화도 없이 그냥 메모리만 차지하고 있었다.

새로 설치한 Windows 2012 R2 프로그램들이, KB2919355 관련 업데이트 프로그램과 문제를 야기하고 있는 것으로 있었다.

GUI 프로그램으로 안되면, DISM명령을 이용할 있다.

우선, 내려 받은 프로그램의 압축을 풀어보자. 모두 4개의 파일이 풀린다.

EXPAND -f:* Windows8.1-KB0000000-x64.msu c:\Temp

중에서 Windows8.1-KB0000000-x64.cab 파일을 DISM 명령으로 설치한다.

dism /online /add-package /packagepath:c:\Temp\Windows8.1-KB0000000-x64.cab

명령은 되었다. 그러나, 이렇게 이즈음의 업데이트를 설치해도, 윈도우 업데이트 상태는 여전히 그대로 였다.

http://catalog.update.microsoft.com/v7/site/Home.aspx

무엇인가 다른 업데이트를 해야할 같았다. 그러나, 일일이 업데이트를 찾아서 하는 것은 오랜 시간이 걸린다.

그래서, 다른 방법을 찾아보았다. 다행이 아래와 같은 문서가 있었다.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa387102(v=vs.85).aspx

문서에 나와있는 VBS 코드를 이용하면, 왠지 쉽게 일을 있을 같았다.

스크립트 코드를 실행했더니, 많은 업데이트가 발견되었고, 자동으로 발견된 업데이트가 설치되었다. 마지막으로 시스템을 다시 시작하고, 업데이트를 수행했더니 정상적으로 업데이트가 동작했다.

        여러가지 업데이트를 DISM 명령으로 설치하던 , Internet Explorer 브라우저로 Microsoft 사이트에 로그인 되지않는 상황을 마주했다. Passport 로그인 화면에서 계정을 입력하고, “next” 버튼을 눌러도 암호 입력 화면으로 바뀌지 않았다.

        사용하던 Skype 로그인 화면이 계정 입력하고 나면, “This page contains errors. Go back” 메시지를 표시한다.

        이것은 Internet Explorer 11 관련 업데이트를 설치하면, 고칠 있다.
https://www.microsoft.com/en-us/download/details.aspx?id=45691

 

며칠 동안, 컴퓨터에 시달렸더니 피곤하다.

2016.08.29

Компьютерийн сургалтын төгсөлтийн баяр

Filed under: KOICA — Peter_KIM @ 07:35

[컴퓨터교육 수료식]

Компьютерийн сургалтын төгсөлтийн баяр

오늘 8월 29일(월) 컴퓨터교육 수료식을 진행하였습니다.
8주간 7명의 학생이 윈도우, 워드 및 파워포인트를 배웠습니다.
이론 및 실습 수업에 더해 질의 응답 시간을 가져 개인별 역량 강화를 시킬 수 있었고, 마이크로소프트 수업을 통해 아동들이 자료를 만들 수 있을 정도로 실력이 향상되었습니다.
8-р сарын 29 нд Компьютерийн сургалтын төгсөлтийн баяр боллоо.
8 долоо хоногийн турш 7 сурагч windows, word болон power point программын суралцсан. Онол болон дадлага хичээлийн цагаас гадна асуулт хариултын цагаар хувьчилсан цагаар улам чадваржуулж, мөн Microsoft Office -ийн программууд дээр бичиг баримт үүсгэж сурсан.
아이들을 위해 미소와 열정으로 수고해주신 김두철 선생님 감사합니다. ^^
이번 수업이 아동들에게 ‘할 수 있다’는 자신감을, 부모님들에게 사랑과 관심의 중요성을 일깨우는 경험이 될 것입니다.
2개월 간 고생하셨습니다. 센터에 또 놀러오세요 !
Хүүхдүүдийн төлөө чин зүрх сэтгэлээр зааж сургасан Ким Дү Чол багшид талархал илэрхийлж байна. Энэ удаагийн хичээлээр дамжуулан хүүхдүүдэд “Хийж чадна” гэсэн өөртөө итгэх байдал, эцэг эхчүүдэд хайр, анхаарал халамжийн чухал байдлыг мэдрүүлж өглөө.
2 сарын турш хичээнгүйлэн зүтгэлээ. Манай төвд ахин зочилоорой.

https://www.facebook.com/HOLT-Mongolia-1504855186437536/?pnref=story

Next Page »

Blog at WordPress.com.

%d bloggers like this: