일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리눅스 파일동기화
- 3D프린터
- 3D프린터입문
- kubernetes
- 3D프린터 입문
- octoprint
- 데이터 직렬화 포맷
- gitlab
- 3D모델링
- 3D
- docker
- Kotlin
- OnlineIDE
- C언어
- ci/cd
- IoTNetwork
- data serialization formats
- github
- NAS HDD교체
- 3D 프린터 용어
- git
- linux job
- docker container
- Token인증방식
- nas
- 네이버클라우드
- Notification
- 코틀린개발환경
- 3d프린터 초보
- Jenkins
- Today
- Total
0과 1을 공부하다.
[Contest] 2022 국방 데이터 활용 경진대회에 참가하다 - 국방 단어교정 체계 본문
필자는 2022 국방 데이터 활용 경진대회에 참가했다. 참가 결과는 아쉽게 1차 서류 통과 후 탈락하였다. 비록 수상은 하지 못했지만 이번을 경험으로 앞으로 좋은 결과가 생길 것이라고 기대하며, 간략하게 출품한 작품에 대해 기록한다.
주제 소개
본 공모전에서 제작한 국방 단어 교정 체계는 문서 또는 사용자가 입력한 문장에서 금칙어를 지정하여 문서에 사용하는 단어의 표준화의 목적을 갖고 있다. 또한 파일의 해시 추출 및 암호 키 파일 기반의 대칭키 문서 암호화 기능을 추가하여 문서의 보안성을 높일 수 있도록 하였다.
국방 단어 교정 체계는 공모전의 취지와 부합하게 국방부 국방데이터 표준단어 목록 공공데이터를 메인으로 이용하였고 국립국어원 개방형 사전(우리말샘) 공공데이터를 보조 데이터 수단으로 이용하였다.
두개의 공공데이터를 이용하여 국방데이터에서 금칙어를 추출하였고 국립국어원 데이터에서 방언을 추출하여 필터링 데이터베이스를 구축하였다. 또한 사용자가 추가로 금칙어를 요청할 수 있는 기능을 추가하여 국방부 필터, 국어원 필터, 관리자 필터 3가지 필터를 기반으로 단어를 교정하도록 하였다.
기능 소개
[문장검사]
문장검사 가능은 사용자가 500자 이내의 문자열을 입력하여 3가지 필터(국방부, 국어원, 관리자)중 사용자가 원하는 필터를 적용하여 검사를 수행하는 기능입니다. 각 필터는 아래의 특징을 갖고 있습니다.
- 국방부 필터: '국방부_국방데이터 표준단어 목록' API를 이용한 필터입니다. 군 조직 특성에 맞는 단어가 포함되어 있어 매우 신뢰성 있는 필터입니다. 해당 필터를 참고하여 표준에 맞는 단어를 사용할 수 있도록 할 수 있습니다.
- 국어원 필터: '문화체육관광부 국립국어원_개방형 사전(우리말샘)' API를 이용한 필터입니다. 현재 국어사전에 등재된 항목 중 방언만 사용 가능합니다. 정상적인 단어도 오판 될 수 있으니 결과의 내용을 참고하여 사용하시길 바랍니다.
- 관리자 필터: 사용자가 요청하고 관리자가 승인한 단어가 포함된 필터입니다. 국방부 필터와 더불어 조직에 특성에 맞는 단어가 포함되어 있어 신뢰성 있는 필터입니다.
[파일검사]
파일검사 기능은 사용자가 작성한 파일을 업로드하여 3가지 필터(국방부, 국어원, 관리자)중 사용자가 원하는 필터를 적용하여 검사를 수행하는 기능입니다. 현재 확장자는 txt, hwp만 지원하고 파일이름은 특수문자가 포함되지 않은 영문만 지원하므로 참고하시길 바랍니다. hwp 파일의 표에 포함된 문자열을 포함되지 않으며 결과출력까지 약 20초의 시간이 지연될 수 있습니다. 각 필터는 아래의 특징을 갖고 있습니다.
- 국방부 필터: '국방부_국방데이터 표준단어 목록' API를 이용한 필터입니다. 군 조직 특성에 맞는 단어가 포함되어 있어 매우 신뢰성 있는 필터입니다. 해당 필터를 참고하여 표준에 맞는 단어를 사용할 수 있도록 할 수 있습니다.
- 국어원 필터: '문화체육관광부 국립국어원_개방형 사전(우리말샘)' API를 이용한 필터입니다. 현재 국어사전에 등재된 항목 중 방언만 사용 가능합니다. 정상적인 단어도 오판 될 수 있으니 결과의 내용을 참고하여 사용하시길 바랍니다.
- 관리자 필터: 사용자가 요청하고 관리자가 승인한 단어가 포함된 필터입니다. 국방부 필터와 더불어 조직에 특성에 맞는 단어가 포함되어 있어 신뢰성 있는 필터입니다.
[필터검색]
필터검색 기능은 현재 체계의 3가지 필터(국방부, 국어원, 관리자)에 대해서 분류(금칙어, 교정어, 내용)에 따른 검색을 하는 기능입니다. 국방부 필터의 내용값는 비어 있습니다.
[문서보안]
문서보안 기능은 부가기능으로 파일의 해시값을 확인하여 데이터의 무결성을 검증하고, 공개키 방식의 AES 알고리즘을 이용하여 생성한 키와 패스워드를 이용하여 파일을 암/복호화 할 수 있습니다. 해시와 암호화 기능은 아래와 같습니다.
- 해시1. 파일의 발송자는 해당 기능을 이용하여 파일을 업로드하고 원하는 해시(체크섬)를 확인합니다.2. 파일의 발송자는 발송하는 파일과 더불어 해시 결과값도 전송합니다.
3. 파일의 수신자는 발송자로부터 파일을 수신받고 무결성을 확인하기 위해 해당 체계를 이용하여 다시 파일의 해시값(체크섬)을 확인합니다.
4. 발송자가 알려준 해시와 수신자가 확인한 해시가 일치한다면 해당 파일은 통신과정에서 위/변조가 이뤄지지 않은 무결한 상태임을 검증합니다.
# 한글 / 특수문자로 이뤄진 파일은 지원하지 않습니다.
- 문서 암/복호화 문서 암/복호화 기능은 공개키 방식으로 암/복호화에 사용되는 키가 같습니다. 파일을 잠구는 기능으로 기존의 압축, 오피스 S/W 비밀번호로 접근을 제한하는 기능이 있지만 비밀번호를 누구나 아는 사람이라면 데이터에 접근할 수 있다는 단점이 존재합니다.
본 기능의 장점은 비밀번호를 알고 있더라도 해당 키 파일이 없다면 파일을 암/복호화 할 수 없기 때문에 데이터의 기밀성을 보장할 수 있습니다.
1. 사용자는 조직의 파일을 암호화하기 위해 비밀번호가 포함된 키 생성 기능을 이용하여 고유 키를 생성합니다.
2. 생성된 키를 이용하여 이미지 파일(png)와 키 파일 비밀번호를 입력하여 암호화를 수행합니다.
3. 이후 키는 쉽게 접근하지 못하는 폴더 또는 저장매체에 보관합니다.
4. 사용자는 해당 파일을 열람하기 위해 다시 체계에 접속하여 키파일과 비밀번호, 암호화된 파일을 업로드하여 복호화하여 데이터에 접근합니다.
# 한글 / 특수문자로 이뤄진 파일은 지원하지 않습니다.
[단어 추가요청]
단어 추가요청 기능은 사용자가 본 체계에 추가되었으면 하는 금칙어에 대한 교정어를 관리자에게 요청하는 기능합니다. 관리자는 별도의 페이지를 통해 사용자가 요청한 필터에 대해 추가하여 모든 사용자가 해당 금칙어로 필터링 할 수 있습니다.
[관리자페이지]
관리자페이지 기능은 사용자가 단어추가요청 기능을 통해 요청한 단어를 추가 / 제거하는 기능입니다. 해당 페이지에 접근하기 위해서는 특정 URL 및 계정을 갖고 있어야 하며, 해당 정보를 별도 문서에 첨부 하였습니다.
협업도구
본 프로젝트에서 팀원과 협업하기 위해 사용한 협업도구는 아래와 같다.
구분 | 내용 |
Github | 프로젝트 코드 관리 및 서비스 버전관리 |
Google Spreadsheet | 일정관리 및 시스템 정보 저장 |
Google Dirve | 데이터 백업 및 문서 저장 |
Slack | 커뮤니케이션 및 자동화(Bot) |
개발환경
1. H/W
구분 | 내용 |
Model Name | Shuttle SH61R4 |
CPU | G850 |
Memory | 8GB (4GB * 2) |
HDD | 500GB |
2. S/W
구분 | 이름 | 버전 |
OS | Rocky 8 | 8.6 |
Web-Server | Apache | 2.4.37 |
DataBase | MariaDB | 10.3.32 |
Web 언어 | PHP | 7.2.24 |
데이터 분석 | Python | 3.6.8 |
기능 구현
1. Web Page
[기능구현]
- Web Page는 Frontend Backend php로 작성되었으며, 별도의 Framework를 이용하지 않은 순수 PHP로 개발되었음.
- 비동기식 구현은 AJAX를 이용하였으며, UI는 Bootstrap을 이용함.
2. Data Processing
[요구조건]
- 웹으로부터 받아온 데이터를 본 서비스에서 사용하기 위해 별도의 처리 과정이 필요함.
- Json 또는 xml 형태로 받아오는 데이터는 적절한 질의로 데이터를 추출하는 방식을 이용함.
- 데이터를 내려받고 데이터를 본 서비스에서 이용할 수 있는 적절한 형태로 가공이 필요함.
[기능구현]
- Web에서 받아온 공공데이터를 처리하기 위해 파이썬 언어의 모듈을 이용하여 처리함.
- 국방부 데이터는 대상 단어, 금칙어를 추출하여 DB에 저장하였음.
- 국어원 데이터는 사전 단어와 내용을 추출하고 내용에서 ‘ 문구로 감싸져 있는 교정 단어를 추출하여 대상단어/금칙어/내용 형태로 DB에 저장하였음.
3. Natural Language Processing
[요구조건]
- 사용자가 입력한 문자열 및 문서내 문장의 단어를 구분하기 위해 자연어 처리가 필요함.
- 단어 위주의 필터링이 필요하기 때문에 문장에서 조사, 어미 등 형식 형태소를 제외하고 명사, 동사 형용사, 부사 등 실질 형태소만 별도로 분류가 필요함.
[기능구현]
- 사용자가 입력한 문자열 또는 문서의 자연어를 처리하기 위해 mecab 형태소 분석기를 사용하였음.
- 분석된 형태소에서 조사, 어미 등 형식 형태소를 제외하고 명사, 동사 형용사, 부사 등 실질 형태소만 추출함.
- 국방부 필터 및 사용자 필터에 등록된 단어는 형태소가 혼합된 형태로 존재하기 때문에 오판될 가능성이 높음. 이를 해결하기 위해 국방부 필터와 형태소 필터에 등록된 금칙어를 mecab 사전에 별도로 등록하여 정확도를 높였음.
4. Hwp Extension Parsing
[요구조건]
- txt와 같은 text 기반의 확장자는 대부분의 언어에서 제공하는 함수를 이용하여 텍스트를 읽는 것이 용이하지만 hwp 확장자는 binary 형태로 이뤄져있음.
- 문서의 문장을 추출하기 위해 binary 형태로 이뤄져 있는 hwp 확장자의 별도의 파싱이 필요함.
[기능구현]
- 한글파일의 문장을 추출하기 위해 python언어 기반의 hwp5txt 모듈을 사용하여 추출하였음.
- 해당 모듈의 단점은 표 안에 문장을 추출하지 못하는 단점이 존재함.
- 다른 대안으로 유료 API를 이용하는 방안이 있지만 Alpha 버전에서는 생략함.
5. Data Encryption
[요구조건]
- 본 서비스에서 제공하는 파일 해시 값 추출(체크섬) 및 암/복호화를 구현하기 위해 파일의 해시 값 추출 및 암/복호화 기능 구현이 필요함.
[기능구현]
- 파일의 해시 확인과 암/복호화를 위해 openssl을 사용함.
- 파일의 해시는 MD5와 SHA256 알고리즘을 이용함.
- 파일 암/복호화는 AES 공개키 기반의 암호화 방식을 이용하며, 암/복호화에 이용되는 공개키 값은 랜덤으로 생성하며, 이용한 공개키는 개인키로 암호화하여 암호화 된 파일과 키를 압축하여 enc확장자로 전달한다.
- 복호화 과정은 암호화의 반대과정이다.
6. Filtering
[기능구현]
- 금칙어를 필터링을 하는 과정은 HWP 확장자라면 Hwp Extension Parsing 과정을 거치고 일반 문장 및 txt 파일이라면 대상 문자열에서 형태소를 분류한다.
- 분류된 단어를 필터 DB에서 검색하고 일치되는 항목이 있다면 DB Row를 저장하여 사용자에게 출력한다.
리뷰
본 공모전을 진행하며 느낀점은 여태까지 학부시절에도 다양한 프로젝트를 진행했었지만 주도적으로 체계적으로 진행한 첫 프로젝트라서 매우 좋은 경험이 되었다. 또한 웹 개발을 처음 진행해봐서 많은 어려움이 있었지만 어떠한 문제점이나 구현하고자 하는 기능이 있을때 해결하는 방법에 대해 배우고 느낄 수 있어서 개발자로서도 매우 큰 성장을 이루지 않았나 싶었다.
프로그램 기간이나 안내도 전반적으로 깔끔해서 좋았다. 다만 이번 행사의 아쉬움을 꼽자면 국방 데이터가 다양하지 않아서 아이디어를 내기 어려웠으며, 발표 심사 과정에서 심사위원들이 약 20분가량 늦게 도착해서 지연되고 그에 대한 사과 또한 없다는 점이 매우 불쾌하게 느껴졌다.
결과적으로 비록 최종 선발이 되지 못해 매우 아쉬운 마음을 숨길 수 없었지만 기획 또는 개발자로 좋은 경험과 성장 할 수 있는 계기가 되어서 좋은 경험으로 남게 될 것으로 기대하고 다음 공모전 혹은 기획하는 과정에서 좋은 결과를 얻을 것으로 기대한다.
※ 본 프로젝트의 모든 결과물은 아래 Github에 공유하였습니다.
Github: https://github.com/GreatPark96/Public-Data-Utilization-Contest
※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.
* CopyRight 2022. Jay Park All rights reserved.
'Study > ETC' 카테고리의 다른 글
[Git] 자주쓰는 깃 명령어 모음 (CLI) (0) | 2022.11.11 |
---|---|
[NAS] 시놀로지 NAS 데이터를 안전하게 보관(백업)하는 방법 - Hyper Backup (0) | 2022.11.01 |
[OS] VirtualBox(VM) 가상네트워크 설정 (0) | 2022.09.07 |
[Software] Visual Studio Code 활용 이야기 (0) | 2022.08.29 |
[E-Mail] 시놀로지(Synology) NAS를 이용한 메일서버 구축 (5) | 2022.07.04 |