WebServer에서 사용률 체크하기

CSharp, Database
홈페이지를 만들고 나서 사용률이 저조하면은 상당히 힘이 빠지는 일입니다. 더욱이 정부에서 사용을 하라고 하는데 제작을 할때는 사람들이 요구사항이 상당히 많이 발생하고 좀 더 자기에게 유리하게 만들기 위해서 시간과 노력을 투자 하지만 일단 정부에서 대금이 지급되고 나서는 시들해지기 마련입니다. 하지만 정부도 바보가 아닌 이상 몇년간 사용을 해야 하는데 사람들이 일이 늘어나서 사용하지 않는다는것을 알고 있어서 조금은 강제로 사용 현황을 수집하고 있습니다. 정부 사이트에 현황을 볼 수 있는 사이트가 있지만 매일 들어가서 보기 힘들고 어차피 우리가 만들어준 시스템에서 자료를 가지고 통계를 전송하기에 해당 부분에 착안해서 먼저 우리가 시스템에서 데이터를 통계를 내서 메일을 발송하기로 하였습니다. 상태 표시 화면 이렇게 매일 실행을 해서 상태를 확인 후 우리가 정한 상한선 보다 낮을 경우에 메일을 발송을 해서 경각심을 가지고 해야 합니다. 정부는 몇달간 모았다가 갑자기 감사를 나오기 때문에 미리 미리 해 놓아야 합니다. 메일 발송 내역…
Read More

HTML를 PDF로 만들기

WWW
웹브라우저에서 HTML를 그대로 PDF로 만들기 위해서 찾아 보게 되었습니다. 위 사진은 웹페이지 그대로 화면은 캡쳐한 부분입니다. 해당 화면을 가지고 그대로 PDF로 만들어야 하는 상태 입니다. background로 제작을 하면 되지만 고객이 일단 화면에 먼저 보여지기를 원해서 View를 만들고 그다음에 PDF로 제작을 해야 되는 조건이 붙었습니다. 이렇게 VIew 에서 PDF로 다운 받아서 그대로 확인을 할 수 있도록 만들기 위해서 html2pdf 라이브러리를 사용을 하여서 제작을 하게 되었습니다. 일단든 보여지는 그대로 나오기 때문에 그다지 어렵지는 않았습니다. // Get the element. var element = document.getElementById('PDFROOT'); // Generate the PDF. // orientation는 출력 방항 ( 가로 세로 ), // scale 는 확대 html2pdf().from(element).set({ filename: '<?=$mainResData['reportNo'];?>', html2canvas: { scale: 1 }, jsPDF: {orientation: 'portrait', unit: 'mm', format: 'A4', compressPDF: true} }).save(); Javascript 코드는 위와 같이 처리를 하면은 됩니다. 좀 더 자세한 사항은 html2pdf 옵션을 찾아 보면은 자세하게…
Read More

1년동안 주차와 전년도 주차와 비교하기

PHP
고객이 검색한 년도의 1년동안의 매월 주를 계산을 하고 나서 기간에 따른 Row 갯수를 그래프에 표현을 하고 싶어 하기에 작성하게 된 것입니다. 조금은 난해하게 보이지만은 조건 검사가 많은 편이지 그다지 복잡한 코드는 아닙니다. $end_yearmonthday = date("Y-m-d", strtotime($_GET['end_year'].'-'.$_GET['end_month'].'-'.$_GET['end_day'])); // 이전년도 $agoTime = date('Y-m-d', strtotime(date('Y-01-01', strtotime($end_yearmonthday)).' -1 years')); $agoMaxWeek = date('W', strtotime(date('Y-12-31', strtotime($end_yearmonthday)).' -1 years')); $monthCnt = 0; $historyMonth = 0; for($w = 0; $w <= $agoMaxWeek; $w++) { $thisWeek = date('W', strtotime( $agoTime .' +'.$w.' week') ); $thisYear = date('Y', strtotime( $agoTime .' +'.$w.' week') ); $thisMonth = date('m', strtotime( $agoTime .' +'.$w.' week') ); $thisDay = date('d', strtotime( $agoTime .' +'.$w.' week') ); $dayOfTheWeek = date('w',mktime(0,0,0,$thisMonth,$thisDay,$thisYear)); // 해당주차의 시작 날짜 $today_week_sday1 = mktime(0,0,0,$thisMonth,$thisDay-$dayOfTheWeek,$thisYear); $today_week_sday2 = date("Y-m-d",$today_week_sday1); // 해당주차의 종료 날짜 $today_week_eday1 = mktime(23,59,59,$thisMonth,$thisDay+(6-$dayOfTheWeek),$thisYear); $today_week_eday2 = date("Y-m-d",$today_week_eday1); // if( $historyMonth == $thisMonth)…
Read More

