반응형

분류 전체보기 428

(Google Cloud) Cloud Scheduler + Compute Engine API 활용한 인스턴스 자동 키고 끄기

(Google Cloud) Cloud Scheduler + Compute Engine API 활용한 인스턴스 자동 키고 끄기 구글 클라우드 VM 인스턴스에 주식 자동매매 프로그램을 실행시키고 있는데, 자동매매의 경우 시장 시간에만 돌아가면 되기 때문에 그 외 시간은 서버를 켜둘 필요가 없었습니다.처음 국내 주식시장만 대상으로 할 때는 '인스턴스' 기능을 활용하여 서버를 자동으로 키고 끄도록 설정했는데, 야간에 미국시장에도 프로그램을 실행하게 되면서 '인스턴스 일정' 기능만으로는 서버를 완전히 자동으로 키고 끌 수 없게 되어 다른 방안을 찾아보게 되었습니다. (google cloud 정책상 하나의 인스턴스에는 여러 개의 '인스턴스 일정'을 적용할 수 없도록 되어 있습니다.) '인스턴스 일정' 기능을 대..

IT Info 2025.10.18

아이폰 사진 외장하드 백업 방법 (외장하드 Photos Library 생성 방식)

아이폰 사진 외장하드 백업 방법 (외장하드 Photos Library 생성 방식)128GB 용량의 아이폰을 5년 넘게 사용하다 보니 용량을 최적화할 수 있는 방안을 모두 적용해도 용량이 항상 부족했는데요.특히나 사진이 용량을 너무 많이 차지하는데 그렇다고 쉽게 지울 수 있는 것도 아니라 이번에 맥에서 호환하기 쉬운 방법으로 외장하드 백업을 진행했습니다.iCloud의 경우 커피 한잔 값(200GB 기준, 월 3,300원)일 수도 있겠지만 뭔가 그 정도로까지 필요한가 싶어서 사용하지 않고 있습니다. 1. 외장하드 백업 (Mac OS 확장 포맷으로 변경)먼저 '디스크 유틸리티'를 사용하여 외장하드의 포맷을 'Mac OS 확장(저널링)' 형식으로 변경하며 초기화를 진행했습니다.* 저장된 모든 데이터가 영구적..

IT Info 2025.10.12

(한국투자증권 Open API) EGW00202, GW라우팅 중 오류가 발생했습니다. 해결 방법

