본문 바로가기

개발100

공동인증서 정리(구 공인인증서) 공동인증서는 나온 지 20년도 넘은 오래된 기술이지만, 요즘 나오는 사설 인증(간편 비밀번호 인증/지문 인증) 기술 대부분이 공동인증방식을 조금 변형해서 사용하고 있기 때문에 원천 기술의 구현 방식을 이해해 두면 유사 기술을 이해하는데 도움이 된다. 공동인증서 주요 특징 인증서에는 공개키, 암호화된 개인키가 저장 인증서 비밀번호를 입력하면 개인키를 복호화하여 꺼낼 수 있음. 개인키로 암호화 한 데이터는 공개키로만 복호화 가능. 공개키로 암호화한 데이터는 개인키로만 복호화 가능 인증서 유효성 검증: 로그인 시 인증서 검증기관(CA)을 통해 인증서 유효성 검증(만기, 폐쇄된 인증서 오류 처리) 인증서 발급 시 공개키는 공인 기관에 같이 저장 송신측 처리: 원문의 위변조 방지를 위해 원문데이터를 이용한 서명 .. 2022. 3. 19.
[C#]FOK, 최유리 매수 주문 (CYBOS PLUS/CREON PLUS) 이번 예제는 최유리지정가주문을 FOK 방식으로 매수 주문내는 PLUS 예제코드입니다 FOK 주문은 주문 수량이 전부체결일 경우 체결, 아니면 즉시 취소가 되는 주문입니다. 전부 체결 또는 자동 취소라서 자동 매매를 할 때 미체결을 신경쓰지 않아도 좋다는 점에서 아주 유용합니다 최유리 지정가 주문은 매수 주문 시 매도1호가로 주문이 나가게 됩니다. 시세가 급변하는 경우 매도1호가로 주문 내더라도 금방 시세가 바뀔 수 있어, 체결률을 높이기 위해 이 방법을 주로 씁니다 . 주문가격이 시장에 도달시점의 매도1호가이기 때문에 주문 시 별도 가격 지정은 하지 않습니다. 아래는 간단한 C# 샘플 코드입니다. 코드를 단순화 하기 위해 클래스 생성자 등의 코드는 제거했습니다. public enum COMM_TYPE {.. 2021. 9. 4.
[C#] 이벤트를 만들고 사용하기 C#은 이벤트를 생성하고 전달받는 처리가 아주 쉽게 잘 정의되어 있습니다. 1. 이벤트를 만드는 코드 EventHandler 를 멤버변수로 선언하고 this.이벤트() 함수를 실행하면 콜백 이벤트가 발생하는 식입니다. 1. 이벤트 정의 public event EventHandler OnOrderReply; 2. 이벤트 호출 this.OnOrderReply(this, arg); 3. 이벤트 호출 시 원하는 값을 전달하고자 한다면 EventArgs 를 상속받아 간단한 전달용 클래스를 하나 만들면 됩니다. public class OrderReplyEventArgs : EventArgs public class DoOrder { // 중략 // .... // 이벤트 콜백 public event EventHandl.. 2021. 1. 17.
[C#] User Control 을 툴박스에 표시하기 C# 은 화면 컨트롤을 손쉽게 만들고 화면에 가져다 쉽게 사용이 가능합니다. 우선 User Control 을 상속받아 새로운 클래스를 만들고 원하는대로 합성 컨트를을 만듭니다. (VS 는 영문 버전으로 쓰는게 컨트롤 생성하기가 편하네요. 어설픈 한글 번역으로는 원하는 컨트롤 타입을 찾기가 쉽지 않습니다.) 이제 내가 만든 컨트롤을 툴박스에서 넣는 방법입니다. 툴박스에 넣는 방법은 크게 2가지입니다. (1번 방법이 일반적) 1. Tools > Option 에서 아래처럼 찾아서 Automatically Poplate Toolbox 옵션을 True 로 변경해 줍니다. 설정을 변경 한 후에는 VS를 종료 후 재실행하고 다시 빌드해 봅니다. 2. 두번째 방법은 바이너리를 강제로 추가하는 방법입니다. 툴박스에서 아.. 2020. 11. 4.
[C#] HTS 차트 흉내내기 요즘 C# 을 조금씩 공부하는 중입니다. PLUS API 이용해서 시세 데이터를 가져와 간단하게 차트를 만들어 보는 데 역시 실시간 처리는 할 일이 상당히 많네요 C# 기본 제공 차트 클래스로 개발 중인데 워낙 방대한 API 를 제공하는 컨트롤이라 일일이 구글링하면서 요런 기능이 가능한지 검색하고, 잘 되는 지 코딩해 보고, 실시간 테스트하는게 생각보다 시간이 오래 걸리네요. 그래도 조금씩 조금씩 앞으로 나가는게 즐겁네요 역시 요즘같이 코로나로 할 일이 없을 땐 취미로 하는 코딩이 제일 좋습니다 ^^; 2020. 10. 15.
[C#] 클릭(번개)주문 만들기 (CYBOS PLUS/CREON PLUS) #2 지난번 프로그램을 조금 더 개선 했습니다 아무래도 클릭 주문인데 드래그 & 드롭으로 정정 주문 정도는 있어야 겠기에 해당 기능을 추가하고, 하는 김에 매수 주문 가능/매도 주문 가능 수량도 추가 했네요 C# 을 배워가며 하는 작업이라 부족한 내용이 많습니다. 예제 코드에서 제공하는 주요 기능 현재가 조회 및 실시간 처리 미체결 조회 및 실시간 미체결 처리 매수/매도 주문 취소 주문 및 일괄 취소 주문 정정주문/일괄 정정 주문 - 드래그 & 드롭으로 이미 나간 주문을 이동처리 종목검색 매수 주문 가능 수량 조회 매도 주문 가능 수량 조회 소스코드는 기존처럼 아래 링크에 추가했습니다. 소스코드 내려받기 ※ 주의 사항 : 해당 예제는 C# 공부삼아 만든 예제 코드여서 오작동이나 기능이 완성되지 않은 부분이 많.. 2020. 9. 23.
[C#] 클릭(번개)주문 만들기 (CYBOS PLUS/CREON PLUS) 요즘 C# 언어를 공부중인데 책으로 배우는 건 한계가 있어서 간단하게 C#을 이용해서 주식 클릭주문(번개주문)을 만들어 봤습니다 예제 코드에서 제공하는 주요 기능 현재가 조회 및 실시간 처리 미체결 조회 및 실시간 미체결 처리 매수/매도 주문 - 그림에 "매수주문" "매도주문" 컬럼을 클릭하면 선택된 행의 가격으로 매수 또는 매도 주문이 나갑니다 취소 주문 - 위 그림에서 "X" 컬럼은 이미 나간 미체결건을 취소합니다. 해당 가격에 나간 주문이 있어야만 취소 주문이 나갑니다. 종목검색 기능 - 거래소와 코스닥 종목을 검색할 수 있습니다. 주문의 경우 원하는 가격을 더블클릭 시 주문 확인창을 통해 주문 확인 후 처리 합니다. 아래는 메인 기능의 소스코드입니다. 전체 코드는 하단의 소스 프로젝트로 내려받을 .. 2020. 9. 19.
[LUA] 문자열 다루기 간단 예제 #2 루아에서 문자열 찾는 함수는 string.find 입니다. 얼마전에 문자열에서 '.' 을 찾을 일이 있어서 이 함수를 이용했는데 return 값이 좀 특이했습니다. local nStart, nEnd = string.find('123.23', '.') print(nStart, nEnd) -- result: 1 1 Lua 문서를 찾아 보니 Lua의 find 는 기본이 패턴이네요(패턴의 일부 기능만 지원) 그래서 '.' 을 찾을 때는 "%." 과 같이 lua 패턴 escape문자 %를 같이 처리하거나, Plain Text 검색임을 명시해야 합니다. local nStart, nEnd = string.find('123.23', '%.') print(nStart, nEnd) -- result: 4 4 local n.. 2020. 5. 24.
[CREON PLUS API 활용] 기본 활용 샘플 코드 플러스를 이용한 간단한 예제 코드입니다. 제공하는 예제는 아래 정도인데 시간이 나면 조금씩 추가 예정입니다 예제 제공 내역 100: 거래소/코스닥 구하기 101: 업종 구하기 102: ETF 구하기 103: 코스피200 종목 구하기 104: 선물종목 구하기 105: 옵션종목 구하기 106: ETN 종목 구하기 ------------------------------------------ 200: 일간차트 - 100일 201: 일간차트 - 5000일 202: 일간차트/기간 2020.1.2~2020.4.17 203: 일간차트/기간 1980.01.04~2020.4.17 204: 주간차트 - 100주 205: 월간차트 - 100개월 206: 1분차트 - 100개 207: 1분차트 - 5000개 ----------.. 2020. 4. 18.
[파이썬] 특정 버전 패키지 설치 오류 증상 아나콘다 최신 버전 설치 후 pyqt5 를 설치하는데 아래와 같이 오류가 생겼다. ERROR: spyder 3.3.6 has requirement pyqt5 2020. 2. 29.
[파이썬] urllib 사용시 urlopen error unknown url type: https 오류 처리 오늘 새로운 PC에 아나콘다 64비트를 설치하고 작업하는데 아래와 같은 오류가 발생했다. raise URLError('unknown url type: %s' % type) urllib.error.URLError: 사용 코드는 urllib.request.urlopen(surl) 식으로 간단하게 url 호출하는 코드이고, 그동안 문제없이 잘 쓰던 코드 import urllib.request ... surl = "htts:/특정 url" res = urllib.request.urlopen(surl) ssl 문제라는 얘기가 있어서 아래 한 줄을 추가해 보니 import 할 수 없다는 오류가 발생했다. import ssl 해결 방법 아나콘다 최신 패키지에 문제가 있는 것으로 보인다. (이런 문제가 요새 자주 발생.. 2020. 2. 29.
[파이썬] 부동산 API로 아파트 매매 실거래가 구하기 부동산 API를 이용해서 데이터를 가져오는 간단한 예제입니다 우선 API를 사용하기 위해서는 공공데이터 포털 > 국토교통부 실거래가 정보 > '아파트 매매 실거래 상세자료' 활용 신청을 해야 합니다. https://www.data.go.kr/dataset/3050988/openapi.do 정상적으로 활용 신청이 되면 '인증키' 를 발급받게 됩니다. 서비스의 기본 호출 URL은 아래와 같습니다. http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev 필수 입력항목은 지역코드, 계약월, 인증키 3가지네요 위 정보를 이용해 호출정보를 아래처럼 구성합니다. 여기서 서비스키는 각자 받.. 2020. 2. 28.
[파이썬] 여러 리스트를 하나로 합쳐주는 zip 함수 zip함수는 따로 존재하는 리스트들을 모아서 하나로 패키징 해 주는 함수입니다. 예를 들어 아래처럼 날짜, 시가, 고가, 저가, 종가 리스트가 각각 존재할 때 이를 (날짜, 시가, 고가, 저가, 종가)의 배열로 모으는 아주 유용한 함수입니다. date = ['2020/2/14','2020/2/13','2020/2/12','2020/2/11','2020/2/10','2020/2/7','2020/2/6','2020/2/5','2020/2/4'] open = [60900, 61200,60300,59800,59200,61100,60100,60000,57100] high = [61900,61600,60700,60700,59800,61200,61100,60200,59000] low = [60200,60500 ,59.. 2020. 2. 16.
파이썬 아나콘다 32비트 설치/재설치 아나콘다 64비트와 32비트를 동시에 사용 중이었는데 32비트 아나콘다에서 아래 그림 같은 차트를 위해 matplotlib 설치하다가 계속 오류가 발생했다. 결국 32비트 아나콘다를 재 설치해서 해결했는데 이번 글은 반복되는 파이썬 라이브러리 설치 오류를 해결하는데 도움이 될까 하고 기록. 우선 중요한 아나콘다 명령어 부터 정리 conda activate py37_32 32비트 아나콘다 활성화 conda activate base 64비트 아나콘다 활성화 conda env list 설치된 아나콘다 빌드 환경 set CONDA_FORCE_32BIT=1 conda create -n py37_32 python=3.7 32비트 아나콘다 환경 생성(한 줄씩 입력) conda env remove -n py37_32 .. 2019. 11. 14.
[파이썬] 딕셔너리를 이용한 카운팅, 정렬 예제 목적 숫자 리스트에서 발생하는 숫자의 횟수와 합을 저장 숫자, 발생 횟수, 합의 다양한 방식으로 딕셔너리 저장 샘플 코드 # 딕셔너리와 리스트 조합, 소팅 예제 dataSample = [5, 3, 3, 2, 1, 6, 10, 8, 7, 3, 10, 2, 1, 6, 9, 4, 5, 2] dicCount = {} for data in dataSample: if not data in dicCount: dicCount[data] = [0, 0] dicCount[data][0] += 1 dicCount[data][1] += data print('dicCount') for k, v in dicCount.items() : print(k,v) # 정렬 방식 : dicCount 를 key를 이용해 정렬 --> 튜플로 리.. 2019. 11. 2.
[파이썬] 웹 페이지 스크랩 하기(BeautifulSoup 이용) 파이썬의 BeautifulSoup 라이브러리를 이용해서 웹 페이지를 스크랩하는 간단한 예제 코드입니다. 예제를 위한 사이트는 뽐뿌 게시판으로 정했습니다. 우선 전체 코드를 먼저 올리고 간단한 설명은 뒤에 있습니다. 전체 코드 # 뽐뿌/뽐뿌 게시판 스크랩 # 타겟 주소: https://www.ppomppu.co.kr/zboard/zboard.php?id=ppomppu import pandas as pd from urllib.request import urlopen from requests import get from bs4 import BeautifulSoup import os g_sTargetUrl = 'https://www.ppomppu.co.kr/zboard/zboard.php?id=ppomppu' .. 2019. 10. 20.
[LUA] TABLE 정렬(SORT) 루아 테이블 정렬 샘플입니다. 루아 문서에 있는 table.sort 를 우선 참고 table.sort (list [, comp]) Sorts list elements in a given order, in-place, from list[1] to list[#list]. If comp is given, then it must be a function that receives two list elements and returns true when the first element must come before the second in the final order (so that not comp(list[i+1],list[i]) will be true after the sort). If comp is not gi.. 2019. 10. 19.
[파이썬] 함수 호출 CALL BY VALUE/CALL BY REFERENCE 파이썬에서 함수 호출 시 call by value/ref 를 설명하는 간단한 예제입니다 1. bool, 문자열, 숫자, 리스트, 딕셔너리를 함수에서 변경했을 때 def testFunc2(bValue, sString, nValue, list, dic): bValue = True sString = '새로운 문자' nValue = nValue + 100 list.append(100) dic['과학'] = 70 bValue = False sString = '이전 문자' nValue = 10 list = [1,2,3] dic = {'국어': 80, '수학': 95, '영어': 80} testFunc2(bValue, sString, nValue, list, dic) print(bValue) print(sString.. 2019. 10. 6.
[LUA] 개발 환경 만들기 루아 설치하기 1. 루아 개발 사이트에서 루아 내려받기 http://www.lua.org/ The Programming Language Lua www.lua.org 2. 내려 받은 ZIP 파일을 열어 적당한 폴더 (예: d:/dev/lua) 에 풀어 준다. 단, lua53.exe 는 파일이름을 lua.exe 로 변경한다. 3. 시스템 속성창에서 환경 변수 Path에 Lua 실행파일의 위치를 추가한다. VSCODE 설치 1. Visual Studio Code 내려 받아 설치 https://code.visualstudio.com/ Visual Studio Code - Code Editing. Redefined Visual Studio Code is a code editor redefined and optim.. 2019. 9. 30.
[LUA] FOR 문 루아 FOR 문 기본 문법은 for var = start, end, (step) do ... end 식이다 파이썬이나 C/C++ 등과 다른 게 파이썬의 for 문은 end 조건 값과 같은 경우도 포함한다. 또한 테이블의 카운트를 구하는 편의 함수 #table 은 구성요소가 배열인 경우에만 제대로 계산된다 (아래 샘플 코드 참조) --> #table 은 table 내에 [1] 로 시작하는 배열의 개수를 구하기 때문에 해당 키가 없으면 사이즈를 구하지 못한다. print('--------------------------------------------------------------------') print('0 에서 99 까지 더하기 예제') print('----------------------------.. 2019. 9. 29.