MySQL 정렬 특정 단어를 우선순위에 두기

Database
MySQL을 이용할 경우에 정렬을 사용할때가 있습니다. 문자를 숫자로 변형해서 하기도 하고 Abc순으로 할 수도 있고 가나다 방법등 다양하게 사용을 할 수 있습니다. 보통의 방법으로 오름차순, 내림차순 정렬을 사용하면은 원하는 결과물에 대해서 정렬을 해서 목록을 만들수 있습니다. 하지만, 특정 단어가 목록중에서 가장 최상단에 와야 하는 경우라는 보통의 방법으로는 할 경우에는 WHERE 조건후에 다른것까지 붙이다 보면은 원하는 정렬이 되지 않아서 고생을 하게 됩니다. ORDER BY CASE WHEN 정렬컬럼명 = '정렬단어A' THEN 1 WHEN 정렬컬럼명 = '정렬단어B' THEN 2 WHEN 정렬컬럼명 = '정렬단어C' THEN 3 WHEN 정렬컬럼명 = '정렬단어D' THEN 4 ELSE 10 END , 정렬컬럼명2 ASC 위에 예제를 이용 할 경우에는 1차적으로 정렬컬럼명을 통해서 정렬을 시도하고 정렬컬럼명2를 통해서 정렬을 하기 때문에 원하는 단어를 문저 올려서 처리를 할 수 있습니다. 잘 사용을 하지 않지만은 꼭 필요할때 유용하게 사용을 할 수 있을것 같아서 글을…
Read More

MySQL 시간정보로 조회

Database
// 1분전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -1 MINUTE) // 10분전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -10 MINUTE); // 한시간전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -1 HOUR); // 하루전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -1 DAY); // 한달전 데이터 조회 SELECT * FROM 테이블명 WHERE 시간칼럼명 >= DATE_ADD(NOW(), INTERVAL -1 MONTH); DBMS에서 자동적으로 현재 시간을 기준으로 정보를 조회를 할때 사용을 할 수 있습니다. 다른 프로그램에서 SQL문으로 조회를 할때야 시간 정보를 알아서 조합을 할 수 있지만, SQL로만 할 경우에는 이렇게 하면은 시간을 정해서 내용이 조회가 가능 합니다.
Read More

오랜만에 글을 작성합니다.

미분류
현재 회사에서 일정과 집안에서 진행하는 개인적인 일정으로 글을 정리할 시간이 없습니다. 물론 소소하게 정리를 할 수 있지만 블로그에 올리기에는 회사에 일 부분은 비공개 처리가 원칙이여서 화면이나 코드를 정제해서 처리를 해서 공개를 할 수가 없습니다. 개인적으로 퇴근 후에 진행하는 일도 몇달째 멈춰 있습니다. 이유는 S/W 하는것보다는 현실에서 육체적으로 처리해서 하는 일을 지금 진행중에 있습니다. 또한 회사에서 개발을 진행하기 보다는 조금 외부로 돌아 다니는 일이 늘어나다 보니 현재 일에 대해서 자기 개발을 할 시간이 부족합니다. 이러한 사정으로 인해서 현재로서는 블로그에 등록될 수 있는 글이 없다보니 작성이 이뤄지지 않고 있습니다. 6월이 다가오기 전에 한번은 작성하고 글을 묻혀볼까 생각을 하다가 앞으로 올라올 글에 대해서 정리를 하지 못하다 보니 근황만 빠르게 적고 잠시 쉬어가는것도 나쁘지 않다는 생각입니다. 이렇게 있다가 내용이 생기면은 몇일이라도 연속으로 정리를 한번 올려 보도록 하겠습니다. ps. 3월부터 알리익스프레스에서 다수의 목공이나 가공 물건을…
Read More

서버의 파일 내용 찾기

CSharp, 프로그램
어느정도 보안을 위해서 모자이크 처리를 하였습니다. 리눅스 서버에 바로 접속해서 파일 내용을 지정해서 찾을수 있는 간단한 프로그램 입니다. 전체적으로 단어 변경이나 할 일이 있으면은 서버에 접속해서 어느 파일에 있는지 찾아야 하는 일이 요즘 빈번이 일어나고 있어서 만들게 되었습니다. 비록 최근에 만든 파일들은 쉽게 기억을 하지만 기억이 나지 않는 부분까지 모두 찾으려고 하니 CLI 에서 하나하나 기입하기도 귀차니즘이 발동해서 만든것입니다.
Read More

MySQL 스키마 변경 프로그램