(한국투자증권 Open API) EGW00202, GW라우팅 중 오류가 발생했습니다. 해결 방법 KIS Open API를 이용한 해외주식 자동매매 프로그램 개발 중 POST 요청 시 'msg_cd=EGW00202', 'msg1=GW라우팅 중 오류가 발생했습니다.'라는 오류가 발생되었는데요. 정확한 문제 원인은 파악하지 못했지만 아래와 같이 requestDto를 그대로 HttpEntity로 만들어서 전송하던 방식에서 requestDto를 수동으로 직렬화한 String 값을 기반으로 HttpEntity를 만들어 전송하는 방식으로 바꾸니까 오류가 발생하지 않았습니다. public OrderResponseDto orderToSellStock(String token, String excd, String ..

Programming/Error 2025.10.12

chrome 브라우저 CORS 해결 방법 (has been blocked by CORS policy)

chrome 브라우저 CORS 해결 방법 (has been blocked by CORS policy) origin 'null' has been blocked by CORS policy 일반적이진 않은 케이스지만 로컬에서 띄운 'file:// 기반 HTML'에서 api 요청을 통해 응답 결과를 처리하는 간단한 화면단을 구성 중 chrome 브라우저에서 위와 같은 CORS policy 문제가 발생했습니다.(HTML을 file:// 기반으로 열어서 실행하게 되면 브라우저에서는 origin을 null로 인식하게 됩니다.) 분리망 환경이고 요청을 보내는 곳은 한 곳인 반면, 여러 서버에 요청을 보내야 하는 상황이었기 때문에 각 서버 애플리케이션에서 CORS에 대한 처리 작업을 하는 것보다는 요청을 보내는 브라우저..

Programming/Web 2025.09.27

(javascript) ag-grid 스크롤 끝까지 내려왔는지 확인하는 방법

(javascript) ag-grid 스크롤 끝까지 내려왔는지 확인하는 방법 ag-grid 사용 중 그리드 내에서 스크롤이 끝까지 내려왔을 때, 특정 버튼을 활성화하는 기능이 필요하여 스크롤이 끝까지 내려왔는지 확인하는 코드를 간단하게 기록하였습니다.추가로 브라우저 배열이 바뀌는 경우 소수점 계산으로 인해 동작에 문제가 발생했던 부분까지 개선하였으며 관련 내용도 아래 기록해 두었으니 함께 확인하시면 좋을 것 같습니다. // gridOptions gridOptions["onBodyScrollEnd"] = function(event) { const gridBody = document.querySelector('.ag-body-viewport'); if (gridBody) { ..

(tibero) tbexport/tbimport 특징 및 기본적인 방법 정리

(tibero) tbexport/tbimport 특징 및 기본적인 방법 정리 서비스 운영 중 실제 운영 서버의 데이터를 통해 테스트를 진행해야 하는 경우가 발생하여 운영 DB의 데이터를 개발 DB로 가져왔으며, 그 과정에서 사용 중인 DBMS tibero의 export, import 기능인 tbexport, tbimport를 사용하여 해당 내용을 간략하게 정리하였습니다. 티베로에서는 데이터 이관/백업 시 tbexport, tbimport 기능을 사용할 수 있으며, 해당 유틸은 '$TIBERO_HOME/client/bin/' 디렉터리 하위에 실행 파일 형태로 존재합니다. 1. tbexport 특징 및 예시'tbexport'는 테이블, 인덱스, 시퀀스 등의 데이터베이스 객체와 데이터를 덤프 파일로 추출하..

(java) Wilder RSI(Relative Strength Index) 계산하는 방법

Wilder RSI(Relative Strength Index) 계산하는 방법해당 포스팅에서는 주식 자동매매 프로그램을 만드는 과정에서 상대강도지수인 RSI 지표를 구하는 방식 및 소스 코드 예시를 정리해 보았습니다.RSI 값은 일별 종가 데이터를 기반으로 계산하며, 아래 예시에서는 전일 RSI 값과 현재 주가에 따른 실시간 RSI 값을 계산하는 예시가 구현되어 있습니다.내용 참고하시고 궁금하신 부분은 댓글 주시면 답변드리도록 하겠습니다. RSI란RSI(Relative Strength Index)는 주어진 기간 동안 주가 가격 상승과 하락의 크기를 비교해 과매수 또는 과매도 상태를 판단하는 보조지표입니다.일반적으로 14일을 기준 기간으로 사용하며, RSI는 0 ~ 100 사이의 값을 가지게 되는데 70..

Programming/Java 2025.07.13

WebSocketClient 메시지 누락을 막기 위한 ExecutorService, BlockingQueue 도입

WebSocketClient 메시지 누락을 막기 위한 ExecutorService, BlockingQueue 도입 해당 포스팅은 최근 주식 관련 프로그램을 개발하는 과정에서 실시간 주가 정보를 받아오기 위해 'WebSocketClient'를 사용하며 발생했던 메시지 누락과 메시지 누락 문제를 해결하기 위해 도입한 'ExecutorService', 'BlockingQueue'에 대해 정리한 내용입니다. 1. WebSocketClient 데이터 누락 발생증권사 API 구조 상 하나의 소켓에서 여러 종목의 실시간 주가 정보 데이터 및 거래 데이터를 모두 처리해야 했는데, 순간적으로 소켓 서버로부터 들어오는 메시지가 많아지는 경우 'onMessage()' 메서드 내에서의 처리 지연으로 인해 메시지가 누락되는..

Programming/Java 2025.07.05

ag-grid cellRenderer를 활용한 HTML element(or innerHtml) 반환

ag-grid cellRenderer를 활용한 HTML element(or innerHtml) 반환 데이터 그리드 라이브러리로 'AG Grid'를 사용하는 과정에서 위 이미지와 같이 하나의 row 데이터가 가지고 있는 여러 개의 첨부 파일을 그리드에 같이 보일 수 있도록 처리해 달라는 요청을 받아 'cellRenderer'를 활용해 보게 되었고, 해당 내용을 간단하게 정리하였습니다. 예시를 위해 아래 AG Grid 공식 문서의 'Quick Start -> Example JavaScript Data Grid' 코드를 기반으로 cellRenderer 기능을 추가하였으며, cellRenderer 기능 외 데이터 형식이나 css는 확인할 수 있을 정도로만 간단하게 설정된 점 참고 부탁드립니다.(https://w..

(log4j2) RollingFile DefaultRolloverStrategy 날짜 기준 최대 로그 파일 개수 설정 방법

(log4j2) RollingFile DefaultRolloverStrategy 날짜 기준 최대 로그 파일 개수 설정 방법해당 포스팅에서는 로깅 프레임워크로 'log4j2'를 사용하면서 잘못된 Appender 설정으로 인해 지정된 기간이 지난 로그 파일이 자동으로 삭제되지 않았던 문제의 원인과 수정 내용을 기록하였습니다. 1. 잘못되었던 설정 (기존에 설정된 RollingFile Appender 설정) 원하는 기능은 로그 파일을 날짜 패턴으로 1일 기준 롤오버하여 최대 7일간의 로그 파일만 보관하고 그 이상된 로그 파일은 자동으로 삭제하는 것이었는데요.하지만 위 설정은 원하는 대로 동작하지 않았고, 7일이 지난 로그 파일이 계속해서 디렉터리에 남아있었습니다...

Programming/Spring 2025.05.31
반응형