CSharp, Database
웹 개발을 하다 보면은 동일한 내용을 DBTable를 생성하고 복제를 하는 일이 많이 발생을 하기 마련입니다. 모든 사이트가 동일하지는 않지만 관리를 위해서라도 서버마다 다를수 있어서 한번에 변경할려니 DB툴을 가지고 하는것도 작업 시간이 늘어나는 일이 이고 해서 한번에 바꿀수 있도록 만들게 되었습니다. 개발자에 따라서 여러가지 프로그램으로 제작을 하지만 저는 C#을 이용하여서 GUI 화면에서 보면서 지금것은 어떤지 실시간으로 보기도 하고 변경도 하고 싶어서 만들게 되었습니다. 프로그램에 제가 접속을 해야 하는 서버들이나 DB를 기록을 해 놓은곳에서 가져오는것인지 SQL 자체는 상당히 간단한 편입니다. 컬럼을 변경할 경우에 사용하는 SQL ALTER TABLE `대상DB`.`대상TABLE` CHANGE COLUMN `변경할컬럼` `변경할컬럼명` 형식 NULL여부 DEFAULT '기본값' COMMENT '코멘트'; 컬럼을 추가할 경우에 사용하는 SQL ALTER TABLE `대상DB`.`대상TABLE` ADD COLUMN `추가할컬럼명` 형식 NULL여부 DEFAULT '기본값' COMMENT '코멘트' AFTER `대상컬럼`; 컬럼을 삭제할 경우에 사용하는 SQL ALTER TABLE `대상DB`.`대상TABLE` DROP COLUMN `지울컬럼명`; 이렇게 SQL 명령어만 조건에…
Read More

Ubuntu 20 LTS에 OPEN VPN 설치

Linux
요즘은 서버에 접속하기 위해서 공개된 Port외에는 IP 접근 차단을 당하는경우가 많은 생겨서 이동중에 접속을 하기 위해서 개인서버에 VPN 서버를 구성하였습니다. 공개된 서비스만큼 안정성은 아직 테스트를 해 보아야 하지만 지금은 개인서버이기때문에 이럴다 할 정도로 개인정보가 세어나갈 일이 없기때문에 설치하기로 큰 맘을 먹고 설치를 진행을 하였습니다. 인터넷에 검색을 하니 인터넷에 쉽게 설치를 할 수 있도록 나와 있어서 쉽게 설치를 하였습니다. curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh 이후에 서비스를 올리고 나서 포트를 연결하고 나니 순조롭게 사용을 가능하였습니다. sudo systemctl status openvpn #sudo iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eth0 -j MASQUERADE #sudo iptables -I INPUT 1 -i tun0 -j ACCEPT #sudo iptables -I FORWARD 1 -i eth0 -o tun0 -j ACCEPT #sudo iptables -I FORWARD 1 -i tun0 -o eth0 -j ACCEPT 이후에 몇개를 나뉘어서 추가를 하려고 하니 위세 설치…
Read More

Apache를 통한 Synology Proxy 설정

Linux
<VirtualHost *:80> ServerAdmin your-email ServerName your-privkey-domain RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ErrorLog ${APACHE_LOG_DIR}/your-privkey-domain.error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/your-privkey-domain.access.log combined #ProxyPass / http://your-privkey-domain:port #ProxyPassReverse / https://your-privkey-domain:port </VirtualHost> <VirtualHost *:443> ServerAdmin your-email ServerName your-privkey-domain ProxyRequests Off SSLProxyEngine on ProxyPreserveHost On AllowEncodedSlashes NoDecode SSLEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off SSLCertificateFile "/etc/letsencrypt/live/your-privkey-domain/cert.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/your-privkey-domain/privkey.pem" SSLCertificateChainFile "/etc/letsencrypt/live/your-privkey-domain/chain.pem" ProxyPass / https://your-privkey-domain:port nocanon ProxyPassReverse / https://your-privkey-domain:port RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" ErrorLog ${APACHE_LOG_DIR}/your-privkey-domain.error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/your-privkey-domain.access.log combined </VirtualHost>
Read More

TCS V20220101

TCS
TCS 프로그램의 사소한 에러를 수정하였습니다. google 검색 단어에 대해서 정상적으로 처리 하지 못하는 문제를 수정하였습니다.데이터 검색시에 잘못된 결과값이 나오는 문제를 수정하였습니다.프로그램 자체 인증서를 등록하여서 처리하였습니다. 프로그램이 자동으로 버전 체크를 하지 않습니다. 독립적으로 실행되도록 처리해서 별도 처리가 현재는 없습니다. 앞으로 기능이 추가 될 경우에는 버전체크등을 도입할 계획은 있지만 자동 업데이트 기능은 지원 하지 않을 생각입니다. TCS다운로드 현재 TCS 프로그램에는 비빈이 걸려 있지 않지만 추후에는 압축 파일에 비밀번호가 등록될 예정입니다.
Read More

code server 세팅 기록

Linux, Tool
외근이 많다보니 IDE 세팅을 일일이 맞추기도 힘들어서 알아보던 도중에 code-server가 존재하는것을 알게 되었습니다. PC에 설치 하지 않고 Server에 설치해서 Webbrowser를 이용해서 IDE를 사용하도록 해주는 Tools 이여서 상당히 끌리게 되어서 제 서버에 설치를 하게 되었습니다. 전 웹서버를 이용할대 Apache를 잘 이용하지만 이번에는 code-server 때문에 nginx 를 이용해서 설치를 하게 되었습니다. code-server만을 이용할때는 상당히 잘 작동을 하고 빠르게 작동을 하여서 만족을 하게 되었습니다. 애초에 nginx가 apache보다 가볍기 때문에 속도가 잘 보장이 되어서 좋은 기능을 사용할 수 있게 되었지만 서버를 code-server 만으로 사용하기에는 자원을 너무 낭비를 하기에 여러가지 올리는 도중에 webdav까지 사용할 수 있도록 설정을 하려고 하다보니 여러가지 설정을 찾아서 헤매게 되었습니다. nginx 설정을 인터넷에 많기 때문에 자료를 정리하려다가 포기하고, apache로 갈아 타게 되었습니다. apache도 code-server 기능을 이용하기 위해서는 인터넷에 찾아보니 여러가지로 돌아 다니지만 참 난관의 연속이였습니다.꼬박 하루를 설정을 가지고 WEB 서버 가동을…
Read More

TCS 테스트 버전

TCS
지금가지 만든내용 공개 입니다. 별다른 기능도 현재 없고, 시험 운영중이라서 아마 데이터가 초기화 될수도 있습니다. 아직 여러가지 보완 해야 될 점이 있기전에 한번 공개해 보는것입니다. 조금 안정화 되면은 여러가지 기능을 추가 하면서 업데이트 진행할 예정입니다. 현재 테스트 버전이여서 비밀번호 없이 공개를 하고 있지만 이후에는 비밀번호를 걸어서 불특정 다수에게 공개 하지 않습니다.
Read More

TCS 개발 화면 공개

TCS
TCS 개발중 이미 서버상의 기초 개발은 완료된 상태 입니다. 처음에 계획한대로 WindowsAPP을 현재 제작중에 있습니다. 서버와의 통신방법과 사용자 데이터 처리 방법등에 대해서 여러가지 처리를 하기 위해서 개발을 하고 있다보니 조금은 더디게 가고 있습니다. 전신인 ACTS의 화면 구성을 그대로 받아 들이지만 내용이 많이 달라져서 현재 UI 구성을 고민하여서 하고 있기 때문에 상당한 시일이 소요 될것 같습니다. 그렇지만 이전보다 많은 양의 데이터를 제공하기 위해서 개발을 진행을 하고 있으며, 앞으로도 그렇게 나아갈 예정입니다. 가끔 개발 화면을 공유해서 올리도록 하겠습니다.
Read More

TCS 오픈 안내

TCS
안녕하세요. 몇년간의 개발경험을 바탕으로 새롭게 Torrent, Caption 정보를 제공하는 서비스를 새롭게 오픈 하려고 합니다. 이전 프로그램인 ACTS, SFCA는 주제가 한정되어서 새롭게 데이터를 제공하기기 쉽지 않았습니다. 그래서 새롭게 서비스를 개발하게 되었습니다. 이번에는 Animation 이라는 주제를 제외 하고 서비스를 개발 하게 됩니다. 좀 더 많은 양의 정보를 제공하기 위해서 주제를 Torrent로 확대 적용을 하게 됩니다. 물론 Caption 서비스를 제공하지만 이전 프로그램처럼 세밀하게 제공을 하지 않습니다. 현재 서버에서 자료 처리 방법은 구현이 완료 되어 있으며 윈도우APP과 , 안드로이드APP, Web, RSS 제공하기 위해서 각각의 Client 버전을 제작중에 있습니다. 현재 RSS는 개인 테스트 중에 있는 상태 입니다. 또한, ACTS 기능에 있는 즐겨찾기 기능에 대해서 좀 더 기능을 확장 및 변경을 하여서 여러가지 정보를 타겟팅하여서 보여 줄 수 있도록 즐겨찾기 기능이 대폭 변경이 되면서 해당 기능과 연동하여서 RSS 서비스를 제공하기 위해서 준비중에 있습니다. 2021년에는 제공해 드리지…
Read More